Java源码示例:org.sonar.api.rule.Severity

示例1
@Test
public void testGetCoreRules() {
    List<RubocopRule> coreRules = rules.getCoreRules();

    assertThat(coreRules.size()).isEqualTo(340);

    assertSeverityCount(Severity.BLOCKER, coreRules, 0);
    assertSeverityCount(Severity.CRITICAL, coreRules, 4);
    assertSeverityCount(Severity.MAJOR, coreRules, 0);
    assertSeverityCount(Severity.MINOR, coreRules, 324);
    assertSeverityCount(Severity.INFO, coreRules, 12);

    assertTypeCount(RuleType.CODE_SMELL, coreRules, 311);
    assertTypeCount(RuleType.VULNERABILITY, coreRules, 4);
    assertTypeCount(RuleType.BUG, coreRules, 25);
}
 
示例2
@Override
public void define(Context context)
{
    NewRepository repository = context.createRepository(LicenseCheckMetrics.LICENSE_CHECK_KEY, "java");
    repository.setName("License Check");

    repository
        .createRule(LicenseCheckMetrics.LICENSE_CHECK_UNLISTED_KEY)
        .setName("Dependency has unknown license [license-check]")
        .setHtmlDescription("The dependencies license could not be determined!")
        .setSeverity(Severity.BLOCKER);

    repository
        .createRule(LicenseCheckMetrics.LICENSE_CHECK_NOT_ALLOWED_LICENSE_KEY)
        .setName("License is not allowed [license-check]")
        .setHtmlDescription("Violation because the license of the dependency is not allowed.")
        .setSeverity(Severity.BLOCKER);

    repository.done();
}
 
示例3
@Test
public void ruleWithoutDebtRemediation() {
    TsLintRule rule = new TsLintRule(
        "key",
        Severity.MAJOR,
        "name",
        "<html></html>"
    );

    assertEquals("key", rule.key);
    assertEquals(Severity.MAJOR, rule.severity);
    assertEquals("name", rule.name);
    assertEquals("<html></html>", rule.htmlDescription);
    assertEquals(false, rule.hasDebtRemediation);
    assertEquals(DebtRemediationFunction.Type.CONSTANT_ISSUE, rule.debtRemediationFunction);
    assertEquals("0min", rule.debtRemediationScalar);
    assertEquals("0min", rule.debtRemediationOffset);
    assertEquals(null, rule.debtType);
}
 
示例4
@Test
public void ruleWithDebtRemediation() {
    TsLintRule rule = new TsLintRule(
        "key",
        Severity.MAJOR,
        "name",
        "<html></html>",
        DebtRemediationFunction.Type.LINEAR_OFFSET,
        "1min",
        "2min",
        RuleType.CODE_SMELL.name()
    );

    assertEquals("key", rule.key);
    assertEquals(Severity.MAJOR, rule.severity);
    assertEquals("name", rule.name);
    assertEquals("<html></html>", rule.htmlDescription);
    assertEquals(true, rule.hasDebtRemediation);
    assertEquals(DebtRemediationFunction.Type.LINEAR_OFFSET, rule.debtRemediationFunction);
    assertEquals("1min", rule.debtRemediationScalar);
    assertEquals("2min", rule.debtRemediationOffset);
    assertEquals(RuleType.CODE_SMELL.name(), rule.debtType);
}
 
示例5
private static CheckAnnotationLevel mapToGithubAnnotationLevel(String sonarqubeSeverity) {
    switch (sonarqubeSeverity) {
        case Severity.INFO:
            return CheckAnnotationLevel.NOTICE;
        case Severity.MINOR:
        case Severity.MAJOR:
            return CheckAnnotationLevel.WARNING;
        case Severity.CRITICAL:
        case Severity.BLOCKER:
            return CheckAnnotationLevel.FAILURE;
        default:
            throw new IllegalArgumentException("Unknown severity value: " + sonarqubeSeverity);
    }
}
 
