tom

Adding unit tests for the comm manager.

1 +package org.onlab.onos.store.cluster.impl;
2 +
3 +import org.junit.After;
4 +import org.junit.Before;
5 +import org.junit.Test;
6 +import org.onlab.onos.cluster.DefaultControllerNode;
7 +import org.onlab.onos.cluster.NodeId;
8 +import org.onlab.onos.store.cluster.messaging.SerializationService;
9 +import org.onlab.packet.IpPrefix;
10 +import sun.jvm.hotspot.TestDebugger;
11 +
12 +import java.util.concurrent.CountDownLatch;
13 +import java.util.concurrent.TimeUnit;
14 +
15 +import static org.junit.Assert.*;
16 +
17 +/**
18 + * Tests of the cluster communication manager.
19 + */
20 +public class ClusterCommunicationManagerTest {
21 +
22 + private static final NodeId N1 = new NodeId("n1");
23 + private static final NodeId N2 = new NodeId("n2");
24 +
25 + private static final int P1 = 9881;
26 + private static final int P2 = 9882;
27 +
28 + private static final IpPrefix IP = IpPrefix.valueOf("127.0.0.1");
29 +
30 + private ClusterCommunicationManager ccm1;
31 + private ClusterCommunicationManager ccm2;
32 +
33 + private TestDelegate cnd1 = new TestDelegate();
34 + private TestDelegate cnd2 = new TestDelegate();
35 +
36 + private DefaultControllerNode node1 = new DefaultControllerNode(N1, IP, P1);
37 + private DefaultControllerNode node2 = new DefaultControllerNode(N2, IP, P2);
38 +
39 + @Before
40 + public void setUp() {
41 + MessageSerializer messageSerializer = new MessageSerializer();
42 + messageSerializer.activate();
43 +
44 + ccm1 = new ClusterCommunicationManager();
45 + ccm1.serializationService = messageSerializer;
46 + ccm1.activate();
47 +
48 + ccm2 = new ClusterCommunicationManager();
49 + ccm2.serializationService = messageSerializer;
50 + ccm2.activate();
51 +
52 + ccm1.startUp(node1, cnd1);
53 + ccm2.startUp(node2, cnd2);
54 + }
55 +
56 + @After
57 + public void tearDown() {
58 + ccm1.deactivate();
59 + ccm2.deactivate();
60 + }
61 +
62 + @Test
63 + public void connect() throws Exception {
64 + cnd1.latch = new CountDownLatch(1);
65 + cnd2.latch = new CountDownLatch(1);
66 +
67 + ccm1.addNode(node2);
68 + validateDelegateEvent(cnd1, Op.DETECTED, node2.id());
69 + validateDelegateEvent(cnd2, Op.DETECTED, node1.id());
70 + }
71 +
72 + @Test
73 + public void disconnect() throws Exception {
74 + cnd1.latch = new CountDownLatch(1);
75 + cnd2.latch = new CountDownLatch(1);
76 +
77 + ccm1.addNode(node2);
78 + validateDelegateEvent(cnd1, Op.DETECTED, node2.id());
79 + validateDelegateEvent(cnd2, Op.DETECTED, node1.id());
80 +
81 + cnd1.latch = new CountDownLatch(1);
82 + cnd2.latch = new CountDownLatch(1);
83 + ccm1.deactivate();
84 +//
85 +// validateDelegateEvent(cnd2, Op.VANISHED, node1.id());
86 + }
87 +
88 + private void validateDelegateEvent(TestDelegate delegate, Op op, NodeId nodeId)
89 + throws InterruptedException {
90 + assertTrue("did not connect in time", delegate.latch.await(2500, TimeUnit.MILLISECONDS));
91 + assertEquals("incorrect event", op, delegate.op);
92 + assertEquals("incorrect event node", nodeId, delegate.nodeId);
93 + }
94 +
95 + enum Op { DETECTED, VANISHED, REMOVED };
96 +
97 + private class TestDelegate implements ClusterNodesDelegate {
98 +
99 + Op op;
100 + CountDownLatch latch;
101 + NodeId nodeId;
102 +
103 + @Override
104 + public DefaultControllerNode nodeDetected(NodeId nodeId, IpPrefix ip, int tcpPort) {
105 + latch(nodeId, Op.DETECTED);
106 + return new DefaultControllerNode(nodeId, ip, tcpPort);
107 + }
108 +
109 + @Override
110 + public void nodeVanished(NodeId nodeId) {
111 + latch(nodeId, Op.VANISHED);
112 + }
113 +
114 + @Override
115 + public void nodeRemoved(NodeId nodeId) {
116 + latch(nodeId, Op.REMOVED);
117 + }
118 +
119 + private void latch(NodeId nodeId, Op op) {
120 + this.op = op;
121 + this.nodeId = nodeId;
122 + latch.countDown();
123 + }
124 + }
125 +}
...\ No newline at end of file ...\ No newline at end of file