public static DoFnInstanceManager singleInstance(DoFnInfo<?, ?> info) {
    return new SingleInstanceManager(info);
  }
@Test
  public void testInstanceIgnoresAbort() throws Exception {
    DoFnInfo<?, ?> info =
        DoFnInfo.forFn(
            initialFn,
            WindowingStrategy.globalDefault(),
            null /* side input views */,
            null /* input coder */,
            new TupleTag<>(PropertyNames.OUTPUT) /* main output id */,
            DoFnSchemaInformation.create(),
            Collections.emptyMap());

    DoFnInstanceManager mgr = DoFnInstanceManagers.singleInstance(info);
    mgr.abort(mgr.get());
    // TestFn#teardown would fail the test after multiple calls
    mgr.abort(mgr.get());
    // The returned info is still the initial info
    assertThat(mgr.get(), Matchers.<DoFnInfo<?, ?>>theInstance(info));
    assertThat(mgr.get().getDoFn(), theInstance(initialFn));
  }