diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-03-08 12:17:27 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-03-08 12:17:27 +0100 |
commit | 23306c0080e85d1e5e74814a6c6a9b457d94ad1c (patch) | |
tree | 2b6abc08510001f2b33eb8951d6839598b1b8b97 /service-monitor/src/test/java/com/yahoo | |
parent | cbb3da139119eae73e2998bbb0fb12997f30d75b (diff) |
Also remove hostnames from hostnamesById when removing hosts via application activate
I have seen a few "Host not found" messages in CD the last 2 days, and found
this bug in how the duper model indices are maintained on application
activation.
Diffstat (limited to 'service-monitor/src/test/java/com/yahoo')
-rw-r--r-- | service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java index 69b6d3d59f3..2e38283a091 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java @@ -13,9 +13,13 @@ import org.junit.Test; import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -115,4 +119,36 @@ public class DuperModelTest { assertEquals(Optional.of(application2), duperModel.getApplicationInfo(hostname1_1)); assertEquals(Optional.empty(), duperModel.getApplicationInfo(hostname2_1)); } + + @Test + public void hostIndicesForOneApplication() { + assertEquals(0, duperModel.numberOfApplications()); + assertEquals(0, duperModel.numberOfHosts()); + assertEquals(Set.of(), duperModel.getHostnames(id1)); + + addAndVerifyApplication1("host1"); + addAndVerifyApplication1("host1", "host2"); + addAndVerifyApplication1("host2", "host3"); + assertEquals(Optional.empty(), duperModel.getApplicationId(HostName.from("host1"))); + + duperModel.remove(id1); + assertEquals(0, duperModel.numberOfApplications()); + assertEquals(0, duperModel.numberOfHosts()); + assertEquals(Set.of(), duperModel.getHostnames(id1)); + } + + private void addAndVerifyApplication1(String... hostnameStrings) { + HostName[] hostnameArray = Stream.of(hostnameStrings).map(HostName::from).toArray(HostName[]::new); + setUpApplication(id1, application1, hostnameArray); + duperModel.add(application1); + + assertEquals(1, duperModel.numberOfApplications()); + Optional<ApplicationInfo> applicationInfo = duperModel.getApplicationInfo(id1); + assertTrue(applicationInfo.isPresent()); + assertSame(application1, applicationInfo.get()); + + assertEquals(hostnameArray.length, duperModel.numberOfHosts()); + assertEquals(Set.of(hostnameArray), duperModel.getHostnames(id1)); + Stream.of(hostnameArray).forEach(hostname -> assertEquals(Optional.of(id1), duperModel.getApplicationId(hostname))); + } }
\ No newline at end of file |