Add mac address field into virtual router

Change-Id: I387507756d88732f9e1733b9d1037f8d0861f848
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterCodec.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterCodec.java
index d1239de..5ca4ab6 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterCodec.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterCodec.java
@@ -62,7 +62,8 @@
 
         ObjectNode result = context.mapper().createObjectNode()
                 .put(NAME, router.name())
-                .put(ENABLE_SNAT, router.enableSnat());
+                .put(ENABLE_SNAT, router.enableSnat())
+                .put(MAC_ADDRESS, router.mac().toString());
 
         if (router.description() != null) {
             result.put(DESCRIPTION, router.description());
@@ -113,8 +114,12 @@
         String name = nullIsIllegal(json.get(NAME).asText(),
                 NAME + MISSING_MESSAGE);
 
+        String vrouterMac = nullIsIllegal(json.get(MAC_ADDRESS).asText(),
+                MAC_ADDRESS + MISSING_MESSAGE);
+
         KubevirtRouter.Builder builder = DefaultKubevirtRouter.builder()
-                .name(name);
+                .name(name)
+                .mac(MacAddress.valueOf(vrouterMac));
 
         JsonNode descriptionJson = json.get(DESCRIPTION);
         if (descriptionJson != null) {
diff --git a/apps/kubevirt-networking/app/src/main/resources/definitions/KubevirtRouters.json b/apps/kubevirt-networking/app/src/main/resources/definitions/KubevirtRouters.json
index 3546dff..835dfea 100644
--- a/apps/kubevirt-networking/app/src/main/resources/definitions/KubevirtRouters.json
+++ b/apps/kubevirt-networking/app/src/main/resources/definitions/KubevirtRouters.json
@@ -17,6 +17,7 @@
         "required": [
           "name",
           "enableSnat",
+          "mac",
           "internal",
           "external",
           "peerRouter"
@@ -32,6 +33,11 @@
             "example": "true",
             "description": "Enable SNAT flag."
           },
+          "mac": {
+            "type": "string",
+            "example": "11:22:33:44:55:66",
+            "description": "The MAC address of virtual router."
+          },
           "internal": {
             "type": "array",
             "xml": {
@@ -77,7 +83,7 @@
                 "example": "10.10.10.1",
                 "description": "IP address of the peer router"
               },
-              "macaddress": {
+              "mac": {
                 "type": "string",
                 "example": "11:22:33:44:55:66",
                 "description": "MAC address of the peer router"
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterCodecTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterCodecTest.java
index 3af305c..1ff8951 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterCodecTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterCodecTest.java
@@ -79,6 +79,7 @@
         KubevirtRouter router = DefaultKubevirtRouter.builder()
                 .name("router-1")
                 .enableSnat(true)
+                .mac(MacAddress.valueOf("11:22:33:44:55:66"))
                 .description("router-1")
                 .internal(ImmutableSet.of("vlan-1"))
                 .external(ImmutableMap.of("10.10.10.20", "flat-1"))
@@ -97,6 +98,7 @@
         assertEquals("router-1", router.name());
         assertEquals("Example Virtual Router", router.description());
         assertTrue(router.enableSnat());
+        assertEquals("11:22:33:44:55:66", router.mac().toString());
         assertEquals("192.168.10.5",
                 router.external().keySet().stream().findAny().orElse(null));
         assertEquals("external-network", router.external().get("192.168.10.5"));
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterJsonMatcher.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterJsonMatcher.java
index 1b394e7..a855f42 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterJsonMatcher.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtRouterJsonMatcher.java
@@ -73,6 +73,14 @@
             }
         }
 
+        // check vrouter MAC
+        String jsonMac = jsonNode.get(MAC_ADDRESS).asText();
+        String mac = router.mac().toString();
+        if (!jsonMac.equals(mac)) {
+            description.appendText("MAC was " + jsonMac);
+            return false;
+        }
+
         // check internal
         JsonNode jsonInternal = jsonNode.get(INTERNAL);
         if (jsonInternal != null) {
@@ -134,10 +142,10 @@
                 }
             }
 
-            JsonNode jsonMac = jsonPeerRouter.get(MAC_ADDRESS);
+            JsonNode jsonProuterMac = jsonPeerRouter.get(MAC_ADDRESS);
 
-            if (jsonMac != null) {
-                if (!jsonMac.asText().equals(router.peerRouter().macAddress().toString())) {
+            if (jsonProuterMac != null) {
+                if (!jsonProuterMac.asText().equals(router.peerRouter().macAddress().toString())) {
                     description.appendText("Peer router MAC was " + jsonMac);
                     return false;
                 }
diff --git a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtRouter.json b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtRouter.json
index 14e60ec..5d9d53c 100644
--- a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtRouter.json
+++ b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtRouter.json
@@ -2,6 +2,7 @@
   "name": "router-1",
   "description": "Example Virtual Router",
   "enableSnat": true,
+  "mac": "11:22:33:44:55:66",
   "external": {
     "ip": "192.168.10.5",
     "network": "external-network"