@Override public void start() { try (DbSession dbSession = dbClient.openSession(false)) { QualityGateDto builtin = qualityGateDao.selectByName(dbSession, BUILTIN_QUALITY_GATE_NAME); // Create builtin if not present if (builtin == null) { LOGGER.info("Built-in quality gate [{}] has been created", BUILTIN_QUALITY_GATE_NAME); builtin = createQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); } // Set builtin if missing if (!builtin.isBuiltIn()) { builtin.setBuiltIn(true); dbClient.qualityGateDao().update(builtin, dbSession); LOGGER.info("Quality gate [{}] has been set as built-in", BUILTIN_QUALITY_GATE_NAME); } updateQualityConditionsIfRequired(dbSession, builtin); qualityGateDao.ensureOneBuiltInQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); dbSession.commit(); } }
@Test public void register_default_gate() { insertMetrics(); underTest.start(); verifyCorrectBuiltInQualityGate(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate [Sonar way] has been created")).isTrue(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
@Override public void start() { try (DbSession dbSession = dbClient.openSession(false)) { QualityGateDto builtin = qualityGateDao.selectByName(dbSession, BUILTIN_QUALITY_GATE_NAME); // Create builtin if not present if (builtin == null) { LOGGER.info("Built-in quality gate [{}] has been created", BUILTIN_QUALITY_GATE_NAME); builtin = createQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); } // Set builtin if missing if (!builtin.isBuiltIn()) { builtin.setBuiltIn(true); dbClient.qualityGateDao().update(builtin, dbSession); LOGGER.info("Quality gate [{}] has been set as built-in", BUILTIN_QUALITY_GATE_NAME); } updateQualityConditionsIfRequired(dbSession, builtin); qualityGateDao.ensureOneBuiltInQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); dbSession.commit(); } }
@Test public void upgrade_empty_quality_gate() { insertMetrics(); underTest.start(); assertThat(db.countRowsOfTable("quality_gates")).isEqualTo(1); verifyCorrectBuiltInQualityGate(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
@Test public void upgrade_should_add_missing_condition() { insertMetrics(); QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); List<QualityGateConditionDto> builtInConditions = createBuiltInConditions(builtInQualityGate); // Remove a condition QualityGateConditionDto conditionToBeDeleted = builtInConditions.get(new Random().nextInt(builtInConditions.size())); gateConditionDao.delete(conditionToBeDeleted, dbSession); dbSession.commit(); underTest.start(); assertThat(db.countRowsOfTable("quality_gates")).isEqualTo(1); verifyCorrectBuiltInQualityGate(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
@Test public void should_not_update_builtin_quality_gate_if_already_uptodate() { insertMetrics(); QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); createBuiltInConditions(builtInQualityGate); dbSession.commit(); underTest.start(); assertThat(db.countRowsOfTable("quality_gates")).isEqualTo(1); verifyCorrectBuiltInQualityGate(); // Log must not be present assertThat( logTester.logs(LoggerLevel.INFO).contains("Quality gate [Sonar way] has been set as built-in")).isFalse(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate [Sonar way] has been created")).isFalse(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isFalse(); }
@Test public void ensure_only_that_builtin_is_set_as_default_when_no_default_quality_gate() { insertMetrics(); QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); underTest.start(); assertThat(qualityGateFinder.getBuiltInQualityGate(dbSession)).isNotNull(); assertThat(qualityGateFinder.getBuiltInQualityGate(dbSession).getId()).isEqualTo(builtInQualityGate.getId()); }
@Test public void upgrade_should_remove_deleted_condition() { insertMetrics(); QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); createBuiltInConditions(builtInQualityGate); // Add another condition qualityGateConditionsUpdater.createCondition(dbSession, builtInQualityGate, NEW_SECURITY_REMEDIATION_EFFORT_KEY, OPERATOR_GREATER_THAN, "5"); dbSession.commit(); underTest.start(); assertThat(db.countRowsOfTable("quality_gates")).isEqualTo(1); verifyCorrectBuiltInQualityGate(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
@Test public void ensure_only_one_built_in_quality_gate() { insertMetrics(); String qualityGateName = "IncorrectQualityGate"; QualityGateDto builtin = new QualityGateDto().setName(qualityGateName).setBuiltIn(true).setUuid(Uuids.createFast()); qualityGateDao.insert(dbSession, builtin); dbSession.commit(); underTest.start(); QualityGateDto oldQualityGate = qualityGateDao.selectByName(dbSession, qualityGateName); assertThat(oldQualityGate).isNotNull(); assertThat(oldQualityGate.isBuiltIn()).isFalse(); assertThat(db.select("select name as \"name\" from quality_gates where is_built_in is true")) .extracting(column -> column.get("name")) .containsExactly(BUILT_IN_NAME); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate [Sonar way] has been created")).isTrue(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
@Test public void builtin_quality_gate_with_incorrect_metricId_should_not_throw_an_exception() { insertMetrics(); QualityGateConditionDto conditionDto = new QualityGateConditionDto() .setMetricId(-1) // This Id does not exist .setOperator(OPERATOR_GREATER_THAN) .setErrorThreshold("1"); gateConditionDao.insert(conditionDto, dbSession); dbSession.commit(); underTest.start(); // No exception thrown verifyCorrectBuiltInQualityGate(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
@Test public void should_set_SonarWay_as_builtin_when_not_set() { insertMetrics(); QualityGateDto qualityGate = dbClient.qualityGateDao().insert(dbSession, new QualityGateDto() .setName("Sonar way") .setUuid(Uuids.createFast()) .setBuiltIn(false) .setCreatedAt(new Date())); dbSession.commit(); createBuiltInConditions(qualityGate); dbSession.commit(); underTest.start(); assertThat(db.countRowsOfTable("quality_gates")).isEqualTo(1); verifyCorrectBuiltInQualityGate(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Quality gate [Sonar way] has been set as built-in")).isTrue(); }