blob: 291515690a15a2d607070d63c508f16699b6ca41 [file] [log] [blame]
/*
* Copyright 2018-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.pi.runtime;
import com.google.common.collect.Lists;
import com.google.common.testing.EqualsTester;
import org.junit.Test;
import org.onlab.util.ImmutableByteSequence;
import org.onosproject.net.pi.model.PiData;
import org.onosproject.net.pi.runtime.data.PiBitString;
import org.onosproject.net.pi.runtime.data.PiBool;
import org.onosproject.net.pi.runtime.data.PiEnumString;
import org.onosproject.net.pi.runtime.data.PiErrorString;
import org.onosproject.net.pi.runtime.data.PiHeader;
import org.onosproject.net.pi.runtime.data.PiHeaderStack;
import org.onosproject.net.pi.runtime.data.PiHeaderUnion;
import org.onosproject.net.pi.runtime.data.PiHeaderUnionStack;
import org.onosproject.net.pi.runtime.data.PiStruct;
import org.onosproject.net.pi.runtime.data.PiTuple;
import static org.junit.Assert.assertEquals;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
/**
* Unit tests for PiData class.
*/
public class PiDataTest {
private final PiData bitString1 = PiBitString.of(ImmutableByteSequence.copyFrom(10));
private final PiData sameAsBitString1 = PiBitString.of(ImmutableByteSequence.copyFrom(10));
private final PiData bitString2 = PiBitString.of(ImmutableByteSequence.copyFrom(20));
private final PiData bool1 = PiBool.of(true);
private final PiData sameAsBool1 = PiBool.of(true);
private final PiData bool2 = PiBool.of(false);
private final PiData tuple1 = PiTuple.of(Lists.newArrayList(bool1));
private final PiData sameAsTuple1 = PiTuple.of(Lists.newArrayList(bool1));
private final PiData tuple2 = PiTuple.of(Lists.newArrayList(bitString1));
private final PiData struct1 = PiStruct.of(Lists.newArrayList(bool1));
private final PiData sameAsStruct1 = PiStruct.of(Lists.newArrayList(bool1));
private final PiData struct2 = PiStruct.of(Lists.newArrayList(bitString1));
private final PiData header1 = PiHeader.of(true,
Lists.newArrayList(ImmutableByteSequence.copyFrom(10)));
private final PiData sameAsHeader1 = PiHeader.of(true,
Lists.newArrayList(ImmutableByteSequence.copyFrom(10)));
private final PiData header2 = PiHeader.of(true,
Lists.newArrayList(ImmutableByteSequence.copyFrom(20)));
private final PiData headerUnion1 = PiHeaderUnion.of("port", (PiHeader) header1);
private final PiData sameAsHeaderUnion1 = PiHeaderUnion.of("port", (PiHeader) header1);
private final PiData headerUnion2 = PiHeaderUnion.of("port", (PiHeader) header2);
private final PiData inValidHeaderUnion1 = PiHeaderUnion.ofInvalid();
private final PiData sameAsInvalidHeaderUnion1 = PiHeaderUnion.ofInvalid();
private final PiData headerStack1 = PiHeaderStack.of(Lists.newArrayList((PiHeader) header1));
private final PiData sameAsHeaderStack1 = PiHeaderStack.of(Lists.newArrayList((PiHeader) header1));
private final PiData headerStack2 = PiHeaderStack.of(Lists.newArrayList((PiHeader) header2));
private final PiData headerUnionStack1 = PiHeaderUnionStack.of(Lists.newArrayList(
(PiHeaderUnion) headerUnion1));
private final PiData sameAsHeaderUnionStack1 = PiHeaderUnionStack.of(Lists.newArrayList(
(PiHeaderUnion) headerUnion1));
private final PiData headerUnionStack2 = PiHeaderUnionStack.of(Lists.newArrayList(
(PiHeaderUnion) headerUnion2));
private final PiData enumString1 = PiEnumString.of("test");
private final PiData sameAsEnumString1 = PiEnumString.of("test");
private final PiData enumString2 = PiEnumString.of("test1");
private final PiData errorString1 = PiErrorString.of("failed");
private final PiData sameAsErrorString1 = PiErrorString.of("failed");
private final PiData errorString2 = PiErrorString.of("success");
/**
* Checks that the PiData classes is immutable.
*/
@Test
public void testImmutability() {
assertThatClassIsImmutable(PiBitString.class);
assertThatClassIsImmutable(PiBool.class);
assertThatClassIsImmutable(PiTuple.class);
assertThatClassIsImmutable(PiStruct.class);
assertThatClassIsImmutable(PiHeader.class);
assertThatClassIsImmutable(PiHeaderStack.class);
assertThatClassIsImmutable(PiHeaderUnion.class);
assertThatClassIsImmutable(PiHeaderUnionStack.class);
assertThatClassIsImmutable(PiEnumString.class);
assertThatClassIsImmutable(PiErrorString.class);
}
/**
* Checks the PiData type.
*/
@Test
public void testPiDataType() {
assertEquals(bitString1.type(), PiData.Type.BITSTRING);
assertEquals(bool1.type(), PiData.Type.BOOL);
assertEquals(tuple1.type(), PiData.Type.TUPLE);
assertEquals(struct1.type(), PiData.Type.STRUCT);
assertEquals(header1.type(), PiData.Type.HEADER);
assertEquals(headerUnion1.type(), PiData.Type.HEADERUNION);
assertEquals(headerStack1.type(), PiData.Type.HEADERSTACK);
assertEquals(headerUnionStack1.type(), PiData.Type.HEADERUNIONSTACK);
assertEquals(enumString1.type(), PiData.Type.ENUMSTRING);
assertEquals(errorString1.type(), PiData.Type.ERRORSTRING);
}
/**
* Checks the operation of equals(), hashCode() and toString() methods.
*/
@Test
public void testEquals() {
new EqualsTester()
.addEqualityGroup(bitString1, sameAsBitString1)
.addEqualityGroup(bitString2)
.testEquals();
new EqualsTester()
.addEqualityGroup(bool1, sameAsBool1)
.addEqualityGroup(bool2)
.testEquals();
new EqualsTester()
.addEqualityGroup(tuple1, sameAsTuple1)
.addEqualityGroup(tuple2)
.testEquals();
new EqualsTester()
.addEqualityGroup(struct1, sameAsStruct1)
.addEqualityGroup(struct2)
.testEquals();
new EqualsTester()
.addEqualityGroup(header1, sameAsHeader1)
.addEqualityGroup(header2)
.testEquals();
new EqualsTester()
.addEqualityGroup(headerUnion1, sameAsHeaderUnion1)
.addEqualityGroup(headerUnion2)
.testEquals();
new EqualsTester()
.addEqualityGroup(inValidHeaderUnion1, sameAsInvalidHeaderUnion1)
.testEquals();
new EqualsTester()
.addEqualityGroup(headerStack1, sameAsHeaderStack1)
.addEqualityGroup(headerStack2)
.testEquals();
new EqualsTester()
.addEqualityGroup(headerUnionStack1, sameAsHeaderUnionStack1)
.addEqualityGroup(headerUnionStack2)
.testEquals();
new EqualsTester()
.addEqualityGroup(enumString1, sameAsEnumString1)
.addEqualityGroup(enumString2)
.testEquals();
new EqualsTester()
.addEqualityGroup(errorString1, sameAsErrorString1)
.addEqualityGroup(errorString2)
.testEquals();
}
}