diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackFeatureUsage.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackFeatureUsage.java index 0cbafd7972ebe..38733b8a3b48d 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackFeatureUsage.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackFeatureUsage.java @@ -71,4 +71,16 @@ protected void innerXContent(XContentBuilder builder, Params params) throws IOEx builder.field(AVAILABLE_XFIELD, available); builder.field(ENABLED_XFIELD, enabled); } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + XPackFeatureUsage that = (XPackFeatureUsage) o; + return available == that.available && enabled == that.enabled && Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name, available, enabled); + } } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/action/XPackUsageResponse.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/action/XPackUsageResponse.java index 8f3666c54f535..e8ef17e4b44d9 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/action/XPackUsageResponse.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/action/XPackUsageResponse.java @@ -44,4 +44,15 @@ private static void writeTo(final StreamOutput out, final List { -public class XPackUsageResponseTests extends ESTestCase { + private static final String TEST_FEATURE_USAGE = "test-feature-usage"; - private static TransportVersion oldVersion; - private static TransportVersion newVersion; - - @BeforeClass - public static void setVersion() { - oldVersion = TransportVersionUtils.randomVersionBetween( - random(), - TransportVersionUtils.getFirstVersion(), - TransportVersionUtils.getPreviousVersion(TransportVersion.current()) - ); - newVersion = TransportVersionUtils.randomVersionBetween( - random(), - TransportVersionUtils.getNextVersion(oldVersion), - TransportVersion.current() - ); + @Override + protected Writeable.Reader instanceReader() { + return XPackUsageResponse::new; } - public static class OldUsage extends XPackFeatureUsage { + @Override + protected XPackUsageResponse createTestInstance() { + return new XPackUsageResponse(List.of(new TestXpackFeatureUsage(TEST_FEATURE_USAGE, randomBoolean(), randomBoolean()))); + } - public OldUsage() { - super("old", randomBoolean(), randomBoolean()); - } + @Override + protected XPackUsageResponse mutateInstance(XPackUsageResponse instance) throws IOException { + List usages = new ArrayList<>(instance.getUsages()); + usages.add(new TestXpackFeatureUsage(TEST_FEATURE_USAGE, randomBoolean(), randomBoolean())); - public OldUsage(final StreamInput in) throws IOException { - super(in); - } + return new XPackUsageResponse(usages); + } - @Override - public TransportVersion getMinimalSupportedVersion() { - return oldVersion; - } + @Override + protected NamedWriteableRegistry getNamedWriteableRegistry() { + List entries = List.of( + new NamedWriteableRegistry.Entry(XPackFeatureUsage.class, TEST_FEATURE_USAGE, TestXpackFeatureUsage::new) + ); + return new NamedWriteableRegistry(entries); } - public static class NewUsage extends XPackFeatureUsage { - - public NewUsage() { - super("new", randomBoolean(), randomBoolean()); + private static class TestXpackFeatureUsage extends XPackFeatureUsage { + TestXpackFeatureUsage(StreamInput input) throws IOException { + super(input); } - public NewUsage(final StreamInput in) throws IOException { - super(in); + TestXpackFeatureUsage(String name, boolean available, boolean enabled) { + super(name, available, enabled); } @Override public TransportVersion getMinimalSupportedVersion() { - return newVersion; + return TransportVersion.minimumCompatible(); } - - } - - public void testVersionDependentSerializationWriteToOldStream() throws IOException { - final XPackUsageResponse before = new XPackUsageResponse(List.of(new OldUsage(), new NewUsage())); - final BytesStreamOutput oldStream = new BytesStreamOutput(); - oldStream.setTransportVersion(oldVersion); - before.writeTo(oldStream); - - final NamedWriteableRegistry registry = new NamedWriteableRegistry( - List.of( - new NamedWriteableRegistry.Entry(XPackFeatureUsage.class, "old", OldUsage::new), - new NamedWriteableRegistry.Entry(XPackFeatureUsage.class, "new", NewUsage::new) - ) - ); - - final StreamInput in = new NamedWriteableAwareStreamInput(oldStream.bytes().streamInput(), registry); - final XPackUsageResponse after = new XPackUsageResponse(in); - assertThat(after.getUsages(), hasSize(1)); - assertThat(after.getUsages().get(0), instanceOf(OldUsage.class)); } - - public void testVersionDependentSerializationWriteToNewStream() throws IOException { - final XPackUsageResponse before = new XPackUsageResponse(List.of(new OldUsage(), new NewUsage())); - final BytesStreamOutput newStream = new BytesStreamOutput(); - newStream.setTransportVersion(newVersion); - before.writeTo(newStream); - - final NamedWriteableRegistry registry = new NamedWriteableRegistry( - List.of( - new NamedWriteableRegistry.Entry(XPackFeatureUsage.class, "old", OldUsage::new), - new NamedWriteableRegistry.Entry(XPackFeatureUsage.class, "new", NewUsage::new) - ) - ); - - final StreamInput in = new NamedWriteableAwareStreamInput(newStream.bytes().streamInput(), registry); - final XPackUsageResponse after = new XPackUsageResponse(in); - assertThat(after.getUsages(), hasSize(2)); - assertThat(after.getUsages().get(0), instanceOf(OldUsage.class)); - assertThat(after.getUsages().get(1), instanceOf(NewUsage.class)); - } - }