diff --git a/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodeRole.java b/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodeRole.java index ba63335d10046..6edc0bd756055 100644 --- a/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodeRole.java +++ b/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodeRole.java @@ -132,6 +132,27 @@ protected Setting roleSetting() { return Setting.boolSetting("node. " + roleName(), false, Setting.Property.NodeScope); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + UnknownRole that = (UnknownRole) o; + return Objects.equals(roleName(), that.roleName()) && + Objects.equals(roleNameAbbreviation(), that.roleNameAbbreviation()); + } + + @Override + public int hashCode() { + return Objects.hash(roleName(), roleNameAbbreviation()); + } + + @Override + public String toString() { + return "UnknownRole{" + + "roleName='" + roleName() + '\'' + + ", roleAbbreviation='" + roleNameAbbreviation() + '\'' + + '}'; + } } } diff --git a/server/src/test/java/org/elasticsearch/cluster/node/DiscoveryNodeRoleTests.java b/server/src/test/java/org/elasticsearch/cluster/node/DiscoveryNodeRoleTests.java index f5fdd2d66fac9..a8e529a89fbb6 100644 --- a/server/src/test/java/org/elasticsearch/cluster/node/DiscoveryNodeRoleTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/node/DiscoveryNodeRoleTests.java @@ -21,6 +21,7 @@ import org.elasticsearch.common.settings.Setting; import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.test.EqualsHashCodeTestUtils; import java.util.Set; @@ -75,4 +76,15 @@ protected Setting roleSetting() { assertThat(e, hasToString(containsString("Duplicate key"))); } + public void testUnknownDiscoveryNodeRoleEqualsHashCode() { + EqualsHashCodeTestUtils.checkEqualsAndHashCode(new DiscoveryNodeRole.UnknownRole(randomAlphaOfLength(10), randomAlphaOfLength(1)), + r -> new DiscoveryNodeRole.UnknownRole(r.roleName(), r.roleNameAbbreviation()), + r -> { + if (randomBoolean()) { + return new DiscoveryNodeRole.UnknownRole(randomAlphaOfLength(21 - r.roleName().length()), r.roleNameAbbreviation()); + } else { + return new DiscoveryNodeRole.UnknownRole(r.roleName(), randomAlphaOfLength(3 - r.roleNameAbbreviation().length())); + } + }); + } }