private void runAssertion(long timestamp) {
    String[] fields = "engineURI,statementName".split(",");

    assertEquals(4, listener.getNewDataList().size());
    EventBean[] received = listener.getNewDataListFlattened();

    EPAssertionUtil.assertProps(received[0], fields, new Object[] {"MyURI", "cpuStmtOne"});
    EPAssertionUtil.assertProps(received[1], fields, new Object[] {"MyURI", "cpuStmtTwo"});
    EPAssertionUtil.assertProps(received[2], fields, new Object[] {"MyURI", "wallStmtThree"});
    EPAssertionUtil.assertProps(received[3], fields, new Object[] {"MyURI", "wallStmtFour"});

    long cpuOne = (Long) received[0].get("cpuTime");
    long cpuTwo = (Long) received[1].get("cpuTime");
    long wallOne = (Long) received[2].get("wallTime");
    long wallTwo = (Long) received[3].get("wallTime");

    assertTrue("cpuOne=" + cpuOne, cpuOne > cpuGoalOneNano);
    assertTrue("cpuTwo=" + cpuTwo, cpuTwo > cpuGoalTwoNano);
    assertTrue("wallOne=" + wallOne, (wallOne + 50) > wallGoalOneMsec);
    assertTrue("wallTwo=" + wallTwo, (wallTwo + 50) > wallGoalTwoMsec);

    for (int i = 0; i < 4; i++) {
      assertEquals(1L, received[i].get("numOutputIStream"));
      assertEquals(0L, received[i].get("numOutputRStream"));
      assertEquals(timestamp, received[i].get("timestamp"));
    }

    listener.reset();
  }
  public void testNamedWindowAndViewShare() throws Exception {
    epService = EPServiceProviderManager.getDefaultProvider(getConfig(-1, 1000, false));
    epService.initialize();

    epService.getEPRuntime().sendEvent(new CurrentTimeEvent(0));
    epService
        .getEPAdministrator()
        .createEPL(
            "@Name('0') create schema StatementMetric as " + StatementMetric.class.getName());
    epService
        .getEPAdministrator()
        .createEPL(
            "@Name('A') create window MyWindow.std:lastevent() as select * from SupportBean");
    epService
        .getEPAdministrator()
        .createEPL("@Name('B1') insert into MyWindow select * from SupportBean");
    epService
        .getEPAdministrator()
        .createEPL("@Name('B2') insert into MyWindow select * from SupportBean");
    epService.getEPAdministrator().createEPL("@Name('C') select sum(intPrimitive) from MyWindow");
    epService
        .getEPAdministrator()
        .createEPL("@Name('D') select sum(w1.intPrimitive) from MyWindow w1, MyWindow w2");

    String appModuleTwo =
        "@Name('W') create window SupportBeanWindow.win:keepall() as SupportBean;"
            + ""
            + "@Name('M') on SupportBean oe\n"
            + "  merge SupportBeanWindow pw\n"
            + "  where pw.theString = oe.theString\n"
            + "  when not matched \n"
            + "    then insert select *\n"
            + "  when matched and oe.intPrimitive=1\n"
            + "    then delete\n"
            + "  when matched\n"
            + "    then update set pw.intPrimitive = oe.intPrimitive";
    epService.getEPAdministrator().getDeploymentAdmin().parseDeploy(appModuleTwo, null, null, null);

    EPStatement stmt =
        epService.getEPAdministrator().createEPL("@Name('X') select * from StatementMetric");
    stmt.addListener(listener);
    String fields[] = "statementName,numInput".split(",");

    epService.getEPRuntime().sendEvent(new SupportBean("E1", 1));
    epService.getEPRuntime().sendEvent(new CurrentTimeEvent(1000));
    EventBean[] received =
        ArrayHandlingUtil.reorder("statementName", listener.getNewDataListFlattened());
    for (EventBean theEvent : received) {
      System.out.println(theEvent.get("statementName") + " = " + theEvent.get("numInput"));
    }
    EPAssertionUtil.assertPropsPerRow(
        received,
        fields,
        new Object[][] {
          {"A", 2L}, {"B1", 1L}, {"B2", 1L}, {"C", 2L}, {"D", 2L}, {"M", 1L}, {"W", 1L}
        });

    /* Comment-in for printout.
    for (int i = 0; i < received.length; i++) {
        EventBean event = received[i];
        System.out.println(event.get("statementName") + " " + event.get("wallTime") + " " + event.get("numInput"));
    }
    */
  }
  public void testEnabledDisableStatement() {
    String[] fields = new String[] {"statementName"};
    EPStatement[] statements = new EPStatement[5];
    Configuration config = getConfig(-1, 10000, true);

    ConfigurationMetricsReporting.StmtGroupMetrics configOne =
        new ConfigurationMetricsReporting.StmtGroupMetrics();
    configOne.setInterval(-1);
    configOne.addIncludeLike("%@METRIC%");
    config.getEngineDefaults().getMetricsReporting().addStmtGroup("metrics", configOne);

    epService = EPServiceProviderManager.getProvider("MyURI", config);
    epService.initialize();

    sendTimer(1000);

    statements[0] =
        epService
            .getEPAdministrator()
            .createEPL("select * from " + StatementMetric.class.getName(), "MyStatement@METRIC");
    statements[0].addListener(listenerStmtMetric);

    statements[1] =
        epService
            .getEPAdministrator()
            .createEPL(
                "select * from SupportBean(intPrimitive=1).win:keepall() where 2=2", "stmtone");
    sendEvent("E1", 1, cpuGoalOneNano);
    statements[2] =
        epService
            .getEPAdministrator()
            .createEPL(
                "select * from SupportBean(intPrimitive>0).std:lastevent() where 1=1", "stmttwo");
    sendEvent("E2", 1, cpuGoalOneNano);

    sendTimer(11000);
    EPAssertionUtil.assertPropsPerRow(
        listenerStmtMetric.getNewDataListFlattened(),
        fields,
        new Object[][] {{"stmtone"}, {"stmttwo"}});
    listenerStmtMetric.reset();

    sendEvent("E1", 1, cpuGoalOneNano);
    sendTimer(21000);
    EPAssertionUtil.assertPropsPerRow(
        listenerStmtMetric.getNewDataListFlattened(),
        fields,
        new Object[][] {{"stmtone"}, {"stmttwo"}});
    listenerStmtMetric.reset();

    epService.getEPAdministrator().getConfiguration().setMetricsReportingStmtDisabled("stmtone");

    sendEvent("E1", 1, cpuGoalOneNano);
    sendTimer(31000);
    EPAssertionUtil.assertPropsPerRow(
        listenerStmtMetric.getNewDataListFlattened(), fields, new Object[][] {{"stmttwo"}});
    listenerStmtMetric.reset();

    epService.getEPAdministrator().getConfiguration().setMetricsReportingStmtEnabled("stmtone");
    epService.getEPAdministrator().getConfiguration().setMetricsReportingStmtDisabled("stmttwo");

    sendEvent("E1", 1, cpuGoalOneNano);
    sendTimer(41000);
    EPAssertionUtil.assertPropsPerRow(
        listenerStmtMetric.getNewDataListFlattened(), fields, new Object[][] {{"stmtone"}});
    listenerStmtMetric.reset();
  }