Package org.kitesdk.morphline.protobuf

Source Code of org.kitesdk.morphline.protobuf.ProtobufMorphlineTest

/*
* Copyright 2013 Cloudera Inc.
*
* Licensed 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.kitesdk.morphline.protobuf;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;
import org.kitesdk.morphline.api.AbstractMorphlineTest;
import org.kitesdk.morphline.api.Record;
import org.kitesdk.morphline.base.Fields;
import org.kitesdk.morphline.protobuf.Protos.Complex;
import org.kitesdk.morphline.protobuf.Protos.Complex.Link;
import org.kitesdk.morphline.protobuf.Protos.Complex.Name;
import org.kitesdk.morphline.protobuf.Protos.Complex.Type;
import org.kitesdk.morphline.protobuf.Protos.RepeatedLongs;

public class ProtobufMorphlineTest extends AbstractMorphlineTest {

  private static final List<Long> LIST_OF_LONGS = Arrays.asList(1l, 10l, 100l, 1000l, 10000l, 100000l);
  private static RepeatedLongs repeatedLongs;
  private static Complex complex;

  private static byte[] nameBytes;
  private static byte[] link1Bytes;
  private static byte[] link2Bytes;

  @BeforeClass
  public static void prepareInputExtractProtoPaths() {

    Name.Builder nameBuilder = Complex.Name.newBuilder();
    nameBuilder.setFloatVal(5f).setIntVal(100).setLongVal(5000l);
    nameBuilder.addAllStringVal(Arrays.asList("All", "you", "need", "is", "money"));
    nameBuilder.setRepeatedLong(RepeatedLongs.newBuilder().addAllLongVal(LIST_OF_LONGS));
    Name name = nameBuilder.build();
    Link link1 = Link.newBuilder().addLanguage("CZ").addLanguage("EN-US").setUrl("http://google.com").build();
    Link link2 = Link.newBuilder().addLanguage("RU").setUrl("https://vk.com/").build();

    Complex.Builder complexBuilder = Complex.newBuilder();
    complexBuilder.setDocId(5);
    complexBuilder.setName(name);
    complexBuilder.addLink(link1);
    complexBuilder.addLink(link2);
    complexBuilder.setType(Type.UPDATE);
    complex = complexBuilder.build();

    nameBytes = name.toByteArray();
    link1Bytes = link1.toByteArray();
    link2Bytes = link2.toByteArray();
  }

  @BeforeClass
  public static void prepareInputReadProto() {
    RepeatedLongs.Builder repeatedLongsBuilder = RepeatedLongs.newBuilder();
    repeatedLongsBuilder.addAllLongVal(LIST_OF_LONGS);
    repeatedLongs = repeatedLongsBuilder.build();
  }

  @Test
  public void testExtractProtoPaths() throws Exception {
    morphline = createMorphline("test-morphlines/extractProtoPaths");
    InputStream in = new ByteArrayInputStream(complex.toByteArray());
    Record record = new Record();
    record.put(Fields.ATTACHMENT_BODY, in);

    startSession();
    assertEquals(1, collector.getNumStartEvents());
    assertTrue(morphline.process(record));
    in.close();
    assertEquals(1, collector.getRecords().size());

    Record firstRecord = collector.getFirstRecord();
    assertEquals(Arrays.asList(complex.getDocId()), firstRecord.get("docId"));
    assertArrayEquals(nameBytes, (byte[]) firstRecord.getFirstValue("name"));
    assertEquals(Arrays.asList(complex.getName().getIntVal()), firstRecord.get("intVal"));
    assertEquals(Arrays.asList(complex.getName().getLongVal()), firstRecord.get("longVal"));
    assertFalse(firstRecord.getFields().containsKey("doubleVal"));
    assertEquals(Arrays.asList(complex.getName().getFloatVal()), firstRecord.get("floatVal"));
    assertEquals(complex.getName().getStringValList(), firstRecord.get("stringVals"));
    assertEquals(LIST_OF_LONGS, firstRecord.get("longVals"));
    assertArrayEquals(link1Bytes, (byte[]) firstRecord.get("links").get(0));
    assertArrayEquals(link2Bytes, (byte[]) firstRecord.get("links").get(1));
    assertEquals(Arrays.asList("CZ", "EN-US", "RU"), firstRecord.get("languages"));
    assertEquals(Arrays.asList("http://google.com", "https://vk.com/"), firstRecord.get("urls"));
    assertEquals(Arrays.asList(Type.UPDATE.name()), firstRecord.get("type"));
  }

  @Test
  public void testReadProto() throws Exception {
    morphline = createMorphline("test-morphlines/readProto");
    for (int j = 0; j < 3; j++) { // also test reuse of objects and low level
                                  // avro buffers
      InputStream in = new ByteArrayInputStream(repeatedLongs.toByteArray());
      Record record = new Record();
      record.put(Fields.ATTACHMENT_BODY, in);

      collector.reset();
      startSession();
      assertEquals(1, collector.getNumStartEvents());
      assertTrue(morphline.process(record));
      in.close();

      Iterator<Record> iter = collector.getRecords().iterator();

      assertTrue(iter.hasNext());

      assertEquals(repeatedLongs, iter.next().getFirstValue(Fields.ATTACHMENT_BODY));
      assertFalse(iter.hasNext());
    }
  }
}
TOP

Related Classes of org.kitesdk.morphline.protobuf.ProtobufMorphlineTest

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.