Search in sources :

Example 1 with Subscriber

use of com.datatorrent.bufferserver.support.Subscriber in project apex-core by apache.

the class SubscriberTest method test.

@Test(timeOut = 1000)
@SuppressWarnings("SleepWhileInLoop")
public void test() throws InterruptedException {
    final Publisher bsp1 = new Publisher("MyPublisher");
    eventloopClient.connect(address, bsp1);
    final Subscriber bss1 = new Subscriber("MySubscriber") {

        @Override
        public void beginWindow(int windowId) {
            super.beginWindow(windowId);
            if (windowId > 9) {
                synchronized (SubscriberTest.this) {
                    SubscriberTest.this.notifyAll();
                }
            }
        }

        @Override
        public String toString() {
            return "BufferServerSubscriber";
        }
    };
    eventloopClient.connect(address, bss1);
    final int baseWindow = 0x7afebabe;
    bsp1.activate(null, baseWindow, 0);
    bss1.activate(null, "BufferServerOutput/BufferServerSubscriber", "MyPublisher", 0, null, 0L, 0);
    final AtomicBoolean publisherRun = new AtomicBoolean(true);
    new Thread("publisher") {

        @Override
        @SuppressWarnings("SleepWhileInLoop")
        public void run() {
            bsp1.publishMessage(ResetWindowTuple.getSerializedTuple(baseWindow, 500));
            long windowId = 0x7afebabe00000000L;
            try {
                while (publisherRun.get()) {
                    bsp1.publishMessage(BeginWindowTuple.getSerializedTuple((int) windowId));
                    bsp1.publishMessage(PayloadTuple.getSerializedTuple(0, 0));
                    bsp1.publishMessage(EndWindowTuple.getSerializedTuple((int) windowId));
                    windowId++;
                    Thread.sleep(5);
                }
            } catch (InterruptedException | CancelledKeyException e) {
                logger.debug("{}", e);
            } finally {
                logger.debug("publisher the middle of window = {}", Codec.getStringWindowId(windowId));
            }
        }
    }.start();
    synchronized (this) {
        wait();
    }
    publisherRun.set(false);
    eventloopClient.disconnect(bsp1);
    eventloopClient.disconnect(bss1);
    /*
     * At this point, we know that both the publishers and the subscribers have gotten at least window Id 10.
     * So we go ahead and make the publisher publish from 5 onwards with different data and have subscriber
     * subscribe from 8 onwards. What we should see is that subscriber gets the new data from 8 onwards.
     */
    final Publisher bsp2 = new Publisher("MyPublisher");
    eventloopClient.connect(address, bsp2);
    bsp2.activate(null, 0x7afebabe, 5);
    final Subscriber bss2 = new Subscriber("MyPublisher") {

        @Override
        public void beginWindow(int windowId) {
            super.beginWindow(windowId);
            if (windowId > 14) {
                synchronized (SubscriberTest.this) {
                    SubscriberTest.this.notifyAll();
                }
            }
        }
    };
    eventloopClient.connect(address, bss2);
    bss2.activate(null, "BufferServerOutput/BufferServerSubscriber", "MyPublisher", 0, null, 0x7afebabe00000008L, 0);
    publisherRun.set(true);
    new Thread("publisher") {

        @Override
        @SuppressWarnings("SleepWhileInLoop")
        public void run() {
            long windowId = 0x7afebabe00000005L;
            try {
                while (publisherRun.get()) {
                    bsp2.publishMessage(BeginWindowTuple.getSerializedTuple((int) windowId));
                    byte[] buff = PayloadTuple.getSerializedTuple(0, 1);
                    buff[buff.length - 1] = 'a';
                    bsp2.publishMessage(buff);
                    bsp2.publishMessage(EndWindowTuple.getSerializedTuple((int) windowId));
                    windowId++;
                    Thread.sleep(5);
                }
            } catch (InterruptedException | CancelledKeyException e) {
                logger.debug("", e);
            } finally {
                logger.debug("publisher in the middle of window = {}", Codec.getStringWindowId(windowId));
            }
        }
    }.start();
    synchronized (this) {
        wait();
    }
    publisherRun.set(false);
    eventloopClient.disconnect(bsp2);
    eventloopClient.disconnect(bss2);
    assertTrue((bss2.lastPayload.getWindowId() - 8) * 3 <= bss2.tupleCount.get());
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Subscriber(com.datatorrent.bufferserver.support.Subscriber) Publisher(com.datatorrent.bufferserver.support.Publisher) Test(org.testng.annotations.Test)

Example 2 with Subscriber

use of com.datatorrent.bufferserver.support.Subscriber in project apex-core by apache.

the class ServerTest method testPurgeAll.

@Test(dependsOnMethods = { "testPurgeSome" })
@SuppressWarnings("SleepWhileInLoop")
public void testPurgeAll() throws InterruptedException {
    bsc = new Controller("MyController");
    eventloopClient.connect(address, bsc);
    bsc.purge(null, "MyPublisher", 0x7afebabe00000001L);
    for (int i = 0; i < spinCount; i++) {
        Thread.sleep(10);
        if (bsc.data != null) {
            break;
        }
    }
    eventloopClient.disconnect(bsc);
    assertNotNull(bsc.data);
    bss = new Subscriber("MyPublisher");
    eventloopClient.connect(address, bss);
    bss.activate(null, "BufferServerOutput/BufferServerSubscriber", "MyPublisher", 0, null, 0L, 0);
    for (int i = 0; i < spinCount; i++) {
        Thread.sleep(10);
        if (!bss.resetPayloads.isEmpty()) {
            break;
        }
    }
    Thread.sleep(10);
    eventloopClient.disconnect(bss);
    assertEquals(bss.tupleCount.get(), 1);
}
Also used : Subscriber(com.datatorrent.bufferserver.support.Subscriber) Controller(com.datatorrent.bufferserver.support.Controller) Test(org.testng.annotations.Test)

Example 3 with Subscriber

use of com.datatorrent.bufferserver.support.Subscriber in project apex-core by apache.

the class ServerTest method testPurgeNonExistent.

@Test(dependsOnMethods = { "testATonOfData" })
@SuppressWarnings("SleepWhileInLoop")
public void testPurgeNonExistent() throws InterruptedException {
    bsc = new Controller("MyController");
    eventloopClient.connect(address, bsc);
    bsc.purge(null, "MyPublisher", 0);
    for (int i = 0; i < spinCount; i++) {
        Thread.sleep(10);
        if (bsc.data != null) {
            break;
        }
    }
    eventloopClient.disconnect(bsc);
    assertNotNull(bsc.data);
    bss = new Subscriber("MyPublisher");
    eventloopClient.connect(address, bss);
    bss.activate(null, "BufferServerOutput/BufferServerSubscriber", "MyPublisher", 0, null, 0L, 0);
    for (int i = 0; i < spinCount; i++) {
        Thread.sleep(10);
        if (bss.tupleCount.get() == 205) {
            break;
        }
    }
    Thread.sleep(10);
    eventloopClient.disconnect(bss);
    assertEquals(bss.tupleCount.get(), 205);
}
Also used : Subscriber(com.datatorrent.bufferserver.support.Subscriber) Controller(com.datatorrent.bufferserver.support.Controller) Test(org.testng.annotations.Test)

Example 4 with Subscriber

use of com.datatorrent.bufferserver.support.Subscriber in project apex-core by apache.

the class ServerTest method testLateSubscriber.

@Test(dependsOnMethods = { "test1Window" })
@SuppressWarnings("SleepWhileInLoop")
public void testLateSubscriber() throws InterruptedException {
    bss = new Subscriber("MyPublisher");
    eventloopClient.connect(address, bss);
    bss.activate(null, "BufferServerOutput/BufferServerSubscriber", "MyPublisher", 0, null, 0L, 0);
    for (int i = 0; i < spinCount; i++) {
        Thread.sleep(10);
        if (!bss.resetPayloads.isEmpty()) {
            break;
        }
    }
    Thread.sleep(10);
    eventloopClient.disconnect(bss);
    assertEquals(bss.tupleCount.get(), 1);
    assertFalse(bss.resetPayloads.isEmpty());
}
Also used : Subscriber(com.datatorrent.bufferserver.support.Subscriber) Test(org.testng.annotations.Test)

Example 5 with Subscriber

use of com.datatorrent.bufferserver.support.Subscriber in project apex-core by apache.

the class ServerTest method testATonOfData.

@Test(dependsOnMethods = { "testLateSubscriber" })
@SuppressWarnings("SleepWhileInLoop")
public void testATonOfData() throws InterruptedException {
    bss = new Subscriber("MyPublisher");
    eventloopClient.connect(address, bss);
    bss.activate(null, "BufferServerOutput/BufferServerSubscriber", "MyPublisher", 0, null, 0L, 0);
    bsp = new Publisher("MyPublisher");
    eventloopClient.connect(address, bsp);
    bsp.activate(null, 0x7afebabe, 0);
    long windowId = 0x7afebabe00000000L;
    bsp.publishMessage(BeginWindowTuple.getSerializedTuple((int) windowId));
    for (int i = 0; i < 100; i++) {
        byte[] buff = PayloadTuple.getSerializedTuple(0, 1);
        buff[buff.length - 1] = (byte) i;
        bsp.publishMessage(buff);
    }
    bsp.publishMessage(EndWindowTuple.getSerializedTuple((int) windowId));
    windowId++;
    bsp.publishMessage(BeginWindowTuple.getSerializedTuple((int) windowId));
    for (int i = 0; i < 100; i++) {
        byte[] buff = PayloadTuple.getSerializedTuple(0, 1);
        buff[buff.length - 1] = (byte) i;
        bsp.publishMessage(buff);
    }
    bsp.publishMessage(EndWindowTuple.getSerializedTuple((int) windowId));
    for (int i = 0; i < spinCount; i++) {
        Thread.sleep(10);
        if (bss.tupleCount.get() == 204 + bss.resetPayloads.size()) {
            break;
        }
    }
    // wait some more to receive more tuples if possible
    Thread.sleep(10);
    eventloopClient.disconnect(bsp);
    eventloopClient.disconnect(bss);
    assertEquals(bss.tupleCount.get(), 204 + bss.resetPayloads.size());
}
Also used : Subscriber(com.datatorrent.bufferserver.support.Subscriber) Publisher(com.datatorrent.bufferserver.support.Publisher) Test(org.testng.annotations.Test)

Aggregations

Subscriber (com.datatorrent.bufferserver.support.Subscriber)15 Test (org.testng.annotations.Test)14 Publisher (com.datatorrent.bufferserver.support.Publisher)9 Controller (com.datatorrent.bufferserver.support.Controller)5 Server (com.datatorrent.bufferserver.server.Server)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 BeforeClass (org.testng.annotations.BeforeClass)1