This is an automated email from the ASF dual-hosted git repository.

fokko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/avro.git


The following commit(s) were added to refs/heads/master by this push:
     new eb06f71  AVRO-2267 Removed copies of RandomData (#385)
eb06f71 is described below

commit eb06f71861025c9261b5ad7a09cab0c46f2ac311
Author: Thiruvalluvan M G <[email protected]>
AuthorDate: Tue Nov 20 14:57:33 2018 +0530

    AVRO-2267 Removed copies of RandomData (#385)
    
    AVRO-2267 Removed copies of RandomData
---
 lang/java/avro/pom.xml                             |   6 +-
 .../java/org/apache/avro/util}/RandomData.java     |  57 ++++++---
 .../java/org/apache/avro/GenerateBlockingData.java |   1 +
 .../test/java/org/apache/avro/TestDataFile.java    |   1 +
 .../java/org/apache/avro/TestDataFileConcat.java   |   1 +
 .../avro/file/TestIOExceptionDuringWrite.java      |   2 +-
 .../java/org/apache/avro/io/TestBinaryDecoder.java |   2 +-
 .../src/test/java/org/apache/avro/RandomData.java  | 142 ---------------------
 .../src/test/java/org/apache/avro/TestSchema.java  |   3 +-
 .../org/apache/avro/tool/CreateRandomFileTool.java |  14 +-
 .../apache/avro/tool/TrevniCreateRandomTool.java   |   4 +-
 .../apache/avro/tool/TestCreateRandomFileTool.java |  21 +--
 .../org/apache/avro/tool/TestToTrevniTool.java     |  11 +-
 .../java/org/apache/trevni/avro/RandomData.java    | 128 -------------------
 .../java/org/apache/trevni/avro/TestShredder.java  |   8 +-
 15 files changed, 87 insertions(+), 314 deletions(-)

diff --git a/lang/java/avro/pom.xml b/lang/java/avro/pom.xml
index ffa4b69..0eb3685 100644
--- a/lang/java/avro/pom.xml
+++ b/lang/java/avro/pom.xml
@@ -106,8 +106,7 @@
                 <id>interop-generate-null-codec</id>
                 <phase>generate-resources</phase>
                 <configuration>
-                  <mainClass>org.apache.avro.RandomData</mainClass>
-                  <classpathScope>test</classpathScope>
+                  <mainClass>org.apache.avro.util.RandomData</mainClass>
                   <arguments>
                     
<argument>../../../share/test/schemas/interop.avsc</argument>
                     <argument>../../../build/interop/data/java.avro</argument>
@@ -121,8 +120,7 @@
                 <id>interop-generate-deflate-codec</id>
                 <phase>generate-resources</phase>
                 <configuration>
-                  <mainClass>org.apache.avro.RandomData</mainClass>
-                  <classpathScope>test</classpathScope>
+                  <mainClass>org.apache.avro.util.RandomData</mainClass>
                   <arguments>
                     
<argument>../../../share/test/schemas/interop.avsc</argument>
                     
<argument>../../../build/interop/data/java_deflate.avro</argument>
diff --git a/lang/java/avro/src/test/java/org/apache/avro/RandomData.java 
b/lang/java/avro/src/main/java/org/apache/avro/util/RandomData.java
similarity index 72%
rename from lang/java/avro/src/test/java/org/apache/avro/RandomData.java
rename to lang/java/avro/src/main/java/org/apache/avro/util/RandomData.java
index 89a4321..b8c7c04 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/RandomData.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/util/RandomData.java
@@ -15,34 +15,51 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.avro;
+package org.apache.avro.util;
 
 import java.io.File;
 import java.nio.ByteBuffer;
-import java.util.*;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
 
+import org.apache.avro.Schema;
 import org.apache.avro.file.CodecFactory;
 import org.apache.avro.file.DataFileWriter;
 import org.apache.avro.generic.GenericArray;
 import org.apache.avro.generic.GenericData;
 import org.apache.avro.generic.GenericDatumWriter;
 import org.apache.avro.generic.GenericRecord;
-import org.apache.avro.util.Utf8;
 
 /** Generates schema data as Java objects with random values. */
 public class RandomData implements Iterable<Object> {
+  public static final String USE_DEFAULT = "use-default";
+
   private final Schema root;
   private final long seed;
   private final int count;
+  private final boolean utf8ForString;
 
   public RandomData(Schema schema, int count) {
-    this(schema, count, System.currentTimeMillis());
+    this(schema, count, false);
   }
 
   public RandomData(Schema schema, int count, long seed) {
+    this(schema, count, seed, false);
+  }
+
+  public RandomData(Schema schema, int count, boolean utf8ForString) {
+    this(schema, count, System.currentTimeMillis(), utf8ForString);
+  }
+
+  public RandomData(Schema schema, int count, long seed, boolean 
utf8ForString) {
     this.root = schema;
     this.seed = seed;
     this.count = count;
+    this.utf8ForString = utf8ForString;
   }
 
   public Iterator<Object> iterator() {
@@ -59,12 +76,16 @@ public class RandomData implements Iterable<Object> {
   }
 
   @SuppressWarnings(value="unchecked")
-  private static Object generate(Schema schema, Random random, int d) {
+  private Object generate(Schema schema, Random random, int d) {
     switch (schema.getType()) {
     case RECORD:
       GenericRecord record = new GenericData.Record(schema);
-      for (Schema.Field field : schema.getFields())
-        record.put(field.name(), generate(field.schema(), random, d+1));
+      for (Schema.Field field : schema.getFields()) {
+        Object value = (field.getObjectProp(USE_DEFAULT) == null) ?
+                        generate(field.schema(), random, d+1) :
+                        GenericData.get().getDefaultValue(field);
+        record.put(field.name(), value);
+      }
       return record;
     case ENUM:
       List<String> symbols = schema.getEnumSymbols();
@@ -72,6 +93,7 @@ public class RandomData implements Iterable<Object> {
         (schema, symbols.get(random.nextInt(symbols.size())));
     case ARRAY:
       int length = (random.nextInt(5)+2)-d;
+      @SuppressWarnings("rawtypes")
       GenericArray<Object> array =
         new GenericData.Array(length<=0?0:length, schema);
       for (int i = 0; i < length; i++)
@@ -81,7 +103,7 @@ public class RandomData implements Iterable<Object> {
       length = (random.nextInt(5)+2)-d;
       Map<Object,Object> map = new HashMap<>(length <= 0 ? 0 : length);
       for (int i = 0; i < length; i++) {
-        map.put(randomUtf8(random, 40),
+        map.put(randomString(random, 40),
                 generate(schema.getValueType(), random, d+1));
       }
       return map;
@@ -92,7 +114,7 @@ public class RandomData implements Iterable<Object> {
       byte[] bytes = new byte[schema.getFixedSize()];
       random.nextBytes(bytes);
       return new GenericData.Fixed(schema, bytes);
-    case STRING:  return randomUtf8(random, 40);
+    case STRING:  return randomString(random, 40);
     case BYTES:   return randomBytes(random, 40);
     case INT:     return random.nextInt();
     case LONG:    return random.nextLong();
@@ -104,12 +126,15 @@ public class RandomData implements Iterable<Object> {
     }
   }
 
-  private static Utf8 randomUtf8(Random rand, int maxLength) {
-    Utf8 utf8 = new Utf8().setLength(rand.nextInt(maxLength));
-    for (int i = 0; i < utf8.getLength(); i++) {
-      utf8.getBytes()[i] = (byte)('a'+rand.nextInt('z'-'a'));
+  private static final Charset UTF8 = Charset.forName("UTF-8");
+
+  private Object randomString(Random random, int maxLength) {
+    int length = random.nextInt(maxLength);
+    byte[] bytes = new byte[length];
+    for (int i = 0; i < length; i++) {
+      bytes[i] = (byte)('a'+random.nextInt('z'-'a'));
     }
-    return utf8;
+    return utf8ForString ? new Utf8(bytes) : new String(bytes, UTF8);
   }
 
   private static ByteBuffer randomBytes(Random rand, int maxLength) {
@@ -120,11 +145,11 @@ public class RandomData implements Iterable<Object> {
   }
 
   public static void main(String[] args) throws Exception {
-    if(args.length < 3 || args.length > 4) {
+    if (args.length < 3 || args.length > 4) {
       System.out.println("Usage: RandomData <schemafile> <outputfile> <count> 
[codec]");
       System.exit(-1);
     }
-    Schema sch = Schema.parse(new File(args[0]));
+    Schema sch = new Schema.Parser().parse(new File(args[0]));
     DataFileWriter<Object> writer =
       new DataFileWriter<>(new GenericDatumWriter<>());
     writer.setCodec(CodecFactory.fromString(args.length >= 4 ? args[3] : 
"null"));
diff --git 
a/lang/java/avro/src/test/java/org/apache/avro/GenerateBlockingData.java 
b/lang/java/avro/src/test/java/org/apache/avro/GenerateBlockingData.java
index d5440c2..5a9a572 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/GenerateBlockingData.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/GenerateBlockingData.java
@@ -26,6 +26,7 @@ import org.apache.avro.generic.GenericDatumWriter;
 import org.apache.avro.io.DatumWriter;
 import org.apache.avro.io.Encoder;
 import org.apache.avro.io.EncoderFactory;
+import org.apache.avro.util.RandomData;
 
 /**
  * Generates file with objects of a specific schema(that doesn't contain 
nesting
diff --git a/lang/java/avro/src/test/java/org/apache/avro/TestDataFile.java 
b/lang/java/avro/src/test/java/org/apache/avro/TestDataFile.java
index 6e2398d..d42548a 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/TestDataFile.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/TestDataFile.java
@@ -33,6 +33,7 @@ import org.apache.avro.generic.GenericData;
 import org.apache.avro.generic.GenericDatumReader;
 import org.apache.avro.generic.GenericDatumWriter;
 import org.apache.avro.io.DatumReader;
+import org.apache.avro.util.RandomData;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
diff --git 
a/lang/java/avro/src/test/java/org/apache/avro/TestDataFileConcat.java 
b/lang/java/avro/src/test/java/org/apache/avro/TestDataFileConcat.java
index dfb68fa..4312fdf 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/TestDataFileConcat.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/TestDataFileConcat.java
@@ -29,6 +29,7 @@ import org.apache.avro.file.DataFileReader;
 import org.apache.avro.file.DataFileWriter;
 import org.apache.avro.generic.GenericDatumReader;
 import org.apache.avro.generic.GenericDatumWriter;
+import org.apache.avro.util.RandomData;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
diff --git 
a/lang/java/avro/src/test/java/org/apache/avro/file/TestIOExceptionDuringWrite.java
 
b/lang/java/avro/src/test/java/org/apache/avro/file/TestIOExceptionDuringWrite.java
index 97914c4..35fdcdf 100644
--- 
a/lang/java/avro/src/test/java/org/apache/avro/file/TestIOExceptionDuringWrite.java
+++ 
b/lang/java/avro/src/test/java/org/apache/avro/file/TestIOExceptionDuringWrite.java
@@ -22,9 +22,9 @@ import static org.junit.Assert.fail;
 import java.io.IOException;
 import java.io.OutputStream;
 
-import org.apache.avro.RandomData;
 import org.apache.avro.Schema;
 import org.apache.avro.generic.GenericDatumWriter;
+import org.apache.avro.util.RandomData;
 import org.junit.Test;
 
 /*
diff --git 
a/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java 
b/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java
index 76f4df3..dd1c55a 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java
@@ -24,12 +24,12 @@ import java.util.Arrays;
 import java.util.Collection;
 
 import org.apache.avro.AvroRuntimeException;
-import org.apache.avro.RandomData;
 import org.apache.avro.Schema;
 import org.apache.avro.generic.GenericDatumReader;
 import org.apache.avro.generic.GenericDatumWriter;
 import org.apache.avro.util.ByteBufferInputStream;
 import org.apache.avro.util.ByteBufferOutputStream;
+import org.apache.avro.util.RandomData;
 import org.apache.avro.util.Utf8;
 import org.junit.Assert;
 import org.junit.BeforeClass;
diff --git a/lang/java/ipc/src/test/java/org/apache/avro/RandomData.java 
b/lang/java/ipc/src/test/java/org/apache/avro/RandomData.java
deleted file mode 100644
index 1d9d4ce..0000000
--- a/lang/java/ipc/src/test/java/org/apache/avro/RandomData.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.avro;
-
-import java.io.File;
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
-import org.apache.avro.file.DataFileWriter;
-import org.apache.avro.generic.GenericArray;
-import org.apache.avro.generic.GenericData;
-import org.apache.avro.generic.GenericDatumWriter;
-import org.apache.avro.generic.GenericRecord;
-import org.apache.avro.util.Utf8;
-
-/** Generates schema data as Java objects with random values. */
-public class RandomData implements Iterable<Object> {
-  private final Schema root;
-  private final long seed;
-  private final int count;
-
-  public RandomData(Schema schema, int count) {
-    this(schema, count, System.currentTimeMillis());
-  }
-
-  public RandomData(Schema schema, int count, long seed) {
-    this.root = schema;
-    this.seed = seed;
-    this.count = count;
-  }
-
-  public Iterator<Object> iterator() {
-    return new Iterator<Object>() {
-      private int n;
-      private Random random = new Random(seed);
-      public boolean hasNext() { return n < count; }
-      public Object next() {
-        n++;
-        return generate(root, random, 0);
-      }
-      public void remove() { throw new UnsupportedOperationException(); }
-    };
-  }
-
-  @SuppressWarnings(value="unchecked")
-  private static Object generate(Schema schema, Random random, int d) {
-    switch (schema.getType()) {
-    case RECORD:
-      GenericRecord record = new GenericData.Record(schema);
-      for (Schema.Field field : schema.getFields())
-        record.put(field.name(), generate(field.schema(), random, d+1));
-      return record;
-    case ENUM:
-      List<String> symbols = schema.getEnumSymbols();
-      return new GenericData.EnumSymbol
-        (schema, symbols.get(random.nextInt(symbols.size())));
-    case ARRAY:
-      int length = (random.nextInt(5)+2)-d;
-      GenericArray<Object> array =
-        new GenericData.Array(length<=0?0:length, schema);
-      for (int i = 0; i < length; i++)
-        array.add(generate(schema.getElementType(), random, d+1));
-      return array;
-    case MAP:
-      length = (random.nextInt(5)+2)-d;
-      Map<Object,Object> map = new HashMap<>(length <= 0 ? 0 : length);
-      for (int i = 0; i < length; i++) {
-        map.put(randomUtf8(random, 40),
-                generate(schema.getValueType(), random, d+1));
-      }
-      return map;
-    case UNION:
-      List<Schema> types = schema.getTypes();
-      return generate(types.get(random.nextInt(types.size())), random, d);
-    case FIXED:
-      byte[] bytes = new byte[schema.getFixedSize()];
-      random.nextBytes(bytes);
-      return new GenericData.Fixed(schema, bytes);
-    case STRING:  return randomUtf8(random, 40);
-    case BYTES:   return randomBytes(random, 40);
-    case INT:     return random.nextInt();
-    case LONG:    return random.nextLong();
-    case FLOAT:   return random.nextFloat();
-    case DOUBLE:  return random.nextDouble();
-    case BOOLEAN: return random.nextBoolean();
-    case NULL:    return null;
-    default: throw new RuntimeException("Unknown type: "+schema);
-    }
-  }
-
-  private static Utf8 randomUtf8(Random rand, int maxLength) {
-    Utf8 utf8 = new Utf8().setLength(rand.nextInt(maxLength));
-    for (int i = 0; i < utf8.getLength(); i++) {
-      utf8.getBytes()[i] = (byte)('a'+rand.nextInt('z'-'a'));
-    }
-    return utf8;
-  }
-
-  private static ByteBuffer randomBytes(Random rand, int maxLength) {
-    ByteBuffer bytes = ByteBuffer.allocate(rand.nextInt(maxLength));
-    bytes.limit(bytes.capacity());
-    rand.nextBytes(bytes.array());
-    return bytes;
-  }
-
-  public static void main(String[] args) throws Exception {
-    if(args.length != 3) {
-      System.out.println("Usage: RandomData <schemafile> <outputfile> 
<count>");
-      System.exit(-1);
-    }
-    Schema sch = Schema.parse(new File(args[0]));
-    DataFileWriter<Object> writer =
-      new DataFileWriter<>(new GenericDatumWriter<>())
-      .create(sch, new File(args[1]));
-    try {
-      for (Object datum : new RandomData(sch, Integer.parseInt(args[2]))) {
-        writer.append(datum);
-      }
-    } finally {
-      writer.close();
-    }
-  }
-}
diff --git a/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java 
b/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
index cc04e33..525a8b1 100644
--- a/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
+++ b/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
@@ -44,6 +44,7 @@ import org.apache.avro.io.Decoder;
 import org.apache.avro.io.DecoderFactory;
 import org.apache.avro.io.Encoder;
 import org.apache.avro.io.EncoderFactory;
+import org.apache.avro.util.RandomData;
 import org.apache.avro.util.Utf8;
 import org.junit.Rule;
 import org.junit.Test;
@@ -665,7 +666,7 @@ public class TestSchema {
     Schema schema = Schema.parse(jsonSchema);
     checkProp(schema);
     Object reuse = null;
-    for (Object datum : new RandomData(schema, COUNT)) {
+    for (Object datum : new RandomData(schema, COUNT, true)) {
 
       if (induce) {
         Schema induced = GenericData.get().induce(datum);
diff --git 
a/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java 
b/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java
index a42846d..3ea2382 100644
--- 
a/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java
+++ 
b/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java
@@ -28,7 +28,7 @@ import joptsimple.OptionSpec;
 import org.apache.avro.Schema;
 import org.apache.avro.file.DataFileWriter;
 import org.apache.avro.generic.GenericDatumWriter;
-import org.apache.trevni.avro.RandomData;
+import org.apache.avro.util.RandomData;
 
 /** Creates a file filled with randomly-generated instances of a schema. */
 public class CreateRandomFileTool implements Tool {
@@ -43,6 +43,7 @@ public class CreateRandomFileTool implements Tool {
     return "Creates a file with randomly generated instances of a schema.";
   }
 
+  @SuppressWarnings("unchecked")
   @Override
   public int run(InputStream stdin, PrintStream out, PrintStream err,
       List<String> args) throws Exception {
@@ -62,6 +63,11 @@ public class CreateRandomFileTool implements Tool {
         p.accepts("schema", "Schema")
         .withOptionalArg()
         .ofType(String.class);
+    OptionSpec<Long> seedOpt =
+        p.accepts("seed", "Seed for random")
+        .withOptionalArg()
+        .ofType(Long.class);
+
     OptionSet opts = p.parse(args.toArray(new String[0]));
     if (opts.nonOptionArguments().size() != 1) {
       err.println("Usage: outFile (filename or '-' for stdout)");
@@ -72,6 +78,7 @@ public class CreateRandomFileTool implements Tool {
 
     String schemastr = inschema.value(opts);
     String schemafile = file.value(opts);
+    Long seed = seedOpt.value(opts);
     if (schemastr == null && schemafile == null) {
         err.println("Need input schema (--schema-file) or (--schema)");
         p.printHelpOn(err);
@@ -90,10 +97,13 @@ public class CreateRandomFileTool implements Tool {
     if (countValue == null) {
       err.println("Need count (--count)");
       p.printHelpOn(err);
+      writer.close();
       return 1;
     }
 
-    for (Object datum : new RandomData(schema, countValue))
+    RandomData rd = seed == null ? new RandomData(schema, countValue) :
+      new RandomData(schema, countValue, seed);
+    for (Object datum : rd)
       writer.append(datum);
 
     writer.close();
diff --git 
a/lang/java/tools/src/main/java/org/apache/avro/tool/TrevniCreateRandomTool.java
 
b/lang/java/tools/src/main/java/org/apache/avro/tool/TrevniCreateRandomTool.java
index 6724594..03a474c 100644
--- 
a/lang/java/tools/src/main/java/org/apache/avro/tool/TrevniCreateRandomTool.java
+++ 
b/lang/java/tools/src/main/java/org/apache/avro/tool/TrevniCreateRandomTool.java
@@ -23,9 +23,9 @@ import java.io.PrintStream;
 import java.util.List;
 
 import org.apache.avro.Schema;
+import org.apache.avro.util.RandomData;
 import org.apache.trevni.ColumnFileMetaData;
 import org.apache.trevni.avro.AvroColumnWriter;
-import org.apache.trevni.avro.RandomData;
 
 /** Tool to create randomly populated Trevni file based on an Avro schema */
 public class TrevniCreateRandomTool implements Tool {
@@ -52,7 +52,7 @@ public class TrevniCreateRandomTool implements Tool {
     int count = Integer.parseInt(args.get(1));
     File outputFile = new File(args.get(2));
 
-    Schema schema = Schema.parse(schemaFile);
+    Schema schema = new Schema.Parser().parse(schemaFile);
 
     AvroColumnWriter<Object> writer =
       new AvroColumnWriter<>(schema, new ColumnFileMetaData());
diff --git 
a/lang/java/tools/src/test/java/org/apache/avro/tool/TestCreateRandomFileTool.java
 
b/lang/java/tools/src/test/java/org/apache/avro/tool/TestCreateRandomFileTool.java
index 62d6e9a..69855c6 100644
--- 
a/lang/java/tools/src/test/java/org/apache/avro/tool/TestCreateRandomFileTool.java
+++ 
b/lang/java/tools/src/test/java/org/apache/avro/tool/TestCreateRandomFileTool.java
@@ -30,7 +30,7 @@ import org.apache.avro.Schema;
 import org.apache.avro.file.DataFileReader;
 import org.apache.avro.file.DataFileStream;
 import org.apache.avro.generic.GenericDatumReader;
-import org.apache.trevni.avro.RandomData;
+import org.apache.avro.util.RandomData;
 import org.apache.trevni.TestUtil;
 
 import org.junit.After;
@@ -48,6 +48,8 @@ public class TestCreateRandomFileTool {
 
   private final Schema.Parser schemaParser = new Schema.Parser();
 
+  private static final long SEED = System.currentTimeMillis();
+
   private ByteArrayOutputStream out;
   private ByteArrayOutputStream err;
 
@@ -83,17 +85,18 @@ public class TestCreateRandomFileTool {
     args.addAll(Arrays.asList(new String[] {
         OUT_FILE.toString(),
         "--count", COUNT,
-        "--schema-file", SCHEMA_FILE.toString()
+        "--schema-file", SCHEMA_FILE.toString(),
+        "--seed", Long.toString(SEED)
         }));
     args.addAll(Arrays.asList(extraArgs));
     run(args);
 
     DataFileReader<Object> reader =
-      new DataFileReader(OUT_FILE, new GenericDatumReader<>());
+      new DataFileReader<Object>(OUT_FILE, new GenericDatumReader<>());
 
     Iterator<Object> found = reader.iterator();
     for (Object expected :
-           new RandomData(schemaParser.parse(SCHEMA_FILE), 
Integer.parseInt(COUNT)))
+           new RandomData(schemaParser.parse(SCHEMA_FILE), 
Integer.parseInt(COUNT), SEED))
       assertEquals(expected, found.next());
 
     reader.close();
@@ -103,7 +106,8 @@ public class TestCreateRandomFileTool {
     ArrayList<String> args = new ArrayList<>();
     args.addAll(Arrays.asList(new String[] {
             OUT_FILE.toString(),
-            "--schema-file", SCHEMA_FILE.toString()
+            "--schema-file", SCHEMA_FILE.toString(),
+            "--seed", Long.toString(SEED)
     }));
     args.addAll(Arrays.asList(extraArgs));
     run(args);
@@ -129,17 +133,18 @@ public class TestCreateRandomFileTool {
   public void testStdOut() throws Exception {
     TestUtil.resetRandomSeed();
     run(Arrays.asList(new String[]
-            { "-", "--count", COUNT, "--schema-file", SCHEMA_FILE.toString() 
}));
+            { "-", "--count", COUNT, "--schema-file", SCHEMA_FILE.toString(),
+              "--seed", Long.toString(SEED) }));
 
     byte[] file = out.toByteArray();
 
     DataFileStream<Object> reader =
-        new DataFileStream(new ByteArrayInputStream(file),
+        new DataFileStream<Object>(new ByteArrayInputStream(file),
                            new GenericDatumReader<>());
 
     Iterator<Object> found = reader.iterator();
     for (Object expected :
-           new RandomData(schemaParser.parse(SCHEMA_FILE), 
Integer.parseInt(COUNT)))
+           new RandomData(schemaParser.parse(SCHEMA_FILE), 
Integer.parseInt(COUNT), SEED))
       assertEquals(expected, found.next());
 
     reader.close();
diff --git 
a/lang/java/tools/src/test/java/org/apache/avro/tool/TestToTrevniTool.java 
b/lang/java/tools/src/test/java/org/apache/avro/tool/TestToTrevniTool.java
index 980885f..7c222c4 100644
--- a/lang/java/tools/src/test/java/org/apache/avro/tool/TestToTrevniTool.java
+++ b/lang/java/tools/src/test/java/org/apache/avro/tool/TestToTrevniTool.java
@@ -26,13 +26,14 @@ import java.util.Iterator;
 import org.apache.avro.Schema;
 import org.apache.avro.file.DataFileWriter;
 import org.apache.avro.generic.GenericDatumWriter;
+import org.apache.avro.util.RandomData;
 import org.apache.trevni.avro.AvroColumnReader;
-import org.apache.trevni.avro.RandomData;
-
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
 
 public class TestToTrevniTool {
+  private static final long SEED = System.currentTimeMillis();
+
   private static final int COUNT =
     Integer.parseInt(System.getProperty("test.count", "200"));
   private static final File DIR = new File("/tmp");
@@ -50,12 +51,12 @@ public class TestToTrevniTool {
 
   @Test
   public void test() throws Exception {
-    Schema schema = Schema.parse(SCHEMA_FILE);
+    Schema schema = new Schema.Parser().parse(SCHEMA_FILE);
 
     DataFileWriter<Object> writer =
       new DataFileWriter<>(new GenericDatumWriter<>());
     writer.create(schema, Util.createFromFS(AVRO_FILE.toString()));
-    for (Object datum : new RandomData(schema, COUNT))
+    for (Object datum : new RandomData(schema, COUNT, SEED))
       writer.append(datum);
     writer.close();
 
@@ -64,7 +65,7 @@ public class TestToTrevniTool {
     AvroColumnReader<Object> reader =
       new AvroColumnReader<>(new AvroColumnReader.Params(TREVNI_FILE));
     Iterator<Object> found = reader.iterator();
-    for (Object expected : new RandomData(schema, COUNT))
+    for (Object expected : new RandomData(schema, COUNT, SEED))
       assertEquals(expected, found.next());
     reader.close();
   }
diff --git 
a/lang/java/trevni/avro/src/test/java/org/apache/trevni/avro/RandomData.java 
b/lang/java/trevni/avro/src/test/java/org/apache/trevni/avro/RandomData.java
deleted file mode 100644
index 2426d89..0000000
--- a/lang/java/trevni/avro/src/test/java/org/apache/trevni/avro/RandomData.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.trevni.avro;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
-import org.apache.avro.Schema;
-import org.apache.avro.file.DataFileWriter;
-import org.apache.avro.generic.GenericArray;
-import org.apache.avro.generic.GenericData;
-import org.apache.avro.generic.GenericDatumWriter;
-import org.apache.avro.generic.GenericRecord;
-
-import org.apache.trevni.TestUtil;
-
-/** Generates schema data as Java objects with random values. */
-public class RandomData implements Iterable<Object> {
-  public static final String USE_DEFAULT = "use-default";
-
-  private final Schema root;
-  private final int count;
-
-  public RandomData(Schema schema, int count) {
-    this.root = schema;
-    this.count = count;
-  }
-
-  public Iterator<Object> iterator() {
-    return new Iterator<Object>() {
-      private int n;
-      private Random random = TestUtil.createRandom();
-      public boolean hasNext() { return n < count; }
-      public Object next() {
-        n++;
-        return generate(root, random, 0);
-      }
-      public void remove() { throw new UnsupportedOperationException(); }
-    };
-  }
-
-  @SuppressWarnings(value="unchecked")
-  private static Object generate(Schema schema, Random random, int d) {
-    switch (schema.getType()) {
-    case RECORD:
-      GenericRecord record = new GenericData.Record(schema);
-      for (Schema.Field field : schema.getFields()) {
-        Object value = (field.getObjectProp(USE_DEFAULT) == null)
-          ? generate(field.schema(), random, d+1)
-          : GenericData.get().getDefaultValue(field);
-        record.put(field.name(), value);
-      }
-      return record;
-    case ENUM:
-      List<String> symbols = schema.getEnumSymbols();
-      return new GenericData.EnumSymbol
-        (schema, symbols.get(random.nextInt(symbols.size())));
-    case ARRAY:
-      int length = (random.nextInt(5)+2)-d;
-      GenericArray<Object> array =
-        new GenericData.Array(length<=0?0:length, schema);
-      for (int i = 0; i < length; i++)
-        array.add(generate(schema.getElementType(), random, d+1));
-      return array;
-    case MAP:
-      length = (random.nextInt(5)+2)-d;
-      Map<Object,Object> map = new HashMap<>(length <= 0 ? 0 : length);
-      for (int i = 0; i < length; i++) {
-        map.put(TestUtil.randomString(random),
-                generate(schema.getValueType(), random, d+1));
-      }
-      return map;
-    case UNION:
-      List<Schema> types = schema.getTypes();
-      return generate(types.get(random.nextInt(types.size())), random, d);
-    case FIXED:
-      byte[] bytes = new byte[schema.getFixedSize()];
-      random.nextBytes(bytes);
-      return new GenericData.Fixed(schema, bytes);
-    case STRING:  return TestUtil.randomString(random);
-    case BYTES:   return TestUtil.randomBytes(random);
-    case INT:     return random.nextInt();
-    case LONG:    return random.nextLong();
-    case FLOAT:   return random.nextFloat();
-    case DOUBLE:  return random.nextDouble();
-    case BOOLEAN: return random.nextBoolean();
-    case NULL:    return null;
-    default: throw new RuntimeException("Unknown type: "+schema);
-    }
-  }
-
-  public static void main(String[] args) throws Exception {
-    if(args.length != 3) {
-      System.out.println("Usage: RandomData <schemafile> <outputfile> 
<count>");
-      System.exit(-1);
-    }
-    Schema sch = Schema.parse(new File(args[0]));
-    DataFileWriter<Object> writer =
-      new DataFileWriter<>(new GenericDatumWriter<>())
-      .create(sch, new File(args[1]));
-    try {
-      for (Object datum : new RandomData(sch, Integer.parseInt(args[2]))) {
-        writer.append(datum);
-      }
-    } finally {
-      writer.close();
-    }
-  }
-}
diff --git 
a/lang/java/trevni/avro/src/test/java/org/apache/trevni/avro/TestShredder.java 
b/lang/java/trevni/avro/src/test/java/org/apache/trevni/avro/TestShredder.java
index 39d138e..62d58ac 100644
--- 
a/lang/java/trevni/avro/src/test/java/org/apache/trevni/avro/TestShredder.java
+++ 
b/lang/java/trevni/avro/src/test/java/org/apache/trevni/avro/TestShredder.java
@@ -24,13 +24,13 @@ import java.util.Arrays;
 import org.apache.trevni.ValueType;
 import org.apache.trevni.ColumnMetaData;
 import org.apache.trevni.ColumnFileMetaData;
-
 import org.apache.avro.Schema;
-
+import org.apache.avro.util.RandomData;
 import org.junit.Test;
 import static org.junit.Assert.*;
 
 public class TestShredder {
+  private static final long SEED = System.currentTimeMillis();
 
   private static final int COUNT = 100;
   private static final File FILE = new File("target", "test.trv");
@@ -257,7 +257,7 @@ public class TestShredder {
     AvroColumnWriter<Object> writer =
       new AvroColumnWriter<>(schema, new ColumnFileMetaData());
     int count = 0;
-    for (Object datum : new RandomData(schema, COUNT)) {
+    for (Object datum : new RandomData(schema, COUNT, SEED)) {
       //System.out.println("datum="+datum);
       writer.write(datum);
     }
@@ -268,7 +268,7 @@ public class TestShredder {
     AvroColumnReader<Object> reader =
       new AvroColumnReader<>(new AvroColumnReader.Params(FILE)
                                    .setSchema(schema));
-    for (Object expected : new RandomData(schema, COUNT))
+    for (Object expected : new RandomData(schema, COUNT, SEED))
       assertEquals(expected, reader.next());
     reader.close();
   }

Reply via email to