From: Vladimir Lavor Date: Wed, 6 Jul 2016 07:45:24 +0000 (+0200) Subject: ios-xe renderer bugfix X-Git-Tag: release/boron~65 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=f9a8e3d9fb38ba769bdbe376bd1df5d8bef8bd0d;p=groupbasedpolicy.git ios-xe renderer bugfix - remote forwarders are created with correct ip address - local forwarder is never removed and it's presence is not checked Change-Id: I1fa38e94804d9a8cbc36aef2274953c650386c30 Signed-off-by: Vladimir Lavor --- diff --git a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtil.java b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtil.java index 5a202ce5e..e69a69081 100644 --- a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtil.java +++ b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtil.java @@ -38,9 +38,13 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev1407 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.CreateRenderedPathInputBuilder; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePath; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHop; +import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.SffDataPlaneLocator; +import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.sff.data.plane.locator.DataPlaneLocator; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPaths; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath; +import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.LocatorType; +import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.Ip; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ios.rev160308.Native; @@ -53,8 +57,6 @@ import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.policy.map.Class; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.ServicePath; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.ServicePathBuilder; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.ServicePathKey; -import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.Local; -import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.LocalBuilder; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfNameBuilder; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfNameKey; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.path.ConfigServiceChainPathModeBuilder; @@ -73,7 +75,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.security.cert.PKIXRevocationChecker; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -258,39 +259,6 @@ public class ServiceChainingUtil { return reversedRenderedPath; } - /** - * Method checks up, whether a {@link Local} Service Function Forwarder is present on device or not. - * - * @param mountpoint used to access specific device - * @return true if Local Forwarder is present, false otherwise - */ - private static boolean checkLocalForwarderPresence(DataBroker mountpoint) { - InstanceIdentifier localSffIid = InstanceIdentifier.builder(Native.class) - .child(ServiceChain.class) - .child(org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.ServiceFunctionForwarder.class) - .child(Local.class).build(); - try { - java.util.Optional optionalTransaction = - NetconfTransactionCreator.netconfReadOnlyTransaction(mountpoint); - if (!optionalTransaction.isPresent()) { - LOG.warn("Failed to create transaction, mountpoint: {}", mountpoint); - return false; - } - ReadOnlyTransaction transaction = optionalTransaction.get(); - CheckedFuture, ReadFailedException> submitFuture = - transaction.read(LogicalDatastoreType.CONFIGURATION, - localSffIid); - Optional optionalLocalSff = submitFuture.checkedGet(); - transaction.close(); // Release lock - return optionalLocalSff.isPresent(); - } catch (ReadFailedException e) { - LOG.warn("Read transaction failed to {} ", e); - } catch (Exception e) { - LOG.error("Failed to .. {}", e.getMessage()); - } - return false; - } - /** * Method checks up, if some {@link ServicePath} is present on device. * @@ -353,11 +321,6 @@ public class ServiceChainingUtil { static boolean setSfcPart(final ServiceFunctionPath serviceFunctionPath, final RenderedServicePath renderedServicePath, final RenderedServicePath reversedRenderedServicePath, PolicyWriter policyWriter) { - if (!checkLocalForwarderPresence(policyWriter.getCurrentMountpoint())) { - appendLocalSff(policyWriter); - } else { - LOG.info("Local forwarder for node {} is already created", policyWriter.getCurrentNodeId()); - } boolean outcome = true; // Direct path final java.util.Optional renderedServicePathSafe = java.util.Optional.ofNullable(renderedServicePath); @@ -367,14 +330,12 @@ public class ServiceChainingUtil { if (!resolveRenderedServicePath(renderedServicePath, policyWriter)) { outcome = false; } - } - else { + } else { LOG.warn("Rendered service path {} does not contain any hop", renderedServicePathSafe.map(RenderedServicePath::getName).map(RspName::getValue).orElse("n/a")); outcome = false; } - } - else { + } else { LOG.warn("Rendered service path is null"); outcome = false; } @@ -416,10 +377,30 @@ public class ServiceChainingUtil { // forwarder (Remote case) final java.util.Optional serviceFunctionForwarder = java.util.Optional.ofNullable( - SfcProviderServiceForwarderAPI.readServiceFunctionForwarder(sffName)); - return serviceFunctionForwarder.map(sff -> java.util.Optional.ofNullable(IetfModelCodec.ipAddress2010(sff.getIpMgmtAddress())) - .map(IpAddress::getIpv4Address) - .map((ipv4Address) -> ipv4Address.getValue()) + SfcProviderServiceForwarderAPI.readServiceFunctionForwarder(sffName)); + if (!serviceFunctionForwarder.isPresent()) { + LOG.warn("Service function forwarder {} does not exist", sffName.getValue()); + return false; + } + final ServiceFunctionForwarder forwarder = serviceFunctionForwarder.get(); + if (forwarder.getSffDataPlaneLocator() == null || forwarder.getSffDataPlaneLocator().isEmpty()) { + LOG.warn("Service function forwarder {} does not contain data plane locator", sffName.getValue()); + return false; + } + // TODO only first dpl resolved + final SffDataPlaneLocator sffDataPlaneLocator = forwarder.getSffDataPlaneLocator().get(0); + final DataPlaneLocator dataPlaneLocator = sffDataPlaneLocator.getDataPlaneLocator(); + final LocatorType locatorType = dataPlaneLocator.getLocatorType(); + if (locatorType != null && locatorType instanceof Ip) { + final IpAddress remoteForwarderIpAddress = IetfModelCodec.ipAddress2010(((Ip) locatorType).getIp()); + if (remoteForwarderIpAddress == null || remoteForwarderIpAddress.getIpv4Address() == null) { + LOG.warn("Service function forwarder {} data plane locator does not contain ip address", sffName.getValue()); + return false; + } + final String remoteForwarderStringIp = remoteForwarderIpAddress.getIpv4Address().getValue(); + return serviceFunctionForwarder.map(sff -> java.util.Optional.ofNullable(sff.getIpMgmtAddress()) + .map(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress::getIpv4Address) + .map(Ipv4Address::getValue) .map(addressValue -> { // Set up choice. If remote, this choice is overwritten final ServiceTypeChoice serviceTypeChoice; @@ -427,7 +408,7 @@ public class ServiceChainingUtil { final ServiceFfNameBuilder remoteSffBuilder = new ServiceFfNameBuilder(); remoteSffBuilder.setName(sffName.getValue()) .setKey(new ServiceFfNameKey(sffName.getValue())) - .setIp(new IpBuilder().setAddress(new Ipv4Address(addressValue)).build()); + .setIp(new IpBuilder().setAddress(new Ipv4Address(remoteForwarderStringIp)).build()); policyWriter.cache(remoteSffBuilder.build()); serviceTypeChoice = forwarderTypeChoice(sffName.getValue()); } else { @@ -461,13 +442,8 @@ public class ServiceChainingUtil { ).orElseGet(createNegativePathWithLogSupplier(sffName.getValue(), (value) -> LOG.error("Sff with name {} does not exist", value)) ); - } - - private static void appendLocalSff(final PolicyWriter policyWriter) { - final LocalBuilder localSffBuilder = new LocalBuilder(); - localSffBuilder.setIp(new IpBuilder().setAddress(new Ipv4Address(policyWriter.getManagementIpAddress())) - .build()); - policyWriter.cache(localSffBuilder.build()); + } + return false; } static ServiceTypeChoice forwarderTypeChoice(final String forwarderName) { @@ -485,7 +461,7 @@ public class ServiceChainingUtil { private static void checkSfcRspStatus(final RspName rspName, final DataBroker dataBroker) { /** TODO A better way to do this is to register listener and wait for notification than using hardcoded timeout * with Thread.sleep(). Example in class BridgeDomainManagerImpl - */ + */ ConfiguredRenderedPath renderedPath = null; LOG.info("Waiting for SFC to configure path {} ...", rspName.getValue()); diff --git a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriter.java b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriter.java index 67948290e..711b57638 100644 --- a/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriter.java +++ b/renderers/ios-xe/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/writer/PolicyWriter.java @@ -16,7 +16,6 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFaile import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ClassMap; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ServiceChain; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.policy.map.Class; -import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.Local; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.function.forwarder.ServiceFfName; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.slf4j.Logger; @@ -39,7 +38,6 @@ public class PolicyWriter { private final String interfaceName; private final String policyMapName; private final String managementIpAddress; - private Local localForwarder; public PolicyWriter(final DataBroker dataBroker, final String interfaceName, final String ipAddress, final String policyMapName, final NodeId nodeId) { @@ -63,10 +61,6 @@ public class PolicyWriter { this.policyMapEntries.addAll(policyMapEntries); } - public void cache(Local localForwarder) { - this.localForwarder = localForwarder; - } - public void cache(ServiceFfName remoteForwarder) { remoteForwarders.add(remoteForwarder); } @@ -78,7 +72,6 @@ public class PolicyWriter { public CheckedFuture commitToDatastore() { LOG.info("Configuring policy on node {} ... ", nodeId.getValue()); // SFC - boolean localResult = PolicyWriterUtil.writeLocal(localForwarder, nodeId, mountpoint); boolean remoteResult = PolicyWriterUtil.writeRemote(remoteForwarders, nodeId, mountpoint); boolean servicePathsResult = PolicyWriterUtil.writeServicePaths(serviceChains, nodeId, mountpoint); // GBP - maintain order! @@ -87,8 +80,8 @@ public class PolicyWriter { boolean interfaceResult = PolicyWriterUtil.writeInterface(policyMapName, interfaceName, nodeId, mountpoint); // Result LOG.info("Policy configuration on node {} completed", nodeId.getValue()); - return Futures.immediateCheckedFuture(classMapResult && policyMapResult && interfaceResult && localResult - && remoteResult && servicePathsResult); + return Futures.immediateCheckedFuture(classMapResult && policyMapResult && interfaceResult && remoteResult + && servicePathsResult); } public CheckedFuture removeFromDatastore() { @@ -100,12 +93,10 @@ public class PolicyWriter { // TODO remove class map? // SFC boolean servicePathsResult = PolicyWriterUtil.removeServicePaths(serviceChains, nodeId, mountpoint); - boolean localResult = PolicyWriterUtil.removeLocal(nodeId, mountpoint); // TODO remove remote forwarders // Result LOG.info("Policy removed from node {}", nodeId.getValue()); - return Futures.immediateCheckedFuture(classMapResult && policyMapEntriesResult && servicePathsResult - && localResult); + return Futures.immediateCheckedFuture(classMapResult && policyMapEntriesResult && servicePathsResult); } public String getManagementIpAddress() { diff --git a/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtilTest.java b/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtilTest.java index 48cc53a07..13c380a2b 100644 --- a/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtilTest.java +++ b/renderers/ios-xe/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ios_xe_provider/impl/util/ServiceChainingUtilTest.java @@ -14,10 +14,6 @@ import static org.powermock.api.support.membermodification.MemberModifier.stub; import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.util.concurrent.Futures; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -49,11 +45,14 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev1407 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePathBuilder; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHop; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHopBuilder; +import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.SffDataPlaneLocatorBuilder; +import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarder.base.sff.data.plane.locator.DataPlaneLocatorBuilder; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderBuilder; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPaths; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPathsBuilder; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathBuilder; +import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.IpBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ClassMap; @@ -85,6 +84,11 @@ import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * Test for {@link ServiceChainingUtil}. */ @@ -483,17 +487,22 @@ public class ServiceChainingUtilTest { @Test public void testSetSfcPart_success() throws Exception { final RenderedServicePath rsp = createRsp("unit-rsp-03"); + final DataPlaneLocatorBuilder dataPlaneLocatorBuilder = new DataPlaneLocatorBuilder(); + final IpBuilder ipBuilderLocatorType = new IpBuilder(); + ipBuilderLocatorType.setIp(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4")))); + dataPlaneLocatorBuilder.setLocatorType(ipBuilderLocatorType.build()); + final SffDataPlaneLocatorBuilder sffDataPlaneLocatorBuilder = new SffDataPlaneLocatorBuilder(); + sffDataPlaneLocatorBuilder.setDataPlaneLocator(dataPlaneLocatorBuilder.build()); final org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder sff = new ServiceFunctionForwarderBuilder() .setName(new SffName("unit-sff-03")) .setIpMgmtAddress(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4")))) + .setSffDataPlaneLocator(Collections.singletonList(sffDataPlaneLocatorBuilder.build())) .build(); final ServiceFunctionPathBuilder sfpBuilder = new ServiceFunctionPathBuilder(); sfpBuilder.setSymmetric(false); final ServiceFunctionPath sfp = sfpBuilder.build(); - stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(true); - PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class); final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class); PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn(sff); @@ -505,8 +514,6 @@ public class ServiceChainingUtilTest { Mockito.verify(policyWriter).cache(Matchers.any()); Mockito.verify(policyWriter).cache(Matchers.any()); - Mockito.verify(policyWriter).getCurrentNodeId(); - Mockito.verify(policyWriter).getCurrentMountpoint(); Mockito.verify(policyWriter).getManagementIpAddress(); Mockito.verifyNoMoreInteractions(policyWriter); } @@ -514,17 +521,22 @@ public class ServiceChainingUtilTest { @Test public void testSetSfcPart_success_newRsp() throws Exception { final RenderedServicePath rsp = createRsp("unit-rsp-03"); + final DataPlaneLocatorBuilder dataPlaneLocatorBuilder = new DataPlaneLocatorBuilder(); + final IpBuilder ipBuilderLocatorType = new IpBuilder(); + ipBuilderLocatorType.setIp(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4")))); + dataPlaneLocatorBuilder.setLocatorType(ipBuilderLocatorType.build()); + final SffDataPlaneLocatorBuilder sffDataPlaneLocatorBuilder = new SffDataPlaneLocatorBuilder(); + sffDataPlaneLocatorBuilder.setDataPlaneLocator(dataPlaneLocatorBuilder.build()); final org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder sff = new ServiceFunctionForwarderBuilder() .setName(new SffName("unit-sff-03")) .setIpMgmtAddress(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4")))) + .setSffDataPlaneLocator(Collections.singletonList(sffDataPlaneLocatorBuilder.build())) .build(); final ServiceFunctionPathBuilder sfpBuilder = new ServiceFunctionPathBuilder(); sfpBuilder.setSymmetric(false); final ServiceFunctionPath sfp = sfpBuilder.build(); - stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(false); - PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class); final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class); PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn(sff); @@ -534,11 +546,9 @@ public class ServiceChainingUtilTest { Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue()); Assert.assertTrue(outcome); - Mockito.verify(policyWriter).cache(Matchers.any()); Mockito.verify(policyWriter).cache(Matchers.any()); Mockito.verify(policyWriter).cache(Matchers.any()); - Mockito.verify(policyWriter).getCurrentMountpoint(); - Mockito.verify(policyWriter, Mockito.times(2)).getManagementIpAddress(); + Mockito.verify(policyWriter).getManagementIpAddress(); Mockito.verifyNoMoreInteractions(policyWriter); } @@ -579,9 +589,6 @@ public class ServiceChainingUtilTest { Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue()); Assert.assertFalse(outcome); - Mockito.verify(policyWriter).getCurrentMountpoint(); - Mockito.verify(policyWriter).getManagementIpAddress(); - Mockito.verify(policyWriter).cache(Matchers.any()); Mockito.verifyNoMoreInteractions(policyWriter); } @@ -595,8 +602,6 @@ public class ServiceChainingUtilTest { sfpBuilder.setSymmetric(false); final ServiceFunctionPath sfp = sfpBuilder.build(); - stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(true); - PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class); final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class); PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn( @@ -606,8 +611,6 @@ public class ServiceChainingUtilTest { Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue()); - Mockito.verify(policyWriter).getCurrentMountpoint(); - Mockito.verify(policyWriter).getCurrentNodeId(); Mockito.verifyNoMoreInteractions(policyWriter); } @@ -621,8 +624,6 @@ public class ServiceChainingUtilTest { sfpBuilder.setSymmetric(false); final ServiceFunctionPath sfp = sfpBuilder.build(); - stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(true); - PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class); final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class); PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn( @@ -632,8 +633,6 @@ public class ServiceChainingUtilTest { Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue()); - Mockito.verify(policyWriter).getCurrentMountpoint(); - Mockito.verify(policyWriter).getCurrentNodeId(); Mockito.verifyNoMoreInteractions(policyWriter); }