Ray Milkey

Packet class unit tests

Added unit tests for DefaultInboundPacket, DefaultOutboundPacket,
and DefaultPacketContext.

Made DefaultInboundPacket and DefaultOutboundPacket proper immutable classes

Added equals() and hashCode() to DefaultOutboundPacket

Change-Id: Ibb1199a5282743ccaf0844c0b7ccfcc4cb13f52e
......@@ -26,7 +26,7 @@ import static com.google.common.base.MoreObjects.toStringHelper;
/**
* Default implementation of an immutable inbound packet.
*/
public class DefaultInboundPacket implements InboundPacket {
public final class DefaultInboundPacket implements InboundPacket {
private final ConnectPoint receivedFrom;
private final Ethernet parsed;
......
......@@ -16,6 +16,7 @@
package org.onlab.onos.net.packet;
import java.nio.ByteBuffer;
import java.util.Objects;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.flow.TrafficTreatment;
......@@ -25,7 +26,7 @@ import com.google.common.base.MoreObjects;
/**
* Default implementation of an immutable outbound packet.
*/
public class DefaultOutboundPacket implements OutboundPacket {
public final class DefaultOutboundPacket implements OutboundPacket {
private final DeviceId sendThrough;
private final TrafficTreatment treatment;
private final ByteBuffer data;
......@@ -61,6 +62,24 @@ public class DefaultOutboundPacket implements OutboundPacket {
}
@Override
public int hashCode() {
return Objects.hash(sendThrough, treatment, data);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof OutboundPacket) {
final DefaultOutboundPacket other = (DefaultOutboundPacket) obj;
return Objects.equals(this.sendThrough, other.sendThrough) &&
Objects.equals(this.treatment, other.treatment) &&
Objects.equals(this.data, other.data);
}
return false;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("sendThrough", sendThrough)
......
/*
* Copyright 2014 Open Networking Laboratory
*
* 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.onlab.onos.net.packet;
import java.nio.ByteBuffer;
import org.junit.Test;
import org.onlab.packet.Ethernet;
import org.onlab.packet.MacAddress;
import com.google.common.testing.EqualsTester;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.notNullValue;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
import static org.onlab.onos.net.NetTestTools.connectPoint;
/**
* Unit tests for the DefaultInboundPacket class.
*/
public class DefaultInboundPacketTest {
final Ethernet eth = new Ethernet()
.setDestinationMACAddress(MacAddress.BROADCAST)
.setSourceMACAddress(MacAddress.BROADCAST);
final ByteBuffer byteBuffer = ByteBuffer.wrap(eth.serialize());
final DefaultInboundPacket packet1 =
new DefaultInboundPacket(connectPoint("d1", 1),
eth,
byteBuffer);
final DefaultInboundPacket sameAsPacket1 =
new DefaultInboundPacket(connectPoint("d1", 1),
eth,
byteBuffer);
final DefaultInboundPacket packet2 =
new DefaultInboundPacket(connectPoint("d2", 1),
eth,
byteBuffer);
/**
* Checks that the DefaultInboundPacket class is immutable.
*/
@Test
public void testImmutability() {
assertThatClassIsImmutable(DefaultInboundPacket.class);
}
/**
* Tests the equals(), hashCode() and toString() methods.
*/
@Test
public void testEquals() {
new EqualsTester()
.addEqualityGroup(packet1, sameAsPacket1)
.addEqualityGroup(packet2)
.testEquals();
}
/**
* Tests the object creation through the constructor.
*/
@Test
public void testConstruction() {
assertThat(packet1.receivedFrom(), equalTo(connectPoint("d1", 1)));
assertThat(packet1.parsed(), equalTo(eth));
assertThat(packet1.unparsed(), notNullValue());
}
}
/*
* Copyright 2014 Open Networking Laboratory
*
* 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.onlab.onos.net.packet;
import java.nio.ByteBuffer;
import org.junit.Test;
import org.onlab.onos.net.flow.TrafficTreatment;
import org.onlab.onos.net.intent.IntentTestsMocks;
import org.onlab.packet.Ethernet;
import org.onlab.packet.MacAddress;
import com.google.common.testing.EqualsTester;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
import static org.onlab.onos.net.NetTestTools.did;
/**
* Unit tests for the DefaultOutboundPacketTest class.
*/
public class DefaultOutboundPacketTest {
final Ethernet eth = new Ethernet()
.setDestinationMACAddress(MacAddress.BROADCAST)
.setSourceMACAddress(MacAddress.BROADCAST);
final ByteBuffer byteBuffer = ByteBuffer.wrap(eth.serialize());
final TrafficTreatment treatment = new IntentTestsMocks.MockTreatment();
final DefaultOutboundPacket packet1 =
new DefaultOutboundPacket(did("d1"),
treatment,
byteBuffer);
final DefaultOutboundPacket sameAsPacket1 =
new DefaultOutboundPacket(did("d1"),
treatment,
byteBuffer);
final DefaultOutboundPacket packet2 =
new DefaultOutboundPacket(did("d2"),
treatment,
byteBuffer);
/**
* Checks that the DefaultOutboundPacket class is immutable.
*/
@Test
public void testImmutability() {
assertThatClassIsImmutable(DefaultOutboundPacket.class);
}
/**
* Tests the equals(), hashCode() and toString() methods.
*/
@Test
public void testEquals() {
new EqualsTester()
.addEqualityGroup(packet1, sameAsPacket1)
.addEqualityGroup(packet2)
.testEquals();
}
/**
* Tests the object creation through the constructor.
*/
@Test
public void testConstruction() {
assertThat(packet1.sendThrough(), equalTo(did("d1")));
assertThat(packet1.data(), equalTo(byteBuffer));
assertThat(packet1.treatment(), equalTo(treatment));
}
}
/*
* Copyright 2014 Open Networking Laboratory
*
* 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.onlab.onos.net.packet;
import java.nio.ByteBuffer;
import org.junit.Test;
import org.onlab.onos.net.flow.TrafficTreatment;
import org.onlab.onos.net.intent.IntentTestsMocks;
import org.onlab.packet.Ethernet;
import org.onlab.packet.MacAddress;
import com.google.common.testing.EqualsTester;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass;
import static org.onlab.onos.net.NetTestTools.connectPoint;
import static org.onlab.onos.net.NetTestTools.did;
/**
* Unit tests for the DefaultPacketContextTest.
*/
public class DefaultPacketContextTest {
final Ethernet eth = new Ethernet()
.setDestinationMACAddress(MacAddress.BROADCAST)
.setSourceMACAddress(MacAddress.BROADCAST);
final ByteBuffer byteBuffer = ByteBuffer.wrap(eth.serialize());
final DefaultInboundPacket inPacket =
new DefaultInboundPacket(connectPoint("d1", 1),
eth,
byteBuffer);
final TrafficTreatment treatment = new IntentTestsMocks.MockTreatment();
final DefaultOutboundPacket outPacket =
new DefaultOutboundPacket(did("d1"),
treatment,
byteBuffer);
static class MockPacketContext extends DefaultPacketContext {
protected MockPacketContext(long time, InboundPacket inPkt,
OutboundPacket outPkt, boolean block) {
super(time, inPkt, outPkt, block);
}
@Override
public void send() {
}
@Override
public boolean block() {
return super.block();
}
}
final DefaultPacketContext context1 =
new MockPacketContext(123L, inPacket, outPacket, true);
final DefaultPacketContext sameAsContext1 =
new MockPacketContext(123L, inPacket, outPacket, true);
final DefaultPacketContext context2 =
new MockPacketContext(123123L, inPacket, outPacket, true);
/**
* Checks that the DefaultOutboundPacket class is immutable but can be
* used as a base class.
*/
@Test
public void testImmutability() {
assertThatClassIsImmutableBaseClass(DefaultPacketContext.class);
}
/**
* Tests the equals(), hashCode() and toString() methods.
*/
@Test
public void testEquals() {
// No hashCode() or equals() defined, object comparison is used.
new EqualsTester()
.addEqualityGroup(context1)
.addEqualityGroup(sameAsContext1)
.addEqualityGroup(context2)
.testEquals();
}
/**
* Tests that objects are created properly.
*/
@Test
public void testConstruction() {
assertThat(context1.block(), is(true));
assertThat(context1.inPacket(), is(inPacket));
assertThat(context1.isHandled(), is(true));
assertThat(context1.outPacket(), is(outPacket));
assertThat(context1.time(), is(123L));
assertThat(context1.treatmentBuilder(), is(notNullValue()));
}
}