1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sf.beep4j.internal.profile;
17
18 import java.util.Arrays;
19
20 import junit.framework.TestCase;
21 import net.sf.beep4j.Message;
22 import net.sf.beep4j.MessageBuilder;
23 import net.sf.beep4j.ProfileInfo;
24 import net.sf.beep4j.internal.message.DefaultMessageBuilder;
25
26 public class ChannelManagementMessageTest extends TestCase {
27
28 private static final String PROFILE = "http://examples.org/profile/echo";
29
30 private static final String PROFILE_2 = "http://examples.org/profile/reverse";
31
32 private static final String PROFILE_3 = "http://examples.org/profile/crypto";
33
34 private ChannelManagementMessageBuilder builder;
35
36 private ChannelManagementMessageParser parser;
37
38 private MessageBuilder messageBuilder;
39
40 @Override
41 protected void setUp() throws Exception {
42 builder = new SaxMessageBuilder();
43 parser = new SaxMessageParser();
44 messageBuilder = new DefaultMessageBuilder();
45 messageBuilder.setCharsetName("UTF-8");
46 messageBuilder.setContentType("application", "beep+xml");
47 }
48
49 public void testGreetingEmpty() throws Exception {
50 Message message = builder.createGreeting(messageBuilder, new String[0]);
51 Greeting greeting = parser.parseGreeting(message);
52 assertEquals(0, greeting.getProfiles().length);
53 }
54
55 public void testGreetingTwoProfiles() throws Exception {
56 Message message = builder.createGreeting(messageBuilder, new String[] {
57 PROFILE, PROFILE_2
58 });
59 Greeting greeting = parser.parseGreeting(message);
60 assertEquals(2, greeting.getProfiles().length);
61 assertEquals(PROFILE, greeting.getProfiles()[0]);
62 assertEquals(PROFILE_2, greeting.getProfiles()[1]);
63 }
64
65 public void testError() throws Exception {
66 Message message = builder.createError(messageBuilder, 550, "still working");
67 BEEPError error = parser.parseError(message);
68 assertEquals(550, error.getCode());
69 assertEquals("still working", error.getMessage());
70 }
71
72 public void testOk() throws Exception {
73 Message message = builder.createOk(messageBuilder);
74 parser.parseOk(message);
75 }
76
77 public void testStartWithOneProfile() throws Exception {
78 Message message = builder.createStart(messageBuilder, 2, new ProfileInfo[] {
79 new ProfileInfo(PROFILE)
80 });
81 assertEquals("application/beep+xml", message.getContentType());
82
83 StartChannelMessage result = (StartChannelMessage) parser.parseRequest(message);
84 assertEquals(2, result.getChannelNumber());
85 assertEquals(1, result.getProfiles().length);
86 assertEquals(PROFILE, result.getProfiles()[0].getUri());
87 }
88
89 public void testStartWithThreeProfiles() throws Exception {
90 Message message = builder.createStart(messageBuilder, 2, new ProfileInfo[] {
91 new ProfileInfo(PROFILE), new ProfileInfo(PROFILE_2), new ProfileInfo(PROFILE_3)
92 });
93 assertEquals("application/beep+xml", message.getContentType());
94
95 StartChannelMessage result = (StartChannelMessage) parser.parseRequest(message);
96 assertEquals(2, result.getChannelNumber());
97 assertEquals(3, result.getProfiles().length);
98 assertEquals(PROFILE, result.getProfiles()[0].getUri());
99 assertEquals(PROFILE_2, result.getProfiles()[1].getUri());
100 assertEquals(PROFILE_3, result.getProfiles()[2].getUri());
101 }
102
103 public void testStartWithContent() throws Exception {
104 Message message = builder.createStart(messageBuilder, 2, new ProfileInfo[] {
105 new ProfileInfo(PROFILE, "abcdefg")
106 });
107
108 StartChannelMessage result = (StartChannelMessage) parser.parseRequest(message);
109 assertEquals(2, result.getChannelNumber());
110 assertEquals(1, result.getProfiles().length);
111 assertEquals(PROFILE, result.getProfiles()[0].getUri());
112 assertEquals("abcdefg", result.getProfiles()[0].getContent());
113 }
114
115 public void testStartWithBase64EncodedContent() throws Exception {
116 byte[] expected = new byte[] { 0x30, 0x31, 0x32, 0x33, 0x34 };
117 Message message = builder.createStart(messageBuilder, 2, new ProfileInfo[] {
118 new ProfileInfo(PROFILE, expected)
119 });
120
121 StartChannelMessage result = (StartChannelMessage) parser.parseRequest(message);
122 assertEquals(2, result.getChannelNumber());
123 assertEquals(1, result.getProfiles().length);
124 assertEquals(PROFILE, result.getProfiles()[0].getUri());
125 assertArrayEquals(expected, result.getProfiles()[0].getBinaryContent());
126 }
127
128 public void testProfileWithoutContent() throws Exception {
129 Message message = builder.createProfile(messageBuilder, new ProfileInfo(PROFILE));
130 ProfileInfo profile = parser.parseProfile(message);
131 assertEquals(PROFILE, profile.getUri());
132 assertFalse(profile.hasContent());
133 }
134
135 public void testProfileWithContent() throws Exception {
136 Message message = builder.createProfile(messageBuilder, new ProfileInfo(PROFILE, "abcdefg"));
137 ProfileInfo profile = parser.parseProfile(message);
138 assertEquals(PROFILE, profile.getUri());
139 assertTrue(profile.hasContent());
140 assertFalse(profile.isBase64Encoded());
141 assertEquals("abcdefg", profile.getContent());
142 }
143
144 public void testClose() throws Exception {
145 Message message = builder.createClose(messageBuilder, 2, 200);
146 CloseChannelMessage request = (CloseChannelMessage) parser.parseRequest(message);
147 assertEquals(2, request.getChannelNumber());
148 assertEquals(200, request.getCode());
149 }
150
151 private void assertArrayEquals(byte[] a, byte[] b) {
152 assertEquals("lengths do not match", a.length, b.length);
153 assertTrue("content does not match", Arrays.equals(a, b));
154 }
155
156 }