Unit tests for DefaultTrafficTreatment

Change-Id: I68b0773b69d85c1d05d58b32c1dceaca73c0a5e1
diff --git a/core/api/src/test/java/org/onlab/onos/net/flow/DefaultTrafficTreatmentTest.java b/core/api/src/test/java/org/onlab/onos/net/flow/DefaultTrafficTreatmentTest.java
new file mode 100644
index 0000000..56056af
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/flow/DefaultTrafficTreatmentTest.java
@@ -0,0 +1,113 @@
+/*
+ * 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.flow;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.onlab.onos.net.PortNumber;
+import org.onlab.onos.net.flow.instructions.Instruction;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+
+import com.google.common.testing.EqualsTester;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+import static org.onlab.onos.net.flow.instructions.L0ModificationInstruction.L0SubType;
+import static org.onlab.onos.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
+
+/**
+ * Unit tests for the DefaultTrafficTreatment class.
+ */
+public class DefaultTrafficTreatmentTest {
+
+    // Tests for the nested Builder class
+
+    /**
+     * Tests that the Builder constructors return equivalent objects
+     * when given the same data.
+     */
+    @Test
+    public void testTreatmentBuilderConstructors() {
+        final TrafficTreatment treatment1 =
+                DefaultTrafficTreatment.builder()
+                        .add(new ModLambdaInstruction(L0SubType.LAMBDA, (short) 4))
+                        .build();
+        final TrafficTreatment treatment2 =
+                DefaultTrafficTreatment.builder(treatment1).build();
+        assertThat(treatment1, is(equalTo(treatment2)));
+    }
+
+    /**
+     * Tests methods defined on the Builder.
+     */
+    @Test
+    public void testBuilderMethods() {
+        final Instruction instruction1 =
+                new ModLambdaInstruction(L0SubType.LAMBDA, (short) 4);
+
+        final TrafficTreatment.Builder builder1 =
+                DefaultTrafficTreatment.builder()
+                .add(instruction1)
+                .setEthDst(MacAddress.BROADCAST)
+                .setEthSrc(MacAddress.BROADCAST)
+                .setIpDst(IpAddress.valueOf("1.1.1.1"))
+                .setIpSrc(IpAddress.valueOf("2.2.2.2"))
+                .setLambda((short) 4)
+                .setOutput(PortNumber.portNumber(2))
+                .setVlanId(VlanId.vlanId((short) 4))
+                .setVlanPcp((byte) 3);
+
+        final TrafficTreatment treatment1 = builder1.build();
+
+        final List<Instruction> instructions1 = treatment1.instructions();
+        assertThat(instructions1, hasSize(9));
+
+        builder1.drop();
+        builder1.add(instruction1);
+
+        final List<Instruction> instructions2 = builder1.build().instructions();
+        assertThat(instructions2, hasSize(8));
+    }
+
+    /**
+     * Tests equals(), hashCode() and toString() methods of
+     * DefaultTrafficTreatment.
+     */
+    @Test
+    public void testEquals() {
+        final TrafficTreatment treatment1 =
+                DefaultTrafficTreatment.builder()
+                        .add(new ModLambdaInstruction(L0SubType.LAMBDA, (short) 4))
+                        .build();
+        final TrafficTreatment sameAsTreatment1 =
+                DefaultTrafficTreatment.builder()
+                        .add(new ModLambdaInstruction(L0SubType.LAMBDA, (short) 4))
+                        .build();
+        final TrafficTreatment treatment2 =
+                DefaultTrafficTreatment.builder()
+                        .add(new ModLambdaInstruction(L0SubType.LAMBDA, (short) 2))
+                        .build();
+        new EqualsTester()
+                .addEqualityGroup(treatment1, sameAsTreatment1)
+                .addEqualityGroup(treatment2)
+                .testEquals();
+    }
+}