/**
   * Test with a distributed execution with explicit colocation of two functions end up on the same
   * container.
   */
  @Test
  public void testSimpleDistributedColocate() throws Exception {
    assumeTrue(SC_OK);
    assumeTrue(getTesterType() == StreamsContext.Type.DISTRIBUTED_TESTER);

    Topology t = newTopology();

    TStream<String> sa = t.strings("a");
    TStream<String> sb = t.strings("b");

    sa = sa.transform(IsolateTest.getContainerId());
    sb = sb.transform(IsolateTest.getContainerId());

    sa.colocate(sb);

    sa = sa.isolate().filter(new AllowAll<String>());
    sb = sb.isolate().filter(new AllowAll<String>());

    sa = sa.union(sb);

    Condition<List<String>> pes = t.getTester().stringContents(sa, "");

    Condition<Long> tc = t.getTester().tupleCount(sa, 2);

    complete(t.getTester(), tc, 10, TimeUnit.SECONDS);

    Set<String> singlePe = new HashSet<>(pes.getResult());

    assertTrue(pes.getResult().toString(), singlePe.size() == 1);
  }
  @Test
  public void testNonplaceable() {
    assumeTrue(isMainRun());
    Topology t = newTopology();
    TStream<String> s1 = t.strings("3");
    TStream<String> s2 = t.strings("3");

    assertFalse(s1.union(s2).isPlaceable());
    assertFalse(s1.isolate().isPlaceable());

    TStream<String> sp = s1.parallel(3);
    assertFalse(sp.isPlaceable());
    assertFalse(sp.endParallel().isPlaceable());
  }