diff --git a/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
index f6a9213..c2f4ccf 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/FlowRuleCodecTest.java
@@ -541,7 +541,7 @@
                 is(80));
 
        assertThat(((OduSignalIdCriterion) criterion).oduSignalId().tributarySlotBitmap(),
-                is(new byte [] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}));
+                is(new byte[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}));
     }
 
     /**
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
index f7b0261..8d45f4c 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/InstructionCodecTest.java
@@ -127,7 +127,7 @@
      */
     @Test
     public void modOduSignalIdInstructionTest() {
-        OduSignalId oduSignalId = OduSignalId.oduSignalId(1, 8, new byte [] {8, 0, 0, 0, 0, 0, 0, 0, 0, 0});
+        OduSignalId oduSignalId = OduSignalId.oduSignalId(1, 8, new byte[] {8, 0, 0, 0, 0, 0, 0, 0, 0, 0});
         L1ModificationInstruction.ModOduSignalIdInstruction instruction =
                 (L1ModificationInstruction.ModOduSignalIdInstruction)
                     Instructions.modL1OduSignalId(oduSignalId);
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/InstructionJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/InstructionJsonMatcher.java
index 4c49d64..3f65e8c 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/InstructionJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/InstructionJsonMatcher.java
@@ -230,7 +230,7 @@
         final JsonNode jsonOduSignal = instructionJson.get("oduSignalId");
         int jsonTpn = jsonOduSignal.get("tributaryPortNumber").intValue();
         int jsonTsLen = jsonOduSignal.get("tributarySlotLength").intValue();
-        byte [] tributaryBitMap = HexString.fromHexString(jsonOduSignal.get("tributarySlotBitmap").asText());
+        byte[] tributaryBitMap = HexString.fromHexString(jsonOduSignal.get("tributarySlotBitmap").asText());
         OduSignalId  jsonOduSignalId = OduSignalId.oduSignalId(jsonTpn, jsonTsLen, tributaryBitMap);
         if (!instructionToMatch.oduSignalId().equals(jsonOduSignalId)) {
             description.appendText("oduSignalId was " + instructionToMatch);
