Fix randomization in testPerformActionAttrsRequestFails
The randomization in this test would occasionally generate duplicate
node attribute keys, causing spurious test failures. This commit adjusts
the randomization to not generate duplicate keys and cleans up the data
structure used to hold the generated keys.
@@ -39,7 +39,9 @@ import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import java.io.IOException;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@@ -204,14 +206,16 @@ public class SetSingleNodeAllocateStepTests extends AbstractStepTestCase<SetSing
public void testPerformActionAttrsRequestFails() {
int numAttrs = randomIntBetween(1, 10);
- String[][] validAttrs = new String[numAttrs][2];
+ Map<String, String> validAttributes = new HashMap<>();
for (int i = 0; i < numAttrs; i++) {
- validAttrs[i] = new String[] { randomAlphaOfLengthBetween(1, 20), randomAlphaOfLengthBetween(1, 20) };
+ validAttributes.put(randomValueOtherThanMany(validAttributes::containsKey,
+ () -> randomAlphaOfLengthBetween(1,20)), randomAlphaOfLengthBetween(1,20));
}
Settings.Builder indexSettings = settings(Version.CURRENT);
- for (String[] attr : validAttrs) {
- indexSettings.put(IndexMetaData.INDEX_ROUTING_INCLUDE_GROUP_SETTING.getKey() + attr[0], attr[1]);
- }
+ validAttributes.forEach((k, v) -> {
+ indexSettings.put(IndexMetaData.INDEX_ROUTING_INCLUDE_GROUP_SETTING.getKey() + k, v);
+
+ });
IndexMetaData indexMetaData = IndexMetaData.builder(randomAlphaOfLength(10)).settings(indexSettings)
.numberOfShards(randomIntBetween(1, 5)).numberOfReplicas(randomIntBetween(0, 5)).build();
Index index = indexMetaData.getIndex();
@@ -223,9 +227,9 @@ public class SetSingleNodeAllocateStepTests extends AbstractStepTestCase<SetSing
String nodeId = "node_id_" + i;
String nodeName = "node_" + i;
int nodePort = 9300 + i;
- String[] nodeAttr = randomFrom(validAttrs);
+ Map.Entry<String, String> nodeAttr = randomFrom(validAttributes.entrySet());
Settings nodeSettings = Settings.builder().put(validNodeSettings).put(Node.NODE_NAME_SETTING.getKey(), nodeName)
- .put(Node.NODE_ATTRIBUTES.getKey() + nodeAttr[0], nodeAttr[1]).build();
+ .put(Node.NODE_ATTRIBUTES.getKey() + nodeAttr.getKey(), nodeAttr.getValue()).build();
nodes.add(DiscoveryNode.createLocal(nodeSettings, new TransportAddress(TransportAddress.META_ADDRESS, nodePort), nodeId));
validNodeIds.add(nodeId);
}
