ошибка с "-> не для ..." в сиддхи? - PullRequest
0 голосов
/ 11 декабря 2018

Я добавил следующий тестовый пример в AbsentWithEveryPatternTestCase.java, но тест не удался, и я думаю, что в случае успеха.Итак, есть ли ошибка с шаблоном "-> не для ..."?

@Test
public void testQuery7() throws InterruptedException {
    log.info("Test the query every e1 -> not e1 for 1 sec with e1 only");

    SiddhiManager siddhiManager = new SiddhiManager();

    String streams = "@app:playback(idle.time = '10 milliseconds', increment = '10 milliseconds') " +
            "define stream Stream1 (symbol string, price float, volume int); ";
    String query = "" +
            "@info(name = 'query1') " +
            "from every e1=Stream1[price>20] -> not Stream1[symbol==e1.symbol and price>e1.price] for 1sec " +
            "select e1.symbol as symbol " +
            "insert into OutputStream ;";

    SiddhiAppRuntime siddhiAppRuntime = siddhiManager.createSiddhiAppRuntime(streams + query);

    TestUtil.TestCallback callback = TestUtil.addQueryCallback(siddhiAppRuntime, "query1", new Object[]{"GOOG"});

    InputHandler stream1 = siddhiAppRuntime.getInputHandler("Stream1");

    siddhiAppRuntime.start();

    stream1.send(1544512385000L, new Object[]{"WSO2", 55.6f, 100});
    stream1.send(1544512385100L, new Object[]{"GOOG", 55.6f, 100});
    stream1.send(1544512385800L, new Object[]{"WSO2", 55.7f, 100});
    stream1.send(1544512386200L, new Object[]{"GOOG", 55.6f, 100});

    callback.throwAssertionErrors();
    AssertJUnit.assertEquals("Number of success events", 1, callback.getInEventCount());
    AssertJUnit.assertEquals("Number of remove events", 0, callback.getRemoveEventCount());
    AssertJUnit.assertTrue("Event arrived", callback.isEventArrived());

    siddhiAppRuntime.shutdown();
}

1 Ответ

0 голосов
/ 12 декабря 2018

Ваши утверждения не верны, потому что вы не позволяете времени обрабатывать события после отправки входных данных.То, как не работает запрос, заключается в том, что для каждого входящего события он будет ждать в течение времени, чтобы проверить его наличие, а затем выдать его по прошествии времени.Так что вы должны подождать и позволить шаблонному запросу обработатьСамый простой способ - добавить спящий поток после отправки.

Thread.sleep(1500);

Рекомендуется использовать waitForEvent в Сиддхи. Здесь является примером для этого.

Также следует отметить, что ваш запрос будет генерировать 3 выходных события, так как последние 3 входных события не сопровождаются другим событием с более высокой ценой.

...