blob: 291515690a15a2d607070d63c508f16699b6ca41 [file] [log] [blame]
FrankWangea70de32018-05-08 15:41:25 +08001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.net.pi.runtime;
18
19import com.google.common.collect.Lists;
20import com.google.common.testing.EqualsTester;
21import org.junit.Test;
22import org.onlab.util.ImmutableByteSequence;
23import org.onosproject.net.pi.model.PiData;
24import org.onosproject.net.pi.runtime.data.PiBitString;
25import org.onosproject.net.pi.runtime.data.PiBool;
26import org.onosproject.net.pi.runtime.data.PiEnumString;
27import org.onosproject.net.pi.runtime.data.PiErrorString;
28import org.onosproject.net.pi.runtime.data.PiHeader;
29import org.onosproject.net.pi.runtime.data.PiHeaderStack;
30import org.onosproject.net.pi.runtime.data.PiHeaderUnion;
31import org.onosproject.net.pi.runtime.data.PiHeaderUnionStack;
32import org.onosproject.net.pi.runtime.data.PiStruct;
33import org.onosproject.net.pi.runtime.data.PiTuple;
34
35import static org.junit.Assert.assertEquals;
36import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
37
38/**
39 * Unit tests for PiData class.
40 */
41public class PiDataTest {
42 private final PiData bitString1 = PiBitString.of(ImmutableByteSequence.copyFrom(10));
43 private final PiData sameAsBitString1 = PiBitString.of(ImmutableByteSequence.copyFrom(10));
44 private final PiData bitString2 = PiBitString.of(ImmutableByteSequence.copyFrom(20));
45
46 private final PiData bool1 = PiBool.of(true);
47 private final PiData sameAsBool1 = PiBool.of(true);
48 private final PiData bool2 = PiBool.of(false);
49
50 private final PiData tuple1 = PiTuple.of(Lists.newArrayList(bool1));
51 private final PiData sameAsTuple1 = PiTuple.of(Lists.newArrayList(bool1));
52 private final PiData tuple2 = PiTuple.of(Lists.newArrayList(bitString1));
53
54 private final PiData struct1 = PiStruct.of(Lists.newArrayList(bool1));
55 private final PiData sameAsStruct1 = PiStruct.of(Lists.newArrayList(bool1));
56 private final PiData struct2 = PiStruct.of(Lists.newArrayList(bitString1));
57
58 private final PiData header1 = PiHeader.of(true,
59 Lists.newArrayList(ImmutableByteSequence.copyFrom(10)));
60 private final PiData sameAsHeader1 = PiHeader.of(true,
61 Lists.newArrayList(ImmutableByteSequence.copyFrom(10)));
62 private final PiData header2 = PiHeader.of(true,
63 Lists.newArrayList(ImmutableByteSequence.copyFrom(20)));
64
65 private final PiData headerUnion1 = PiHeaderUnion.of("port", (PiHeader) header1);
66 private final PiData sameAsHeaderUnion1 = PiHeaderUnion.of("port", (PiHeader) header1);
67 private final PiData headerUnion2 = PiHeaderUnion.of("port", (PiHeader) header2);
68
69 private final PiData inValidHeaderUnion1 = PiHeaderUnion.ofInvalid();
70 private final PiData sameAsInvalidHeaderUnion1 = PiHeaderUnion.ofInvalid();
71
72 private final PiData headerStack1 = PiHeaderStack.of(Lists.newArrayList((PiHeader) header1));
73 private final PiData sameAsHeaderStack1 = PiHeaderStack.of(Lists.newArrayList((PiHeader) header1));
74 private final PiData headerStack2 = PiHeaderStack.of(Lists.newArrayList((PiHeader) header2));
75
76 private final PiData headerUnionStack1 = PiHeaderUnionStack.of(Lists.newArrayList(
77 (PiHeaderUnion) headerUnion1));
78 private final PiData sameAsHeaderUnionStack1 = PiHeaderUnionStack.of(Lists.newArrayList(
79 (PiHeaderUnion) headerUnion1));
80 private final PiData headerUnionStack2 = PiHeaderUnionStack.of(Lists.newArrayList(
81 (PiHeaderUnion) headerUnion2));
82
83 private final PiData enumString1 = PiEnumString.of("test");
84 private final PiData sameAsEnumString1 = PiEnumString.of("test");
85 private final PiData enumString2 = PiEnumString.of("test1");
86
87 private final PiData errorString1 = PiErrorString.of("failed");
88 private final PiData sameAsErrorString1 = PiErrorString.of("failed");
89 private final PiData errorString2 = PiErrorString.of("success");
90
91 /**
92 * Checks that the PiData classes is immutable.
93 */
94 @Test
95 public void testImmutability() {
96 assertThatClassIsImmutable(PiBitString.class);
97 assertThatClassIsImmutable(PiBool.class);
98 assertThatClassIsImmutable(PiTuple.class);
99 assertThatClassIsImmutable(PiStruct.class);
100 assertThatClassIsImmutable(PiHeader.class);
101 assertThatClassIsImmutable(PiHeaderStack.class);
102 assertThatClassIsImmutable(PiHeaderUnion.class);
103 assertThatClassIsImmutable(PiHeaderUnionStack.class);
104 assertThatClassIsImmutable(PiEnumString.class);
105 assertThatClassIsImmutable(PiErrorString.class);
106 }
107
108 /**
109 * Checks the PiData type.
110 */
111 @Test
112 public void testPiDataType() {
113 assertEquals(bitString1.type(), PiData.Type.BITSTRING);
114 assertEquals(bool1.type(), PiData.Type.BOOL);
115 assertEquals(tuple1.type(), PiData.Type.TUPLE);
116 assertEquals(struct1.type(), PiData.Type.STRUCT);
117 assertEquals(header1.type(), PiData.Type.HEADER);
118 assertEquals(headerUnion1.type(), PiData.Type.HEADERUNION);
119 assertEquals(headerStack1.type(), PiData.Type.HEADERSTACK);
120 assertEquals(headerUnionStack1.type(), PiData.Type.HEADERUNIONSTACK);
121 assertEquals(enumString1.type(), PiData.Type.ENUMSTRING);
122 assertEquals(errorString1.type(), PiData.Type.ERRORSTRING);
123 }
124
125 /**
126 * Checks the operation of equals(), hashCode() and toString() methods.
127 */
128 @Test
129 public void testEquals() {
130 new EqualsTester()
131 .addEqualityGroup(bitString1, sameAsBitString1)
132 .addEqualityGroup(bitString2)
133 .testEquals();
134
135 new EqualsTester()
136 .addEqualityGroup(bool1, sameAsBool1)
137 .addEqualityGroup(bool2)
138 .testEquals();
139
140 new EqualsTester()
141 .addEqualityGroup(tuple1, sameAsTuple1)
142 .addEqualityGroup(tuple2)
143 .testEquals();
144
145 new EqualsTester()
146 .addEqualityGroup(struct1, sameAsStruct1)
147 .addEqualityGroup(struct2)
148 .testEquals();
149
150 new EqualsTester()
151 .addEqualityGroup(header1, sameAsHeader1)
152 .addEqualityGroup(header2)
153 .testEquals();
154
155 new EqualsTester()
156 .addEqualityGroup(headerUnion1, sameAsHeaderUnion1)
157 .addEqualityGroup(headerUnion2)
158 .testEquals();
159
160 new EqualsTester()
161 .addEqualityGroup(inValidHeaderUnion1, sameAsInvalidHeaderUnion1)
162 .testEquals();
163
164 new EqualsTester()
165 .addEqualityGroup(headerStack1, sameAsHeaderStack1)
166 .addEqualityGroup(headerStack2)
167 .testEquals();
168
169 new EqualsTester()
170 .addEqualityGroup(headerUnionStack1, sameAsHeaderUnionStack1)
171 .addEqualityGroup(headerUnionStack2)
172 .testEquals();
173
174 new EqualsTester()
175 .addEqualityGroup(enumString1, sameAsEnumString1)
176 .addEqualityGroup(enumString2)
177 .testEquals();
178
179 new EqualsTester()
180 .addEqualityGroup(errorString1, sameAsErrorString1)
181 .addEqualityGroup(errorString2)
182 .testEquals();
183 }
184
185}