/** * Creates a matcher that matches if the examined {@link DisplayData.Item} contains a key with the * specified value. */ public static Matcher<DisplayData.Item> hasKey(String key) { return hasKey(is(key)); }
/** * Creates a matcher that matches if the examined {@link DisplayData} contains an item with the * specified key. */ public static Matcher<DisplayData> hasDisplayItem(String key) { return hasDisplayItem(hasKey(key)); }
@Test public void testTypeMappings() { DisplayData data = DisplayData.from( new HasDisplayData() { @Override public void populateDisplayData(DisplayData.Builder builder) { builder .add(DisplayData.item("string", "foobar")) .add(DisplayData.item("integer", 123)) .add(DisplayData.item("float", 2.34)) .add(DisplayData.item("boolean", true)) .add(DisplayData.item("java_class", DisplayDataTest.class)) .add(DisplayData.item("timestamp", Instant.now())) .add(DisplayData.item("duration", Duration.standardHours(1))); } }); Collection<Item> items = data.items(); assertThat(items, hasItem(allOf(hasKey("string"), hasType(DisplayData.Type.STRING)))); assertThat(items, hasItem(allOf(hasKey("integer"), hasType(DisplayData.Type.INTEGER)))); assertThat(items, hasItem(allOf(hasKey("float"), hasType(DisplayData.Type.FLOAT)))); assertThat(items, hasItem(allOf(hasKey("boolean"), hasType(DisplayData.Type.BOOLEAN)))); assertThat(items, hasItem(allOf(hasKey("java_class"), hasType(DisplayData.Type.JAVA_CLASS)))); assertThat(items, hasItem(allOf(hasKey("timestamp"), hasType(DisplayData.Type.TIMESTAMP)))); assertThat(items, hasItem(allOf(hasKey("duration"), hasType(DisplayData.Type.DURATION)))); }
@Test public void testContextProperlyReset() { final HasDisplayData subComponent = new HasDisplayData() { @Override public void populateDisplayData(DisplayData.Builder builder) { builder.add(DisplayData.item("foo", "bar")); } }; HasDisplayData component = new HasDisplayData() { @Override public void populateDisplayData(DisplayData.Builder builder) { builder.include("p", subComponent).add(DisplayData.item("alpha", "bravo")); } }; DisplayData data = DisplayData.from(component); assertThat(data.items(), hasItem(allOf(hasKey("alpha"), hasNamespace(component.getClass())))); }
private static Matcher<DisplayData> hasDisplayItem( String key, DisplayData.Type type, Object value) { DisplayData.FormattedItemValue formattedValue = type.format(value); return hasDisplayItem( allOf(hasKey(key), hasType(type), hasValue(formattedValue.getLongValue()))); }
@Test public void testStaticValueProviderDate() { final Instant value = Instant.now(); DisplayData data = DisplayData.from( new HasDisplayData() { @Override public void populateDisplayData(DisplayData.Builder builder) { builder.add(DisplayData.item("foo", StaticValueProvider.of(value))); } }); @SuppressWarnings("unchecked") DisplayData.Item item = (DisplayData.Item) data.items().toArray()[0]; @SuppressWarnings("unchecked") Matcher<Item> matchesAllOf = allOf( hasKey("foo"), hasType(DisplayData.Type.TIMESTAMP), hasValue(ISO_FORMATTER.print(value))); assertThat(item, matchesAllOf); }
@Test public void testDisplayDataIncludedForDisjointInterfaceHierarchies() { FooOptions fooOptions = PipelineOptionsFactory.as(FooOptions.class); fooOptions.setFoo("foo"); BarOptions barOptions = fooOptions.as(BarOptions.class); barOptions.setBar("bar"); DisplayData data = DisplayData.from(barOptions); assertThat(data, hasDisplayItem(allOf(hasKey("foo"), hasNamespace(FooOptions.class)))); assertThat(data, hasDisplayItem(allOf(hasKey("bar"), hasNamespace(BarOptions.class)))); }
@Test public void testDisplayDataExcludesUnspecifiedProperties() { Window<?> onlyHasAccumulationMode = Window.configure().discardingFiredPanes(); assertThat( DisplayData.from(onlyHasAccumulationMode), not( hasDisplayItem( hasKey( isOneOf( "windowFn", "trigger", "timestampCombiner", "allowedLateness", "closingBehavior"))))); Window<?> noAccumulationMode = Window.into(new GlobalWindows()); assertThat( DisplayData.from(noAccumulationMode), not(hasDisplayItem(hasKey("accumulationMode")))); }
@Test public void testDisplayDataInheritanceNamespace() { ExtendsBaseOptions options = PipelineOptionsFactory.as(ExtendsBaseOptions.class); options.setFoo("bar"); DisplayData displayData = DisplayData.from(options); assertThat( displayData, hasDisplayItem( allOf(hasKey("foo"), hasValue("bar"), hasNamespace(ExtendsBaseOptions.class)))); }
@Test public void testDoFnDisplayData() { DoFn<String, String> fn = new DoFn<String, String>() { @ProcessElement public void processElement(ProcessContext c) {} @Override public void populateDisplayData(Builder builder) { builder.add(DisplayData.item("doFnMetadata", "bar")); } }; SingleOutput<String, String> parDo = ParDo.of(fn); DisplayData displayData = DisplayData.from(parDo); assertThat( displayData, hasDisplayItem( allOf( hasKey("fn"), hasType(DisplayData.Type.JAVA_CLASS), DisplayDataMatchers.hasValue(fn.getClass().getName())))); assertThat(displayData, includesDisplayDataFor("fn", fn)); }
@Test public void testItemProperties() { final Instant value = Instant.now(); DisplayData data = DisplayData.from( new HasDisplayData() { @Override public void populateDisplayData(DisplayData.Builder builder) { builder.add( DisplayData.item("now", value) .withLabel("the current instant") .withLinkUrl("http://time.gov") .withNamespace(DisplayDataTest.class)); } }); @SuppressWarnings("unchecked") DisplayData.Item item = (DisplayData.Item) data.items().toArray()[0]; @SuppressWarnings("unchecked") Matcher<Item> matchesAllOf = allOf( hasNamespace(DisplayDataTest.class), hasKey("now"), hasType(DisplayData.Type.TIMESTAMP), hasValue(ISO_FORMATTER.print(value)), hasShortValue(nullValue(String.class)), hasLabel("the current instant"), hasUrl(is("http://time.gov"))); assertThat(item, matchesAllOf); }
everyItem( allOf( hasKey(not(isEmptyOrNullString())), hasNamespace( Matchers.<Class<?>>isOneOf(
@Test public void testPopulateDisplayData() { DisplayData displayData = DisplayData.from( config.withProjectId(PROJECT_ID).withInstanceId(INSTANCE_ID).withTableId(TABLE_ID) ::populateDisplayData); assertThat( displayData, hasDisplayItem( allOf( hasKey("projectId"), hasLabel("Bigtable Project Id"), hasValue(PROJECT_ID.get())))); assertThat( displayData, hasDisplayItem( allOf( hasKey("instanceId"), hasLabel("Bigtable Instance Id"), hasValue(INSTANCE_ID.get())))); assertThat( displayData, hasDisplayItem( allOf(hasKey("tableId"), hasLabel("Bigtable Table Id"), hasValue(TABLE_ID.get())))); }
@Test public void testDisplayDataItemProperties() { PipelineOptions options = PipelineOptionsFactory.create(); options.setTempLocation("myTemp"); DisplayData displayData = DisplayData.from(options); assertThat( displayData, hasDisplayItem( allOf( hasKey("tempLocation"), hasType(DisplayData.Type.STRING), hasValue("myTemp"), hasNamespace(PipelineOptions.class)))); }
@Test public void testAddIfNotNull() { DisplayData data = DisplayData.from( new HasDisplayData() { @Override public void populateDisplayData(Builder builder) { builder .addIfNotNull(DisplayData.item("nullString", (String) null)) .addIfNotNull(DisplayData.item("nullVPString", (ValueProvider<String>) null)) .addIfNotNull(DisplayData.item("nullierVPString", StaticValueProvider.of(null))) .addIfNotNull(DisplayData.item("notNullString", "foo")) .addIfNotNull(DisplayData.item("nullLong", (Long) null)) .addIfNotNull(DisplayData.item("notNullLong", 1234L)) .addIfNotNull(DisplayData.item("nullDouble", (Double) null)) .addIfNotNull(DisplayData.item("notNullDouble", 123.4)) .addIfNotNull(DisplayData.item("nullBoolean", (Boolean) null)) .addIfNotNull(DisplayData.item("notNullBoolean", true)) .addIfNotNull(DisplayData.item("nullInstant", (Instant) null)) .addIfNotNull(DisplayData.item("notNullInstant", Instant.now())) .addIfNotNull(DisplayData.item("nullDuration", (Duration) null)) .addIfNotNull(DisplayData.item("notNullDuration", Duration.ZERO)) .addIfNotNull(DisplayData.item("nullClass", (Class<?>) null)) .addIfNotNull(DisplayData.item("notNullClass", DisplayDataTest.class)); } }); assertThat(data.items(), hasSize(7)); assertThat(data.items(), everyItem(hasKey(startsWith("notNull")))); }
assertThat(data.items(), everyItem(hasKey(startsWith("notDefault"))));
hasDisplayItem( allOf( hasKey("projectId"), hasLabel("Bigtable Project Id"), hasValue("RuntimeValueProvider{propertyName=bigtableProject, default=null}")))); hasDisplayItem( allOf( hasKey("instanceId"), hasLabel("Bigtable Instance Id"), hasValue("RuntimeValueProvider{propertyName=bigtableInstanceId, default=null}")))); hasDisplayItem( allOf( hasKey("tableId"), hasLabel("Bigtable Table Id"), hasValue("RuntimeValueProvider{propertyName=bigtableTableId, default=null}"))));
@Test public void testReadingDisplayData() { RowFilter rowFilter = RowFilter.newBuilder().setRowKeyRegexFilter(ByteString.copyFromUtf8("foo.*")).build(); ByteKeyRange keyRange = ByteKeyRange.ALL_KEYS.withEndKey(ByteKey.of(0xab, 0xcd)); BigtableIO.Read read = BigtableIO.read() .withBigtableOptions(BIGTABLE_OPTIONS) .withTableId("fooTable") .withRowFilter(rowFilter) .withKeyRange(keyRange); DisplayData displayData = DisplayData.from(read); assertThat( displayData, hasDisplayItem( allOf(hasKey("tableId"), hasLabel("Bigtable Table Id"), hasValue("fooTable")))); assertThat(displayData, hasDisplayItem("rowFilter", rowFilter.toString())); assertThat(displayData, hasDisplayItem("keyRange 0", keyRange.toString())); // BigtableIO adds user-agent to options; assert only on key and not value. assertThat(displayData, hasDisplayItem("bigtableOptions")); }