blob: fa16481c5a0c7fd664625914f41c80a64fe5db86 [file] [log] [blame]
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -07001/**
2 *
3 */
4package net.onrc.onos.core.util;
5
6import static org.junit.Assert.*;
7
8import org.junit.Test;
9
10/**
11 * PortNumber test mainly focused on handling unsigned port no correctly.
12 */
13public class PortNumberTest {
14
15 private static final PortNumber PORT_NONE = new PortNumber(0xffff);
16 private static final PortNumber PORT_LOCAL = new PortNumber(0xfffe);
17
18 /**
Yuta HIGUCHI5865bdb2014-07-30 09:32:13 -070019 * Test method for {@link PortNumber#uint16(short)}.
20 */
21 @Test
22 public void testPortNumberUint16() {
23 final PortNumber ref = new PortNumber(PORT_NONE);
24 PortNumber p = PortNumber.uint16((short) 0xffff);
25
26 assertEquals(ref, p);
27 assertEquals(0xFFFFL, p.value());
28 }
29
30 /**
31 * Test method for {@link PortNumber#uint32(int)}.
32 */
33 @Test
34 public void testPortNumberUint32() {
35 final PortNumber ref = new PortNumber("FFFFFFFF", 16);
36 PortNumber p = PortNumber.uint32(0xFFFFFFFF);
37
38 assertEquals(ref, p);
39 assertEquals(0xFFFFFFFFL, p.value());
40 }
41
42 /**
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -070043 * Test method for {@link PortNumber#PortNumber(String)}.
44 */
45 @Test
46 public void testPortNumberDecimalString() {
47 final PortNumber ref = new PortNumber(PORT_NONE);
48 PortNumber parsed = new PortNumber("65535");
49
50 assertEquals(ref, parsed);
51 }
52
53 /**
54 * Test method for {@link PortNumber#PortNumber(String, int)}.
55 */
56 @Test
57 public void testPortNumberString() {
58 final PortNumber ref = new PortNumber(PORT_NONE);
59 PortNumber parsed = new PortNumber("ffff", 16);
60 // Note: cannot parse "0xffff" now,
61 // which is the same behavior as Integer.parseInt.
62
63 assertEquals(ref, parsed);
64 }
65
66 /**
67 * Test method for {@link PortNumber#PortNumber(PortNumber)}.
68 */
69 @Test
70 public void testPortNumberPortNumber() {
71 PortNumber p = new PortNumber(PORT_LOCAL);
72 PortNumber copy = new PortNumber(p);
73
74 assertEquals(p, copy);
75 }
76
77 /**
78 * Test method for {@link PortNumber#PortNumber(PortNumber.PortValues)}.
79 */
80 @Test
81 public void testPortNumberPortValues() {
82 PortNumber local = new PortNumber(PORT_LOCAL);
83 assertEquals(0xfffeL, local.value());
84 assertEquals((short) 0xfffe, local.shortValue());
85 }
86
87 /**
88 * Test method for {@link PortNumber#shortToUnsignedLong(short)}.
89 */
90 @Test
91 public void testLongValueShort() {
92 assertEquals(0L, PortNumber.shortToUnsignedLong((short) 0));
93
94 assertEquals(1L, PortNumber.shortToUnsignedLong((short) 1));
95
96 // -1 as unsigned short
97 assertEquals(0xffffL, PortNumber.shortToUnsignedLong((short) -1));
98 }
99
100 /**
101 * Test method for {@link PortNumber#shortValue()}.
102 */
103 @Test
104 public void testShortValue() {
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700105 assertEquals(0L, PortNumber.uint16((short) 0).shortValue());
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -0700106
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700107 assertEquals(1L, PortNumber.uint16((short) 1).shortValue());
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -0700108
109 // user of #shortValue() needs to be careful
110 // simply widening them will result in negative value
111 assertEquals(-1L, new PortNumber(PORT_NONE).shortValue());
112
113 // user of #shortValue() needs to be careful
114 // should use PortNumber.shortToUnsignedLong or mask manually
115 assertEquals(0xffffL, PortNumber.shortToUnsignedLong(new PortNumber(PORT_NONE).shortValue()));
116 assertEquals(0xffffL, 0xffff & new PortNumber(PORT_NONE).shortValue());
117}
118
119 /**
120 * Test method for {@link PortNumber#value()}.
121 */
122 @Test
123 public void testLongValue() {
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700124 assertEquals(0L, PortNumber.uint16((short) 0).value());
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -0700125
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700126 assertEquals(1L, PortNumber.uint16((short) 1).value());
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -0700127
128 assertEquals(0xffffL, new PortNumber(PORT_NONE).value());
129 }
130
131 /**
132 * Test method for {@link PortNumber#toString()}.
133 */
134 @Test
135 public void testToString() {
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700136 assertEquals("0", PortNumber.uint16((short) 0).toString());
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -0700137
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700138 assertEquals("1", PortNumber.uint16((short) 1).toString());
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -0700139
140 // 0xffff in decimal
141 assertEquals("65535", new PortNumber(PORT_NONE).toString());
142 }
143
144 /**
145 * Test method for {@link PortNumber#equals(java.lang.Object)}.
146 */
147 @Test
148 public void testEqualsObject() {
149 // Some trivial
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700150 assertTrue(new PortNumber(PORT_NONE).equals(PortNumber.uint16((short) 0xffff)));
151 assertFalse(PortNumber.uint16((short) 0).equals(PortNumber.uint16((short) 1)));
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -0700152
153 // different type
Yuta HIGUCHIa507baf2014-08-22 13:42:40 -0700154 assertFalse(PortNumber.uint16((short) 0).equals(Short.valueOf((short) 0)));
Yuta HIGUCHI9da3a6e2014-06-10 22:11:58 -0700155
156 }
157
158}