Search in sources :

Example 21 with IndexedRecord

use of org.apache.avro.generic.IndexedRecord in project tdi-studio-se by Talend.

the class FlowVariablesProcessorTest method testProcessDataIterableSchemaNotInitialized.

/**
     * Checks {@link FlowVariablesProcessor#processDataIterable(Iterable)} throws {@link NullPointerException}
     * if {@link FlowVariablesProcessor#initSchema()} wasn't called before
     */
@Test(expected = NullPointerException.class)
public void testProcessDataIterableSchemaNotInitialized() {
    Schema mainSchema = //
    SchemaBuilder.record("Main").fields().name("name").type().stringType().noDefault().name("age").type().intType().noDefault().endRecord();
    Schema outOfBandSchema = SchemaBuilder.record("OutOfBand").fields().name("id").type().intType().noDefault().endRecord();
    Schema rootSchema = RootSchemaUtils.createRootSchema(mainSchema, outOfBandSchema);
    IndexedRecord record = new GenericData.Record(rootSchema);
    ArrayList<Object> records = new ArrayList<>();
    records.add(record);
    FlowVariablesProcessor flowVariablesProcessor = new FlowVariablesProcessor(runtimeContainer);
    flowVariablesProcessor.processDataIterable(records);
}
Also used : IndexedRecord(org.apache.avro.generic.IndexedRecord) Schema(org.apache.avro.Schema) ArrayList(java.util.ArrayList) IndexedRecord(org.apache.avro.generic.IndexedRecord) Test(org.junit.Test)

Example 22 with IndexedRecord

use of org.apache.avro.generic.IndexedRecord in project tdi-studio-se by Talend.

the class FlowVariablesReaderTest method testGetCurrentRoot.

/**
     * Checks {@link FlowVariablesReader#getCurrent()} returns Main data when
     * wrapped {@link Reader} returns Root {@link IndexedRecord} and sets Flow variables data to {@link RuntimeContainer}
     */
@Test
public void testGetCurrentRoot() throws IOException {
    Schema mainSchema = //
    SchemaBuilder.record("Main").fields().name("name").type().stringType().noDefault().name("age").type().intType().noDefault().endRecord();
    Schema outOfBandSchema = //
    SchemaBuilder.record("OutOfBand").fields().name("id").type().intType().noDefault().endRecord();
    Schema rootSchema = RootSchemaUtils.createRootSchema(mainSchema, outOfBandSchema);
    IndexedRecord mainRecord = new GenericData.Record(mainSchema);
    mainRecord.put(0, "Abraham Lincoln");
    mainRecord.put(1, 208);
    IndexedRecord outOfBandRecord = new GenericData.Record(outOfBandSchema);
    outOfBandRecord.put(0, 123);
    IndexedRecord rootRecord = new GenericData.Record(rootSchema);
    rootRecord.put(0, mainRecord);
    rootRecord.put(1, outOfBandRecord);
    Reader<IndexedRecord> wrappedReader = mock(Reader.class);
    when(wrappedReader.getCurrent()).thenReturn(rootRecord);
    FlowVariablesReader reader = new FlowVariablesReader(wrappedReader, runtimeContainer);
    Object actualData = reader.getCurrent();
    assertEquals(mainRecord, actualData);
    Object flowVariable = runtimeContainer.getComponentData("tComponent_1", "id");
    assertNotNull(flowVariable);
    assertThat(flowVariable, instanceOf(Integer.class));
    assertEquals(123, flowVariable);
    reader.close();
}
Also used : IndexedRecord(org.apache.avro.generic.IndexedRecord) Schema(org.apache.avro.Schema) IndexedRecord(org.apache.avro.generic.IndexedRecord) Test(org.junit.Test)

Example 23 with IndexedRecord

use of org.apache.avro.generic.IndexedRecord in project tdi-studio-se by Talend.

the class FlowVariablesReaderTest method testGetCurrentMain.

/**
     * Checks {@link FlowVariablesReader#getCurrent()} returns Main data without any changes when
     * wrapped {@link Reader} returns Main data
     */
