/** Creates {@link MinorIssueConfig} from this bean */ public MinorIssueConfig toMinorIssueConfig() { return new MinorIssueConfig(minor, severity, url); } }
@JsonCreator private static @Nonnull MinorIssueConfig create( @JsonProperty(PROP_MINOR_ISSUE) @Nullable String minorIssue, @JsonProperty(PROP_SEVERITY) @Nullable Integer severity, @JsonProperty(PROP_URL) @Nullable String url) { return new MinorIssueConfig( requireNonNull(minorIssue, "'minorIssue' cannot be null"), severity, url); }
private void addIssue(String network, String major, String minor, int severity, String url) { Response response = getIssueSettingsTarget(network) .post( Entity.entity( new IssueConfigBean(major, new MinorIssueConfig(minor, severity, url)), MediaType.APPLICATION_JSON)); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); }
@Test public void testConstructorMultipleMinorIssuesSameName() { String minor = "minor"; int finalSeverity = 2; assertThat( new MajorIssueConfig( "major", ImmutableList.of( new MinorIssueConfig(minor, 1, null), new MinorIssueConfig(minor, finalSeverity, null))) .getMinorIssueConfig(minor) .get() .getSeverity(), equalTo(finalSeverity)); }
@VisibleForTesting static @Nonnull Map<String, MajorIssueConfig> computeMajorIssueConfigs(TableAnswerElement table) { Map<String, ImmutableList.Builder<MinorIssueConfig>> majorIssueConfigs = new HashMap<>(); // For every issue column of every row, extract the issue and use it to update the map table.getMetadata().getColumnMetadata().stream() .filter(c -> c.getSchema().equals(Schema.ISSUE)) .map(ColumnMetadata::getName) .flatMap( column -> table.getRowsList().stream() .filter(row -> row.hasNonNull(column)) .map(row -> row.getIssue(column))) .forEach( issue -> majorIssueConfigs .computeIfAbsent(issue.getType().getMajor(), m -> ImmutableList.builder()) .add( new MinorIssueConfig( issue.getType().getMinor(), issue.getSeverity(), issue.getUrl()))); return CommonUtil.toImmutableMap( majorIssueConfigs, Entry::getKey, // major issue type e -> new MajorIssueConfig(e.getKey(), e.getValue().build())); }
@Test public void testAnswerIssueConfigMatchesConfiguredIssuesDifferntMinorNoMatch() { String major = "major"; String minor = "minor"; MajorIssueConfig answerIssueConfig = new MajorIssueConfig(major, ImmutableMap.of(minor, new MinorIssueConfig(minor, 1, null))); Map<String, MajorIssueConfig> configuredMajorIssues = ImmutableMap.of( major, new MajorIssueConfig( major, ImmutableMap.of(minor, new MinorIssueConfig(minor, 2, null)))); assertThat( _manager.answerIssueConfigMatchesConfiguredIssues(answerIssueConfig, configuredMajorIssues), equalTo(false)); }
private MajorIssueConfig overlayMajorIssueConfig( MajorIssueConfig baseMajorIssueConfig, MajorIssueConfig networkMajorIssueConfig) { Map<String, MinorIssueConfig> networkMinorIssues = networkMajorIssueConfig.getMinorIssueConfigsMap(); ImmutableList.Builder<MinorIssueConfig> combinedMinorIssues = ImmutableList.builder(); // note there is no need to address minor issues not mentioned in base answer baseMajorIssueConfig .getMinorIssueConfigsMap() .forEach( (minorIssueType, baseMinorIssueConfig) -> { MinorIssueConfig networkMinorIssueConfig = networkMinorIssues.get(minorIssueType); if (networkMinorIssueConfig == null) { combinedMinorIssues.add(baseMinorIssueConfig); return; } Integer networkSeverity = networkMinorIssueConfig.getSeverity(); Integer severity = networkSeverity != null ? networkSeverity : baseMinorIssueConfig.getSeverity(); String networkUrl = networkMinorIssueConfig.getUrl(); String url = networkUrl != null && !networkUrl.isEmpty() ? networkUrl : baseMinorIssueConfig.getUrl(); combinedMinorIssues.add(new MinorIssueConfig(minorIssueType, severity, url)); }); return new MajorIssueConfig(baseMajorIssueConfig.getMajorIssue(), combinedMinorIssues.build()); }
@Test public void testAnswerIssueConfigMatchesConfiguredIssuesMissingMinorMatches() { String major = "major"; String minor = "minor"; MajorIssueConfig answerIssueConfig = new MajorIssueConfig(major, ImmutableMap.of(minor, new MinorIssueConfig(minor, 1, null))); Map<String, MajorIssueConfig> configuredMajorIssues = ImmutableMap.of(major, new MajorIssueConfig(major, ImmutableMap.of())); assertThat( _manager.answerIssueConfigMatchesConfiguredIssues(answerIssueConfig, configuredMajorIssues), equalTo(true)); }
@Test public void testEquals() { IssueConfigBean group1Elem1 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", null, null)); IssueConfigBean group1Elem2 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", null, null)); IssueConfigBean group2Elem1 = new IssueConfigBean("major2", new MinorIssueConfig("minor1", null, null)); IssueConfigBean group3Elem1 = new IssueConfigBean("major1", new MinorIssueConfig("minor2", null, null)); IssueConfigBean group4Elem1 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", 0, null)); IssueConfigBean group5Elem1 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", null, "localhost")); new EqualsTester() .addEqualityGroup(group1Elem1, group1Elem2) .addEqualityGroup(group2Elem1) .addEqualityGroup(group3Elem1) .addEqualityGroup(group4Elem1) .addEqualityGroup(group5Elem1) .testEquals(); }
@Test public void testPut() { MajorIssueConfig majorConfig = new MajorIssueConfig("major", ImmutableList.of()); // add a minor config MinorIssueConfig minor1Config = new MinorIssueConfig("minor1", 100, "www.cnn.com"); majorConfig = majorConfig.put(minor1Config); assertThat(majorConfig, equalTo(new MajorIssueConfig("major", ImmutableList.of(minor1Config)))); // add another minor config MinorIssueConfig minor2Config = new MinorIssueConfig("minor2", 9, "www"); majorConfig = majorConfig.put(minor2Config); assertThat( majorConfig, equalTo(new MajorIssueConfig("major", ImmutableList.of(minor1Config, minor2Config)))); // add a minor config that overwrite the first one MinorIssueConfig minor1ConfigAgain = new MinorIssueConfig("minor1", 90, "www"); majorConfig = majorConfig.put(minor1ConfigAgain); assertThat( majorConfig, equalTo(new MajorIssueConfig("major", ImmutableList.of(minor2Config, minor1ConfigAgain)))); }
"major", ImmutableList.of( new MinorIssueConfig("minor1", 23, "www.cnn.com"), new MinorIssueConfig("minor2", 24, null)))));
@Test public void testGetIssueConfig() throws IOException { String network = "myNetwork"; String major = "major"; String minor = "minor"; Main.getWorkMgr().initNetwork(network, null); Response response = getIssueConfigTarget(network, major, minor).get(); assertThat(response.getStatus(), equalTo(NOT_FOUND.getStatusCode())); addIssue(network, major, minor, 100, "www.cnn"); response = getIssueConfigTarget(network, major, minor).get(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( response.readEntity(IssueConfigBean.class), equalTo(new IssueConfigBean(major, new MinorIssueConfig(minor, 100, "www.cnn")))); } }
@Test public void testApplyRowIssuesConfigurationNoMatchMinorIssue() { String col = "col"; String major = "major"; String otherMinor = "otherMinor"; String minor = "minor"; Row oldRow = Row.of(col, new Issue("explanation", 5, new Issue.Type(major, minor))); Set<String> issueColumns = ImmutableSet.of(col); Map<String, MajorIssueConfig> issueConfigs = ImmutableMap.of( major, new MajorIssueConfig( major, ImmutableList.of(new MinorIssueConfig(otherMinor, 6, "example.com")))); assertThat( _manager.applyRowIssuesConfiguration(oldRow, issueColumns, issueConfigs), equalTo(oldRow)); }
@Test public void testApplyRowIssuesConfigurationNoMatchMajorIssue() { String col = "col"; String major = "major"; String otherMajor = "otherMajor"; String minor = "minor"; Row oldRow = Row.of(col, new Issue("explanation", 5, new Issue.Type(major, minor))); Set<String> issueColumns = ImmutableSet.of(col); Map<String, MajorIssueConfig> issueConfigs = ImmutableMap.of( otherMajor, new MajorIssueConfig( otherMajor, ImmutableList.of(new MinorIssueConfig(minor, 6, "example.com")))); assertThat( _manager.applyRowIssuesConfiguration(oldRow, issueColumns, issueConfigs), equalTo(oldRow)); }
@Test public void testNullableSeveritySerialization() throws JsonParseException, JsonMappingException, JsonProcessingException, IOException { IssueConfigBean bean0 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", 0, null)); IssueConfigBean beanNull = new IssueConfigBean("major1", new MinorIssueConfig("minor1", null, null)); IssueConfigBean bean0Deserialized = BatfishObjectMapper.mapper() .readValue(BatfishObjectMapper.writeString(bean0), IssueConfigBean.class); IssueConfigBean beanNullDeserialized = BatfishObjectMapper.mapper() .readValue(BatfishObjectMapper.writeString(beanNull), IssueConfigBean.class); new EqualsTester() .addEqualityGroup(bean0, bean0Deserialized) .addEqualityGroup(beanNull, beanNullDeserialized) .testEquals(); } }
@Test public void testMajorIssueConfigRoundTrip() throws IOException { String majorIssue = "majorIssue"; IssueSettingsId issueSettingsId = new IssueSettingsId("issueSettingsId"); NetworkId network = new NetworkId("network"); MinorIssueConfig minorIssueConfig = new MinorIssueConfig("minorIssue", 100, "www.google.com"); MajorIssueConfig majorIssueConfig = new MajorIssueConfig(majorIssue, ImmutableList.of(minorIssueConfig)); _storage.storeMajorIssueConfig(network, issueSettingsId, majorIssueConfig); assertThat(_storage.loadMajorIssueConfig(network, issueSettingsId), equalTo(majorIssueConfig)); }
@Test public void testApplyRowIssuesConfigurationMatch() { String col = "col"; String major = "major"; String minor = "minor"; Issue oldIssue = new Issue("explanation", 5, new Issue.Type(major, minor)); Row oldRow = Row.of(col, oldIssue); int newSeverity = 6; String newUrl = "example.com"; Issue newIssue = new Issue(oldIssue.getExplanation(), newSeverity, oldIssue.getType(), newUrl); Set<String> issueColumns = ImmutableSet.of(col); Map<String, MajorIssueConfig> issueConfigs = ImmutableMap.of( major, new MajorIssueConfig(major, ImmutableList.of(new MinorIssueConfig(minor, 6, newUrl)))); assertThat( _manager.applyRowIssuesConfiguration(oldRow, issueColumns, issueConfigs), equalTo(Row.of(col, newIssue))); }
MinorIssueConfig minor1Config = new MinorIssueConfig("minor1", 100, "www.cnn.com"); Response response = getIssueSettingsTarget(network) MinorIssueConfig minor1ConfigAgain = new MinorIssueConfig("minor1", 90, "www"); MinorIssueConfig minor2Config = new MinorIssueConfig("minor2", 9, "www"); getIssueSettingsTarget(network) .post(
@Test public void testPutMajorIssueConfig() throws IOException { String network = "network1"; String majorIssueType = "type1"; _manager.initNetwork(network, null); NetworkId networkId = _idManager.getNetworkId(network); // no ID should exist at first assertFalse(_idManager.hasIssueSettingsId(majorIssueType, networkId)); _manager.putMajorIssueConfig( network, majorIssueType, new MajorIssueConfig(majorIssueType, ImmutableList.of())); // There should be an ID now assertTrue(_idManager.hasIssueSettingsId(majorIssueType, networkId)); IssueSettingsId issueSettingsId = _idManager.getIssueSettingsId(majorIssueType, networkId); _manager.putMajorIssueConfig( network, majorIssueType, new MajorIssueConfig( majorIssueType, ImmutableList.of(new MinorIssueConfig("foo", null, null)))); // The ID should have changed assertThat( _idManager.getIssueSettingsId(majorIssueType, networkId), not(equalTo(issueSettingsId))); }
@Test public void testComputeMajorIssueTypesSome() { String columnName = "col"; String major = "major"; String minor = "minor"; int severity = 5; Issue value = new Issue("a", severity, new Issue.Type(major, minor)); TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.ISSUE, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); assertThat( AnswerMetadataUtil.computeMajorIssueConfigs(table), equalTo( ImmutableMap.of( major, new MajorIssueConfig( major, ImmutableMap.of(minor, new MinorIssueConfig(minor, severity, null)))))); } }