### Question:
FlumeBuilder { public static CommonTree parseSink(String s) throws RecognitionException { FlumeDeployParser parser = getDeployParser(s); CommonTree ast = (CommonTree) parser.sink().getTree(); return ast; }  static void setSourceFactory(SourceFactory srcFact); static void setSinkFactory(SinkFactory snkFact); static CommonTree parseSink(String s); static CommonTree parseSource(String s); static Pair<EventSource, EventSink> buildNode(Context context, File f); @SuppressWarnings("unchecked") static Map<String, Pair<String, String>> parseConf(Context ctx,
      String s); @SuppressWarnings("unchecked") static Map<String, Pair<EventSource, EventSink>> build(
      Context context, String s); static EventSource buildSource(String s); static EventSink buildSink(Context context, String s); @Deprecated static EventSink buildSink(String s); static String toLine(String name, String src, String snk); static String buildArg(CommonTree t); static Set<String> getSinkNames(); static Set<String> getDecoratorNames(); static Set<String> getSourceNames();  }### Answer:
@Ignore @Test public void testDecoChain() throws RecognitionException { String decoChain = "{ nullDeco => nullDeco => nullDeco => null}"; FlumeBuilder.parseSink(decoChain); }
@Test public void testRollSinkParse() throws FlumeSpecException, RecognitionException { String roll = "roll (2123) { null } "; FlumeBuilder.parseSink(roll); }
@Test(expected = RuntimeRecognitionException.class) public void testLetInWrongPlace() throws RecognitionException { String badsink = "{ deco1 => { let letvar := test in deco2 => [ < sink1 ? sink2> , sink3, { deco3 => sink4} ] } } "; CommonTree parse = FlumeBuilder.parseSink(badsink); LOG.info(parse.toStringTree()); }