01: /*
02: * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
03: * notice. All rights reserved.
04: */
05: package com.tc.net.protocol.delivery;
06:
07: import EDU.oswego.cs.dl.util.concurrent.LinkedQueue;
08:
09: import com.tc.net.protocol.tcm.MessageMonitor;
10: import com.tc.net.protocol.tcm.NullMessageMonitor;
11: import com.tc.net.protocol.tcm.msgs.PingMessage;
12:
13: import junit.framework.TestCase;
14:
15: /**
16: *
17: */
18: public class SendStateMachineTest extends TestCase {
19: public void tests() throws Exception {
20: TestProtocolMessageDelivery delivery = new TestProtocolMessageDelivery(
21: new LinkedQueue());
22: final short sessionId = 134;
23: SendStateMachine ssm = new SendStateMachine(delivery, true);
24: ssm.start();
25: ssm.resume();
26:
27: // hand shake state
28: // compelete hand shake, receive ack=-1 from receiver
29: TestProtocolMessage msg = new TestProtocolMessage(null, 0, -1);
30: msg.isAck = true;
31: msg.setSessionId(sessionId);
32: ssm.execute(msg);
33:
34: TestProtocolMessage tpm = new TestProtocolMessage(null, -1, -1);
35: tpm.setSessionId(sessionId);
36: tpm.isSend = true;
37:
38: // SEND
39: MessageMonitor monitor = new NullMessageMonitor();
40: ssm.put(new PingMessage(monitor));
41: ssm.execute(null); // msg 0
42: assertTrue(delivery.created);
43: assertTrue(delivery.msg.getSent() == 0);
44: delivery.clear();
45:
46: // Call send an extra time with nothing on the send queue
47: ssm.execute(tpm); // drop
48: assertTrue(delivery.created == false);
49: tpm.isSend = false;
50:
51: ssm.put(new PingMessage(monitor)); // msg 1
52: ssm.put(new PingMessage(monitor)); // msg 2
53: tpm.ack = 0;
54:
55: // ACK
56: ssm.execute(tpm); // ack 0
57: assertTrue(delivery.created);
58: assertTrue(delivery.msg.getSent() == 2); // msg 2 is the last send
59:
60: ssm.pause();
61: assertTrue(ssm.isPaused());
62:
63: // HAND SHAKE for RESEND
64: delivery.clear();
65: ssm.resume();
66: assertFalse(ssm.isPaused());
67:
68: tpm.ack = 0;
69: ssm.execute(tpm); // dup ack=0
70:
71: ssm.put(new PingMessage(monitor)); // msg 3
72: ssm.execute(null);
73: assertTrue(delivery.msg.getSent() == 3);
74:
75: tpm.ack = 2;
76: ssm.execute(tpm); // ack 2
77: assertTrue(delivery.msg.getSent() == 3);
78:
79: }
80: }
|