Support injecting novaMetadataIp and novaMetadataPort through cfg

Change-Id: Ida449424235b70a791e8ed1d423f021f6d6726f7
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/NeutronConfigCodec.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/NeutronConfigCodec.java
index 5acf180..48ca3ac 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/NeutronConfigCodec.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/NeutronConfigCodec.java
@@ -16,11 +16,12 @@
 
 package org.onosproject.openstacknode.codec;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
-import org.onosproject.openstacknode.api.NeutronConfig;
 import org.onosproject.openstacknode.api.DefaultNeutronConfig;
+import org.onosproject.openstacknode.api.NeutronConfig;
 
 import static org.onlab.util.Tools.nullIsIllegal;
 
@@ -31,14 +32,26 @@
 
     private static final String USE_METADATA_PROXY = "useMetadataProxy";
     private static final String METADATA_PROXY_SECRET = "metadataProxySecret";
+    private static final String NOVA_METADATA_IP = "novaMetadataIp";
+    private static final String NOVA_METADATA_PORT = "novaMetadataPort";
 
-    private static final String MISSING_MESSAGE = " is required in OpenstackNode";
+    private static final String MISSING_MESSAGE = " is required in NeutronConfig";
 
     @Override
     public ObjectNode encode(NeutronConfig entity, CodecContext context) {
-        return context.mapper().createObjectNode()
-                .put(USE_METADATA_PROXY, entity.useMetadataProxy())
+        ObjectNode node = context.mapper().createObjectNode();
+        node.put(USE_METADATA_PROXY, entity.useMetadataProxy())
                 .put(METADATA_PROXY_SECRET, entity.metadataProxySecret());
+
+        if (entity.novaMetadataIp() != null) {
+            node.put(NOVA_METADATA_IP, entity.novaMetadataIp());
+        }
+
+        if (entity.novaMetadataPort() != null) {
+            node.put(NOVA_METADATA_PORT, entity.novaMetadataPort());
+        }
+
+        return node;
     }
 
     @Override
@@ -53,9 +66,22 @@
         String metadataProxySecret = nullIsIllegal(json.get(METADATA_PROXY_SECRET).asText(),
                 METADATA_PROXY_SECRET + MISSING_MESSAGE);
 
-        return DefaultNeutronConfig.builder()
+        NeutronConfig.Builder builder = DefaultNeutronConfig.builder()
                 .useMetadataProxy(useMetadataProxy)
-                .metadataProxySecret(metadataProxySecret)
-                .build();
+                .metadataProxySecret(metadataProxySecret);
+
+        JsonNode novaMetadataIp = json.get(NOVA_METADATA_IP);
+
+        if (novaMetadataIp != null) {
+            builder.novaMetadataIp(novaMetadataIp.asText());
+        }
+
+        JsonNode novaMetadataPort = json.get(NOVA_METADATA_PORT);
+
+        if (novaMetadataPort != null) {
+            builder.novaMetadataPort(novaMetadataPort.asInt());
+        }
+
+        return builder.build();
     }
 }
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/NeutronConfigJsonMatcher.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/NeutronConfigJsonMatcher.java
index 185c7b6..de06f6b 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/NeutronConfigJsonMatcher.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/NeutronConfigJsonMatcher.java
@@ -29,6 +29,8 @@
 
     private static final String USE_METADATA_PROXY = "useMetadataProxy";
     private static final String METADATA_PROXY_SECRET = "metadataProxySecret";
+    private static final String NOVA_METADATA_IP = "novaMetadataIp";
+    private static final String NOVA_METADATA_PORT = "novaMetadataPort";
 
     private NeutronConfigJsonMatcher(NeutronConfig neutronConfig) {
         this.neutronConfig = neutronConfig;
@@ -57,6 +59,26 @@
             }
         }
 
+        // check NOVA metadata IP
+        JsonNode jsonNovaMetadataIp = jsonNode.get(NOVA_METADATA_IP);
+        if (jsonNovaMetadataIp != null) {
+            String novaMetadataIp = neutronConfig.novaMetadataIp();
+            if (!jsonNovaMetadataIp.asText().equals(novaMetadataIp)) {
+                description.appendText("novaMetadataIp was " + jsonNovaMetadataIp);
+                return false;
+            }
+        }
+
+        // check NOVA metadata port
+        JsonNode jsonNovaMetadataPort = jsonNode.get(NOVA_METADATA_PORT);
+        if (jsonNovaMetadataPort != null) {
+            Integer novaMetadataPort = neutronConfig.novaMetadataPort();
+            if (jsonNovaMetadataPort.asInt() != novaMetadataPort) {
+                description.appendText("novaMetadataPort was " + jsonNovaMetadataIp);
+                return false;
+            }
+        }
+
         return true;
     }
 
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
index d97e47e..3788d01 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
@@ -278,6 +278,8 @@
         NeutronConfig neutronConfig = DefaultNeutronConfig.builder()
                                             .useMetadataProxy(true)
                                             .metadataProxySecret("onos")
+                                            .novaMetadataIp("172.16.130.10")
+                                            .novaMetadataPort(8775)
                                             .build();
 
         OpenstackNode node = DefaultOpenstackNode.builder()
@@ -321,6 +323,8 @@
 
         assertThat(neutronConfig.useMetadataProxy(), is(true));
         assertThat(neutronConfig.metadataProxySecret(), is("onos"));
+        assertThat(neutronConfig.novaMetadataIp(), is("172.16.130.10"));
+        assertThat(neutronConfig.novaMetadataPort(), is(8775));
     }
 
     /**
diff --git a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
index 6da832d..f654c40 100644
--- a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
+++ b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
@@ -15,6 +15,8 @@
   },
   "neutronConfig": {
     "useMetadataProxy": true,
-    "metadataProxySecret": "onos"
+    "metadataProxySecret": "onos",
+    "novaMetadataIp": "172.16.130.10",
+    "novaMetadataPort": 8775
   }
 }
\ No newline at end of file