use of ui.ex1.entity in project DataflowTemplates by GoogleCloudPlatform.
the class BigQueryConvertersTest method testAvroToEntityStringIdColumn.
/**
* Tests that {@link BigQueryConverters.AvroToEntity} creates an Entity with a valid key when the
* unique name column is string.
*/
@Test
public void testAvroToEntityStringIdColumn() throws Exception {
// Create test data
List<TableFieldSchema> fields = new ArrayList<>();
fields.add(new TableFieldSchema().setName(idField).setType("STRING"));
fields.add(new TableFieldSchema().setName(shortStringField).setType("STRING"));
TableSchema bqSchema = new TableSchema().setFields(fields);
Schema avroSchema = new Schema.Parser().parse(String.format(avroSchemaTemplate, new StringBuilder().append(String.format(avroFieldTemplate, idField, "string", idFieldDesc)).append(",").append(generateShortStringField()).toString()));
GenericRecordBuilder builder = new GenericRecordBuilder(avroSchema);
builder.set(idField, idFieldValueStr);
builder.set(shortStringField, shortStringFieldValue);
Record record = builder.build();
SchemaAndRecord inputBqData = new SchemaAndRecord(record, bqSchema);
// Run the test
Entity outputEntity = converter.apply(inputBqData);
assertTrue(outputEntity.hasKey());
assertEquals(idFieldValueStr, outputEntity.getKey().getPath(0).getName());
validateMetadata(outputEntity);
}
use of ui.ex1.entity in project DataflowTemplates by GoogleCloudPlatform.
the class DatastoreConvertersTest method testCheckSameKey.
/**
* Unit test for {@link DatastoreConverters.CheckSameKey}.
*/
@Test
@Category(NeedsRunner.class)
public void testCheckSameKey() throws Exception {
Entity dupKeyEntity = Entity.newBuilder().setKey(entities.get(0).getKey()).putProperties("SomeBSProp", Value.newBuilder().setStringValue("Some BS Value").build()).build();
// copy all entities
ArrayList<Entity> testEntitiesWithConflictKey = new ArrayList<>(entities);
// Add the duplicate entity at the end of the list
testEntitiesWithConflictKey.add(dupKeyEntity);
List<String> expectedErrors = new ArrayList<>();
EntityJsonPrinter entityJsonPrinter = new EntityJsonPrinter();
for (Entity e : Arrays.asList(entities.get(0), dupKeyEntity)) {
expectedErrors.add(ErrorMessage.newBuilder().setMessage("Duplicate Datastore Key").setData(entityJsonPrinter.print(e)).build().toJson());
}
TupleTag<Entity> goodTag = new TupleTag<Entity>("entities") {
};
TupleTag<String> errorTag = new TupleTag<String>("errors") {
};
PCollectionTuple results = pipeline.apply("Create", Create.of(testEntitiesWithConflictKey)).apply("RemoveDupKeys", CheckSameKey.newBuilder().setGoodTag(goodTag).setErrorTag(errorTag).build());
PAssert.that(results.get(goodTag)).containsInAnyOrder(entities.subList(1, entities.size()));
PAssert.that(results.get(errorTag)).containsInAnyOrder(expectedErrors);
pipeline.run();
}
use of ui.ex1.entity in project DataflowTemplates by GoogleCloudPlatform.
the class DatastoreConvertersTest method testCheckNoKeyAllInvalid.
/**
* Test {@link DatastoreConverters.CheckNoKey} with only invalid entities.
*/
@Test
@Category(NeedsRunner.class)
public void testCheckNoKeyAllInvalid() throws Exception {
// Create test data
List<Entity> testEntitiesWithNoKey = new ArrayList<>();
List<String> expectedErrors = new ArrayList<>();
EntityJsonPrinter entityJsonPrinter = new EntityJsonPrinter();
for (int i = 0; i < entities.size(); i++) {
Entity noKeyEntity = Entity.newBuilder().putProperties("street", Value.newBuilder().setStringValue("Some street").build()).putProperties("number", Value.newBuilder().setIntegerValue(1L).build()).build();
testEntitiesWithNoKey.add(noKeyEntity);
expectedErrors.add(ErrorMessage.newBuilder().setMessage("Datastore Entity Without Key").setData(entityJsonPrinter.print(noKeyEntity)).build().toJson());
}
// Run the test
TupleTag<Entity> successTag = new TupleTag<Entity>("entities") {
};
TupleTag<String> failureTag = new TupleTag<String>("failures") {
};
PCollectionTuple results = pipeline.apply("Create", Create.of(testEntitiesWithNoKey)).apply("RemoveNoKeys", CheckNoKey.newBuilder().setSuccessTag(successTag).setFailureTag(failureTag).build());
// Check the results
PAssert.that(results.get(successTag)).empty();
PAssert.that(results.get(failureTag)).containsInAnyOrder(expectedErrors);
pipeline.run();
}
use of ui.ex1.entity in project DataflowTemplates by GoogleCloudPlatform.
the class DatastoreConvertersTest method testCheckNoKeyBothCorrectAndInvalid.
/**
* Test {@link DatastoreConverters.CheckNoKey} with both correct and invalid entities.
*/
@Test
@Category(NeedsRunner.class)
public void testCheckNoKeyBothCorrectAndInvalid() throws Exception {
// Create test data
List<Entity> testEntitiesWithNoKey = new ArrayList<>();
List<String> expectedErrors = new ArrayList<>();
EntityJsonPrinter entityJsonPrinter = new EntityJsonPrinter();
for (int i = 0; i < entities.size(); i++) {
Entity noKeyEntity = Entity.newBuilder().putProperties("street", Value.newBuilder().setStringValue("Some street").build()).putProperties("number", Value.newBuilder().setIntegerValue(i).build()).build();
testEntitiesWithNoKey.add(noKeyEntity);
expectedErrors.add(ErrorMessage.newBuilder().setMessage("Datastore Entity Without Key").setData(entityJsonPrinter.print(noKeyEntity)).build().toJson());
}
List<Entity> testEntities = new ArrayList<>(entities);
testEntities.addAll(testEntitiesWithNoKey);
// Run the test
TupleTag<Entity> successTag = new TupleTag<Entity>("entities") {
};
TupleTag<String> failureTag = new TupleTag<String>("failures") {
};
PCollectionTuple results = pipeline.apply("Create", Create.of(testEntities)).apply("RemoveNoKeys", CheckNoKey.newBuilder().setSuccessTag(successTag).setFailureTag(failureTag).build());
// Check the results
PAssert.that(results.get(successTag)).containsInAnyOrder(entities);
PAssert.that(results.get(failureTag)).containsInAnyOrder(expectedErrors);
pipeline.run();
}
use of ui.ex1.entity in project DataflowTemplates by GoogleCloudPlatform.
the class BigQueryConvertersTest method testAvroToEntityRecordField.
/**
* Tests that {@link BigQueryConverters.AvroToEntity} creates an Entity without a valid key when a
* field is of type Record.
*/
@Test
public void testAvroToEntityRecordField() throws Exception {
// Create test data
TableFieldSchema column = generateNestedTableFieldSchema();
List<TableFieldSchema> fields = new ArrayList<>();
fields.add(column);
TableSchema bqSchema = new TableSchema().setFields(fields);
Record record = generateNestedAvroRecord();
SchemaAndRecord inputBqData = new SchemaAndRecord(record, bqSchema);
// Run the test
Entity outputEntity = converter.apply(inputBqData);
// Assess results
String expectedCauseMessage = String.format("Column [address] of type [RECORD] not supported.");
assertTrue(!outputEntity.hasKey());
assertEquals(expectedCauseMessage, outputEntity.getPropertiesMap().get("cause").getStringValue());
assertEquals(record.toString(), outputEntity.getPropertiesMap().get("row").getStringValue());
}
Aggregations