Package org.drools.guvnor.server

Source Code of org.drools.guvnor.server.BackchannelTest

/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.drools.guvnor.server;

import org.drools.guvnor.client.rpc.PushResponse;

import java.util.List;
import java.util.ArrayList;

import junit.framework.TestCase;

/**
* @author Michael Neale
*/
public class BackchannelTest extends TestCase {


    public void testPushAll() throws Exception {

        final Backchannel bc = new Backchannel();

        final PushResponse[] resp = new PushResponse[2];
        Thread t = new Thread(new Runnable() {
            public void run() {
                try {
                    List<PushResponse> r = bc.await("mic");
                    assertEquals(1, r.size());
                    resp[0] = r.get(0);
                } catch (InterruptedException e) {
                    fail("should not interrupt");
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {
            public void run() {
                try {
                    List<PushResponse> r = bc.await("jazz");
                    assertEquals(1, r.size());
                    resp[1] = r.get(0);

                } catch (InterruptedException e) {
                    fail("should not interrupt");
                }
            }
        });
        t.start();
        t2.start();


        Thread.sleep(200);

        bc.publish(new PushResponse("hey", "ho"));

        //t.join();
        //t2.join();

        Thread.sleep(500);
        assertNotNull(resp[0]);
        assertNotNull(resp[1]);
        assertEquals("hey", resp[0].messageType);
        assertEquals("hey", resp[1].messageType);


    }

    public void testSimple() throws Exception {

            final Backchannel bc = new Backchannel();

        bc.push("mic", new PushResponse("m", "b"));
        bc.push("dave", new PushResponse("d", "b"));
        List<PushResponse> r = bc.await("mic");
        assertEquals(1, r.size());
        assertEquals("m", r.get(0).messageType);
        r = bc.await("dave");
        assertEquals(1, r.size());
        assertEquals("d", r.get(0).messageType);


        final boolean[] check = new boolean[1];

        Thread t = new Thread(new Runnable() {
            public void run() {
                try {
                    List<PushResponse> list = bc.await("mic");
                    /*
                    for (PushResponse resp: list) {
                                       System.err.println(resp.messageType + "," + resp.message);
                    }
                    */
                    check[0] = true;
                } catch (InterruptedException e) {
                    fail("Should not interrupt");
                }
            }
        });

        t.setDaemon(true);
        t.start();


        Thread.sleep(400);

        assertFalse(check[0]);
        bc.push("dave", new PushResponse("x", "y"));
        //bc.push("mic", new PushResponse("Q", "W"));
        t.join();



       

        check[0] = false;
        bc.push("mic", new PushResponse("R", "T"));
        bc.push("mic", new PushResponse("Q", "A"));


        final List<List<PushResponse>> container = new ArrayList();

        t = new Thread(new Runnable() {
            public void run() {
                try {
                    container.add(bc.await("mic"));
                    check[0] = true;
                } catch (InterruptedException e) {
                    fail("Should not interrupt");
                }
            }
        });
        t.setDaemon(true);
        t.start();
        t.join();

        assertTrue(check[0]);
        assertEquals(1, container.size());
        List<PushResponse> list = container.get(0);
        if (list.size() > 2) {
            for (PushResponse resp: list) {
                System.err.println(resp.messageType + "," + resp.message);
            }
        }
        assertEquals(2, list.size());

    }

    public void testManyConcurrent() throws Exception {
        final Backchannel bc = new Backchannel();
        for (int i =0; i < 1000; i++) {
            spinup(bc, i);
        }
        bc.push("mic", new PushResponse("yo", "yo"));
        bc.push("mic", new PushResponse("yo", "yo"));

        //for (int i=0; i< 1000; i++) {
        List<PushResponse> res = bc.await("mic");
        assertEquals(2, res.size());

        res = bc.await("mic");
        assertEquals(0, res.size());
        //assertNull(res); //as other concurrent things will be unlatching...

        Thread.sleep(20);

        for (int i = 0; i < 20000; i++) {
            bc.push("mic", new PushResponse("yo", "yo"));
            bc.push("mic", new PushResponse("yo", "yo"));

            res = bc.await("mic");
            assertEquals(2, res.size());
        }
    }

    private void spinup(final Backchannel bc, final int i) {
        Thread t = new Thread(new Runnable() {
            public void run() {
                try {
                    Thread.sleep(i / 2);
                } catch (InterruptedException e) {
                    fail("should not interrupt");
                }
                bc.push(i + "user", new PushResponse(i + "type", "message"));
            }
        });

        t.setDaemon(true);

        t.start();
    }

}
TOP

Related Classes of org.drools.guvnor.server.BackchannelTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.