package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl.ActionCase.ALLOW;
+import static org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl.ActionCase.CHAIN;
+import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction.In;
+import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction.Out;
+import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation.PROVIDER;
+import static org.powermock.api.mockito.PowerMockito.verifyStatic;
import static org.powermock.api.support.membermodification.MemberMatcher.method;
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 javax.annotation.Nonnull;
+import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.junit.Assert;
+import com.google.common.collect.Lists;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
-import org.mockito.Matchers;
import org.mockito.Mock;
-import org.mockito.Mockito;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.groupbasedpolicy.api.sf.ChainActionDefinition;
+import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyConfigurationContext;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl;
-import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer.PolicyWriter;
+import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl.ActionCase;
+import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.PolicyManagerUtil.ActionInDirection;
+import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer.PolicyWriterUtil;
import org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServiceForwarderAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
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.sff.rev140701.service.function.forwarders.ServiceFunctionForwarderKey;
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.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.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.rev130715.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.ClassMap;
import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ServiceChain;
-import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ServiceChainBuilder;
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.ServicePathBuilder;
-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.ServiceFfName;
-import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.path.config.service.chain.path.mode.service.index.services.ServiceTypeChoice;
-import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.path.config.service.chain.path.mode.service.index.services.service.type.choice.ServiceFunction;
-import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.service.chain.service.path.config.service.chain.path.mode.service.index.services.service.type.choice.ServiceFunctionForwarder;
+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.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointWithPolicy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointWithPolicyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.ActionBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({
- ServiceChainingUtil.class,
+ SfcProviderServiceForwarderAPI.class,
SfcProviderServicePathAPI.class,
SfcProviderRenderedPathAPI.class,
- SfcProviderServiceForwarderAPI.class
+ PolicyManagerUtil.class,
+ PolicyWriterUtil.class
})
public class ServiceChainingUtilTest {
+ private final String SFC_CHAIN_NAME = "sfc-chain-name";
+ private final String SFC_PATH_NAME = "sfc-path-name";
+ private final String TENANT_ID = "tenant-id";
+ private final String IP_ADDRESS = "170.0.0.1";
+ private final String SERVICE_FUNCTION_FORWARDER = "service-function-forwarder";
+ private final RuleName RULE_NAME = new RuleName("rule-name");
+
+ private DataBroker dataBroker;
+ private PolicyWriterUtil policyWriterUtil;
+
+
@Captor
private ArgumentCaptor<RspName> rspNameCaptor;
@Captor
@Captor
private ArgumentCaptor<RenderedServicePath> rspCaptor;
@Captor
- private ArgumentCaptor<List<Class>> listClassCaptor;
- @Mock
- private PolicyWriter policyWriter;
- @Mock
- private DataBroker dataBroker;
+ private ArgumentCaptor<Class> listClassCaptor;
+ @Captor
+ private ArgumentCaptor<ClassMap> classMapCaptor;
@Mock
private ReadWriteTransaction rwTx;
@Before
- public void setUp() throws Exception {
- final NodeId currentNodeId = new NodeId("unit-node-01");
- Mockito.when(policyWriter.getCurrentNodeId()).thenReturn(currentNodeId);
-
- final String managementIpAddress = "1.2.3.5";
- Mockito.when(policyWriter.getManagementIpAddress()).thenReturn(managementIpAddress);
-
- Mockito.when(policyWriter.getCurrentMountpoint()).thenReturn(dataBroker);
- Mockito.when(dataBroker.newReadWriteTransaction()).thenReturn(rwTx);
+ public void setUp() {
+ dataBroker = mock(DataBroker.class);
+ policyWriterUtil = mock(PolicyWriterUtil.class);
}
@Test
- public void testGetServicePath() throws Exception {
- final String sfcNameValue = "123";
- final ServiceFunctionPath sfcPath = createSfp(sfcNameValue, false);
- final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
- .setServiceFunctionPath(Collections.singletonList(sfcPath))
- .build();
+ public void testResolveNewChainAction_actionAllow() {
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(null);
+ final PolicyConfigurationContext context = policyConfigurationContextBuilder();
- stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
+ ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(RULE_NAME, ALLOW, action, In), context, dataBroker);
- final ServiceFunctionPath servicePath = ServiceChainingUtil.getServicePath(Lists.newArrayList(
- createParameterValue("sfc-chain-name", sfcNameValue)
- ));
- Assert.assertEquals(sfcPath, servicePath);
+ verifyNoMoreInteractions(policyWriterUtil);
+ verifyNoMoreInteractions(dataBroker);
}
- private ParameterValue createParameterValue(final String name, final String value) {
- return new ParameterValueBuilder().setName(new ParameterName(name)).setStringValue(value).build();
+ @Test
+ public void testResolveNewChainAction_noParameterValue() {
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(null);
+ final PolicyConfigurationContext context = policyConfigurationContextBuilder();
+
+ ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(RULE_NAME, CHAIN, action, In), context, dataBroker);
+
+ verifyNoMoreInteractions(policyWriterUtil);
+ verifyNoMoreInteractions(dataBroker);
}
@Test
- public void testResolveChainAction_full() throws Exception {
- final PeerEndpointWithPolicy peerEndpoint = createPeerEndpointWithPolicy();
- final Sgt sourceSgt = new Sgt(1);
- final Sgt destinationSgt = new Sgt(2);
- final Map<PolicyManagerImpl.ActionCase, Action> actionMap = createActionMap();
- final String classMapName = "unit-class-map-name-01";
+ public void testResolveNewChainAction_noTenantId() {
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
- final String sfcNameValue = "123";
- final ServiceFunctionPath sfcPath = createSfp(sfcNameValue, false);
- final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
- .setServiceFunctionPath(Collections.singletonList(sfcPath))
- .build();
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME));
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
- stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
+ final PolicyConfigurationContext context = policyConfigurationContextBuilder();
- final RenderedServicePath rsp = createRsp("unit-rsp-02");
- stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(rsp);
- stub(method(ServiceChainingUtil.class, "setSfcPart")).toReturn(true);
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths"))
+ .toReturn(pathsBuilder.build());
+ stub(method(PolicyManagerUtil.class, "getTenantId")).toReturn(null);
- ServiceChainingUtil.resolveChainAction(peerEndpoint, sourceSgt, destinationSgt, actionMap, classMapName, policyWriter);
+ ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(RULE_NAME, CHAIN, action, In), context, dataBroker);
- Mockito.verify(policyWriter).cache(listClassCaptor.capture());
- Mockito.verifyNoMoreInteractions(policyWriter);
- Assert.assertEquals(1, listClassCaptor.getValue().size());
+ verifyNoMoreInteractions(policyWriterUtil);
+ verifyNoMoreInteractions(dataBroker);
}
@Test
- public void testResolveChainAction_fullSymmetric() throws Exception {
- final PeerEndpointWithPolicy peerEndpoint = createPeerEndpointWithPolicy();
- final Sgt sourceSgt = new Sgt(1);
- final Sgt destinationSgt = new Sgt(2);
- final Map<PolicyManagerImpl.ActionCase, Action> actionMap = createActionMap();
- final String classMapName = "unit-class-map-name-01";
+ public void testResolveNewChainAction_asymmetricChainOpposite() {
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
- final String sfcNameValue = "123";
- final ServiceFunctionPath sfcPath = createSfp(sfcNameValue, true);
- final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
- .setServiceFunctionPath(Collections.singletonList(sfcPath))
- .build();
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
+ .setSymmetric(false);
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
- stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
+ final PolicyConfigurationContext context = policyConfigurationContextBuilder();
- final RenderedServicePath rsp = createRsp("unit-rsp-02");
- stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(rsp);
- stub(method(ServiceChainingUtil.class, "setSfcPart")).toReturn(true);
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyManagerUtil.class, "getTenantId")).toReturn(new TenantId(TENANT_ID));
- ServiceChainingUtil.resolveChainAction(peerEndpoint, sourceSgt, destinationSgt, actionMap, classMapName, policyWriter);
+ ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(RULE_NAME, CHAIN, action, In), context, dataBroker);
- Mockito.verify(policyWriter).cache(listClassCaptor.capture());
- Mockito.verifyNoMoreInteractions(policyWriter);
- Assert.assertEquals(2, listClassCaptor.getValue().size());
+ verifyNoMoreInteractions(policyWriterUtil);
+ verifyNoMoreInteractions(dataBroker);
}
@Test
- public void testResolveChainAction_partial01() throws Exception {
- final PeerEndpointWithPolicy peerEndpoint = createPeerEndpointWithPolicy();
- final Sgt sourceSgt = new Sgt(1);
- final Sgt destinationSgt = new Sgt(2);
- final Map<PolicyManagerImpl.ActionCase, Action> actionMap = createActionMap();
- final String classMapName = "unit-class-map-name-01";
+ public void testResolveNewChainAction_asymmetricChain() {
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
+
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
+ .setSymmetric(false);
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
+
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
+ final PolicyConfigurationContext context = policyConfigurationContextBuilder();
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyWriterUtil.class, "writeClassMap")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "writePolicyMapEntry")).toReturn(true);
+
+ ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(RULE_NAME, CHAIN, action, Out), context, dataBroker);
+
+ verifyStatic(times(1));
+ PolicyWriterUtil.writeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.writePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ }
- final String sfcNameValue = "123";
- final ServiceFunctionPath sfcPath = createSfp(sfcNameValue, true);
- final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
- .setServiceFunctionPath(Collections.singletonList(sfcPath))
- .build();
+ @Test
+ public void testResolveNewChainAction_symmetricChainDirect() {
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
+
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
+ .setSymmetric(true);
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
+
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
+ final PolicyConfigurationContext context = policyConfigurationContextBuilder();
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyWriterUtil.class, "writeClassMap")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "writePolicyMapEntry")).toReturn(true);
+
+ ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(RULE_NAME, CHAIN, action, Out), context, dataBroker);
+
+ verifyStatic(times(1));
+ PolicyWriterUtil.writeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.writePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ }
- stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
+ @Test
+ public void testResolveNewChainAction_symmetricChainReversed() {
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
+
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
+ .setSymmetric(true);
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
+
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
+ final PolicyConfigurationContext context = policyConfigurationContextBuilder();
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyWriterUtil.class, "writeClassMap")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "writePolicyMapEntry")).toReturn(true);
+
+ ServiceChainingUtil.newChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(RULE_NAME, CHAIN, action, In), context, dataBroker);
+
+ verifyStatic(times(1));
+ PolicyWriterUtil.writeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.writePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ }
- final RenderedServicePath rsp = createRsp("unit-rsp-02");
- stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(rsp);
- stub(method(ServiceChainingUtil.class, "setSfcPart")).toReturn(true);
- stub(method(ServiceChainingUtil.class, "createSymmetricRenderedPath")).toReturn(null);
+ @Test
+ public void testResolveRemovedChainAction_noParameterValue() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(null);
- ServiceChainingUtil.resolveChainAction(peerEndpoint, sourceSgt, destinationSgt, actionMap, classMapName, policyWriter);
+ ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, In), context);
- Mockito.verifyNoMoreInteractions(policyWriter);
+ verifyNoMoreInteractions(policyWriterUtil);
}
@Test
- public void testResolveChainAction_partial02() throws Exception {
- final PeerEndpointWithPolicy peerEndpoint = createPeerEndpointWithPolicy();
- final Sgt sourceSgt = new Sgt(1);
- final Sgt destinationSgt = new Sgt(2);
- final Map<PolicyManagerImpl.ActionCase, Action> actionMap = createActionMap();
- final String classMapName = "unit-class-map-name-01";
+ public void testResolveRemovedChainAction_noTenantId() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
- final String sfcNameValue = "123";
- final ServiceFunctionPath sfcPath = createSfp(sfcNameValue, false);
- final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
- .setServiceFunctionPath(Collections.singletonList(sfcPath))
- .build();
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME));
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
- stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
- final RenderedServicePath rsp = createRsp("unit-rsp-02");
- stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(rsp);
- stub(method(ServiceChainingUtil.class, "setSfcPart")).toReturn(false);
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyManagerUtil.class, "getTenantId")).toReturn(null);
- ServiceChainingUtil.resolveChainAction(peerEndpoint, sourceSgt, destinationSgt, actionMap, classMapName, policyWriter);
+ ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, In), context);
- Mockito.verifyNoMoreInteractions(policyWriter);
+ verifyNoMoreInteractions(policyWriterUtil);
}
@Test
- public void testResolveChainAction_partial03() throws Exception {
- final PeerEndpointWithPolicy peerEndpoint = createPeerEndpointWithPolicy(null);
- final Sgt sourceSgt = new Sgt(1);
- final Sgt destinationSgt = new Sgt(2);
- final Map<PolicyManagerImpl.ActionCase, Action> actionMap = createActionMap();
- final String classMapName = "unit-class-map-name-01";
+ public void testResolveRemovedChainAction_asymmetricChainOpposite() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
- final String sfcNameValue = "123";
- final ServiceFunctionPath sfcPath = createSfp(sfcNameValue, false);
- final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
- .setServiceFunctionPath(Collections.singletonList(sfcPath))
- .build();
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
+ .setSymmetric(false);
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
- stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
- final RenderedServicePath rsp = createRsp("unit-rsp-02");
- stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath")).toReturn(rsp);
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyManagerUtil.class, "getTenantId")).toReturn(new TenantId(TENANT_ID));
- ServiceChainingUtil.resolveChainAction(peerEndpoint, sourceSgt, destinationSgt, actionMap, classMapName, policyWriter);
+ ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, In), context);
- Mockito.verifyNoMoreInteractions(policyWriter);
+ verifyNoMoreInteractions(policyWriterUtil);
}
@Test
- public void testResolveChainAction_partial04() throws Exception {
- final PeerEndpointWithPolicy peerEndpoint = createPeerEndpointWithPolicy(null);
- final Sgt sourceSgt = new Sgt(1);
- final Sgt destinationSgt = new Sgt(2);
- final Map<PolicyManagerImpl.ActionCase, Action> actionMap = createActionMap(false);
- final String classMapName = "unit-class-map-name-01";
-
- ServiceChainingUtil.resolveChainAction(peerEndpoint, sourceSgt, destinationSgt, actionMap, classMapName, policyWriter);
-
- Mockito.verifyNoMoreInteractions(policyWriter);
+ public void testResolveRemovedChainAction_asymmetricChainDirect() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
+ .setSymmetric(false);
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
+ final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
+ hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final ServiceFunctionForwarderBuilder forwarder = new ServiceFunctionForwarderBuilder();
+ forwarder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
+ .setIpMgmtAddress(new IpAddress(new Ipv4Address(IP_ADDRESS)));
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyWriterUtil.class, "removeClassMap")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removePolicyMapEntry")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removeServicePath")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removeRemote")).toReturn(true);
+
+ ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, Out), context);
+
+ verifyStatic(times(1));
+ PolicyWriterUtil.removeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removeServicePath(any(ServiceChain.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removeRemote(any(ServiceFfName.class), any(PolicyManagerImpl.PolicyMapLocation.class));
}
- private Map<PolicyManagerImpl.ActionCase, Action> createActionMap() {
- return createActionMap(true);
+ @Test
+ public void testResolveRemovedChainAction_symmetricChainDirect() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
+ .setSymmetric(true);
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
+ final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
+ hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final ServiceFunctionForwarderBuilder forwarder = new ServiceFunctionForwarderBuilder();
+ forwarder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
+ .setIpMgmtAddress(new IpAddress(new Ipv4Address(IP_ADDRESS)));
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyWriterUtil.class, "removeClassMap")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removePolicyMapEntry")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removeServicePath")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removeRemote")).toReturn(true);
+
+ ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, Out), context);
+
+ verifyStatic(times(1));
+ PolicyWriterUtil.removeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removeServicePath(any(ServiceChain.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removeRemote(any(ServiceFfName.class), any(PolicyManagerImpl.PolicyMapLocation.class));
}
- private Map<PolicyManagerImpl.ActionCase, Action> createActionMap(final boolean fillParamValue) {
- final Map<PolicyManagerImpl.ActionCase,Action> actionMap = new HashMap<>();
- final ActionBuilder actionValue = new ActionBuilder();
- if (fillParamValue) {
- actionValue.setParameterValue(Collections.singletonList(new ParameterValueBuilder()
- .setName(new ParameterName(ChainActionDefinition.SFC_CHAIN_NAME))
- .setStringValue("123")
- .build()));
- }
- actionMap.put(PolicyManagerImpl.ActionCase.CHAIN, actionValue.build());
- return actionMap;
+ @Test
+ public void testResolveRemovedChainAction_symmetricChainReversed() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME)).setStringValue(SFC_CHAIN_NAME);
+ final ParameterValue parameterValue = parameterValueBuilder.build();
+ final ServiceFunctionPathBuilder pathBuilder = new ServiceFunctionPathBuilder();
+ pathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME))
+ .setSymmetric(true);
+ final ServiceFunctionPathsBuilder pathsBuilder = new ServiceFunctionPathsBuilder();
+ pathsBuilder.setServiceFunctionPath(Collections.singletonList(pathBuilder.build()));
+ final PeerEndpoint peerEndpoint = peerEndpointBuilder();
+ final Action action = actionBuilder(Collections.singletonList(parameterValue));
+ final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
+ hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final ServiceFunctionForwarderBuilder forwarder = new ServiceFunctionForwarderBuilder();
+ forwarder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
+ .setIpMgmtAddress(new IpAddress(new Ipv4Address(IP_ADDRESS)));
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(pathsBuilder.build());
+ stub(method(PolicyWriterUtil.class, "removeClassMap")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removePolicyMapEntry")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removeServicePath")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "removeRemote")).toReturn(true);
+
+ ServiceChainingUtil.resolveRemovedChainAction(peerEndpoint, sgtBuilder(10), sgtBuilder(20),
+ resolvedActionBuilder(new RuleName("rule-name"), CHAIN, action, In), context);
+
+ verifyStatic(times(1));
+ PolicyWriterUtil.removeClassMap(any(ClassMap.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removePolicyMapEntry(any(Class.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removeServicePath(any(ServiceChain.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.removeRemote(any(ServiceFfName.class), any(PolicyManagerImpl.PolicyMapLocation.class));
}
- private PeerEndpointWithPolicy createPeerEndpointWithPolicy() {
- return createPeerEndpointWithPolicy(new TenantId("unit-tenant-06"));
+ @Test
+ public void testResolveRemoteSfcComponents_noForwarder() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(buildRsp(), context);
+ assertFalse(result);
}
- private PeerEndpointWithPolicy createPeerEndpointWithPolicy(final TenantId tenantId) {
- return new PeerEndpointWithPolicyBuilder()
- .setRuleGroupWithRendererEndpointParticipation(Collections.singletonList(
- new RuleGroupWithRendererEndpointParticipationBuilder()
- .setTenantId(tenantId)
- .build()
- ))
- .build();
+ @Test
+ public void testResolveRemoteSfcComponents_noForwarderLocator() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
+ forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
+ hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
+ rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
+
+ stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
+ .toReturn(forwarderBuilder.build());
+
+ boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
+ assertFalse(result);
}
@Test
- public void testCreateRenderedPath() throws Exception {
- final String sfcNameValue = "123";
- final ServiceFunctionPath sfp = createSfp(sfcNameValue, false);
- final TenantId tenantId = new TenantId("unit-tennant-01");
-
- final RenderedServicePath rsp = createRsp("unit-rsp-01");
-
- PowerMockito.mockStatic(SfcProviderRenderedPathAPI.class);
- final SfcProviderRenderedPathAPI api = PowerMockito.mock(SfcProviderRenderedPathAPI.class);
- PowerMockito.when(api.readRenderedServicePath(rspNameCaptor.capture())).thenReturn(rsp);
-
- final RenderedServicePath renderedPath = ServiceChainingUtil.createRenderedPath(sfp, tenantId);
-
- Assert.assertEquals("123_plainunit-tennant-01-gbp-rsp", rspNameCaptor.getValue().getValue());
- Assert.assertEquals(rsp, renderedPath);
+ public void testResolveRemoteSfcComponents_dplWithoutLocatorType() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final DataPlaneLocatorBuilder dplBuilder = new DataPlaneLocatorBuilder();
+ final SffDataPlaneLocatorBuilder sffDplBuilder = new SffDataPlaneLocatorBuilder();
+ sffDplBuilder.setDataPlaneLocator(dplBuilder.build());
+ final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
+ forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
+ .setSffDataPlaneLocator(Collections.singletonList(sffDplBuilder.build()));
+ final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
+ hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
+ rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
+
+ stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
+ .toReturn(forwarderBuilder.build());
+
+ boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
+ assertFalse(result);
}
@Test
- public void testCreateRenderedPath_notExisting() throws Exception {
- final String sfcNameValue = "123";
- final ServiceFunctionPath sfp = createSfp(sfcNameValue, false);
- final TenantId tenantId = new TenantId("unit-tennant-01");
-
- final RenderedServicePath rsp = createRsp("unit-rsp-01");
-
- PowerMockito.mockStatic(SfcProviderRenderedPathAPI.class);
- final SfcProviderRenderedPathAPI api = PowerMockito.mock(SfcProviderRenderedPathAPI.class);
- PowerMockito.when(api.readRenderedServicePath(rspNameCaptor.capture())).thenReturn(null);
- PowerMockito.when(api.createRenderedServicePathAndState(
- sfpCaptor.capture(), createRspCaptor.capture()
- )).thenReturn(rsp);
-
- final RenderedServicePath renderedPath = ServiceChainingUtil.createRenderedPath(sfp, tenantId);
-
- Assert.assertEquals("123_plainunit-tennant-01-gbp-rsp", rspNameCaptor.getValue().getValue());
-
- final ServiceFunctionPath serviceFunctionPath = sfpCaptor.getValue();
- Assert.assertEquals("123_plain", serviceFunctionPath.getName().getValue());
- Assert.assertFalse(serviceFunctionPath.isSymmetric());
-
- final CreateRenderedPathInput createRPInput = createRspCaptor.getValue();
- Assert.assertFalse(createRPInput.isSymmetric());
- Assert.assertEquals("123_plain", createRPInput.getParentServiceFunctionPath());
- Assert.assertEquals("123_plainunit-tennant-01-gbp-rsp", createRPInput.getName());
-
- Assert.assertEquals(rsp, renderedPath);
+ public void testResolveRemoteSfcComponents_dplWithoutIp() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final DataPlaneLocatorBuilder dplBuilder = new DataPlaneLocatorBuilder();
+ dplBuilder.setLocatorType(new IpBuilder().build());
+ final SffDataPlaneLocatorBuilder sffDplBuilder = new SffDataPlaneLocatorBuilder();
+ sffDplBuilder.setDataPlaneLocator(dplBuilder.build());
+ final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
+ forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
+ .setSffDataPlaneLocator(Collections.singletonList(sffDplBuilder.build()));
+ final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
+ hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
+ rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
+
+ stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
+ .toReturn(forwarderBuilder.build());
+
+ boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
+ assertFalse(result);
}
- private RenderedServicePath createRsp(final String rspNameValue) {
- return new RenderedServicePathBuilder()
- .setName(new RspName(rspNameValue))
- .setRenderedServicePathHop(Lists.newArrayList(createRspHop("rsp-hop-01-sf")))
- .build();
+ @Test
+ public void testResolveRemoteSfcComponents_sffWithoutMgmtAddress() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final DataPlaneLocatorBuilder dplBuilder = new DataPlaneLocatorBuilder();
+ dplBuilder.setLocatorType(new IpBuilder().setIp(new IpAddress(new Ipv4Address(IP_ADDRESS))).build());
+ final SffDataPlaneLocatorBuilder sffDplBuilder = new SffDataPlaneLocatorBuilder();
+ sffDplBuilder.setDataPlaneLocator(dplBuilder.build());
+ final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
+ forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
+ .setSffDataPlaneLocator(Collections.singletonList(sffDplBuilder.build()));
+ final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
+ hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
+ rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
+
+ stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
+ .toReturn(forwarderBuilder.build());
+
+ boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
+ assertFalse(result);
}
- private RenderedServicePathHop createRspHop(final String sfNameValue) {
- return new RenderedServicePathHopBuilder()
- .setServiceFunctionName(new SfName(sfNameValue))
- .setServiceFunctionForwarder(new SffName(sfNameValue + "+sff"))
- .build();
+ @Test
+ public void testResolveRemoteSfcComponents_remoteCase() {
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final DataPlaneLocatorBuilder dplBuilder = new DataPlaneLocatorBuilder();
+ dplBuilder.setLocatorType(new IpBuilder().setIp(new IpAddress(new Ipv4Address("190.1.1.12"))).build());
+ final SffDataPlaneLocatorBuilder sffDplBuilder = new SffDataPlaneLocatorBuilder();
+ sffDplBuilder.setDataPlaneLocator(dplBuilder.build());
+ final ServiceFunctionForwarderBuilder forwarderBuilder = new ServiceFunctionForwarderBuilder();
+ forwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
+ .setSffDataPlaneLocator(Collections.singletonList(sffDplBuilder.build()))
+ .setIpMgmtAddress(new IpAddress(new Ipv4Address(IP_ADDRESS)));
+ final RenderedServicePathHopBuilder hopBuilder = new RenderedServicePathHopBuilder();
+ hopBuilder.setServiceFunctionForwarder(new SffName(SERVICE_FUNCTION_FORWARDER));
+ final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder();
+ rspBuilder.setRenderedServicePathHop(Collections.singletonList(hopBuilder.build()));
+
+ stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
+ .toReturn(forwarderBuilder.build());
+ stub(method(PolicyWriterUtil.class, "writeServicePath")).toReturn(true);
+ stub(method(PolicyWriterUtil.class, "writeRemote")).toReturn(true);
+
+ boolean result = ServiceChainingUtil.resolveRemoteSfcComponents(rspBuilder.build(), context);
+ assertTrue(result);
+ verifyStatic(times(1));
+ PolicyWriterUtil.writeServicePath(any(ServiceChain.class), any(PolicyManagerImpl.PolicyMapLocation.class));
+ PolicyWriterUtil.writeRemote(any(ServiceFfName.class), any(PolicyManagerImpl.PolicyMapLocation.class));
}
- private ServiceFunctionPath createSfp(final String sfcNameValue, final boolean symmetric) {
- return new ServiceFunctionPathBuilder()
- .setServiceChainName(new SfcName(sfcNameValue))
- .setName(new SfpName(sfcNameValue + "_plain"))
- .setSymmetric(symmetric)
- .build();
+ @Test
+ public void testFindServicePathFromParameterValues_noParams() {
+ final ServiceFunctionPath result =
+ ServiceChainingUtil.findServicePathFromParameterValues(Collections.emptyList());
+ assertNull(result);
}
@Test
- public void testCreateSymmetricRenderedPath() throws Exception {
- final ServiceFunctionPath sfp = createSfp("unit-sfp-02", false);
- final RenderedServicePath rsp = createRsp("unit-rsp-02");
- final TenantId tennantId = new TenantId("tenant-02");
-
- PowerMockito.mockStatic(SfcProviderRenderedPathAPI.class);
- final SfcProviderRenderedPathAPI api = PowerMockito.mock(SfcProviderRenderedPathAPI.class);
- PowerMockito.when(api.readRenderedServicePath(rspNameCaptor.capture())).thenReturn(rsp);
-
- final RenderedServicePath symmetricRenderedPath = ServiceChainingUtil.createSymmetricRenderedPath(sfp, rsp, tennantId);
+ public void testFindServicePathFromParameterValues_differentActionDefinition() {
+ final ParameterValueBuilder noNamePVBuilder = new ParameterValueBuilder();
+ final ParameterValue noNamePV = noNamePVBuilder.build();
+ final ParameterValueBuilder intValuePMBuilder = new ParameterValueBuilder();
+ String PARAMETER_VALUE_1 = "parameter-value-1";
+ intValuePMBuilder.setName(new ParameterName(PARAMETER_VALUE_1))
+ .setIntValue(1L);
+ final ParameterValue intValuePV = intValuePMBuilder.build();
+ final ParameterValueBuilder stringValuePVBuilder = new ParameterValueBuilder();
+ String PARAMETER_VALUE_2 = "parameter-value-2";
+ stringValuePVBuilder.setName(new ParameterName(PARAMETER_VALUE_2))
+ .setStringValue(PARAMETER_VALUE_2);
+ final ParameterValue stringValuePV = stringValuePVBuilder.build();
+ final List<ParameterValue> parameterValues = new ArrayList<>();
+ parameterValues.add(noNamePV);
+ parameterValues.add(intValuePV);
+ parameterValues.add(stringValuePV);
+ final ServiceFunctionPath result = ServiceChainingUtil.findServicePathFromParameterValues(parameterValues);
+ assertNull(result);
+ }
- Assert.assertEquals("unit-sfp-02_plaintenant-02-gbp-rsp-Reverse", rspNameCaptor.getValue().getValue());
- Assert.assertEquals(rsp, symmetricRenderedPath);
+ @Test
+ public void testFindServicePathFromParameterValues_noPathFound() {
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME))
+ .setStringValue(SFC_CHAIN_NAME);
+ final List<ParameterValue> parameterValues = Collections.singletonList(parameterValueBuilder.build());
+ final ServiceFunctionPathsBuilder serviceFunctionPathsBuilder = new ServiceFunctionPathsBuilder();
+ final ServiceFunctionPaths serviceFunctionPaths = serviceFunctionPathsBuilder.build();
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(serviceFunctionPaths);
+
+ final ServiceFunctionPath result = ServiceChainingUtil.findServicePathFromParameterValues(parameterValues);
+ assertNull(result);
}
@Test
- public void testCreateSymmetricRenderedPath_notExisting() throws Exception {
- final ServiceFunctionPath sfp = createSfp("unit-sfp-02", false);
- final RenderedServicePath rsp = createRsp("unit-rsp-02");
- final TenantId tennantId = new TenantId("tenant-02");
+ public void testFindServicePathFromParameterValues() {
+ final ParameterValueBuilder parameterValueBuilder = new ParameterValueBuilder();
+ parameterValueBuilder.setName(new ParameterName(SFC_CHAIN_NAME))
+ .setStringValue(SFC_CHAIN_NAME);
+ final List<ParameterValue> parameterValues = Collections.singletonList(parameterValueBuilder.build());
+ final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
+ serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME)).setServiceChainName(new SfcName(SFC_CHAIN_NAME));
+ final ServiceFunctionPathsBuilder serviceFunctionPathsBuilder = new ServiceFunctionPathsBuilder();
+ serviceFunctionPathsBuilder.setServiceFunctionPath(Collections.singletonList(serviceFunctionPathBuilder.build()));
+ final ServiceFunctionPaths serviceFunctionPaths = serviceFunctionPathsBuilder.build();
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(serviceFunctionPaths);
+
+ final ServiceFunctionPath result = ServiceChainingUtil.findServicePathFromParameterValues(parameterValues);
+ assertNotNull(result);
+ }
- PowerMockito.mockStatic(SfcProviderRenderedPathAPI.class);
- final SfcProviderRenderedPathAPI api = PowerMockito.mock(SfcProviderRenderedPathAPI.class);
- PowerMockito.when(api.readRenderedServicePath(rspNameCaptor.capture())).thenReturn(null);
- PowerMockito.when(api.createSymmetricRenderedServicePathAndState(rspCaptor.capture())).thenReturn(rsp);
+ @Test
+ public void findServiceFunctionPathFromServiceChainName_noPaths() {
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(null);
- final RenderedServicePath symmetricRenderedPath = ServiceChainingUtil.createSymmetricRenderedPath(sfp, rsp, tennantId);
+ final ServiceFunctionPath result =
+ ServiceChainingUtil.findServiceFunctionPathFromServiceChainName(new SfcName(SFC_CHAIN_NAME));
+ assertNull(result);
+ }
- Assert.assertEquals("unit-sfp-02_plaintenant-02-gbp-rsp-Reverse", rspNameCaptor.getValue().getValue());
- Assert.assertEquals(rsp, rspCaptor.getValue());
- Assert.assertEquals(rsp, symmetricRenderedPath);
+ @Test
+ public void findServiceFunctionPathFromServiceChainName_noPathFound() {
+ final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
+ final ServiceFunctionPathsBuilder serviceFunctionPathsBuilder = new ServiceFunctionPathsBuilder();
+ serviceFunctionPathsBuilder
+ .setServiceFunctionPath(Collections.singletonList(serviceFunctionPathBuilder.build()));
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths"))
+ .toReturn(serviceFunctionPathsBuilder.build());
+
+ final ServiceFunctionPath result =
+ ServiceChainingUtil.findServiceFunctionPathFromServiceChainName(new SfcName(SFC_CHAIN_NAME));
+ assertNull(result);
}
@Test
- public void testCheckLocalForwarderPresence() throws Exception {
- final Local local = new LocalBuilder().build();
+ public void findServiceFunctionPathFromServiceChainName_pathFound() {
+ final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
+ serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
+ .setServiceChainName(new SfcName(SFC_CHAIN_NAME));
+ final ServiceFunctionPathsBuilder serviceFunctionPathsBuilder = new ServiceFunctionPathsBuilder();
+ serviceFunctionPathsBuilder
+ .setServiceFunctionPath(Collections.singletonList(serviceFunctionPathBuilder.build()));
+
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths"))
+ .toReturn(serviceFunctionPathsBuilder.build());
+
+ final ServiceFunctionPath result =
+ ServiceChainingUtil.findServiceFunctionPathFromServiceChainName(new SfcName(SFC_CHAIN_NAME));
+ assertNotNull(result);
+ }
- Mockito.when(rwTx.read(Matchers.eq(LogicalDatastoreType.CONFIGURATION), Matchers.<InstanceIdentifier<Local>>any()))
- .thenReturn(Futures.<Optional<Local>, ReadFailedException>immediateCheckedFuture(Optional.of(local)))
- .thenReturn(Futures.<Optional<Local>, ReadFailedException>immediateCheckedFuture(Optional.absent()))
- .thenReturn(Futures.<Optional<Local>, ReadFailedException>immediateFailedCheckedFuture(new ReadFailedException("n/a")));
+ @Test
+ public void testCreateRenderedPath_renderedPathFound() {
+ final Sgt sourceSgt = new Sgt(1);
+ final Sgt destinationSgt = new Sgt(2);
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
+ serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
+ .setSymmetric(true);
+ final ServiceFunctionPath serviceFunctionPath = serviceFunctionPathBuilder.build();
+ final TenantId tenantId = new TenantId(TENANT_ID);
+
+ stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath",RspName.class))
+ .toReturn(new RenderedServicePathBuilder().build());
+
+ final RenderedServicePath result = ServiceChainingUtil.resolveRenderedServicePath(serviceFunctionPath, tenantId,
+ dataBroker, sourceSgt, destinationSgt, context);
+ assertNotNull(result);
+ }
- Assert.assertTrue(ServiceChainingUtil.checkLocalForwarderPresence(dataBroker));
- Assert.assertFalse(ServiceChainingUtil.checkLocalForwarderPresence(dataBroker));
- Assert.assertFalse(ServiceChainingUtil.checkLocalForwarderPresence(dataBroker));
- Assert.assertFalse(ServiceChainingUtil.checkLocalForwarderPresence(dataBroker));
+ @Test
+ public void testCreateRenderedPath_renderedPathCreated() {
+ ServiceChainingUtil.setTimeout(1L);
+ final Sgt sourceSgt = new Sgt(1);
+ final Sgt destinationSgt = new Sgt(2);
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
+ serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
+ .setSymmetric(true);
+ final ServiceFunctionPath serviceFunctionPath = serviceFunctionPathBuilder.build();
+ final TenantId tenantId = new TenantId(TENANT_ID);
+
+ stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath",RspName.class))
+ .toReturn(null);
+ stub(method(SfcProviderRenderedPathAPI.class, "createRenderedServicePathAndState", ServiceFunctionPath.class,
+ CreateRenderedPathInput.class)).toReturn(new RenderedServicePathBuilder().build());
+
+ final RenderedServicePath result = ServiceChainingUtil.resolveRenderedServicePath(serviceFunctionPath, tenantId,
+ dataBroker, sourceSgt, destinationSgt, context);
+ assertNotNull(result);
}
@Test
- public void testCheckServicePathPresence() throws Exception {
- final ServiceChain serviceChainOk = new ServiceChainBuilder()
- .setServicePath(Collections.singletonList(new ServicePathBuilder().build()))
- .build();
- final ServiceChain serviceChainBad1 = new ServiceChainBuilder()
- .setServicePath(Collections.emptyList())
- .build();
- final ServiceChain serviceChainBad2 = new ServiceChainBuilder().build();
+ public void testCreateReversedRenderedPath_renderedPathFound() {
+ final Sgt sourceSgt = new Sgt(1);
+ final Sgt destinationSgt = new Sgt(2);
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
+ serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
+ .setSymmetric(true);
+ final ServiceFunctionPath serviceFunctionPath = serviceFunctionPathBuilder.build();
+ final TenantId tenantId = new TenantId(TENANT_ID);
+
+ stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath",RspName.class))
+ .toReturn(new RenderedServicePathBuilder().build());
+
+ final RenderedServicePath result = ServiceChainingUtil.resolveReversedRenderedServicePath(serviceFunctionPath,
+ tenantId, dataBroker, sourceSgt, destinationSgt, context);
+ assertNotNull(result);
+ }
- Mockito.when(rwTx.read(Matchers.eq(LogicalDatastoreType.CONFIGURATION), Matchers.<InstanceIdentifier<ServiceChain>>any()))
- .thenReturn(Futures.<Optional<ServiceChain>, ReadFailedException>immediateCheckedFuture(Optional.of(serviceChainOk)))
- .thenReturn(Futures.<Optional<ServiceChain>, ReadFailedException>immediateCheckedFuture(Optional.of(serviceChainBad1)))
- .thenReturn(Futures.<Optional<ServiceChain>, ReadFailedException>immediateCheckedFuture(Optional.of(serviceChainBad2)))
- .thenReturn(Futures.<Optional<ServiceChain>, ReadFailedException>immediateCheckedFuture(Optional.absent()))
- .thenReturn(Futures.<Optional<ServiceChain>, ReadFailedException>immediateFailedCheckedFuture(new ReadFailedException("n/a")));
+ @Test
+ public void testCreateReversedRenderedPath_renderedPathCreated() {
+ ServiceChainingUtil.setTimeout(1L);
+ final Sgt sourceSgt = new Sgt(1);
+ final Sgt destinationSgt = new Sgt(2);
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final ServiceFunctionPathBuilder serviceFunctionPathBuilder = new ServiceFunctionPathBuilder();
+ serviceFunctionPathBuilder.setName(new SfpName(SFC_PATH_NAME))
+ .setSymmetric(true);
+ final ServiceFunctionPath serviceFunctionPath = serviceFunctionPathBuilder.build();
+ final TenantId tenantId = new TenantId(TENANT_ID);
+
+ stub(method(SfcProviderRenderedPathAPI.class, "readRenderedServicePath",RspName.class))
+ .toReturn(null);
+ stub(method(SfcProviderRenderedPathAPI.class, "createReverseRenderedServicePathEntry"))
+ .toReturn(new RenderedServicePathBuilder().build());
+
+ final RenderedServicePath result = ServiceChainingUtil.resolveReversedRenderedServicePath(serviceFunctionPath,
+ tenantId, dataBroker, sourceSgt, destinationSgt, context);
+ assertNotNull(result);
+ }
- Assert.assertFalse(ServiceChainingUtil.checkServicePathPresence(dataBroker));
- Assert.assertTrue(ServiceChainingUtil.checkServicePathPresence(dataBroker));
- Assert.assertTrue(ServiceChainingUtil.checkServicePathPresence(dataBroker));
- Assert.assertTrue(ServiceChainingUtil.checkServicePathPresence(dataBroker));
- Assert.assertFalse(ServiceChainingUtil.checkServicePathPresence(dataBroker));
+ @Test
+ public void testCreateRemoteForwarder() {
+ final ServiceFfNameBuilder serviceFfNameBuilder = new ServiceFfNameBuilder();
+ serviceFfNameBuilder.setName(SERVICE_FUNCTION_FORWARDER)
+ .setKey(new ServiceFfNameKey(SERVICE_FUNCTION_FORWARDER));
+ final ServiceFfName testForwarder = serviceFfNameBuilder.build();
+ final ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder = new ServiceFunctionForwarderBuilder();
+ serviceFunctionForwarderBuilder.setName(new SffName(SERVICE_FUNCTION_FORWARDER))
+ .setKey(new ServiceFunctionForwarderKey(new SffName(SERVICE_FUNCTION_FORWARDER)));
+ final ServiceFfName result = ServiceChainingUtil.createRemoteForwarder(serviceFunctionForwarderBuilder.build());
+ assertEquals(testForwarder, result);
}
@Test
- public void testFindServiceFunctionPath() throws Exception {
+ public void testGetServicePath() throws Exception {
final String sfcNameValue = "123";
- final ServiceFunctionPath sfcPath = createSfp(sfcNameValue, false);
+ final ServiceFunctionPath sfcPath = createSfp(sfcNameValue);
final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
.setServiceFunctionPath(Collections.singletonList(sfcPath))
.build();
stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
- final ServiceFunctionPath servicePath = ServiceChainingUtil.findServiceFunctionPath(new SfcName(sfcNameValue));
- Assert.assertEquals(sfcPath, servicePath);
+ final ServiceFunctionPath servicePath =
+ ServiceChainingUtil.findServicePathFromParameterValues(
+ Lists.newArrayList(createParameterValue(sfcNameValue)));
+ assertEquals(sfcPath, servicePath);
}
- @Test
- public void testSetSfcPart_success() throws Exception {
- final RenderedServicePath rsp = createRsp("unit-rsp-03");
- 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(new IpAddress(new Ipv4Address("1.2.3.4")))
- .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);
-
-
- final boolean outcome = ServiceChainingUtil.setSfcPart(rsp, policyWriter);
-
- Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
- Assert.assertTrue(outcome);
-
- Mockito.verify(policyWriter).cache(Matchers.<ServiceFfName>any());
- Mockito.verify(policyWriter).cache(Matchers.<ServiceChain>any());
- Mockito.verify(policyWriter).getCurrentNodeId();
- Mockito.verify(policyWriter).getCurrentMountpoint();
- Mockito.verify(policyWriter).getManagementIpAddress();
- Mockito.verifyNoMoreInteractions(policyWriter);
+ private ParameterValue createParameterValue(final String value) {
+ return new ParameterValueBuilder().setName(new ParameterName("sfc-chain-name")).setStringValue(value).build();
}
@Test
- public void testSetSfcPart_success_newRsp() throws Exception {
- final RenderedServicePath rsp = createRsp("unit-rsp-03");
- 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(new IpAddress(new Ipv4Address("1.2.3.4")))
- .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);
+ public void testCreateRenderedPath() throws Exception {
+ final String sfcNameValue = "123";
+ final ServiceFunctionPath sfp = createSfp(sfcNameValue);
+ final TenantId tenantId = new TenantId("unit-tenant-01");
+ final Sgt sourceSgt = new Sgt(1);
+ final Sgt destinationSgt = new Sgt(2);
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
+ final RenderedServicePath rsp = createRsp("unit-rsp-01");
- final boolean outcome = ServiceChainingUtil.setSfcPart(rsp, policyWriter);
+ PowerMockito.mockStatic(SfcProviderRenderedPathAPI.class);
+ PowerMockito.when(SfcProviderRenderedPathAPI.readRenderedServicePath(rspNameCaptor.capture())).thenReturn(rsp);
- Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
- Assert.assertTrue(outcome);
+ final RenderedServicePath renderedPath = ServiceChainingUtil.resolveRenderedServicePath(sfp, tenantId,
+ dataBroker, sourceSgt, destinationSgt, context);
- Mockito.verify(policyWriter).cache(Matchers.<Local>any());
- Mockito.verify(policyWriter).cache(Matchers.<ServiceFfName>any());
- Mockito.verify(policyWriter).cache(Matchers.<ServiceChain>any());
- Mockito.verify(policyWriter).getCurrentMountpoint();
- Mockito.verify(policyWriter, Mockito.times(2)).getManagementIpAddress();
- Mockito.verifyNoMoreInteractions(policyWriter);
+ assertEquals("123_plain-unit-tenant-01-gbp-rsp", rspNameCaptor.getValue().getValue());
+ assertEquals(rsp, renderedPath);
}
@Test
- public void testSetSfcPart_fail01() throws Exception {
- Assert.assertFalse(ServiceChainingUtil.setSfcPart(null, policyWriter));
-
- final RenderedServicePathBuilder rspBuilder = new RenderedServicePathBuilder().setName(new RspName("unit-rsp-05"));
- Assert.assertFalse(ServiceChainingUtil.setSfcPart(rspBuilder.build(), policyWriter));
+ public void testCreateSymmetricRenderedPath() throws Exception {
+ final ServiceFunctionPath sfp = createSfp("unit-sfp-02");
+ final RenderedServicePath rsp = createRsp("unit-rsp-02");
+ final TenantId tenantId = new TenantId("tenant-02");
+ final Sgt sourceSgt = new Sgt(1);
+ final Sgt destinationSgt = new Sgt(2);
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setPolicyMapLocation(getLocation());
- rspBuilder.setRenderedServicePathHop(Collections.emptyList());
- Assert.assertFalse(ServiceChainingUtil.setSfcPart(rspBuilder.build(), policyWriter));
+ PowerMockito.mockStatic(SfcProviderRenderedPathAPI.class);
+ PowerMockito.when(SfcProviderRenderedPathAPI.readRenderedServicePath(rspNameCaptor.capture())).thenReturn(rsp);
+ stub(method(SfcProviderServiceForwarderAPI.class, "readServiceFunctionForwarder"))
+ .toReturn(new ServiceFunctionForwarderBuilder().setName(new SffName("sff-name")).build());
- rspBuilder.setRenderedServicePathHop(Collections.singletonList(null));
- Assert.assertFalse(ServiceChainingUtil.setSfcPart(rspBuilder.build(), policyWriter));
+ final RenderedServicePath symmetricRenderedPath = ServiceChainingUtil.resolveReversedRenderedServicePath(sfp,
+ tenantId, dataBroker, sourceSgt, destinationSgt, context);
- Mockito.verifyNoMoreInteractions(policyWriter);
+ assertEquals("unit-sfp-02_plain-tenant-02-gbp-rsp-Reverse", rspNameCaptor.getValue().getValue());
+ assertEquals(rsp, symmetricRenderedPath);
}
@Test
- public void testSetSfcPart_fail02() throws Exception {
- final RenderedServicePath rsp = createRsp("unit-rsp-03");
-
- Mockito.doReturn(Futures.immediateCheckedFuture(Optional.absent()))
- .when(rwTx).read(Mockito.eq(LogicalDatastoreType.CONFIGURATION), Mockito.<InstanceIdentifier<Local>>any());
-
- PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class);
- final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class);
- PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn(null);
-
- final boolean outcome = ServiceChainingUtil.setSfcPart(rsp, policyWriter);
+ public void testFindServiceFunctionPath() throws Exception {
+ final String sfcNameValue = "123";
+ final ServiceFunctionPath sfcPath = createSfp(sfcNameValue);
+ final ServiceFunctionPaths sfcPaths = new ServiceFunctionPathsBuilder()
+ .setServiceFunctionPath(Collections.singletonList(sfcPath))
+ .build();
- Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
- Assert.assertFalse(outcome);
+ stub(method(SfcProviderServicePathAPI.class, "readAllServiceFunctionPaths")).toReturn(sfcPaths);
- Mockito.verify(policyWriter).getCurrentMountpoint();
- Mockito.verify(policyWriter).getManagementIpAddress();
- Mockito.verify(policyWriter).cache(Matchers.<Local>any());
- Mockito.verifyNoMoreInteractions(policyWriter);
+ final ServiceFunctionPath servicePath =
+ ServiceChainingUtil.findServiceFunctionPathFromServiceChainName(new SfcName(sfcNameValue));
+ assertEquals(sfcPath, servicePath);
}
- @Test
- public void testSetSfcPart_fail03() throws Exception {
- final RenderedServicePath rsp = createRsp("unit-rsp-03");
- final ServiceFunctionForwarderBuilder sffBuilder = new ServiceFunctionForwarderBuilder()
- .setName(new SffName("unit-sff-03"))
- .setIpMgmtAddress(null);
-
- stub(method(ServiceChainingUtil.class, "checkLocalForwarderPresence")).toReturn(true);
+ // Auxiliary methods
- PowerMockito.mockStatic(SfcProviderServiceForwarderAPI.class);
- final SfcProviderServiceForwarderAPI api = PowerMockito.mock(SfcProviderServiceForwarderAPI.class);
- PowerMockito.when(api.readServiceFunctionForwarder(sffNameCaptor.capture())).thenReturn(
- sffBuilder.build());
-
- Assert.assertFalse(ServiceChainingUtil.setSfcPart(rsp, policyWriter));
-
- Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
-
- Mockito.verify(policyWriter).getCurrentMountpoint();
- Mockito.verify(policyWriter).getCurrentNodeId();
- Mockito.verifyNoMoreInteractions(policyWriter);
+ private RenderedServicePath buildRsp() {
+ RenderedServicePathBuilder renderedServicePathBuilder = new RenderedServicePathBuilder();
+ renderedServicePathBuilder.setRenderedServicePathHop(null);
+ return renderedServicePathBuilder.build();
}
- @Test
- public void testSetSfcPart_fail04() throws Exception {
- final RenderedServicePath rsp = createRsp("unit-rsp-03");
- final ServiceFunctionForwarderBuilder sffBuilder = new ServiceFunctionForwarderBuilder()
- .setName(new SffName("unit-sff-03"))
- .setIpMgmtAddress(new IpAddress((Ipv4Address) null));
-
- 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(
- sffBuilder.build());
+ private RenderedServicePath createRsp(final String rspNameValue) {
+ return new RenderedServicePathBuilder()
+ .setName(new RspName(rspNameValue))
+ .setRenderedServicePathHop(Lists.newArrayList(createRspHop()))
+ .build();
+ }
- Assert.assertFalse(ServiceChainingUtil.setSfcPart(rsp, policyWriter));
+ private RenderedServicePathHop createRspHop() {
+ return new RenderedServicePathHopBuilder()
+ .setServiceFunctionName(new SfName("rsp-hop-01-sf"))
+ .setServiceFunctionForwarder(new SffName("rsp-hop-01-sf" + "+sff"))
+ .build();
+ }
- Assert.assertEquals("rsp-hop-01-sf+sff", sffNameCaptor.getValue().getValue());
+ private ServiceFunctionPath createSfp(final String sfcNameValue) {
+ return new ServiceFunctionPathBuilder()
+ .setServiceChainName(new SfcName(sfcNameValue))
+ .setName(new SfpName(sfcNameValue + "_plain"))
+ .setSymmetric(false)
+ .build();
+ }
- Mockito.verify(policyWriter).getCurrentMountpoint();
- Mockito.verify(policyWriter).getCurrentNodeId();
- Mockito.verifyNoMoreInteractions(policyWriter);
+ private PeerEndpoint peerEndpointBuilder() {
+ final PeerEndpointBuilder peerEndpointBuilder = new PeerEndpointBuilder();
+ final RuleGroupWithRendererEndpointParticipationBuilder ruleGroupBuilder =
+ new RuleGroupWithRendererEndpointParticipationBuilder();
+ peerEndpointBuilder
+ .setRuleGroupWithRendererEndpointParticipation(Collections.singletonList(ruleGroupBuilder.build()));
+ return peerEndpointBuilder.build();
}
+ private Map<ActionCase, ActionInDirection> resolvedActionBuilder(@Nonnull final RuleName ruleName,
+ @Nonnull final ActionCase actionCase,
+ @Nonnull final Action action,
+ @Nonnull final Direction direction) {
+ final ActionInDirection actionInDirection = new ActionInDirection(ruleName, action, PROVIDER, direction);
+ return Collections.singletonMap(actionCase, actionInDirection);
+ }
- @Test
- public void testForwarderTypeChoice() throws Exception {
- final String sffValue = "unit-xx";
- final ServiceTypeChoice fwChoice = ServiceChainingUtil.forwarderTypeChoice(sffValue);
+ private PolicyConfigurationContext policyConfigurationContextBuilder() {
+ final RendererEndpointBuilder rendererEndpointBuilder = new RendererEndpointBuilder();
+ final PolicyConfigurationContext context = new PolicyConfigurationContext();
+ context.setCurrentRendererEP(rendererEndpointBuilder.build());
+ return context;
+ }
- Assert.assertTrue(fwChoice instanceof ServiceFunctionForwarder);
- final ServiceFunctionForwarder sff = (ServiceFunctionForwarder) fwChoice;
- Assert.assertEquals(sffValue, sff.getServiceFunctionForwarder());
+ private Sgt sgtBuilder(final int value) {
+ return new Sgt(value);
}
- @Test
- public void testFunctionTypeChoice() throws Exception {
- final String stcValue = "unit-xx";
- final ServiceTypeChoice srvTypeChoice = ServiceChainingUtil.functionTypeChoice(stcValue);
+ private Action actionBuilder(final List<ParameterValue> parameters) {
+ final ActionBuilder actionBuilder = new ActionBuilder();
+ actionBuilder.setParameterValue(parameters);
+ return actionBuilder.build();
+ }
- Assert.assertTrue(srvTypeChoice instanceof ServiceFunction);
- final ServiceFunction stc = (ServiceFunction) srvTypeChoice;
- Assert.assertEquals(stcValue, stc.getServiceFunction());
+ private PolicyManagerImpl.PolicyMapLocation getLocation() {
+ final String POLICY_MAP = "policy-map";
+ final String INTERFACE = "interface";
+ final NodeId nodeId = new NodeId("node-id");
+ final String IP_ADDRESS = "ip-address";
+ return new PolicyManagerImpl.PolicyMapLocation(POLICY_MAP, INTERFACE, nodeId, IP_ADDRESS, dataBroker);
}
-}
\ No newline at end of file
+}