Package org.apache.avro.specific

Source Code of org.apache.avro.specific.TestSpecificRecordBuilder

/**
* 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.specific;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import junit.framework.Assert;

import org.apache.avro.ipc.specific.Person;
import org.junit.Ignore;
import org.junit.Test;

/**
* Unit test for the SpecificRecordBuilder class.
*/
public class TestSpecificRecordBuilder {
  @Test
  public void testSpecificBuilder() {
    // Create a new builder, and leave some fields with default values empty:
    Person.Builder builder = Person.newBuilder().setName("James Gosling").setYearOfBirth(1955).setState("CA");
    Assert.assertTrue(builder.hasName());
    Assert.assertEquals("James Gosling", builder.getName().toString());
    Assert.assertTrue(builder.hasYearOfBirth());
    Assert.assertEquals(new Integer(1955), builder.getYearOfBirth());
    Assert.assertFalse(builder.hasCountry());
    Assert.assertNull(builder.getCountry());
    Assert.assertTrue(builder.hasState());
    Assert.assertEquals("CA", builder.getState().toString());
    Assert.assertFalse(builder.hasFriends());
    Assert.assertNull(builder.getFriends());
    Assert.assertFalse(builder.hasLanguages());
    Assert.assertNull(builder.getLanguages());
   
    Person person = builder.build();
    Assert.assertEquals("James Gosling", person.getName().toString());
    Assert.assertEquals(new Integer(1955), person.getYearOfBirth());
    Assert.assertEquals("US", person.getCountry().toString())// country should default to "US"
    Assert.assertEquals("CA", person.getState().toString());
    Assert.assertNotNull(person.getFriends())// friends should default to an empty list
    Assert.assertEquals(0, person.getFriends().size());
    Assert.assertNotNull(person.getLanguages()); // Languages should now be "English" and "Java"
    Assert.assertEquals(2, person.getLanguages().size());
    Assert.assertEquals("English", person.getLanguages().get(0).toString());
    Assert.assertEquals("Java", person.getLanguages().get(1).toString());
   
    // Test copy constructors:
    Assert.assertEquals(builder, Person.newBuilder(builder));
    Assert.assertEquals(person, Person.newBuilder(person).build());
   
    Person.Builder builderCopy = Person.newBuilder(person);
    Assert.assertEquals("James Gosling", builderCopy.getName().toString());
    Assert.assertEquals(new Integer(1955), builderCopy.getYearOfBirth());
    Assert.assertEquals("US", builderCopy.getCountry().toString())// country should default to "US"
    Assert.assertEquals("CA", builderCopy.getState().toString());
    Assert.assertNotNull(builderCopy.getFriends())// friends should default to an empty list
    Assert.assertEquals(0, builderCopy.getFriends().size());
   
    // Test clearing fields:
    builderCopy.clearFriends().clearCountry();
    Assert.assertFalse(builderCopy.hasFriends());
    Assert.assertFalse(builderCopy.hasCountry());
    Assert.assertNull(builderCopy.getFriends());
    Assert.assertNull(builderCopy.getCountry());
    Person person2 = builderCopy.build();
    Assert.assertNotNull(person2.getFriends());
    Assert.assertTrue(person2.getFriends().isEmpty());
  }
 
  @Test(expected=org.apache.avro.AvroRuntimeException.class)
  public void attemptToSetNonNullableFieldToNull() {
    Person.newBuilder().setName(null);
  }
 
  @Ignore
  @Test
  public void testBuilderPerformance() {
    int count = 1000000;
    List<Person> friends = new ArrayList<Person>(0);
    List<CharSequence> languages = new ArrayList<CharSequence>(Arrays.asList(new CharSequence[] { "English", "Java" }));
    long startTimeNanos = System.nanoTime();
    for (int ii = 0; ii < count; ii++) {
      Person.newBuilder().setName("James Gosling").setYearOfBirth(1955).setCountry("US").setState("CA").setFriends(friends).
        setLanguages(languages).build();
    }
    long durationNanos = System.nanoTime() - startTimeNanos;
    double durationMillis = durationNanos / 1e6d;
    System.out.println("Built " + count + " records in " + durationMillis + "ms (" +
        (count / (durationMillis / 1000d)) + " records/sec, " + (durationMillis / count) +
        "ms/record");
  }
 
  @Ignore
  @Test
  public void testBuilderPerformanceWithDefaultValues() {
    int count = 1000000;
    long startTimeNanos = System.nanoTime();
    for (int ii = 0; ii < count; ii++) {
      Person.newBuilder().setName("James Gosling").setYearOfBirth(1955).setState("CA").build();
    }
    long durationNanos = System.nanoTime() - startTimeNanos;
    double durationMillis = durationNanos / 1e6d;
    System.out.println("Built " + count + " records in " + durationMillis + "ms (" +
        (count / (durationMillis / 1000d)) + " records/sec, " + (durationMillis / count) +
        "ms/record");
  }

  @Ignore
  @Test
  @SuppressWarnings("deprecation")
  public void testManualBuildPerformance() {
    int count = 1000000;
    List<Person> friends = new ArrayList<Person>(0);
    List<CharSequence> languages = new ArrayList<CharSequence>(Arrays.asList(new CharSequence[] { "English", "Java" }));
    long startTimeNanos = System.nanoTime();
    for (int ii = 0; ii < count; ii++) {
      Person person = new Person();
      person.name = "James Gosling";
      person.year_of_birth = 1955;
      person.state = "CA";
      person.country = "US";
      person.friends = friends;
      person.languages = languages;
    }
    long durationNanos = System.nanoTime() - startTimeNanos;
    double durationMillis = durationNanos / 1e6d;
    System.out.println("Built " + count + " records in " + durationMillis + "ms (" +
        (count / (durationMillis / 1000d)) + " records/sec, " + (durationMillis / count) +
        "ms/record");
  }
}
TOP

Related Classes of org.apache.avro.specific.TestSpecificRecordBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.