001: // ========================================================================
002: // Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
003: // ------------------------------------------------------------------------
004: // Licensed under the Apache License, Version 2.0 (the "License");
005: // you may not use this file except in compliance with the License.
006: // You may obtain a copy of the License at
007: // http://www.apache.org/licenses/LICENSE-2.0
008: // Unless required by applicable law or agreed to in writing, software
009: // distributed under the License is distributed on an "AS IS" BASIS,
010: // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
011: // See the License for the specific language governing permissions and
012: // limitations under the License.
013: // ========================================================================
014:
015: package org.mortbay.jetty;
016:
017: import java.util.Enumeration;
018:
019: import junit.framework.TestCase;
020:
021: import org.mortbay.io.Buffer;
022: import org.mortbay.io.ByteArrayBuffer;
023: import org.mortbay.io.View;
024:
025: /* ------------------------------------------------------------------------------- */
026: /**
027: *
028: */
029: public class HttpHeaderTest extends TestCase {
030:
031: /**
032: * Constructor for HttpHeaderTest.
033: * @param arg0
034: */
035: public HttpHeaderTest(String arg0) {
036: super (arg0);
037: }
038:
039: public static void main(String[] args) {
040: junit.textui.TestRunner.run(HttpHeaderTest.class);
041: }
042:
043: /*
044: * @see TestCase#setUp()
045: */
046: protected void setUp() throws Exception {
047: super .setUp();
048: }
049:
050: /*
051: * @see TestCase#tearDown()
052: */
053: protected void tearDown() throws Exception {
054: super .tearDown();
055: }
056:
057: public void testPut() throws Exception {
058: HttpFields header = new HttpFields();
059:
060: header.put("name0", "value0");
061: header.put("name1", "value1");
062:
063: assertEquals("value0", header.getStringField("name0"));
064: assertEquals("value1", header.getStringField("name1"));
065: assertEquals(null, header.getStringField("name2"));
066:
067: int matches = 0;
068: Enumeration e = header.getFieldNames();
069: while (e.hasMoreElements()) {
070: Object o = e.nextElement();
071: if ("name0".equals(o))
072: matches++;
073: if ("name1".equals(o))
074: matches++;
075: }
076: assertEquals(2, matches);
077:
078: matches = 0;
079: e = header.getValues("name0");
080: assertEquals(true, e.hasMoreElements());
081: assertEquals(e.nextElement(), "value0");
082: assertEquals(false, e.hasMoreElements());
083: }
084:
085: public void testCachedPut() throws Exception {
086: HttpFields header = new HttpFields();
087:
088: header.put("Connection", "keep-alive");
089: assertEquals(HttpHeaderValues.KEEP_ALIVE, header
090: .getStringField(HttpHeaders.CONNECTION));
091:
092: int matches = 0;
093: Enumeration e = header.getFieldNames();
094: while (e.hasMoreElements()) {
095: Object o = e.nextElement();
096: if (o == HttpHeaders.CONTENT_TYPE)
097: matches++;
098: if (o == HttpHeaders.CONNECTION)
099: matches++;
100: }
101: assertEquals(1, matches);
102:
103: }
104:
105: public void testRePut() throws Exception {
106: HttpFields header = new HttpFields();
107:
108: header.put("name0", "value0");
109: header.put("name1", "xxxxxx");
110: header.put("name2", "value2");
111:
112: assertEquals("value0", header.getStringField("name0"));
113: assertEquals("xxxxxx", header.getStringField("name1"));
114: assertEquals("value2", header.getStringField("name2"));
115:
116: header.put("name1", "value1");
117:
118: assertEquals("value0", header.getStringField("name0"));
119: assertEquals("value1", header.getStringField("name1"));
120: assertEquals("value2", header.getStringField("name2"));
121: assertEquals(null, header.getStringField("name3"));
122:
123: int matches = 0;
124: Enumeration e = header.getFieldNames();
125: while (e.hasMoreElements()) {
126: Object o = e.nextElement();
127: if ("name0".equals(o))
128: matches++;
129: if ("name1".equals(o))
130: matches++;
131: if ("name2".equals(o))
132: matches++;
133: }
134: assertEquals(3, matches);
135:
136: matches = 0;
137: e = header.getValues("name1");
138: assertEquals(true, e.hasMoreElements());
139: assertEquals(e.nextElement(), "value1");
140: assertEquals(false, e.hasMoreElements());
141: }
142:
143: public void testRemovePut() throws Exception {
144: HttpFields header = new HttpFields();
145:
146: header.put("name0", "value0");
147: header.put("name1", "value1");
148: header.put("name2", "value2");
149:
150: assertEquals("value0", header.getStringField("name0"));
151: assertEquals("value1", header.getStringField("name1"));
152: assertEquals("value2", header.getStringField("name2"));
153:
154: header.remove("name1");
155:
156: assertEquals("value0", header.getStringField("name0"));
157: assertEquals(null, header.getStringField("name1"));
158: assertEquals("value2", header.getStringField("name2"));
159: assertEquals(null, header.getStringField("name3"));
160:
161: int matches = 0;
162: Enumeration e = header.getFieldNames();
163: while (e.hasMoreElements()) {
164: Object o = e.nextElement();
165: if ("name0".equals(o))
166: matches++;
167: if ("name1".equals(o))
168: matches++;
169: if ("name2".equals(o))
170: matches++;
171: }
172: assertEquals(2, matches);
173:
174: matches = 0;
175: e = header.getValues("name1");
176: assertEquals(false, e.hasMoreElements());
177: }
178:
179: public void testAdd() throws Exception {
180: HttpFields fields = new HttpFields();
181:
182: fields.add("name0", "value0");
183: fields.add("name1", "valueA");
184: fields.add("name2", "value2");
185:
186: assertEquals("value0", fields.getStringField("name0"));
187: assertEquals("valueA", fields.getStringField("name1"));
188: assertEquals("value2", fields.getStringField("name2"));
189:
190: fields.add("name1", "valueB");
191:
192: assertEquals("value0", fields.getStringField("name0"));
193: assertEquals("valueA", fields.getStringField("name1"));
194: assertEquals("value2", fields.getStringField("name2"));
195: assertEquals(null, fields.getStringField("name3"));
196:
197: int matches = 0;
198: Enumeration e = fields.getFieldNames();
199: while (e.hasMoreElements()) {
200: Object o = e.nextElement();
201: if ("name0".equals(o))
202: matches++;
203: if ("name1".equals(o))
204: matches++;
205: if ("name2".equals(o))
206: matches++;
207: }
208: assertEquals(3, matches);
209:
210: matches = 0;
211: e = fields.getValues("name1");
212: assertEquals(true, e.hasMoreElements());
213: assertEquals(e.nextElement(), "valueA");
214: assertEquals(true, e.hasMoreElements());
215: assertEquals(e.nextElement(), "valueB");
216: assertEquals(false, e.hasMoreElements());
217: }
218:
219: public void testReuse() throws Exception {
220: HttpFields header = new HttpFields();
221: Buffer n1 = new ByteArrayBuffer("name1");
222: Buffer va = new ByteArrayBuffer("value1");
223: Buffer vb = new ByteArrayBuffer(10);
224: vb.put((byte) 'v');
225: vb.put((byte) 'a');
226: vb.put((byte) 'l');
227: vb.put((byte) 'u');
228: vb.put((byte) 'e');
229: vb.put((byte) '1');
230:
231: header.put("name0", "value0");
232: header.put(n1, va);
233: header.put("name2", "value2");
234:
235: assertEquals("value0", header.getStringField("name0"));
236: assertEquals("value1", header.getStringField("name1"));
237: assertEquals("value2", header.getStringField("name2"));
238: assertEquals(null, header.getStringField("name3"));
239:
240: header.remove(n1);
241: assertEquals(null, header.getStringField("name1"));
242: header.put(n1, vb);
243: assertEquals("value1", header.getStringField("name1"));
244: assertTrue(va.toString() == header.getStringField("name1"));
245:
246: int matches = 0;
247: Enumeration e = header.getFieldNames();
248: while (e.hasMoreElements()) {
249: Object o = e.nextElement();
250: if ("name0".equals(o))
251: matches++;
252: if ("name1".equals(o))
253: matches++;
254: if ("name2".equals(o))
255: matches++;
256: }
257: assertEquals(3, matches);
258:
259: matches = 0;
260: e = header.getValues("name1");
261: assertEquals(true, e.hasMoreElements());
262: assertEquals(e.nextElement(), "value1");
263: assertEquals(false, e.hasMoreElements());
264: }
265:
266: public void testDateFields() throws Exception {
267: HttpFields fields = new HttpFields();
268:
269: fields.put("D1", "Fri, 31 Dec 1999 23:59:59 GMT");
270: fields.put("D2", "Friday, 31-Dec-99 23:59:59 GMT");
271: fields.put("D3", "Fri Dec 31 23:59:59 1999");
272: fields.put("D4", "Mon Jan 1 2000 00:00:01");
273: fields.put("D5", "Tue Feb 29 2000 12:00:00");
274:
275: long d1 = fields.getDateField("D1");
276: long d2 = fields.getDateField("D2");
277: long d3 = fields.getDateField("D3");
278: long d4 = fields.getDateField("D4");
279: long d5 = fields.getDateField("D5");
280: assertTrue(d1 > 0);
281: assertTrue(d2 > 0);
282: assertEquals(d1, d2);
283: assertEquals(d2, d3);
284: assertEquals(d3 + 2000, d4);
285: assertEquals(951825600000L, d5);
286:
287: d1 = fields.getDateField("D1");
288: d2 = fields.getDateField("D2");
289: d3 = fields.getDateField("D3");
290: d4 = fields.getDateField("D4");
291: d5 = fields.getDateField("D5");
292: assertTrue(d1 > 0);
293: assertTrue(d2 > 0);
294: assertEquals(d1, d2);
295: assertEquals(d2, d3);
296: assertEquals(d3 + 2000, d4);
297: assertEquals(951825600000L, d5);
298:
299: fields.putDateField("D2", d1);
300: assertEquals("Fri, 31 Dec 1999 23:59:59 GMT", fields
301: .getStringField("D2"));
302: }
303:
304: public void testLongFields() throws Exception {
305: HttpFields header = new HttpFields();
306:
307: header.put("I1", "42");
308: header.put("I2", " 43 99");
309: header.put("I3", "-44;");
310: header.put("I4", " - 45abc");
311: header.put("N1", " - ");
312: header.put("N2", "xx");
313:
314: long i1 = header.getLongField("I1");
315: long i2 = header.getLongField("I2");
316: long i3 = header.getLongField("I3");
317: long i4 = header.getLongField("I4");
318:
319: try {
320: header.getLongField("N1");
321: assertTrue(false);
322: } catch (NumberFormatException e) {
323: assertTrue(true);
324: }
325:
326: try {
327: header.getLongField("N2");
328: assertTrue(false);
329: } catch (NumberFormatException e) {
330: assertTrue(true);
331: }
332:
333: assertEquals(42, i1);
334: assertEquals(43, i2);
335: assertEquals(-44, i3);
336: assertEquals(-45, i4);
337:
338: header.putLongField("I5", 46);
339: header.putLongField("I6", -47);
340: assertEquals("46", header.getStringField("I5"));
341: assertEquals("-47", header.getStringField("I6"));
342:
343: }
344:
345: public void testToString() throws Exception {
346: HttpFields header = new HttpFields();
347:
348: header.put(new ByteArrayBuffer("name0"), new View(
349: new ByteArrayBuffer("value0")));
350: header.put(new ByteArrayBuffer("name1"), new View(
351: new ByteArrayBuffer("value1".getBytes())));
352: String s1 = header.toString();
353: String s2 = header.toString();
354: //System.err.println(s1);
355: //System.err.println(s2);
356: assertEquals(s1, s2);
357: }
358: }
|