From c2b4f08e3af40154b48df9e815b7bb8c3d9de7c0 Mon Sep 17 00:00:00 2001 From: Sohaib Iftikhar Date: Mon, 25 Jun 2018 15:16:01 +0200 Subject: [PATCH 1/2] improve Randomobjects::addfield logic -- reduce number of documents generated for SimulatePipelineResponse --- .../SimulateDocumentVerboseResultTests.java | 2 +- .../ingest/SimulatePipelineResponseTests.java | 2 +- .../org/elasticsearch/test/RandomObjects.java | 23 +++++++++++++------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/action/ingest/SimulateDocumentVerboseResultTests.java b/server/src/test/java/org/elasticsearch/action/ingest/SimulateDocumentVerboseResultTests.java index 5701bcc27800f..6b673c49efa0b 100644 --- a/server/src/test/java/org/elasticsearch/action/ingest/SimulateDocumentVerboseResultTests.java +++ b/server/src/test/java/org/elasticsearch/action/ingest/SimulateDocumentVerboseResultTests.java @@ -31,7 +31,7 @@ public class SimulateDocumentVerboseResultTests extends AbstractXContentTestCase { static SimulateDocumentVerboseResult createTestInstance(boolean withFailures) { - int numDocs = randomIntBetween(0, 10); + int numDocs = randomIntBetween(0, 5); List results = new ArrayList<>(); for (int i = 0; i results = new ArrayList<>(numResults); for (int i = 0; i < numResults; i++) { if (isVerbose) { diff --git a/test/framework/src/main/java/org/elasticsearch/test/RandomObjects.java b/test/framework/src/main/java/org/elasticsearch/test/RandomObjects.java index a509645495858..27c27f6f37739 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/RandomObjects.java +++ b/test/framework/src/main/java/org/elasticsearch/test/RandomObjects.java @@ -175,7 +175,7 @@ public static BytesReference randomSource(Random random, XContentType xContentTy public static BytesReference randomSource(Random random, XContentType xContentType, int minNumFields) { try (XContentBuilder builder = XContentFactory.contentBuilder(xContentType)) { builder.startObject(); - addFields(random, builder, minNumFields, 0); + addFields(random, builder, minNumFields, 0, 0); builder.endObject(); return BytesReference.bytes(builder); } catch(IOException e) { @@ -185,14 +185,21 @@ public static BytesReference randomSource(Random random, XContentType xContentTy /** * Randomly adds fields, objects, or arrays to the provided builder. The maximum depth is 5. + * @return Returns the number of fields in the document */ - private static void addFields(Random random, XContentBuilder builder, int minNumFields, int currentDepth) throws IOException { - int numFields = randomIntBetween(random, minNumFields, 10); + private static int addFields(Random random, XContentBuilder builder, int minNumFields, int currentDepth, + int currentFields) throws IOException { + int maxTotalFields = 200; + int maxFields = Math.max(minNumFields, 10 - (currentFields * 10)/maxTotalFields); // Map to range 0-10 + int numFields = randomIntBetween(random, minNumFields, maxFields); + int maxDepth = 5 - (currentFields * 5)/maxTotalFields; // Map to range 0-5 + currentFields += numFields; for (int i = 0; i < numFields; i++) { - if (currentDepth < 5 && random.nextBoolean()) { + if (currentDepth < maxDepth && random.nextBoolean()) { if (random.nextBoolean()) { builder.startObject(RandomStrings.randomAsciiOfLengthBetween(random, 6, 10)); - addFields(random, builder, minNumFields, currentDepth + 1); + currentFields = + addFields(random, builder, minNumFields, currentDepth + 1, currentFields); builder.endObject(); } else { builder.startArray(RandomStrings.randomAsciiOfLengthBetween(random, 6, 10)); @@ -205,7 +212,8 @@ private static void addFields(Random random, XContentBuilder builder, int minNum for (int j = 0; j < numElements; j++) { if (object) { builder.startObject(); - addFields(random, builder, minNumFields, 5); + currentFields = + addFields(random, builder, minNumFields, 5, currentFields); builder.endObject(); } else { builder.value(randomFieldValue(random, dataType)); @@ -215,9 +223,10 @@ private static void addFields(Random random, XContentBuilder builder, int minNum } } else { builder.field(RandomStrings.randomAsciiOfLengthBetween(random, 6, 10), - randomFieldValue(random, randomDataType(random))); + randomFieldValue(random, randomDataType(random))); } } + return currentFields; } private static int randomDataType(Random random) { From 81c1645e23b65ce677c25f0426ae14c914fad544 Mon Sep 17 00:00:00 2001 From: Sohaib Iftikhar Date: Mon, 25 Jun 2018 23:15:54 +0200 Subject: [PATCH 2/2] simplified addFields --- .../org/elasticsearch/test/RandomObjects.java | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/test/framework/src/main/java/org/elasticsearch/test/RandomObjects.java b/test/framework/src/main/java/org/elasticsearch/test/RandomObjects.java index 27c27f6f37739..06eefb7ccba14 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/RandomObjects.java +++ b/test/framework/src/main/java/org/elasticsearch/test/RandomObjects.java @@ -175,7 +175,7 @@ public static BytesReference randomSource(Random random, XContentType xContentTy public static BytesReference randomSource(Random random, XContentType xContentType, int minNumFields) { try (XContentBuilder builder = XContentFactory.contentBuilder(xContentType)) { builder.startObject(); - addFields(random, builder, minNumFields, 0, 0); + addFields(random, builder, minNumFields, 0); builder.endObject(); return BytesReference.bytes(builder); } catch(IOException e) { @@ -185,21 +185,14 @@ public static BytesReference randomSource(Random random, XContentType xContentTy /** * Randomly adds fields, objects, or arrays to the provided builder. The maximum depth is 5. - * @return Returns the number of fields in the document */ - private static int addFields(Random random, XContentBuilder builder, int minNumFields, int currentDepth, - int currentFields) throws IOException { - int maxTotalFields = 200; - int maxFields = Math.max(minNumFields, 10 - (currentFields * 10)/maxTotalFields); // Map to range 0-10 - int numFields = randomIntBetween(random, minNumFields, maxFields); - int maxDepth = 5 - (currentFields * 5)/maxTotalFields; // Map to range 0-5 - currentFields += numFields; + private static void addFields(Random random, XContentBuilder builder, int minNumFields, int currentDepth) throws IOException { + int numFields = randomIntBetween(random, minNumFields, 5); for (int i = 0; i < numFields; i++) { - if (currentDepth < maxDepth && random.nextBoolean()) { + if (currentDepth < 5 && random.nextInt(100) >= 70) { if (random.nextBoolean()) { builder.startObject(RandomStrings.randomAsciiOfLengthBetween(random, 6, 10)); - currentFields = - addFields(random, builder, minNumFields, currentDepth + 1, currentFields); + addFields(random, builder, minNumFields, currentDepth + 1); builder.endObject(); } else { builder.startArray(RandomStrings.randomAsciiOfLengthBetween(random, 6, 10)); @@ -212,8 +205,7 @@ private static int addFields(Random random, XContentBuilder builder, int minNumF for (int j = 0; j < numElements; j++) { if (object) { builder.startObject(); - currentFields = - addFields(random, builder, minNumFields, 5, currentFields); + addFields(random, builder, minNumFields, 5); builder.endObject(); } else { builder.value(randomFieldValue(random, dataType)); @@ -223,10 +215,9 @@ private static int addFields(Random random, XContentBuilder builder, int minNumF } } else { builder.field(RandomStrings.randomAsciiOfLengthBetween(random, 6, 10), - randomFieldValue(random, randomDataType(random))); + randomFieldValue(random, randomDataType(random))); } } - return currentFields; } private static int randomDataType(Random random) {