summaryrefslogtreecommitdiffstats
path: root/framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java')
-rw-r--r--framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java
new file mode 100644
index 00000000..209b1d27
--- /dev/null
+++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2015 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.packet;
+
+import java.nio.ByteBuffer;
+
+import static junit.framework.TestCase.fail;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Utilities for testing packet methods.
+ */
+public final class PacketTestUtils {
+
+ private PacketTestUtils() {
+ }
+
+ /**
+ * Tests that the Deserializer function is resilient to bad input parameters
+ * such as null input, negative offset and length, etc.
+ *
+ * @param deserializer deserializer function to test
+ */
+ public static void testDeserializeBadInput(Deserializer deserializer) {
+ byte[] bytes = ByteBuffer.allocate(4).array();
+
+ try {
+ deserializer.deserialize(null, 0, 4);
+ fail("NullPointerException was not thrown");
+ } catch (NullPointerException e) {
+ assertTrue(true);
+ } catch (DeserializationException e) {
+ fail("NullPointerException was not thrown");
+ }
+
+ // input byte array length, offset and length don't make sense
+ expectDeserializationException(deserializer, bytes, -1, 0);
+ expectDeserializationException(deserializer, bytes, 0, -1);
+ expectDeserializationException(deserializer, bytes, 0, 5);
+ expectDeserializationException(deserializer, bytes, 2, 3);
+ expectDeserializationException(deserializer, bytes, 5, 0);
+ }
+
+ /**
+ * Tests that the Deserializer function is resilient to truncated input, or
+ * cases where the input byte array does not contain enough bytes to
+ * deserialize the packet.
+ *
+ * @param deserializer deserializer function to test
+ * @param header byte array of a full-size packet
+ */
+ public static void testDeserializeTruncated(Deserializer deserializer,
+ byte[] header) {
+ byte[] truncated;
+
+ for (int i = 0; i < header.length; i++) {
+ truncated = new byte[i];
+
+ ByteBuffer.wrap(header).get(truncated);
+
+ expectDeserializationException(deserializer, truncated, 0, truncated.length);
+ }
+ }
+
+ /**
+ * Run the given deserializer function against the given inputs and verify
+ * that a DeserializationException is thrown. The the test will fail if a
+ * DeserializationException is not thrown by the deserializer function.
+ *
+ * @param deserializer deserializer function to test
+ * @param bytes input byte array
+ * @param offset input offset
+ * @param length input length
+ */
+ public static void expectDeserializationException(Deserializer deserializer,
+ byte[] bytes, int offset, int length) {
+ try {
+ deserializer.deserialize(bytes, offset, length);
+ fail("DeserializationException was not thrown");
+ } catch (DeserializationException e) {
+ assertTrue(true);
+ }
+ }
+}