diff --git a/muted-tests.yml b/muted-tests.yml index e45a3419e3e62..3bdbce6543c4d 100644 --- a/muted-tests.yml +++ b/muted-tests.yml @@ -403,9 +403,6 @@ tests: - class: org.elasticsearch.backwards.MixedClusterClientYamlTestSuiteIT method: test {p0=mtermvectors/10_basic/Tests catching other exceptions per item} issue: https://github.com/elastic/elasticsearch/issues/122414 -- class: org.elasticsearch.cluster.ClusterStateSerializationTests - method: testSerializationPreMultiProject - issue: https://github.com/elastic/elasticsearch/issues/130872 - class: org.elasticsearch.search.SearchWithRejectionsIT method: testOpenContextsAfterRejections issue: https://github.com/elastic/elasticsearch/issues/130821 diff --git a/server/src/test/java/org/elasticsearch/cluster/ClusterStateSerializationTests.java b/server/src/test/java/org/elasticsearch/cluster/ClusterStateSerializationTests.java deleted file mode 100644 index 59baef0ebe05a..0000000000000 --- a/server/src/test/java/org/elasticsearch/cluster/ClusterStateSerializationTests.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -package org.elasticsearch.cluster; - -import org.elasticsearch.TransportVersion; -import org.elasticsearch.TransportVersions; -import org.elasticsearch.cluster.metadata.DataStreamTestHelper; -import org.elasticsearch.cluster.metadata.Metadata; -import org.elasticsearch.cluster.metadata.ProjectMetadata; -import org.elasticsearch.cluster.node.DiscoveryNode; -import org.elasticsearch.cluster.node.DiscoveryNodeUtils; -import org.elasticsearch.cluster.node.DiscoveryNodes; -import org.elasticsearch.common.io.stream.NamedWriteableRegistry; -import org.elasticsearch.core.Tuple; -import org.elasticsearch.test.ESTestCase; -import org.elasticsearch.test.MapMatcher; -import org.elasticsearch.test.TransportVersionUtils; -import org.elasticsearch.test.XContentTestUtils; -import org.hamcrest.Matchers; - -import java.io.IOException; -import java.util.List; -import java.util.Set; - -public class ClusterStateSerializationTests extends ESTestCase { - - public void testSerializationInCurrentVersion() throws IOException { - assertSerializationRoundTrip(TransportVersion.current()); - } - - public void testSerializationPreMultiProject() throws IOException { - assertSerializationRoundTrip(TransportVersionUtils.getPreviousVersion(TransportVersions.MULTI_PROJECT)); - } - - private void assertSerializationRoundTrip(TransportVersion transportVersion) throws IOException { - ClusterState original = randomClusterState(transportVersion); - DiscoveryNode node = original.nodes().getLocalNode(); - assertThat(node, Matchers.notNullValue()); - - final ClusterState deserialized = ESTestCase.copyWriteable( - original, - new NamedWriteableRegistry(ClusterModule.getNamedWriteables()), - in -> ClusterState.readFrom(in, node), - transportVersion - ); - assertEquivalent("For transport version: " + transportVersion, original, deserialized); - } - - private void assertEquivalent(String context, ClusterState expected, ClusterState actual) throws IOException { - if (expected == actual) { - return; - } - // The simplest model we have for comparing equivalence is by comparing the XContent of the cluster state - var expectedJson = XContentTestUtils.convertToMap(expected); - var actualJson = XContentTestUtils.convertToMap(actual); - assertThat(context, actualJson, MapMatcher.matchesMap(expectedJson)); - } - - private ClusterState randomClusterState(TransportVersion transportVersion) { - final Set datastreamNames = randomSet(0, 10, () -> randomAlphaOfLengthBetween(4, 18)); - final List> datastreams = datastreamNames.stream() - .map(name -> new Tuple<>(name, randomIntBetween(1, 5))) - .toList(); - final List indices = List.copyOf( - randomSet(0, 10, () -> randomValueOtherThanMany(datastreamNames::contains, () -> randomAlphaOfLengthBetween(3, 12))) - ); - - final DiscoveryNodes.Builder nodes = DiscoveryNodes.builder(); - do { - final String id = randomUUID(); - nodes.add(DiscoveryNodeUtils.create(id)); - nodes.localNodeId(id); - } while (randomBoolean()); - - ProjectMetadata project = DataStreamTestHelper.getProjectWithDataStreams(datastreams, indices); - return ClusterState.builder(ClusterName.DEFAULT).metadata(Metadata.builder().put(project)).nodes(nodes).build(); - } -} diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java index 01e271ff6483b..373831b54804b 100644 --- a/server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/MetadataTests.java @@ -10,6 +10,7 @@ package org.elasticsearch.cluster.metadata; import org.elasticsearch.TransportVersion; +import org.elasticsearch.TransportVersions; import org.elasticsearch.cluster.ClusterModule; import org.elasticsearch.cluster.Diff; import org.elasticsearch.cluster.coordination.CoordinationMetadata; @@ -45,6 +46,7 @@ import org.elasticsearch.persistent.PersistentTasksService; import org.elasticsearch.test.AbstractChunkedSerializingTestCase; import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.test.TransportVersionUtils; import org.elasticsearch.test.index.IndexVersionUtils; import org.elasticsearch.test.rest.ObjectPath; import org.elasticsearch.threadpool.ThreadPool; @@ -613,6 +615,17 @@ public void testMultiProjectSerialization() throws IOException { } } + public void testUnableToSerializeNonDefaultProjectBeforeMultiProject() { + final var projectId = randomUniqueProjectId(); + Metadata metadata = Metadata.builder().put(ProjectMetadata.builder(projectId)).build(); + + try (BytesStreamOutput output = new BytesStreamOutput()) { + output.setTransportVersion(TransportVersionUtils.getPreviousVersion(TransportVersions.MULTI_PROJECT)); + var e = assertThrows(UnsupportedOperationException.class, () -> metadata.writeTo(output)); + assertEquals("There is 1 project, but it has id [" + projectId + "] rather than default", e.getMessage()); + } + } + public void testGetNonExistingProjectThrows() { final List projects = IntStream.range(0, between(1, 3)) .mapToObj(i -> randomProject(ProjectId.fromId("p_" + i), between(0, 5)))