Search in sources :

Example 1 with Publisher

use of com.datatorrent.bufferserver.support.Publisher 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 Publisher

use of com.datatorrent.bufferserver.support.Publisher 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)

Example 3 with Publisher

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

the class ServerTest method testRepublishLowerWindow.

@Test(dependsOnMethods = { "testRepublish" })
@SuppressWarnings("SleepWhileInLoop")
public void testRepublishLowerWindow() throws InterruptedException {
    bsp = new Publisher("MyPublisher");
    eventloopClient.connect(address, bsp);
    bsp.activate(null, 10, 0);
    long windowId = 0L;
    bsp.publishMessage(BeginWindowTuple.getSerializedTuple((int) windowId));
    for (int i = 0; i < 2; 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 < 2; i++) {
        byte[] buff = PayloadTuple.getSerializedTuple(0, 1);
        buff[buff.length - 1] = (byte) i;
        bsp.publishMessage(buff);
    }
    bsp.publishMessage(EndWindowTuple.getSerializedTuple((int) windowId));
    eventloopClient.disconnect(bsp);
    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() == 8) {
            break;
        }
    }
    // wait some more to receive more tuples if possible
    Thread.sleep(10);
    eventloopClient.disconnect(bss);
    assertEquals(bss.tupleCount.get(), 8);
}
Also used : Subscriber(com.datatorrent.bufferserver.support.Subscriber) Publisher(com.datatorrent.bufferserver.support.Publisher) Test(org.testng.annotations.Test)

Example 4 with Publisher

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

the class ServerTest method testNoPublishNoSubscribe.

@Test
public void testNoPublishNoSubscribe() throws InterruptedException {
    bsp = new Publisher("MyPublisher");
    eventloopClient.connect(address, bsp);
    bss = new Subscriber("MySubscriber");
    eventloopClient.connect(address, bss);
    bsp.activate(null, 0L);
    bss.activate(null, "BufferServerOutput/BufferServerSubscriber", "MyPublisher", 0, null, 0L, 0);
    synchronized (this) {
        wait(100);
    }
    eventloopClient.disconnect(bss);
    eventloopClient.disconnect(bsp);
    assertEquals(bss.tupleCount.get(), 0);
}
Also used : Subscriber(com.datatorrent.bufferserver.support.Subscriber) Publisher(com.datatorrent.bufferserver.support.Publisher) Test(org.testng.annotations.Test)

Example 5 with Publisher

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

the class ServerTest method testAuthFailure.

@Test(dependsOnMethods = { "testAuth" })
public void testAuthFailure() throws InterruptedException {
    byte[] authToken = ServerTest.authToken.clone();
    authToken[0] = (byte) (authToken[0] + 1);
    bsp = new Publisher("MyPublisher");
    bsp.setToken(authToken);
    eventloopClient.connect(address, bsp);
    bss = new Subscriber("MySubscriber");
    bss.setToken(authToken);
    eventloopClient.connect(address, bss);
    bsp.activate(null, 0L);
    bss.activate(null, "BufferServerOutput/BufferServerSubscriber", "MyPublisher", 0, null, 0L, 0);
    long resetInfo = 0x7afebabe000000faL;
    bsp.publishMessage(ResetWindowTuple.getSerializedTuple((int) (resetInfo >> 32), 500));
    for (int i = 0; i < spinCount; i++) {
        Thread.sleep(10);
        if (!bss.resetPayloads.isEmpty()) {
            break;
        }
    }
    Thread.sleep(10);
    eventloopClient.disconnect(bss);
    eventloopClient.disconnect(bsp);
    assertEquals(bss.tupleCount.get(), 0);
    assertTrue(bss.resetPayloads.isEmpty());
}
Also used : Subscriber(com.datatorrent.bufferserver.support.Subscriber) Publisher(com.datatorrent.bufferserver.support.Publisher) Test(org.testng.annotations.Test)

Aggregations

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