示例6
private void updateAnnotations(String project, String repo, AnalysisDetails analysisDetails, AlmSettingDto almSettingDto) throws IOException {
    final AtomicInteger chunkCounter = new AtomicInteger(0);

    client.deleteAnnotations(project, repo, analysisDetails.getCommitSha(), almSettingDto);

    Map<Object, Set<Annotation>> annotationChunks = analysisDetails.getPostAnalysisIssueVisitor().getIssues().stream()
            .filter(i -> i.getComponent().getReportAttributes().getScmPath().isPresent())
            .filter(i -> i.getComponent().getType() == Component.Type.FILE)
            .filter(i -> OPEN_ISSUE_STATUSES.contains(i.getIssue().status()))
            .sorted(Comparator.comparing(a -> Severity.ALL.indexOf(a.getIssue().severity())))
            .map(componentIssue -> {
                String path = componentIssue.getComponent().getReportAttributes().getScmPath().get();
                return new Annotation(componentIssue.getIssue().key(),
                        Optional.ofNullable(componentIssue.getIssue().getLine()).orElse(0),
                        analysisDetails.getIssueUrl(componentIssue.getIssue().key()),
                        componentIssue.getIssue().getMessage(),
                        path,
                        toBitbucketSeverity(componentIssue.getIssue().severity()),
                        toBitbucketType(componentIssue.getIssue().type()));
            }).collect(Collectors.groupingBy(s -> chunkCounter.getAndIncrement() / DEFAULT_MAX_ANNOTATIONS, toSet()));

    for (Set<Annotation> annotations : annotationChunks.values()) {
        try {
            client.createAnnotations(project, repo, analysisDetails.getCommitSha(), new CreateAnnotationsRequest(annotations), almSettingDto);
        } catch (BitbucketException e) {
            if (e.isError(BitbucketException.PAYLOAD_TOO_LARGE)) {
                LOGGER.warn("The annotations will be truncated since the maximum number of annotations for this report has been reached.");
            } else {
                throw e;
            }

        }
    }
}
 
示例7
private String toBitbucketSeverity(String severity) {
    if (severity == null) {
        return "LOW";
    }
    switch (severity) {
        case Severity.BLOCKER:
        case Severity.CRITICAL:
            return "HIGH";
        case Severity.MAJOR:
            return "MEDIUM";
        default:
            return "LOW";
    }
}
 