@Test
public void testGetCurrentMain() throws IOException {
    Schema mainSchema = //
    SchemaBuilder.record("Main").fields().name("name").type().stringType().noDefault().name("age").type().intType().noDefault().endRecord();
    IndexedRecord mainRecord = new GenericData.Record(mainSchema);
    mainRecord.put(0, "Abraham Lincoln");
    mainRecord.put(1, 208);
    Reader<IndexedRecord> wrappedReader = mock(Reader.class);
    when(wrappedReader.getCurrent()).thenReturn(mainRecord);
    FlowVariablesReader reader = new FlowVariablesReader(wrappedReader, runtimeContainer);
    Object actualMainData = reader.getCurrent();
    assertEquals(mainRecord, actualMainData);
    reader.close();
}
Also used : IndexedRecord(org.apache.avro.generic.IndexedRecord) Schema(org.apache.avro.Schema) IndexedRecord(org.apache.avro.generic.IndexedRecord) Test(org.junit.Test)

Example 24 with IndexedRecord

use of org.apache.avro.generic.IndexedRecord in project tdi-studio-se by Talend.

the class FlowVariablesWriterTest method testGetSuccessfulWrites.

/**
     * Checks {@link FlowVariablesWriter#getSuccessfulWrites()} returns instance of {@link Iterable} with the only one
     * Main {@link IndexedRecord} unwrapped from Root record
     * and {@link RuntimeContainer} contains flow variable value after this method call
     */
@Test
public void testGetSuccessfulWrites() throws IOException {
    Schema mainSchema = //
    SchemaBuilder.record("Main").fields().name("name").type().stringType().noDefault().name("age").type().intType().noDefault().endRecord();
    Schema outOfBandSchema = //
    SchemaBuilder.record("OutOfBand").fields().name("id").type().intType().noDefault().endRecord();
    Schema rootSchema = RootSchemaUtils.createRootSchema(mainSchema, outOfBandSchema);
    IndexedRecord mainRecord = new GenericData.Record(mainSchema);
    mainRecord.put(0, "Abraham Lincoln");
    mainRecord.put(1, 208);
    IndexedRecord outOfBandRecord = new GenericData.Record(outOfBandSchema);
    outOfBandRecord.put(0, 123);
    IndexedRecord rootRecord = new GenericData.Record(rootSchema);
    rootRecord.put(0, mainRecord);
    rootRecord.put(1, outOfBandRecord);
    ArrayList<Object> records = new ArrayList<>();
    records.add(rootRecord);
    when(wrappedWriter.getSuccessfulWrites()).thenReturn(records);
    FlowVariablesWriter<Object> writer = new FlowVariablesWriter<>(wrappedWriter, runtimeContainer);
    Iterable<Object> actualDataIterable = writer.getSuccessfulWrites();
    Iterator<Object> actualDataIterator = actualDataIterable.iterator();
    assertTrue(actualDataIterator.hasNext());
    Object actualData = actualDataIterator.next();
    assertFalse(actualDataIterator.hasNext());
    assertThat(actualData, instanceOf(IndexedRecord.class));
    IndexedRecord actualMainRecord = (IndexedRecord) actualData;
    assertEquals(mainRecord, actualMainRecord);
    Object flowVariable = runtimeContainer.getComponentData("tComponent_1", "id");
    assertNotNull(flowVariable);
    assertThat(flowVariable, instanceOf(Integer.class));
    assertEquals(123, flowVariable);
    writer.close();
}
Also used : IndexedRecord(org.apache.avro.generic.IndexedRecord) Schema(org.apache.avro.Schema) ArrayList(java.util.ArrayList) IndexedRecord(org.apache.avro.generic.IndexedRecord) Test(org.junit.Test)

Aggregations

IndexedRecord (org.apache.avro.generic.IndexedRecord)24 Test (org.junit.Test)18 Schema (org.apache.avro.Schema)15 ArrayList (java.util.ArrayList)7 Date (java.util.Date)3 AvroKey (org.apache.avro.mapred.AvroKey)3 AvroValue (org.apache.avro.mapred.AvroValue)3 BigDecimal (java.math.BigDecimal)1 LinkedList (java.util.LinkedList)1 Field (org.apache.avro.Schema.Field)1