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);
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
index 11a1204..75a9f1b 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
@@ -206,8 +206,7 @@
                 // FIXME: Is the enclosing if required here?
                 verify(replaced,
                        "Replacing devices cache failed. PID:%s [expected:%s, found:%s, new=%s]",
-                       providerId, oldDevice, devices.get(newDevice.id())
-                        , newDevice);
+                       providerId, oldDevice, devices.get(newDevice.id()), newDevice);
             }
             if (!providerId.isAncillary()) {
                 availableDevices.add(newDevice.id());