示例8
@Test
public void checkExcessIssuesCorrectlyReported() throws IOException, GeneralSecurityException {
    ReportAttributes reportAttributes = mock(ReportAttributes.class);
    when(reportAttributes.getScmPath()).thenReturn(Optional.of("abc"));
    Component component = mock(Component.class);
    when(component.getType()).thenReturn(Component.Type.FILE);
    when(component.getReportAttributes()).thenReturn(reportAttributes);
    List<PostAnalysisIssueVisitor.ComponentIssue> issues = IntStream.range(0, 120)
            .mapToObj(i -> {
                DefaultIssue defaultIssue = mock(DefaultIssue.class);
                when(defaultIssue.severity()).thenReturn(Severity.INFO);
                when(defaultIssue.getMessage()).thenReturn("message");
                when(defaultIssue.status()).thenReturn(Issue.STATUS_OPEN);
                when(defaultIssue.resolution()).thenReturn(null);
                return defaultIssue;
            })
            .map(i -> {
                PostAnalysisIssueVisitor.ComponentIssue componentIssue = mock(
                        PostAnalysisIssueVisitor.ComponentIssue.class);
                when(componentIssue.getComponent()).thenReturn(component);
                when(componentIssue.getIssue()).thenReturn(i);
                return componentIssue;
            }).collect(Collectors.toList());

    PostAnalysisIssueVisitor postAnalysisIssuesVisitor = mock(PostAnalysisIssueVisitor.class);
    when(postAnalysisIssuesVisitor.getIssues()).thenReturn(issues);

    AnalysisDetails analysisDetails = mock(AnalysisDetails.class);
    when(analysisDetails.getPostAnalysisIssueVisitor()).thenReturn(postAnalysisIssuesVisitor);
    when(analysisDetails.getBranchName()).thenReturn("branchName");
    when(analysisDetails.getAnalysisProjectKey()).thenReturn("projectKey");
    when(analysisDetails.getAnalysisDate()).thenReturn(new Date());

    List<InputObject.Builder> builders = new ArrayList<>();

    GraphqlProvider graphqlProvider = mock(GraphqlProvider.class);
    when(graphqlProvider.createInputObject()).thenAnswer(i -> {
        InputObject.Builder builder = spy(new InputObject.Builder<>());
        builders.add(builder);
        return builder;
    });

    GraphQLRequestEntity.RequestBuilder requestBuilder = GraphQLRequestEntity.Builder();
    ObjectMapper objectMapper = new ObjectMapper();

    when(graphqlProvider.createRequestBuilder()).thenReturn(requestBuilder);

    GraphQLTemplate graphQLTemplate = mock(GraphQLTemplate.class);
    GraphQLResponseEntity<CreateCheckRun> graphQLResponseEntity =
            new ObjectMapper().readValue("{\"response\": {\"checkRun\": {\"id\": \"ABC\"}}}", objectMapper.getTypeFactory().constructParametricType(GraphQLResponseEntity.class, CreateCheckRun.class));
    when(graphQLTemplate.mutate(any(), eq(CreateCheckRun.class))).thenReturn(graphQLResponseEntity);
    GraphQLResponseEntity<UpdateCheckRun> graphQLResponseEntity2 =
            new ObjectMapper().readValue("{\"response\": {\"checkRun\": {\"id\": \"ABC\"}}}", objectMapper.getTypeFactory().constructParametricType(GraphQLResponseEntity.class, UpdateCheckRun.class));
    when(graphQLTemplate.mutate(any(), eq(UpdateCheckRun.class))).thenReturn(graphQLResponseEntity2);
    when(graphqlProvider.createGraphQLTemplate()).thenReturn(graphQLTemplate);

    Clock clock = mock(Clock.class);
    when(clock.instant()).thenReturn(Instant.now());

    RepositoryAuthenticationToken repositoryAuthenticationToken = mock(RepositoryAuthenticationToken.class);
    when(repositoryAuthenticationToken.getAuthenticationToken()).thenReturn("dummy");
    GithubApplicationAuthenticationProvider githubApplicationAuthenticationProvider = mock(GithubApplicationAuthenticationProvider.class);
    when(githubApplicationAuthenticationProvider.getInstallationToken(any(), any(), any(), any())).thenReturn(repositoryAuthenticationToken);

    Server server = mock(Server.class);

    ProjectAlmSettingDto projectAlmSettingDto = mock(ProjectAlmSettingDto.class);
    when(projectAlmSettingDto.getAlmRepo()).thenReturn("dummy/repo");
    AlmSettingDto almSettingDto = mock(AlmSettingDto.class);
    when(almSettingDto.getUrl()).thenReturn("http://host.name");
    when(almSettingDto.getAppId()).thenReturn("app id");
    when(almSettingDto.getPrivateKey()).thenReturn("private key");

    GraphqlCheckRunProvider testCase = new GraphqlCheckRunProvider(graphqlProvider, clock, githubApplicationAuthenticationProvider, server);
    testCase.createCheckRun(analysisDetails, almSettingDto, projectAlmSettingDto);

    ArgumentCaptor<Class<?>> classArgumentCaptor = ArgumentCaptor.forClass(Class.class);
    verify(graphQLTemplate, times(3)).mutate(any(GraphQLRequestEntity.class), classArgumentCaptor.capture());

    assertThat(classArgumentCaptor.getAllValues()).containsExactly(CreateCheckRun.class, UpdateCheckRun.class, UpdateCheckRun.class);

    ArgumentCaptor<List<InputObject>> annotationsArgumentCaptor = ArgumentCaptor.forClass(List.class);
    verify(builders.get(100), times(3)).put(eq("annotations"), annotationsArgumentCaptor.capture());
    assertThat(annotationsArgumentCaptor.getAllValues().get(0)).hasSize(50);
    assertThat(annotationsArgumentCaptor.getAllValues().get(1)).hasSize(50);
    assertThat(annotationsArgumentCaptor.getAllValues().get(2)).hasSize(20);
}
 
