ONOS-5629: Enable encapsulation in SDN-IP

Change-Id: I4c3dbe877fd009302938b228fc9af40225d75329
diff --git a/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java b/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java
index b8e4e1b..c261f15 100644
--- a/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java
+++ b/apps/sdnip/src/test/java/org/onosproject/sdnip/PeerConnectivityManagerTest.java
@@ -33,6 +33,7 @@
 import org.onosproject.incubator.net.intf.InterfaceService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.EncapsulationType;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.config.NetworkConfigListener;
 import org.onosproject.net.config.NetworkConfigService;
@@ -47,6 +48,7 @@
 import org.onosproject.net.intent.PointToPointIntent;
 import org.onosproject.routing.IntentSynchronizationService;
 import org.onosproject.routing.config.BgpConfig;
+import org.onosproject.sdnip.config.SdnIpConfig;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -84,6 +86,8 @@
 
     private BgpConfig bgpConfig;
 
+    private SdnIpConfig sdnIpConfig;
+
     private List<PointToPointIntent> intentList;
 
     private final DeviceId deviceId1 =
@@ -125,6 +129,7 @@
         networkConfigService.addListener(anyObject(NetworkConfigListener.class));
         expectLastCall().anyTimes();
         bgpConfig = createMock(BgpConfig.class);
+        sdnIpConfig = createMock(SdnIpConfig.class);
 
         // These will set expectations on routingConfig and interfaceService
         bgpSpeakers = setUpBgpSpeakers();
@@ -168,7 +173,7 @@
 
     /**
      * Sets up logical interfaces, which emulate the configured interfaces
-     * in SDN-IP application.
+     * in the SDN-IP application.
      *
      * @return configured interfaces as a map from interface name to Interface
      */
@@ -581,6 +586,12 @@
         replay(bgpConfig);
         expect(networkConfigService.getConfig(APPID, BgpConfig.class))
                 .andReturn(bgpConfig).anyTimes();
+
+        expect(sdnIpConfig.encap()).andReturn(EncapsulationType.NONE).anyTimes();
+        replay(sdnIpConfig);
+        expect(networkConfigService.getConfig(APPID, SdnIpConfig.class))
+                .andReturn(sdnIpConfig).anyTimes();
+
         replay(networkConfigService);
         replay(interfaceService);
 
@@ -670,6 +681,10 @@
         expect(bgpConfig.bgpSpeakers()).andReturn(Collections.emptySet()).anyTimes();
         replay(bgpConfig);
 
+        reset(sdnIpConfig);
+        expect(sdnIpConfig.encap()).andReturn(EncapsulationType.NONE).anyTimes();
+        replay(sdnIpConfig);
+
         // We don't expect any intents in this case
         reset(intentSynchronizer);
         replay(intentSynchronizer);
diff --git a/apps/sdnip/src/test/java/org/onosproject/sdnip/SdnIpFibTest.java b/apps/sdnip/src/test/java/org/onosproject/sdnip/SdnIpFibTest.java
index 31e1cde..9af9c76 100644
--- a/apps/sdnip/src/test/java/org/onosproject/sdnip/SdnIpFibTest.java
+++ b/apps/sdnip/src/test/java/org/onosproject/sdnip/SdnIpFibTest.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.sdnip;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.junit.Before;
@@ -41,8 +43,13 @@
 import org.onosproject.incubator.net.routing.RouteServiceAdapter;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.EncapsulationType;
 import org.onosproject.net.FilteredConnectPoint;
 import org.onosproject.net.PortNumber;
+import org.onosproject.net.config.Config;
+import org.onosproject.net.config.ConfigApplyDelegate;
+import org.onosproject.net.config.NetworkConfigListener;
+import org.onosproject.net.config.NetworkConfigServiceAdapter;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficSelector;
@@ -52,6 +59,9 @@
 import org.onosproject.net.intent.Key;
 import org.onosproject.net.intent.MultiPointToSinglePointIntent;
 import org.onosproject.routing.IntentSynchronizationService;
+import org.onosproject.routing.RoutingService;
+import org.onosproject.routing.config.BgpConfig;
+import org.onosproject.sdnip.config.SdnIpConfig;
 
 import java.util.Collections;
 import java.util.List;
@@ -142,6 +152,7 @@
         sdnipFib = new SdnIpFib();
         sdnipFib.routeService = new TestRouteService();
         sdnipFib.coreService = new TestCoreService();
+        sdnipFib.networkConfigService = new TestNetworkConfigService();
         sdnipFib.interfaceService = interfaceService;
         sdnipFib.intentSynchronizer = intentSynchronizer;
 
@@ -636,10 +647,41 @@
         }
     }
 
+    private class TestNetworkConfigService extends NetworkConfigServiceAdapter {
+        /**
+         * Returns an empty BGP network configuration to be able to correctly
+         * return the encapsulation parameter when needed.
+         *
+         * @return an empty BGP network configuration object
+         */
+        @Override
+        public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
+            ApplicationId appId =
+                    new TestApplicationId(SdnIp.SDN_IP_APP);
+
+            ObjectMapper mapper = new ObjectMapper();
+            ConfigApplyDelegate delegate = new MockCfgDelegate();
+            JsonNode emptyTree = new ObjectMapper().createObjectNode();
+
+            SdnIpConfig sdnIpConfig = new SdnIpConfig();
+
+            sdnIpConfig.init(appId, "sdnip-test", emptyTree, mapper, delegate);
+
+            return (C) sdnIpConfig;
+        }
+    }
+
     private class InterfaceServiceDelegate extends InterfaceServiceAdapter {
         @Override
         public void addListener(InterfaceListener listener) {
             SdnIpFibTest.this.interfaceListener = listener;
         }
     }
+
+    private class MockCfgDelegate implements ConfigApplyDelegate {
+        @Override
+        public void onApply(@SuppressWarnings("rawtypes") Config config) {
+            config.apply();
+        }
+    }
 }