### Question:
AgentFailChainSink extends EventSink.Base { public static String genBestEffortChain(String... chain) { String body = "{ lazyOpen => { stubbornAppend => %s } } "; String spec = FailoverChainManager.genAvailableSinkSpec(body, Arrays .asList(chain)); LOG.info("Setting best effort failover chain to " + spec); return spec; } AgentFailChainSink(RELIABILITY rel, String... hosts);  AgentFailChainSink(Context context, RELIABILITY rel, String... hosts); @Override void open(); @Override void close(); @Override void append(Event e); @Override void getReports(String namePrefix, Map<String, ReportEvent> reports); static String genBestEffortChain(String... chain); static String genE2EChain(String... chain); static String genDfoChain(String... chain); static List<String> thriftifyArgs(int defaultPort, List<String> list); static SinkBuilder e2eBuilder(); static SinkBuilder dfoBuilder(); static SinkBuilder beBuilder(); @Override String getName();  }### Answer:
@Test public void testBEFailchain() throws FlumeSpecException { ReportManager.get().clear(); String spec = AgentFailChainSink.genBestEffortChain("counter(\"foo1\")", "counter(\"foo2\")", "counter(\"foo3\")"); LOG.info("best effort failchain: " + spec); EventSink snk = FlumeBuilder.buildSink(new Context(), spec); LOG.info(snk.getReport().toJson()); ReportManager.get().getReportable("foo1"); }