示例9
private void mockValidAnalysis() {
    when(analysisDetails.getCommitSha()).thenReturn(COMMIT);
    when(analysisDetails.getQualityGateStatus()).thenReturn(QualityGate.Status.OK);

    Map<RuleType, Long> ruleCount = new HashMap<>();
    ruleCount.put(RuleType.CODE_SMELL, 1L);
    ruleCount.put(RuleType.VULNERABILITY, 2L);
    ruleCount.put(RuleType.SECURITY_HOTSPOT, 3L);
    ruleCount.put(RuleType.BUG, 4L);

    when(analysisDetails.countRuleByType()).thenReturn(ruleCount);
    when(analysisDetails.findQualityGateCondition(CoreMetrics.NEW_COVERAGE_KEY)).thenReturn(Optional.empty());
    when(analysisDetails.findQualityGateCondition(CoreMetrics.NEW_DUPLICATED_LINES_DENSITY_KEY)).thenReturn(Optional.empty());
    when(analysisDetails.getAnalysisDate()).thenReturn(Date.from(Instant.now()));
    when(analysisDetails.getDashboardUrl()).thenReturn(DASHBOARD_URL);

    ReportAttributes reportAttributes = mock(ReportAttributes.class);
    when(reportAttributes.getScmPath()).thenReturn(Optional.of(ISSUE_PATH));

    Component component = mock(Component.class);
    when(component.getType()).thenReturn(Component.Type.FILE);
    when(component.getReportAttributes()).thenReturn(reportAttributes);

    DefaultIssue defaultIssue = mock(DefaultIssue.class);
    when(defaultIssue.status()).thenReturn(Issue.STATUS_OPEN);
    when(defaultIssue.severity()).thenReturn(Severity.CRITICAL);
    when(defaultIssue.getLine()).thenReturn(ISSUE_LINE);
    when(defaultIssue.key()).thenReturn(ISSUE_KEY);
    when(defaultIssue.type()).thenReturn(RuleType.BUG);
    when(defaultIssue.getMessage()).thenReturn(ISSUE_MESSAGE);
    when(analysisDetails.getIssueUrl(ISSUE_KEY)).thenReturn(ISSUE_LINK);
    when(analysisDetails.getBaseImageUrl()).thenReturn(IMAGE_URL);

    PostAnalysisIssueVisitor.ComponentIssue componentIssue = mock(PostAnalysisIssueVisitor.ComponentIssue.class);
    when(componentIssue.getIssue()).thenReturn(defaultIssue);
    when(componentIssue.getComponent()).thenReturn(component);

    PostAnalysisIssueVisitor postAnalysisIssueVisitor = mock(PostAnalysisIssueVisitor.class);
    when(postAnalysisIssueVisitor.getIssues()).thenReturn(Collections.singletonList(componentIssue));

    when(analysisDetails.getPostAnalysisIssueVisitor()).thenReturn(postAnalysisIssueVisitor);
}
 
示例10
@Test
public void ConfiguresAdditionalRules() {
    // cfg1
    Rule rule1 = getRule("custom-rule-1");
    assertNull(rule1);

    // cfg2
    Rule rule2 = getRule("custom-rule-2");
    assertNotNull(rule2);
    assertEquals("test rule #2", rule2.name());
    assertEquals(Severity.MINOR, rule2.severity());
    assertEquals("#2 description", rule2.htmlDescription());
    assertEquals(null, rule2.debtRemediationFunction());
    assertEquals(RuleType.CODE_SMELL, rule2.type());

    // cfg3
    Rule rule3 = getRule("custom-rule-3");
    assertNotNull(rule3);
    assertEquals("test rule #3", rule3.name());
    assertEquals(Severity.INFO, rule3.severity());
    assertEquals("#3 description", rule3.htmlDescription());
    assertEquals(
        DebtRemediationFunction.Type.CONSTANT_ISSUE,
        rule3.debtRemediationFunction().type()
    );
    assertEquals(null, rule3.debtRemediationFunction().gapMultiplier());
    assertEquals("15min", rule3.debtRemediationFunction().baseEffort());
    assertEquals(RuleType.CODE_SMELL, rule3.type());

    // cfg4
    Rule rule4 = getRule("custom-rule-4");
    assertNotNull(rule4);
    assertEquals("test rule #4", rule4.name());
    assertEquals(Severity.MINOR, rule4.severity());
    assertEquals("#4 description", rule4.htmlDescription());
    assertEquals(
        DebtRemediationFunction.Type.LINEAR,
        rule4.debtRemediationFunction().type()
    );
    assertEquals("5min", rule4.debtRemediationFunction().gapMultiplier());
    assertEquals(null, rule4.debtRemediationFunction().baseEffort());
    assertEquals(RuleType.BUG, rule4.type());

    // cfg5
    Rule rule5 = getRule("custom-rule-5");
    assertNotNull(rule5);
    assertEquals("test rule #5", rule5.name());
    assertEquals(Severity.MAJOR, rule5.severity());
    assertEquals("#5 description", rule5.htmlDescription());
    assertEquals(RuleType.VULNERABILITY, rule5.type());

    assertEquals("30min", rule5.debtRemediationFunction().gapMultiplier());
    assertEquals("15min", rule5.debtRemediationFunction().baseEffort());
}