From e9477a4efceaa89784d1eb96d5fc6a06f44edcfa Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Mon, 2 Oct 2017 19:08:43 +0200 Subject: [PATCH] Fix fileEncoding violations for checkstyle Change-Id: I231402a076acdc315ff13166573f5b1200b1c099 Signed-off-by: Michal Cmarada --- .../dto/ValidationResultBuilder.java | 192 ++-- .../validator/ValidationResultTest.java | 124 +-- .../mapping/rule/SecRuleEntityDecoder.java | 540 +++++------ .../neutron/vpp/mapper/NeutronVppMapper.java | 72 +- .../neutron/vpp/mapper/SocketInfo.java | 128 +-- .../mapper/hostconfigs/VppNodeListener.java | 204 ++-- .../mapper/processors/MappingProvider.java | 46 +- .../mapper/processors/NeutronListener.java | 274 +++--- .../vpp/mapper/processors/PortAware.java | 168 ++-- .../vpp/mapper/processors/PortHandler.java | 916 +++++++++--------- .../vpp/mapper/util/HostconfigUtil.java | 144 +-- .../vpp/mapper/hostconfigs/TestResources.java | 202 ++-- .../hostconfigs/VppNodeListenerTest.java | 114 +-- .../mapper/processors/NetworkAwareTest.java | 352 +++---- .../processors/NeutronListenerTest.java | 216 ++--- .../vpp/mapper/processors/TestUtils.java | 282 +++--- .../vpp/mapper/util/HostconfigUtilTest.java | 72 +- .../endpoint/EndpointListenerCovrgTest.java | 166 ++-- .../endpoint/IovisorEndpointAugCovrgTest.java | 138 +-- .../sf/ActionDefinitionListenerTest.java | 216 ++--- .../renderer/iovisor/sf/AllowActionTest.java | 104 +- .../iovisor/sf/ClassificationResultTest.java | 102 +- .../sf/ClassifierDefinitionListenerTest.java | 218 ++--- .../iovisor/sf/EtherTypeClassifierTest.java | 174 ++-- .../iovisor/sf/IpProtoClassifierTest.java | 226 ++--- .../renderer/iovisor/sf/L4ClassifierTest.java | 344 +++---- .../iovisor/sf/ParamDerivatorTest.java | 112 +-- .../iovisor/sf/SubjectFeaturesTest.java | 82 +- .../policyenforcer/NetworkElements.java | 196 ++-- .../ofoverlay/endpoint/OfOverlayAugTest.java | 312 +++--- .../endpoint/OfOverlayL3NatAugTest.java | 160 +-- .../ofoverlay/flow/ChainActionFlowsTest.java | 586 +++++------ .../ofoverlay/flow/FlowTableTest.java | 84 +- .../renderer/ofoverlay/flow/OfTableTest.java | 572 +++++------ .../ofoverlay/mapper/MapperUtilsTest.java | 762 +++++++-------- .../sf/ActionDefinitionListenerTest.java | 240 ++--- .../sf/ClassifierDefinitionListenerTest.java | 248 ++--- .../statistics/OFStatisticsManagerTest.java | 170 ++-- .../statistics/ReadGbpFlowCacheTaskTest.java | 132 +-- .../ResolvedPolicyClassifierListenerTest.java | 242 ++--- .../SflowClientSettingsListenerTest.java | 194 ++-- .../flowcache/FlowCacheBuilderTest.java | 154 +-- .../FlowCacheDefinitionBuilderTest.java | 138 +-- .../flowcache/FlowCacheDefinitionTest.java | 56 +- .../flowcache/FlowCacheFactoryTest.java | 496 +++++----- .../flowcache/FlowCacheFilterBuilderTest.java | 160 +-- .../flowcache/FlowCacheFilterTest.java | 56 +- .../flowcache/FlowCacheKeysBuilderTest.java | 160 +-- .../flowcache/FlowCacheKeysTest.java | 56 +- .../statistics/flowcache/FlowCacheTest.java | 138 +-- .../statistics/util/IidSflowNameUtilTest.java | 192 ++-- .../renderer/vpp/nat/NatManager.java | 168 ++-- .../renderer/vpp/nat/NatUtil.java | 622 ++++++------ .../vpp/VppRendererDataBrokerTest.java | 80 +- .../vpp/commands/LoopbackCommandTest.java | 522 +++++----- .../vpp/commands/TapPortCommandTest.java | 410 ++++---- .../vpp/commands/VhostUserCommandTest.java | 364 +++---- .../renderer/vpp/sf/L4ClassifierTest.java | 346 +++---- 58 files changed, 6972 insertions(+), 6972 deletions(-) diff --git a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/dto/ValidationResultBuilder.java b/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/dto/ValidationResultBuilder.java index 3e22b658a..5704e8bce 100755 --- a/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/dto/ValidationResultBuilder.java +++ b/groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/dto/ValidationResultBuilder.java @@ -1,96 +1,96 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.dto; - -import javax.annotation.Nonnull; - -import org.opendaylight.groupbasedpolicy.api.ValidationResult; -import org.opendaylight.yangtools.concepts.Builder; - -public final class ValidationResultBuilder implements Builder { - - public static final String ILLEGAL_ARG_EX_MSG = "Result message cannot be set to NULL!"; - - private static final class ValidationResultImpl implements ValidationResult { - - private final boolean success; - private final String message; - - private ValidationResultImpl(final boolean success, final String message) { - this.success = success; - this.message = message; - } - - @Override - public boolean isValid() { - return success; - } - - @Override - public String getMessage() { - return message; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - ValidationResultImpl that = (ValidationResultImpl) o; - - if (success != that.success) - return false; - return message.equals(that.message); - } - - @Override - public int hashCode() { - int result = (success ? 1 : 0); - result = 31 * result + message.hashCode(); - return result; - } - } - - private boolean success; - private String message = ""; - - public ValidationResultBuilder success() { - this.success = true; - return this; - } - - /** - * Returns a builder for a failed result. - */ - public ValidationResultBuilder failed() { - this.success = false; - return this; - } - - /** - * Returns a builder for a failed result. - * - * @param message brief explanation - * @throws IllegalArgumentException when message is null - */ - public ValidationResultBuilder setMessage(@Nonnull String message) { - if (message == null) { - throw new IllegalArgumentException(ILLEGAL_ARG_EX_MSG); - } - this.message = message; - return this; - } - - @Override - public ValidationResult build() { - return new ValidationResultImpl(success, message); - } - -} +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.dto; + +import javax.annotation.Nonnull; + +import org.opendaylight.groupbasedpolicy.api.ValidationResult; +import org.opendaylight.yangtools.concepts.Builder; + +public final class ValidationResultBuilder implements Builder { + + public static final String ILLEGAL_ARG_EX_MSG = "Result message cannot be set to NULL!"; + + private static final class ValidationResultImpl implements ValidationResult { + + private final boolean success; + private final String message; + + private ValidationResultImpl(final boolean success, final String message) { + this.success = success; + this.message = message; + } + + @Override + public boolean isValid() { + return success; + } + + @Override + public String getMessage() { + return message; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + ValidationResultImpl that = (ValidationResultImpl) o; + + if (success != that.success) + return false; + return message.equals(that.message); + } + + @Override + public int hashCode() { + int result = (success ? 1 : 0); + result = 31 * result + message.hashCode(); + return result; + } + } + + private boolean success; + private String message = ""; + + public ValidationResultBuilder success() { + this.success = true; + return this; + } + + /** + * Returns a builder for a failed result. + */ + public ValidationResultBuilder failed() { + this.success = false; + return this; + } + + /** + * Returns a builder for a failed result. + * + * @param message brief explanation + * @throws IllegalArgumentException when message is null + */ + public ValidationResultBuilder setMessage(@Nonnull String message) { + if (message == null) { + throw new IllegalArgumentException(ILLEGAL_ARG_EX_MSG); + } + this.message = message; + return this; + } + + @Override + public ValidationResult build() { + return new ValidationResultImpl(success, message); + } + +} diff --git a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/validator/ValidationResultTest.java b/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/validator/ValidationResultTest.java index 33ed72c52..d9fa859ee 100755 --- a/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/validator/ValidationResultTest.java +++ b/groupbasedpolicy/src/test/java/org/opendaylight/groupbasedpolicy/resolver/validator/ValidationResultTest.java @@ -1,62 +1,62 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.resolver.validator; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.opendaylight.groupbasedpolicy.api.ValidationResult; -import org.opendaylight.groupbasedpolicy.dto.ValidationResultBuilder; - -public class ValidationResultTest { - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - public static final String VALIDATED = "Validated."; - public static final String EMPTY_STRING = ""; - - ValidationResultBuilder resultBuilder; - - @Before - public void init() { - resultBuilder = new ValidationResultBuilder(); - } - - @Test - public void testBuild_WithSuccess() { - ValidationResult result = resultBuilder.success().build(); - assertTrue(result.isValid()); - assertEquals(EMPTY_STRING, result.getMessage()); - } - - @Test - public void testBuild_WithFailed() { - ValidationResult result = resultBuilder.failed().build(); - assertFalse(result.isValid()); - assertEquals(EMPTY_STRING, result.getMessage()); - } - - @Test - public void testMessage() { - ValidationResult result = resultBuilder.setMessage(VALIDATED).build(); - - assertEquals(VALIDATED, result.getMessage()); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(ValidationResultBuilder.ILLEGAL_ARG_EX_MSG); - resultBuilder.setMessage(null); - } - -} +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.resolver.validator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.opendaylight.groupbasedpolicy.api.ValidationResult; +import org.opendaylight.groupbasedpolicy.dto.ValidationResultBuilder; + +public class ValidationResultTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + public static final String VALIDATED = "Validated."; + public static final String EMPTY_STRING = ""; + + ValidationResultBuilder resultBuilder; + + @Before + public void init() { + resultBuilder = new ValidationResultBuilder(); + } + + @Test + public void testBuild_WithSuccess() { + ValidationResult result = resultBuilder.success().build(); + assertTrue(result.isValid()); + assertEquals(EMPTY_STRING, result.getMessage()); + } + + @Test + public void testBuild_WithFailed() { + ValidationResult result = resultBuilder.failed().build(); + assertFalse(result.isValid()); + assertEquals(EMPTY_STRING, result.getMessage()); + } + + @Test + public void testMessage() { + ValidationResult result = resultBuilder.setMessage(VALIDATED).build(); + + assertEquals(VALIDATED, result.getMessage()); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(ValidationResultBuilder.ILLEGAL_ARG_EX_MSG); + resultBuilder.setMessage(null); + } + +} diff --git a/neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SecRuleEntityDecoder.java b/neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SecRuleEntityDecoder.java index 47a60adc0..c5255bbfd 100755 --- a/neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SecRuleEntityDecoder.java +++ b/neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/rule/SecRuleEntityDecoder.java @@ -1,270 +1,270 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.ArrayList; -import java.util.List; - -import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; -import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.ActionChoice; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.AllowActionCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.SfcActionCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef.ConnectionTracking; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.EndpointIdentificationConstraints; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.EndpointIdentificationConstraintsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.L3EndpointIdentificationConstraintsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraint; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraintBuilder; -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.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchers; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.DirectionBase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.DirectionEgress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.DirectionIngress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.EthertypeBase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.EthertypeV4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.EthertypeV6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolBase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolIcmp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolIcmpV6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolTcp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolUdp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.SecurityRuleAttributes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule; - -import com.google.common.collect.ImmutableList; - -public class SecRuleEntityDecoder { - - private SecRuleEntityDecoder() { - throw new UnsupportedOperationException("Cannot create an instace."); - } - - public static ContractId getContractId(SecurityRule secRule) { - return new ContractId(secRule.getUuid().getValue()); - } - - public static ClassifierInstance getClassifierInstance(SecurityRule secRule) { - ClassifierInstanceBuilder classifierBuilder = new ClassifierInstanceBuilder(); - List params = new ArrayList<>(); - Integer portMin = secRule.getPortRangeMin(); - Integer portMax = secRule.getPortRangeMax(); - if (portMin != null && portMax != null) { - classifierBuilder.setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId()); - if (portMin.equals(portMax)) { - params.add(new ParameterValueBuilder().setName(new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)) - .setIntValue(portMin.longValue()) - .build()); - } else { - params.add(new ParameterValueBuilder().setName(new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) - .setRangeValue( - new RangeValueBuilder().setMin(portMin.longValue()).setMax(portMax.longValue()).build()) - .build()); - } - } - Long protocol = getProtocol(secRule); - if (protocol != null) { - if (classifierBuilder.getClassifierDefinitionId() == null) { - classifierBuilder.setClassifierDefinitionId(IpProtoClassifierDefinition.DEFINITION.getId()); - } - params.add(new ParameterValueBuilder().setName(new ParameterName(IpProtoClassifierDefinition.PROTO_PARAM)) - .setIntValue(protocol) - .build()); - } - Long ethertype = getEtherType(secRule); - if (ethertype != null) { - if (classifierBuilder.getClassifierDefinitionId() == null) { - classifierBuilder.setClassifierDefinitionId(EtherTypeClassifierDefinition.DEFINITION.getId()); - } - params.add(new ParameterValueBuilder().setName(new ParameterName(EtherTypeClassifierDefinition.ETHERTYPE_PARAM)) - .setIntValue(ethertype) - .build()); - } - ClassifierName classifierName = SecRuleNameDecoder.getClassifierInstanceName(secRule); - return classifierBuilder.setParameterValue(params).setName(new ClassifierName(classifierName)).build(); - } - - public static ActionRef createActionRefFromActionChoice(ActionChoice action) { - if(action instanceof SfcActionCase){ - return MappingUtils.createSfcActionRef(((SfcActionCase) action).getSfcChainName()); - } else if (action instanceof AllowActionCase) { - return MappingUtils.ACTION_REF_ALLOW; - } - return null; - } - - public static ClassifierRef getClassifierRef(SecurityRule secRule) { - checkNotNull(secRule); - ClassifierName classifierInstanceName = SecRuleNameDecoder.getClassifierInstanceName(secRule); - ClassifierRefBuilder classifierRefBuilder = new ClassifierRefBuilder() - .setConnectionTracking(ConnectionTracking.Reflexive).setInstanceName(classifierInstanceName); - Direction direction = getDirection(secRule); - classifierRefBuilder.setDirection(direction); - ClassifierName classifierRefName = SecRuleNameDecoder.getClassifierRefName(secRule); - return classifierRefBuilder.setName(classifierRefName).build(); - } - - /** - * @param secRule - * @return direction resolved from {@link SecurityRule#getDirection()} - * @throws IllegalArgumentException if return value of - * {@link SecurityRule#getDirection()} is other than {@link DirectionIngress} or - * {@link DirectionEgress} - */ - public static Direction getDirection(SecurityRule secRule) { - Class direction = secRule.getDirection(); - if (direction == null) { - throw new IllegalArgumentException("Direction cannot be null."); - } - if (direction.isAssignableFrom(DirectionIngress.class)) { - return Direction.In; - } - if (direction.isAssignableFrom(DirectionEgress.class)) { - return Direction.Out; - } - throw new IllegalArgumentException("Direction " + direction + " from security group rule " - + secRule + " is not supported. Direction can be only 'ingress' or 'egress'."); - } - - /** - * @param secRule {@link SecurityRule#getRemoteIpPrefix()} is used for EIC - * and subject selection - * @return clause with the subject and with a consumer matcher containing EIC - */ - public static Clause getClause(SecurityRule secRule) { - checkNotNull(secRule); - SubjectName subjectName = SecRuleNameDecoder.getSubjectName(secRule); - ClauseBuilder clauseBuilder = - new ClauseBuilder().setSubjectRefs(ImmutableList.of(subjectName)).setName(SecRuleNameDecoder.getClauseName(secRule)); - IpPrefix remoteIpPrefix = secRule.getRemoteIpPrefix(); - if (remoteIpPrefix != null) { - clauseBuilder.setConsumerMatchers(createConsumerMatchersWithEic(remoteIpPrefix)); - } - return clauseBuilder.build(); - } - - private static ConsumerMatchers createConsumerMatchersWithEic(IpPrefix ipPrefix) { - PrefixConstraint consumerPrefixConstraint = new PrefixConstraintBuilder().setIpPrefix(ipPrefix).build(); - EndpointIdentificationConstraints eic = - new EndpointIdentificationConstraintsBuilder() - .setL3EndpointIdentificationConstraints(new L3EndpointIdentificationConstraintsBuilder() - .setPrefixConstraint(ImmutableList.of(consumerPrefixConstraint)).build()) - .build(); - return new ConsumerMatchersBuilder().setEndpointIdentificationConstraints(eic).build(); - } - - public static boolean isEtherTypeOfOneWithinTwo(SecurityRule one, SecurityRule two) { - Long oneEtherType = getEtherType(one); - Long twoEtherType = getEtherType(two); - return twoIsNullOrEqualsOne(oneEtherType, twoEtherType); - } - - public static boolean isProtocolOfOneWithinTwo(SecurityRule one, SecurityRule two) { - Long oneProtocol = getProtocol(one); - Long twoProtocol = getProtocol(two); - return twoIsNullOrEqualsOne(oneProtocol, twoProtocol); - } - - private static boolean twoIsNullOrEqualsOne(T one, T two) { - if (two == null) - return true; - if (two.equals(one)) - return true; - return false; - } - - public static boolean isPortsOfOneWithinTwo(SecurityRule one, SecurityRule two) { - Integer onePortMin = one.getPortRangeMin(); - Integer onePortMax = one.getPortRangeMax(); - Integer twoPortMin = two.getPortRangeMin(); - Integer twoPortMax = two.getPortRangeMax(); - if (twoPortMin == null && twoPortMax == null) { - return true; - } - if ((onePortMin != null && twoPortMin != null && onePortMin >= twoPortMin) - && (onePortMax != null && twoPortMax != null && onePortMax <= twoPortMax)) { - return true; - } - return false; - } - - /** - * @param secRule - * @return {@code null} if {@link SecurityRule#getEthertype()} is null; Otherwise ethertype - * number - * @throws IllegalArgumentException if return value of - * {@link SecurityRule#getEthertype()} is other {@link EthertypeV4} or - * {@link EthertypeV6} - */ - public static Long getEtherType(SecurityRule secRule) { - Class ethertype = secRule.getEthertype(); - if (ethertype == null) { - return null; - } - if (ethertype.isAssignableFrom(EthertypeV4.class)) { - return EtherTypeClassifierDefinition.IPv4_VALUE; - } - if (ethertype.isAssignableFrom(EthertypeV6.class)) { - return EtherTypeClassifierDefinition.IPv6_VALUE; - } - throw new IllegalArgumentException("Ethertype " + ethertype + " is not supported."); - } - - /** - * @param secRule - * @return {@code null} if {@link SecurityRule#getProtocol()} is null; Otherwise protocol number - * @throws IllegalArgumentException if return value of - * {@link SecurityRule#getProtocol()} is other than {@link ProtocolTcp}, - * {@link ProtocolUdp}, {@link ProtocolIcmp}, {@link ProtocolIcmpV6} - */ - public static Long getProtocol(SecurityRule secRule) { - SecurityRuleAttributes.Protocol protocol = secRule.getProtocol(); - if (protocol == null) { - return null; - } - if (protocol.getUint8() != null) { - return protocol.getUint8().longValue(); - } - if (protocol.getIdentityref() != null) { - if (protocol.getIdentityref().equals(ProtocolTcp.class)) { - return IpProtoClassifierDefinition.TCP_VALUE; - } - if (protocol.getIdentityref().equals(ProtocolUdp.class)) { - return IpProtoClassifierDefinition.UDP_VALUE; - } - if (protocol.getIdentityref().equals(ProtocolIcmp.class)) { - return IpProtoClassifierDefinition.ICMP_VALUE; - } - if (protocol.getIdentityref().equals(ProtocolIcmpV6.class)) { - return IpProtoClassifierDefinition.ICMPv6_VALUE; - } - } - throw new IllegalArgumentException("Neutron Security Rule Protocol value " + protocol + " is not supported."); - } -} +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.ArrayList; +import java.util.List; + +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; +import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.ActionChoice; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.AllowActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.SfcActionCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef.ConnectionTracking; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.EndpointIdentificationConstraints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.EndpointIdentificationConstraintsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.L3EndpointIdentificationConstraintsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraint; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.endpoint.identification.constraints.endpoint.identification.constraints.l3.endpoint.identification.constraints.PrefixConstraintBuilder; +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.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.DirectionBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.DirectionEgress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.DirectionIngress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.EthertypeBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.EthertypeV4; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.EthertypeV6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolIcmp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolIcmpV6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolTcp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolUdp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.SecurityRuleAttributes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule; + +import com.google.common.collect.ImmutableList; + +public class SecRuleEntityDecoder { + + private SecRuleEntityDecoder() { + throw new UnsupportedOperationException("Cannot create an instace."); + } + + public static ContractId getContractId(SecurityRule secRule) { + return new ContractId(secRule.getUuid().getValue()); + } + + public static ClassifierInstance getClassifierInstance(SecurityRule secRule) { + ClassifierInstanceBuilder classifierBuilder = new ClassifierInstanceBuilder(); + List params = new ArrayList<>(); + Integer portMin = secRule.getPortRangeMin(); + Integer portMax = secRule.getPortRangeMax(); + if (portMin != null && portMax != null) { + classifierBuilder.setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId()); + if (portMin.equals(portMax)) { + params.add(new ParameterValueBuilder().setName(new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)) + .setIntValue(portMin.longValue()) + .build()); + } else { + params.add(new ParameterValueBuilder().setName(new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) + .setRangeValue( + new RangeValueBuilder().setMin(portMin.longValue()).setMax(portMax.longValue()).build()) + .build()); + } + } + Long protocol = getProtocol(secRule); + if (protocol != null) { + if (classifierBuilder.getClassifierDefinitionId() == null) { + classifierBuilder.setClassifierDefinitionId(IpProtoClassifierDefinition.DEFINITION.getId()); + } + params.add(new ParameterValueBuilder().setName(new ParameterName(IpProtoClassifierDefinition.PROTO_PARAM)) + .setIntValue(protocol) + .build()); + } + Long ethertype = getEtherType(secRule); + if (ethertype != null) { + if (classifierBuilder.getClassifierDefinitionId() == null) { + classifierBuilder.setClassifierDefinitionId(EtherTypeClassifierDefinition.DEFINITION.getId()); + } + params.add(new ParameterValueBuilder().setName(new ParameterName(EtherTypeClassifierDefinition.ETHERTYPE_PARAM)) + .setIntValue(ethertype) + .build()); + } + ClassifierName classifierName = SecRuleNameDecoder.getClassifierInstanceName(secRule); + return classifierBuilder.setParameterValue(params).setName(new ClassifierName(classifierName)).build(); + } + + public static ActionRef createActionRefFromActionChoice(ActionChoice action) { + if(action instanceof SfcActionCase){ + return MappingUtils.createSfcActionRef(((SfcActionCase) action).getSfcChainName()); + } else if (action instanceof AllowActionCase) { + return MappingUtils.ACTION_REF_ALLOW; + } + return null; + } + + public static ClassifierRef getClassifierRef(SecurityRule secRule) { + checkNotNull(secRule); + ClassifierName classifierInstanceName = SecRuleNameDecoder.getClassifierInstanceName(secRule); + ClassifierRefBuilder classifierRefBuilder = new ClassifierRefBuilder() + .setConnectionTracking(ConnectionTracking.Reflexive).setInstanceName(classifierInstanceName); + Direction direction = getDirection(secRule); + classifierRefBuilder.setDirection(direction); + ClassifierName classifierRefName = SecRuleNameDecoder.getClassifierRefName(secRule); + return classifierRefBuilder.setName(classifierRefName).build(); + } + + /** + * @param secRule + * @return direction resolved from {@link SecurityRule#getDirection()} + * @throws IllegalArgumentException if return value of + * {@link SecurityRule#getDirection()} is other than {@link DirectionIngress} or + * {@link DirectionEgress} + */ + public static Direction getDirection(SecurityRule secRule) { + Class direction = secRule.getDirection(); + if (direction == null) { + throw new IllegalArgumentException("Direction cannot be null."); + } + if (direction.isAssignableFrom(DirectionIngress.class)) { + return Direction.In; + } + if (direction.isAssignableFrom(DirectionEgress.class)) { + return Direction.Out; + } + throw new IllegalArgumentException("Direction " + direction + " from security group rule " + + secRule + " is not supported. Direction can be only 'ingress' or 'egress'."); + } + + /** + * @param secRule {@link SecurityRule#getRemoteIpPrefix()} is used for EIC + * and subject selection + * @return clause with the subject and with a consumer matcher containing EIC + */ + public static Clause getClause(SecurityRule secRule) { + checkNotNull(secRule); + SubjectName subjectName = SecRuleNameDecoder.getSubjectName(secRule); + ClauseBuilder clauseBuilder = + new ClauseBuilder().setSubjectRefs(ImmutableList.of(subjectName)).setName(SecRuleNameDecoder.getClauseName(secRule)); + IpPrefix remoteIpPrefix = secRule.getRemoteIpPrefix(); + if (remoteIpPrefix != null) { + clauseBuilder.setConsumerMatchers(createConsumerMatchersWithEic(remoteIpPrefix)); + } + return clauseBuilder.build(); + } + + private static ConsumerMatchers createConsumerMatchersWithEic(IpPrefix ipPrefix) { + PrefixConstraint consumerPrefixConstraint = new PrefixConstraintBuilder().setIpPrefix(ipPrefix).build(); + EndpointIdentificationConstraints eic = + new EndpointIdentificationConstraintsBuilder() + .setL3EndpointIdentificationConstraints(new L3EndpointIdentificationConstraintsBuilder() + .setPrefixConstraint(ImmutableList.of(consumerPrefixConstraint)).build()) + .build(); + return new ConsumerMatchersBuilder().setEndpointIdentificationConstraints(eic).build(); + } + + public static boolean isEtherTypeOfOneWithinTwo(SecurityRule one, SecurityRule two) { + Long oneEtherType = getEtherType(one); + Long twoEtherType = getEtherType(two); + return twoIsNullOrEqualsOne(oneEtherType, twoEtherType); + } + + public static boolean isProtocolOfOneWithinTwo(SecurityRule one, SecurityRule two) { + Long oneProtocol = getProtocol(one); + Long twoProtocol = getProtocol(two); + return twoIsNullOrEqualsOne(oneProtocol, twoProtocol); + } + + private static boolean twoIsNullOrEqualsOne(T one, T two) { + if (two == null) + return true; + if (two.equals(one)) + return true; + return false; + } + + public static boolean isPortsOfOneWithinTwo(SecurityRule one, SecurityRule two) { + Integer onePortMin = one.getPortRangeMin(); + Integer onePortMax = one.getPortRangeMax(); + Integer twoPortMin = two.getPortRangeMin(); + Integer twoPortMax = two.getPortRangeMax(); + if (twoPortMin == null && twoPortMax == null) { + return true; + } + if ((onePortMin != null && twoPortMin != null && onePortMin >= twoPortMin) + && (onePortMax != null && twoPortMax != null && onePortMax <= twoPortMax)) { + return true; + } + return false; + } + + /** + * @param secRule + * @return {@code null} if {@link SecurityRule#getEthertype()} is null; Otherwise ethertype + * number + * @throws IllegalArgumentException if return value of + * {@link SecurityRule#getEthertype()} is other {@link EthertypeV4} or + * {@link EthertypeV6} + */ + public static Long getEtherType(SecurityRule secRule) { + Class ethertype = secRule.getEthertype(); + if (ethertype == null) { + return null; + } + if (ethertype.isAssignableFrom(EthertypeV4.class)) { + return EtherTypeClassifierDefinition.IPv4_VALUE; + } + if (ethertype.isAssignableFrom(EthertypeV6.class)) { + return EtherTypeClassifierDefinition.IPv6_VALUE; + } + throw new IllegalArgumentException("Ethertype " + ethertype + " is not supported."); + } + + /** + * @param secRule + * @return {@code null} if {@link SecurityRule#getProtocol()} is null; Otherwise protocol number + * @throws IllegalArgumentException if return value of + * {@link SecurityRule#getProtocol()} is other than {@link ProtocolTcp}, + * {@link ProtocolUdp}, {@link ProtocolIcmp}, {@link ProtocolIcmpV6} + */ + public static Long getProtocol(SecurityRule secRule) { + SecurityRuleAttributes.Protocol protocol = secRule.getProtocol(); + if (protocol == null) { + return null; + } + if (protocol.getUint8() != null) { + return protocol.getUint8().longValue(); + } + if (protocol.getIdentityref() != null) { + if (protocol.getIdentityref().equals(ProtocolTcp.class)) { + return IpProtoClassifierDefinition.TCP_VALUE; + } + if (protocol.getIdentityref().equals(ProtocolUdp.class)) { + return IpProtoClassifierDefinition.UDP_VALUE; + } + if (protocol.getIdentityref().equals(ProtocolIcmp.class)) { + return IpProtoClassifierDefinition.ICMP_VALUE; + } + if (protocol.getIdentityref().equals(ProtocolIcmpV6.class)) { + return IpProtoClassifierDefinition.ICMPv6_VALUE; + } + } + throw new IllegalArgumentException("Neutron Security Rule Protocol value " + protocol + " is not supported."); + } +} diff --git a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/NeutronVppMapper.java b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/NeutronVppMapper.java index d1eb492ec..a4c0e978d 100644 --- a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/NeutronVppMapper.java +++ b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/NeutronVppMapper.java @@ -1,36 +1,36 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.hostconfigs.VppNodeListener; -import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors.NeutronListener; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class NeutronVppMapper implements AutoCloseable { - - NeutronListener neutronListener; - VppNodeListener vppNodeListener; - private static final Logger LOG = LoggerFactory.getLogger(NeutronVppMapper.class); - - public NeutronVppMapper(String socketPath, String socketPrefix, String routingNode, DataBroker dataBroker) { - SocketInfo socketInfo = new SocketInfo(socketPath, socketPrefix); - vppNodeListener = new VppNodeListener(dataBroker, socketInfo); - neutronListener = new NeutronListener(dataBroker, new NodeId(routingNode)); - LOG.info("Neutron VPP started!"); - } - - @Override - public void close() { - neutronListener.close(); - vppNodeListener.close(); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.hostconfigs.VppNodeListener; +import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors.NeutronListener; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class NeutronVppMapper implements AutoCloseable { + + NeutronListener neutronListener; + VppNodeListener vppNodeListener; + private static final Logger LOG = LoggerFactory.getLogger(NeutronVppMapper.class); + + public NeutronVppMapper(String socketPath, String socketPrefix, String routingNode, DataBroker dataBroker) { + SocketInfo socketInfo = new SocketInfo(socketPath, socketPrefix); + vppNodeListener = new VppNodeListener(dataBroker, socketInfo); + neutronListener = new NeutronListener(dataBroker, new NodeId(routingNode)); + LOG.info("Neutron VPP started!"); + } + + @Override + public void close() { + neutronListener.close(); + vppNodeListener.close(); + } +} diff --git a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/SocketInfo.java b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/SocketInfo.java index c98a07c15..e1f45d1c3 100644 --- a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/SocketInfo.java +++ b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/SocketInfo.java @@ -1,64 +1,64 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper; - -public class SocketInfo { - - private String socketPath; - private String socketPrefix; - private final String PORT_ID = "$PORT_ID"; - - public SocketInfo(String socketPath, String socketPrefix) { - this.socketPath = socketPath; - this.socketPrefix = socketPrefix; - } - - public String getSocketPath() { - return socketPath; - } - - public String getSocketPrefix() { - return socketPrefix; - } - - public String getVhostUserSocket() { - return new StringBuilder().append(socketPath).append(socketPrefix).append(PORT_ID).toString(); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((socketPath == null) ? 0 : socketPath.hashCode()); - result = prime * result + ((socketPrefix == null) ? 0 : socketPrefix.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - SocketInfo other = (SocketInfo) obj; - if (socketPath == null) { - if (other.socketPath != null) - return false; - } else if (!socketPath.equals(other.socketPath)) - return false; - if (socketPrefix == null) { - if (other.socketPrefix != null) - return false; - } else if (!socketPrefix.equals(other.socketPrefix)) - return false; - return true; - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper; + +public class SocketInfo { + + private String socketPath; + private String socketPrefix; + private final String PORT_ID = "$PORT_ID"; + + public SocketInfo(String socketPath, String socketPrefix) { + this.socketPath = socketPath; + this.socketPrefix = socketPrefix; + } + + public String getSocketPath() { + return socketPath; + } + + public String getSocketPrefix() { + return socketPrefix; + } + + public String getVhostUserSocket() { + return new StringBuilder().append(socketPath).append(socketPrefix).append(PORT_ID).toString(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((socketPath == null) ? 0 : socketPath.hashCode()); + result = prime * result + ((socketPrefix == null) ? 0 : socketPrefix.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SocketInfo other = (SocketInfo) obj; + if (socketPath == null) { + if (other.socketPath != null) + return false; + } else if (!socketPath.equals(other.socketPath)) + return false; + if (socketPrefix == null) { + if (other.socketPrefix != null) + return false; + } else if (!socketPrefix.equals(other.socketPrefix)) + return false; + return true; + } +} diff --git a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/VppNodeListener.java b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/VppNodeListener.java index c79b875da..000c95271 100644 --- a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/VppNodeListener.java +++ b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/VppNodeListener.java @@ -1,102 +1,102 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.hostconfigs; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo; -import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.util.HostconfigUtil; -import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; -import org.opendaylight.groupbasedpolicy.util.DataTreeChangeHandler; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererNodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.Hostconfigs; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.Hostconfig; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.HostconfigKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class VppNodeListener extends DataTreeChangeHandler { - - private static final Logger LOG = LoggerFactory.getLogger(VppNodeListener.class); - - private SocketInfo socketInfo; - public static final RendererName VPP_RENDERER_NAME = new RendererName("vpp-renderer"); - - public VppNodeListener(DataBroker dataBroker, SocketInfo socketInfo) { - super(dataBroker); - this.socketInfo = socketInfo; - registerDataTreeChangeListener(new DataTreeIdentifier<>( - LogicalDatastoreType.OPERATIONAL, getVppNodeWildcardIid())); - } - - private InstanceIdentifier getVppNodeWildcardIid() { - return InstanceIdentifier.builder(Renderers.class) - .child(Renderer.class, new RendererKey(VPP_RENDERER_NAME)) - .child(RendererNodes.class) - .child(RendererNode.class) - .build(); - } - - @Override - protected void onWrite(DataObjectModification rootNode, - InstanceIdentifier rootIdentifier) { - writeData(rootNode.getDataAfter()); - } - - @Override - protected void onDelete(DataObjectModification rootNode, - InstanceIdentifier rootIdentifier) { - deleteData(rootNode.getDataBefore()); - } - - @Override - protected void onSubtreeModified(DataObjectModification rootNode, - InstanceIdentifier rootIdentifier) { - deleteData(rootNode.getDataBefore()); - writeData(rootNode.getDataAfter()); - } - - private void writeData(RendererNode rendererNode) { - NodeKey nodeKey = rendererNode.getNodePath().firstKeyOf(Node.class); - WriteTransaction wTx = dataProvider.newWriteOnlyTransaction(); - Hostconfig hcData = HostconfigUtil.createHostconfigsDataFor(nodeKey.getNodeId(), socketInfo); - wTx.put(LogicalDatastoreType.OPERATIONAL, hostconfigIid(nodeKey.getNodeId()), hcData); - DataStoreHelper.submitToDs(wTx); - LOG.info("Hostconfig data written to DS for VPP node {}", nodeKey); - } - - private InstanceIdentifier hostconfigIid(NodeId nodeId) { - return InstanceIdentifier.builder(Neutron.class) - .child(Hostconfigs.class) - .child(Hostconfig.class, new HostconfigKey(nodeId.getValue(), HostconfigUtil.L2_HOST_TYPE)) - .build(); - } - - private void deleteData(RendererNode rendererNode) { - NodeKey nodeKey = rendererNode.getNodePath().firstKeyOf(Node.class); - ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction(); - DataStoreHelper.removeIfExists(LogicalDatastoreType.OPERATIONAL, hostconfigIid(nodeKey.getNodeId()), rwTx); - DataStoreHelper.submitToDs(rwTx); - LOG.info("Hostconfig data removed from DS for VPP node {}", nodeKey); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.hostconfigs; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo; +import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.util.HostconfigUtil; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.groupbasedpolicy.util.DataTreeChangeHandler; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererNodes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.Hostconfigs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.Hostconfig; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.HostconfigKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class VppNodeListener extends DataTreeChangeHandler { + + private static final Logger LOG = LoggerFactory.getLogger(VppNodeListener.class); + + private SocketInfo socketInfo; + public static final RendererName VPP_RENDERER_NAME = new RendererName("vpp-renderer"); + + public VppNodeListener(DataBroker dataBroker, SocketInfo socketInfo) { + super(dataBroker); + this.socketInfo = socketInfo; + registerDataTreeChangeListener(new DataTreeIdentifier<>( + LogicalDatastoreType.OPERATIONAL, getVppNodeWildcardIid())); + } + + private InstanceIdentifier getVppNodeWildcardIid() { + return InstanceIdentifier.builder(Renderers.class) + .child(Renderer.class, new RendererKey(VPP_RENDERER_NAME)) + .child(RendererNodes.class) + .child(RendererNode.class) + .build(); + } + + @Override + protected void onWrite(DataObjectModification rootNode, + InstanceIdentifier rootIdentifier) { + writeData(rootNode.getDataAfter()); + } + + @Override + protected void onDelete(DataObjectModification rootNode, + InstanceIdentifier rootIdentifier) { + deleteData(rootNode.getDataBefore()); + } + + @Override + protected void onSubtreeModified(DataObjectModification rootNode, + InstanceIdentifier rootIdentifier) { + deleteData(rootNode.getDataBefore()); + writeData(rootNode.getDataAfter()); + } + + private void writeData(RendererNode rendererNode) { + NodeKey nodeKey = rendererNode.getNodePath().firstKeyOf(Node.class); + WriteTransaction wTx = dataProvider.newWriteOnlyTransaction(); + Hostconfig hcData = HostconfigUtil.createHostconfigsDataFor(nodeKey.getNodeId(), socketInfo); + wTx.put(LogicalDatastoreType.OPERATIONAL, hostconfigIid(nodeKey.getNodeId()), hcData); + DataStoreHelper.submitToDs(wTx); + LOG.info("Hostconfig data written to DS for VPP node {}", nodeKey); + } + + private InstanceIdentifier hostconfigIid(NodeId nodeId) { + return InstanceIdentifier.builder(Neutron.class) + .child(Hostconfigs.class) + .child(Hostconfig.class, new HostconfigKey(nodeId.getValue(), HostconfigUtil.L2_HOST_TYPE)) + .build(); + } + + private void deleteData(RendererNode rendererNode) { + NodeKey nodeKey = rendererNode.getNodePath().firstKeyOf(Node.class); + ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction(); + DataStoreHelper.removeIfExists(LogicalDatastoreType.OPERATIONAL, hostconfigIid(nodeKey.getNodeId()), rwTx); + DataStoreHelper.submitToDs(rwTx); + LOG.info("Hostconfig data removed from DS for VPP node {}", nodeKey); + } +} diff --git a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/MappingProvider.java b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/MappingProvider.java index fb8b6859b..75cf5d1b5 100644 --- a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/MappingProvider.java +++ b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/MappingProvider.java @@ -1,23 +1,23 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; - -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -interface MappingProvider { - - InstanceIdentifier getNeutronDtoIid(); - - void processCreatedNeutronDto(T t); - - void processUpdatedNeutronDto(T original, T delta); - - void processDeletedNeutronDto(T t); -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; + +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +interface MappingProvider { + + InstanceIdentifier getNeutronDtoIid(); + + void processCreatedNeutronDto(T t); + + void processUpdatedNeutronDto(T original, T delta); + + void processDeletedNeutronDto(T t); +} diff --git a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NeutronListener.java b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NeutronListener.java index f1958b36b..9a70ae81c 100644 --- a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NeutronListener.java +++ b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NeutronListener.java @@ -1,137 +1,137 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; - -import java.io.Closeable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.Iterators; -import com.google.common.collect.PeekingIterator; - -public class NeutronListener implements ClusteredDataTreeChangeListener, Closeable { - - private static final Logger LOG = LoggerFactory.getLogger(NeutronListener.class); - - private final Set> dataChangeProviders = new LinkedHashSet<>(); - protected ListenerRegistration registeredListener; - - public NeutronListener(DataBroker dataBroker, NodeId routingNode) { - LOG.info("Routing node chosen in ODL is {}", routingNode); - registerHandlersAndListeners(dataBroker, routingNode); - registeredListener = dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>( - LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.builder(Neutron.class).build()), this); - } - - private void registerHandlersAndListeners(DataBroker dataBroker, NodeId routingNode) { - PortHandler portHandler = new PortHandler(dataBroker, routingNode); - dataChangeProviders.add(new PortAware(portHandler, dataBroker)); - dataChangeProviders.add(new NetworkAware(dataBroker)); - dataChangeProviders.add(new SubnetAware(dataBroker)); - } - - @Override - public void onDataTreeChanged(Collection> changes) { - for (DataTreeModification change : changes) { - DataObjectModification rootNode = change.getRootNode(); - for (MappingProvider provider : dataChangeProviders) { - for (DataObjectModification modDto : findModifiedData(provider, rootNode)) { - try { - processChangedData(modDto, modDto.getModificationType(), provider); - } catch (InterruptedException | ExecutionException e) { - LOG.error("Failed to process {} modification of node: {}. {}", modDto.getModificationType(), - modDto.getIdentifier(), e.getStackTrace()); - } - } - } - } - } - - List> findModifiedData(MappingProvider provider, - DataObjectModification rootNode) { - List> modDtos = new ArrayList<>(); - PeekingIterator pathArgs = Iterators.peekingIterator(provider.getNeutronDtoIid() - .getPathArguments() - .iterator()); - DataObjectModification modifDto = rootNode; - while (pathArgs.hasNext()) { - pathArgs.next(); - for (DataObjectModification childDto : modifDto.getModifiedChildren()) { - if (pathArgs.hasNext() && childDto.getDataType().equals(pathArgs.peek().getType())) { - if (childDto.getDataType().equals(provider.getNeutronDtoIid().getTargetType())) { - modDtos.add(childDto); - } else { - modifDto = childDto; - break; - } - } - } - } - return modDtos; - } - - @SuppressWarnings("unchecked") - void processChangedData(DataObjectModification dto, ModificationType m, - MappingProvider processor) throws InterruptedException, ExecutionException { - switch (m) { - case WRITE: { - if (dto.getDataBefore() != null) { - processor.processUpdatedNeutronDto((T) dto.getDataBefore(), (T) dto.getDataAfter()); - } else { - processor.processCreatedNeutronDto((T) dto.getDataAfter()); - } - break; - } - case SUBTREE_MODIFIED: { - processor.processUpdatedNeutronDto((T) dto.getDataBefore(), (T) dto.getDataAfter()); - break; - } - case DELETE: { - processor.processDeletedNeutronDto((T) dto.getDataBefore()); - break; - } - } - } - - @VisibleForTesting - void clearDataChangeProviders() { - dataChangeProviders.clear(); - } - - @VisibleForTesting - void addDataChangeProvider(MappingProvider t) { - dataChangeProviders.add(t); - } - - @Override - public void close() { - registeredListener.close(); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; + +import java.io.Closeable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ExecutionException; + +import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Iterators; +import com.google.common.collect.PeekingIterator; + +public class NeutronListener implements ClusteredDataTreeChangeListener, Closeable { + + private static final Logger LOG = LoggerFactory.getLogger(NeutronListener.class); + + private final Set> dataChangeProviders = new LinkedHashSet<>(); + protected ListenerRegistration registeredListener; + + public NeutronListener(DataBroker dataBroker, NodeId routingNode) { + LOG.info("Routing node chosen in ODL is {}", routingNode); + registerHandlersAndListeners(dataBroker, routingNode); + registeredListener = dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>( + LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.builder(Neutron.class).build()), this); + } + + private void registerHandlersAndListeners(DataBroker dataBroker, NodeId routingNode) { + PortHandler portHandler = new PortHandler(dataBroker, routingNode); + dataChangeProviders.add(new PortAware(portHandler, dataBroker)); + dataChangeProviders.add(new NetworkAware(dataBroker)); + dataChangeProviders.add(new SubnetAware(dataBroker)); + } + + @Override + public void onDataTreeChanged(Collection> changes) { + for (DataTreeModification change : changes) { + DataObjectModification rootNode = change.getRootNode(); + for (MappingProvider provider : dataChangeProviders) { + for (DataObjectModification modDto : findModifiedData(provider, rootNode)) { + try { + processChangedData(modDto, modDto.getModificationType(), provider); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Failed to process {} modification of node: {}. {}", modDto.getModificationType(), + modDto.getIdentifier(), e.getStackTrace()); + } + } + } + } + } + + List> findModifiedData(MappingProvider provider, + DataObjectModification rootNode) { + List> modDtos = new ArrayList<>(); + PeekingIterator pathArgs = Iterators.peekingIterator(provider.getNeutronDtoIid() + .getPathArguments() + .iterator()); + DataObjectModification modifDto = rootNode; + while (pathArgs.hasNext()) { + pathArgs.next(); + for (DataObjectModification childDto : modifDto.getModifiedChildren()) { + if (pathArgs.hasNext() && childDto.getDataType().equals(pathArgs.peek().getType())) { + if (childDto.getDataType().equals(provider.getNeutronDtoIid().getTargetType())) { + modDtos.add(childDto); + } else { + modifDto = childDto; + break; + } + } + } + } + return modDtos; + } + + @SuppressWarnings("unchecked") + void processChangedData(DataObjectModification dto, ModificationType m, + MappingProvider processor) throws InterruptedException, ExecutionException { + switch (m) { + case WRITE: { + if (dto.getDataBefore() != null) { + processor.processUpdatedNeutronDto((T) dto.getDataBefore(), (T) dto.getDataAfter()); + } else { + processor.processCreatedNeutronDto((T) dto.getDataAfter()); + } + break; + } + case SUBTREE_MODIFIED: { + processor.processUpdatedNeutronDto((T) dto.getDataBefore(), (T) dto.getDataAfter()); + break; + } + case DELETE: { + processor.processDeletedNeutronDto((T) dto.getDataBefore()); + break; + } + } + } + + @VisibleForTesting + void clearDataChangeProviders() { + dataChangeProviders.clear(); + } + + @VisibleForTesting + void addDataChangeProvider(MappingProvider t) { + dataChangeProviders.add(t); + } + + @Override + public void close() { + registeredListener.close(); + } +} diff --git a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortAware.java b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortAware.java index df44f2cfa..e08508c38 100644 --- a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortAware.java +++ b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortAware.java @@ -1,84 +1,84 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.util.DataTreeChangeHandler; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.BaseEndpointsByPorts; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPort; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PortAware extends DataTreeChangeHandler implements - MappingProvider { - - private static final Logger LOG = LoggerFactory.getLogger(PortAware.class); - private final PortHandler portHandler; - - protected PortAware(PortHandler portHandler, DataBroker dataProvider) { - super(dataProvider); - this.portHandler = portHandler; - registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, - InstanceIdentifier.builder(Mappings.class) - .child(GbpByNeutronMappings.class) - .child(BaseEndpointsByPorts.class) - .child(BaseEndpointByPort.class) - .build())); - } - - @Override - public InstanceIdentifier getNeutronDtoIid() { - return portHandler.createWildcartedPortIid(); - } - - @Override - public void processCreatedNeutronDto(Port port) { - LOG.trace("Neutron port created: {}", port); - portHandler.processCreated(port); - } - - @Override - public void processUpdatedNeutronDto(Port original, Port delta) { - LOG.trace("Neutron port updated: {}, delta {}", original, delta); - portHandler.processUpdated(original, delta); - } - - @Override - public void processDeletedNeutronDto(Port port) { - LOG.trace("Neutron port deleted: {}", port); - // handled by BaseEndpointByPort removal - } - - @Override - protected void onWrite(DataObjectModification rootNode, - InstanceIdentifier rootIdentifier) { - if (rootNode.getDataBefore() == null) { - portHandler.processCreated(rootNode.getDataAfter()); - } - } - - @Override - protected void onDelete(DataObjectModification rootNode, - InstanceIdentifier rootIdentifier) { - portHandler.processDeleted(rootNode.getDataBefore()); - } - - @Override - protected void onSubtreeModified(DataObjectModification rootNode, - InstanceIdentifier rootIdentifier) { - // update should not happen - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.util.DataTreeChangeHandler; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.BaseEndpointsByPorts; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPort; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PortAware extends DataTreeChangeHandler implements + MappingProvider { + + private static final Logger LOG = LoggerFactory.getLogger(PortAware.class); + private final PortHandler portHandler; + + protected PortAware(PortHandler portHandler, DataBroker dataProvider) { + super(dataProvider); + this.portHandler = portHandler; + registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.builder(Mappings.class) + .child(GbpByNeutronMappings.class) + .child(BaseEndpointsByPorts.class) + .child(BaseEndpointByPort.class) + .build())); + } + + @Override + public InstanceIdentifier getNeutronDtoIid() { + return portHandler.createWildcartedPortIid(); + } + + @Override + public void processCreatedNeutronDto(Port port) { + LOG.trace("Neutron port created: {}", port); + portHandler.processCreated(port); + } + + @Override + public void processUpdatedNeutronDto(Port original, Port delta) { + LOG.trace("Neutron port updated: {}, delta {}", original, delta); + portHandler.processUpdated(original, delta); + } + + @Override + public void processDeletedNeutronDto(Port port) { + LOG.trace("Neutron port deleted: {}", port); + // handled by BaseEndpointByPort removal + } + + @Override + protected void onWrite(DataObjectModification rootNode, + InstanceIdentifier rootIdentifier) { + if (rootNode.getDataBefore() == null) { + portHandler.processCreated(rootNode.getDataAfter()); + } + } + + @Override + protected void onDelete(DataObjectModification rootNode, + InstanceIdentifier rootIdentifier) { + portHandler.processDeleted(rootNode.getDataBefore()); + } + + @Override + protected void onSubtreeModified(DataObjectModification rootNode, + InstanceIdentifier rootIdentifier) { + // update should not happen + } +} diff --git a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortHandler.java b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortHandler.java index adf92cc3f..12f08cfb9 100644 --- a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortHandler.java +++ b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/PortHandler.java @@ -1,458 +1,458 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; - -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionChain; -import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; -import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; -import org.opendaylight.groupbasedpolicy.util.SyncedChain; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.UniqueId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.BaseEndpointsByPorts; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPort; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPortKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.ExcludeFromPolicy; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.ExcludeFromPolicyBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.LoopbackCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.LoopbackCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.TapCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.TapCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.VhostUserCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpoint; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtension; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.binding.attributes.VifDetails; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.Routers; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.Router; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.RouterKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.portsecurity.rev150712.PortSecurityExtension; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.SubnetKey; -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.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.base.Strings; - -public class PortHandler implements TransactionChainListener { - - private static final Logger LOG = LoggerFactory.getLogger(PortHandler.class); - - private static final String COMPUTE_OWNER = "compute"; - private static final String DHCP_OWNER = "dhcp"; - static final String ROUTER_OWNER = "network:router_interface"; - private static final String[] SUPPORTED_DEVICE_OWNERS = {COMPUTE_OWNER, DHCP_OWNER, ROUTER_OWNER}; - private static final String VHOST_USER = "vhostuser"; - private static final String UNBOUND = "unbound"; - private static final String VPP_INTERFACE_NAME_PREFIX = "neutron_port_"; - private static final String TAP_PORT_NAME_PREFIX = "tap"; - private static final String RT_PORT_NAME_PREFIX = "qr-"; - private static final String VHOST_SOCKET_KEY = "vhostuser_socket"; - static final String DEFAULT_NODE = "default"; - - private final NodeId routingNode; - private SyncedChain syncedChain; - private DataBroker dataBroker; - - PortHandler(DataBroker dataBroker, NodeId routingNodeId) { - this.dataBroker = dataBroker; - this.routingNode = routingNodeId; - this.syncedChain = new SyncedChain(Preconditions.checkNotNull(dataBroker.createTransactionChain(this))); - } - - void processCreated(Port port) { - Optional optBaseEpByPort = - syncedChain.readFromDs(LogicalDatastoreType.OPERATIONAL, createBaseEpByPortIid(port.getUuid())); - if (!optBaseEpByPort.isPresent()) { - return; - } - processCreatedData(port, optBaseEpByPort.get()); - } - - void processCreated(BaseEndpointByPort bebp) { - Optional optPort = - syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, createPortIid(bebp.getPortId())); - if (!optPort.isPresent()) { - return; - } - processCreatedData(optPort.get(), bebp); - } - - @VisibleForTesting - void processCreatedData(Port port, BaseEndpointByPort bebp) { - if (isValidVhostUser(port) - // this is a hack for vpp router port - // Openstack does not send binding details yet - || isValidVppRouterPort(port)) { - VppEndpoint vppEp = buildVppEndpoint(port, bebp); - if (vppEp == null) { - LOG.warn("Cannot create vpp-endpoint from neutron port {}", port); - return; - } - writeVppEndpoint(createVppEndpointIid(vppEp.getKey()), vppEp); - LOG.debug("Created vpp-endpoint {}", vppEp); - } - } - - private boolean isValidVhostUser(Port port) { - PortBindingExtension portBindingExt = port.getAugmentation(PortBindingExtension.class); - if (portBindingExt != null) { - String vifType = portBindingExt.getVifType(); - String deviceOwner = port.getDeviceOwner(); - if (vifType != null && deviceOwner != null) { - if (vifType.contains(VHOST_USER)) { - for (String supportedDeviceOwner : SUPPORTED_DEVICE_OWNERS) { - if (deviceOwner.contains(supportedDeviceOwner)) { - return true; - } - } - } - } - } - return false; - } - - void processUpdated(Port original, Port delta) { - if (!isUpdateNeeded(original, delta)) { - LOG.trace("Port update skipped, port didn`t change. before {}, after: {}", original, delta); - return; - } - - LOG.trace("Updating port before: {}, after: {}", original, delta); - if (isValidVhostUser(original)) { - Optional optBebp = - syncedChain.readFromDs(LogicalDatastoreType.OPERATIONAL, createBaseEpByPortIid(original.getUuid())); - if (!optBebp.isPresent()) { - return; - } - LOG.trace("Updating port - deleting old port {}", optBebp.get().getPortId()); - processDeleted(optBebp.get()); - } - LOG.trace("Updating port - creating new port {}", delta.getUuid()); - processCreated(delta); - } - - private boolean isUpdateNeeded(final Port oldPort, final Port newPort) { - // TODO fix this to better support update of ports for VPP - final PortBindingExtension oldPortAugmentation = oldPort.getAugmentation(PortBindingExtension.class); - final PortBindingExtension newPortAugmentation = newPort.getAugmentation(PortBindingExtension.class); - - if (newPortAugmentation == null) { - LOG.trace("Port {} is no longer a vhost type port, updating port..."); - return true; - } - - final String oldDeviceOwner = oldPort.getDeviceOwner(); - final String oldVifType = oldPortAugmentation.getVifType(); - final String newDeviceOwner = newPort.getDeviceOwner(); - final String newVifType = newPortAugmentation.getVifType(); - - // TODO potential bug here - // Temporary change for Openstack Mitaka: If old neutron-binding:vif-type is vhost, new one - // is unbound and - // device owner is ROUTER_OWNER, skip update. Openstack (or ml2) sometimes sends router - // update messages in - // incorrect order which causes unwanted port removal - if (oldVifType.equals(VHOST_USER) && newVifType.equals(UNBOUND) && oldDeviceOwner != null - && ROUTER_OWNER.equals(oldDeviceOwner) && ROUTER_OWNER.equals(newDeviceOwner)) { - LOG.warn( - "Port vif-type was updated from vhost to unbound. This update is currently disabled and will be skipped"); - return false; - } - - if (newVifType != null && !newVifType.equals(oldVifType)) { - LOG.trace("Vif type changed, old: {} new {}", oldVifType, newVifType); - return true; - } - - final List vifDetails = oldPortAugmentation.getVifDetails(); - - if (!oldPortAugmentation.getHostId().equals(newPortAugmentation.getHostId()) - || nullToEmpty(vifDetails).size() != nullToEmpty(newPortAugmentation.getVifDetails()).size()) { - return true; - } - - for (VifDetails vifDetail : nullToEmpty(vifDetails)) { - // check if vhostuser_socket, vhostuser_mode and port_filter are changed - if (!newPortAugmentation.getVifDetails().contains(vifDetail)) - return true; - } - return false; - } - - void processDeleted(BaseEndpointByPort bebp) { - LOG.trace("Deleting vpp-endpoint by BaseEndpointByPort {}", bebp); - VppEndpointKey vppEpKey = new VppEndpointKey(bebp.getAddress(), bebp.getAddressType(), bebp.getContextId(), - bebp.getContextType()); - InstanceIdentifier vppEpIid = createVppEndpointIid(vppEpKey); - Optional readVppEp = syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, vppEpIid); - if (readVppEp.isPresent()) { - writeVppEndpoint(vppEpIid, null); - LOG.debug("Deleted vpp-endpoint {}", vppEpKey); - } - } - - private synchronized void writeVppEndpoint(InstanceIdentifier vppEpIid, VppEndpoint vppEp) { - WriteTransaction wTx = syncedChain.newWriteOnlyTransaction(); - if (vppEp != null) { - wTx.put(LogicalDatastoreType.CONFIGURATION, vppEpIid, vppEp, true); - } else { - wTx.delete(LogicalDatastoreType.CONFIGURATION, vppEpIid); - } - syncedChain.submitNow(wTx); - } - - @VisibleForTesting - VppEndpoint buildVppEndpoint(Port port, BaseEndpointByPort bebp) { - PortBindingExtension portBinding = port.getAugmentation(PortBindingExtension.class); - ExcludeFromPolicy excludeFromPolicy = new ExcludeFromPolicyBuilder().setExcludeFromPolicy(true).build(); - VppEndpointBuilder vppEpBuilder = new VppEndpointBuilder().setDescription("neutron port") - .setContextId(bebp.getContextId()) - .setContextType(bebp.getContextType()) - .setAddress(bebp.getAddress()) - .setAddressType(bebp.getAddressType()) - .setVppInterfaceName(VPP_INTERFACE_NAME_PREFIX + bebp.getPortId().getValue()) - .setVppNodeId(new NodeId(portBinding.getHostId())); - - if (port.getDeviceOwner().contains(COMPUTE_OWNER)) { - vppEpBuilder.setInterfaceTypeChoice( - new VhostUserCaseBuilder().setSocket(getSocketFromPortBinding(portBinding)).build()); - Optional portSecurity = - Optional.fromNullable(port.getAugmentation(PortSecurityExtension.class)); - if (portSecurity.isPresent() && !portSecurity.get().isPortSecurityEnabled()) { - vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy); - } - - } else if (port.getDeviceOwner().contains(DHCP_OWNER) && port.getMacAddress() != null) { - IpAddress dhcpServerIpAddress = port.getFixedIps().stream().findFirst().isPresent() ? - port.getFixedIps().stream().findFirst().get().getIpAddress() : null; - TapCase tapCase = new TapCaseBuilder().setPhysicalAddress(new PhysAddress(port.getMacAddress().getValue())) - .setName(createPortName(port.getUuid())) - .setDhcpServerAddress(dhcpServerIpAddress) - .build(); - vppEpBuilder.setInterfaceTypeChoice(tapCase); - - } else if (isValidQRouterPort(port)) { - TapCase tapCase = new TapCaseBuilder().setPhysicalAddress(new PhysAddress(port.getMacAddress().getValue())) - .setName(createQRouterPortName(port.getUuid())) - .build(); - vppEpBuilder.setInterfaceTypeChoice(tapCase); - vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy); - - } else if (isValidVppRouterPort(port)) { - if (!DEFAULT_NODE.equals(routingNode.getValue())) { - LOG.warn( - "Host-id changed by ODL for port {}. This is a supplementary workaround for choosing a routing node.", - port); - vppEpBuilder.setVppNodeId(routingNode); - } else if (port.getDeviceId() != null) { - LOG.debug("Resolving host-id for unbound router port {}", port.getUuid()); - Optional optPorts = syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, - InstanceIdentifier.builder(Neutron.class).child(Ports.class).build()); - if (optPorts.isPresent() && optPorts.get().getPort() != null) { - java.util.Optional optPortOnTheSameNode = optPorts.get() - .getPort() - .stream() - .filter(p -> !p.getUuid().equals(port.getUuid())) - .filter(p -> p.getAugmentation(PortBindingExtension.class) != null) - .filter(p -> p.getDeviceOwner().contains(DHCP_OWNER)) - .findFirst(); - if (optPortOnTheSameNode.isPresent()) { - PortBindingExtension binding = - optPortOnTheSameNode.get().getAugmentation(PortBindingExtension.class); - if (binding != null && binding.getHostId() != null) { - vppEpBuilder.setVppNodeId(new NodeId(binding.getHostId())); - } else { - LOG.warn("Cannot resolve location of router-port {}", port.getUuid()); - return null; - } - } - } - } - vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy); - vppEpBuilder.setInterfaceTypeChoice(getLoopbackCase(port)); - } - return vppEpBuilder.build(); - } - - private String getSocketFromPortBinding(@Nonnull PortBindingExtension portBindingExtension) { - List vifDetails = nullToEmpty(portBindingExtension.getVifDetails()); - - for (VifDetails detail : vifDetails) { - if (VHOST_SOCKET_KEY.equalsIgnoreCase(detail.getDetailsKey())) { - return detail.getValue(); - } - } - return null; - } - - private LoopbackCase getLoopbackCase(Port port) { - LoopbackCaseBuilder loopbackCase = - new LoopbackCaseBuilder().setPhysAddress(new PhysAddress(port.getMacAddress().getValue())); - Optional fixedIpsOptional = resolveFirstFixedIps(port); - if (fixedIpsOptional.isPresent() && fixedIpsOptional.get().getIpAddress() != null) { - loopbackCase.setIpAddress(fixedIpsOptional.get().getIpAddress()); - Optional subnetOptional = syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, - InstanceIdentifier.builder(Neutron.class) - .child(Subnets.class) - .child(Subnet.class, new SubnetKey(fixedIpsOptional.get().getSubnetId())) - .build()); - if (subnetOptional.isPresent()) { - Ipv4Prefix ipv4Prefix = subnetOptional.get().getCidr().getIpv4Prefix(); - loopbackCase.setIpPrefix(new IpPrefix(ipv4Prefix)); - } else { - LOG.warn("IpPrefix for loopback port: {} was not set.", port); - } - if (loopbackCase.getIpAddress() != null && loopbackCase.getIpPrefix() != null) { - loopbackCase.setBvi(true); - LOG.trace("Creating loopback BVI interface: {} for VPP router port: {}.", loopbackCase, port); - } - - } else { - LOG.warn("IpAddress for loopback port: {} was not set.", port); - } - return loopbackCase.build(); - } - - /** - * If Qrouter (L3 Agent) is in use, any of Openstack neutron routers is not going be mapped - * to ODL neutron. - */ - private boolean isValidQRouterPort(Port port) { - Optional optRouter = getRouterOptional(port); - return !optRouter.isPresent() && port.getDeviceOwner().contains(ROUTER_OWNER) && port.getMacAddress() != null; - } - - private boolean isValidVppRouterPort(Port port) { - Optional optRouter = getRouterOptional(port); - return optRouter.isPresent() && port.getDeviceOwner().contains(ROUTER_OWNER) && port.getMacAddress() != null; - } - - private Optional getRouterOptional(Port port) { - if (Strings.isNullOrEmpty(port.getDeviceId())) { - return Optional.absent(); - } - RouterKey routerKey = null; - try { - routerKey = new RouterKey(new Uuid(port.getDeviceId())); - } catch (IllegalArgumentException e) { - // port.getDeviceId() may not match Uuid.PATTERN_CONSTANTS - return Optional.absent(); - } - InstanceIdentifier routerIid = - InstanceIdentifier.builder(Neutron.class).child(Routers.class).child(Router.class, routerKey).build(); - Optional optRouter = syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, routerIid); - return optRouter; - } - - public static Optional resolveFirstFixedIps(Port port) { - List fixedIps = port.getFixedIps(); - if (fixedIps != null && !fixedIps.isEmpty()) { - return Optional.of(fixedIps.get(0)); - } - return Optional.absent(); - } - - private String createPortName(Uuid portUuid) { - String tapPortName; - String uuid = portUuid.getValue(); - if (uuid != null && uuid.length() >= 12) { - tapPortName = TAP_PORT_NAME_PREFIX + uuid.substring(0, 11); - } else { - tapPortName = TAP_PORT_NAME_PREFIX + uuid; - } - return tapPortName; - } - - private String createQRouterPortName(Uuid portUuid) { - String tapPortName; - String uuid = portUuid.getValue(); - if (uuid != null && uuid.length() >= 12) { - tapPortName = RT_PORT_NAME_PREFIX + uuid.substring(0, 11); - } else { - tapPortName = RT_PORT_NAME_PREFIX + uuid; - } - return tapPortName; - } - - private InstanceIdentifier createVppEndpointIid(VppEndpointKey vppEpKey) { - return InstanceIdentifier.builder(Config.class).child(VppEndpoint.class, vppEpKey).build(); - } - - private InstanceIdentifier createBaseEpByPortIid(Uuid uuid) { - return createBaseEpByPortIid(new UniqueId(uuid.getValue())); - } - - private InstanceIdentifier createBaseEpByPortIid(UniqueId uuid) { - return InstanceIdentifier.builder(Mappings.class) - .child(GbpByNeutronMappings.class) - .child(BaseEndpointsByPorts.class) - .child(BaseEndpointByPort.class, new BaseEndpointByPortKey(uuid)) - .build(); - } - - InstanceIdentifier createWildcartedPortIid() { - return portsIid().child(Port.class).build(); - } - - private InstanceIdentifier createPortIid(UniqueId uuid) { - return portsIid().child(Port.class, new PortKey(new Uuid(uuid.getValue()))).build(); - } - - private InstanceIdentifierBuilder portsIid() { - return InstanceIdentifier.builder(Neutron.class).child(Ports.class); - } - - @Override - public void onTransactionChainFailed(TransactionChain chain, AsyncTransaction transaction, - Throwable cause) { - LOG.error("Transaction chain failed. {} \nTransaction which caused the chain to fail {}", cause.getMessage(), - transaction, cause); - syncedChain.closeChain(); - this.syncedChain = new SyncedChain(Preconditions.checkNotNull(dataBroker.createTransactionChain(this))); - } - - @Override - public void onTransactionChainSuccessful(TransactionChain chain) { - LOG.trace("Transaction chain was successful. {}", chain); - } - - private List nullToEmpty(@Nullable List list) { - return list == null ? Collections.emptyList() : list; - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.TransactionChain; +import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; +import org.opendaylight.groupbasedpolicy.util.SyncedChain; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.UniqueId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.BaseEndpointsByPorts; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPort; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPortKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.ExcludeFromPolicy; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.ExcludeFromPolicyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.LoopbackCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.LoopbackCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.TapCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.TapCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.VhostUserCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpoint; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtension; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.binding.attributes.VifDetails; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.Routers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.Router; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.RouterKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.portsecurity.rev150712.PortSecurityExtension; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.SubnetKey; +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.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; + +public class PortHandler implements TransactionChainListener { + + private static final Logger LOG = LoggerFactory.getLogger(PortHandler.class); + + private static final String COMPUTE_OWNER = "compute"; + private static final String DHCP_OWNER = "dhcp"; + static final String ROUTER_OWNER = "network:router_interface"; + private static final String[] SUPPORTED_DEVICE_OWNERS = {COMPUTE_OWNER, DHCP_OWNER, ROUTER_OWNER}; + private static final String VHOST_USER = "vhostuser"; + private static final String UNBOUND = "unbound"; + private static final String VPP_INTERFACE_NAME_PREFIX = "neutron_port_"; + private static final String TAP_PORT_NAME_PREFIX = "tap"; + private static final String RT_PORT_NAME_PREFIX = "qr-"; + private static final String VHOST_SOCKET_KEY = "vhostuser_socket"; + static final String DEFAULT_NODE = "default"; + + private final NodeId routingNode; + private SyncedChain syncedChain; + private DataBroker dataBroker; + + PortHandler(DataBroker dataBroker, NodeId routingNodeId) { + this.dataBroker = dataBroker; + this.routingNode = routingNodeId; + this.syncedChain = new SyncedChain(Preconditions.checkNotNull(dataBroker.createTransactionChain(this))); + } + + void processCreated(Port port) { + Optional optBaseEpByPort = + syncedChain.readFromDs(LogicalDatastoreType.OPERATIONAL, createBaseEpByPortIid(port.getUuid())); + if (!optBaseEpByPort.isPresent()) { + return; + } + processCreatedData(port, optBaseEpByPort.get()); + } + + void processCreated(BaseEndpointByPort bebp) { + Optional optPort = + syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, createPortIid(bebp.getPortId())); + if (!optPort.isPresent()) { + return; + } + processCreatedData(optPort.get(), bebp); + } + + @VisibleForTesting + void processCreatedData(Port port, BaseEndpointByPort bebp) { + if (isValidVhostUser(port) + // this is a hack for vpp router port + // Openstack does not send binding details yet + || isValidVppRouterPort(port)) { + VppEndpoint vppEp = buildVppEndpoint(port, bebp); + if (vppEp == null) { + LOG.warn("Cannot create vpp-endpoint from neutron port {}", port); + return; + } + writeVppEndpoint(createVppEndpointIid(vppEp.getKey()), vppEp); + LOG.debug("Created vpp-endpoint {}", vppEp); + } + } + + private boolean isValidVhostUser(Port port) { + PortBindingExtension portBindingExt = port.getAugmentation(PortBindingExtension.class); + if (portBindingExt != null) { + String vifType = portBindingExt.getVifType(); + String deviceOwner = port.getDeviceOwner(); + if (vifType != null && deviceOwner != null) { + if (vifType.contains(VHOST_USER)) { + for (String supportedDeviceOwner : SUPPORTED_DEVICE_OWNERS) { + if (deviceOwner.contains(supportedDeviceOwner)) { + return true; + } + } + } + } + } + return false; + } + + void processUpdated(Port original, Port delta) { + if (!isUpdateNeeded(original, delta)) { + LOG.trace("Port update skipped, port didn`t change. before {}, after: {}", original, delta); + return; + } + + LOG.trace("Updating port before: {}, after: {}", original, delta); + if (isValidVhostUser(original)) { + Optional optBebp = + syncedChain.readFromDs(LogicalDatastoreType.OPERATIONAL, createBaseEpByPortIid(original.getUuid())); + if (!optBebp.isPresent()) { + return; + } + LOG.trace("Updating port - deleting old port {}", optBebp.get().getPortId()); + processDeleted(optBebp.get()); + } + LOG.trace("Updating port - creating new port {}", delta.getUuid()); + processCreated(delta); + } + + private boolean isUpdateNeeded(final Port oldPort, final Port newPort) { + // TODO fix this to better support update of ports for VPP + final PortBindingExtension oldPortAugmentation = oldPort.getAugmentation(PortBindingExtension.class); + final PortBindingExtension newPortAugmentation = newPort.getAugmentation(PortBindingExtension.class); + + if (newPortAugmentation == null) { + LOG.trace("Port {} is no longer a vhost type port, updating port..."); + return true; + } + + final String oldDeviceOwner = oldPort.getDeviceOwner(); + final String oldVifType = oldPortAugmentation.getVifType(); + final String newDeviceOwner = newPort.getDeviceOwner(); + final String newVifType = newPortAugmentation.getVifType(); + + // TODO potential bug here + // Temporary change for Openstack Mitaka: If old neutron-binding:vif-type is vhost, new one + // is unbound and + // device owner is ROUTER_OWNER, skip update. Openstack (or ml2) sometimes sends router + // update messages in + // incorrect order which causes unwanted port removal + if (oldVifType.equals(VHOST_USER) && newVifType.equals(UNBOUND) && oldDeviceOwner != null + && ROUTER_OWNER.equals(oldDeviceOwner) && ROUTER_OWNER.equals(newDeviceOwner)) { + LOG.warn( + "Port vif-type was updated from vhost to unbound. This update is currently disabled and will be skipped"); + return false; + } + + if (newVifType != null && !newVifType.equals(oldVifType)) { + LOG.trace("Vif type changed, old: {} new {}", oldVifType, newVifType); + return true; + } + + final List vifDetails = oldPortAugmentation.getVifDetails(); + + if (!oldPortAugmentation.getHostId().equals(newPortAugmentation.getHostId()) + || nullToEmpty(vifDetails).size() != nullToEmpty(newPortAugmentation.getVifDetails()).size()) { + return true; + } + + for (VifDetails vifDetail : nullToEmpty(vifDetails)) { + // check if vhostuser_socket, vhostuser_mode and port_filter are changed + if (!newPortAugmentation.getVifDetails().contains(vifDetail)) + return true; + } + return false; + } + + void processDeleted(BaseEndpointByPort bebp) { + LOG.trace("Deleting vpp-endpoint by BaseEndpointByPort {}", bebp); + VppEndpointKey vppEpKey = new VppEndpointKey(bebp.getAddress(), bebp.getAddressType(), bebp.getContextId(), + bebp.getContextType()); + InstanceIdentifier vppEpIid = createVppEndpointIid(vppEpKey); + Optional readVppEp = syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, vppEpIid); + if (readVppEp.isPresent()) { + writeVppEndpoint(vppEpIid, null); + LOG.debug("Deleted vpp-endpoint {}", vppEpKey); + } + } + + private synchronized void writeVppEndpoint(InstanceIdentifier vppEpIid, VppEndpoint vppEp) { + WriteTransaction wTx = syncedChain.newWriteOnlyTransaction(); + if (vppEp != null) { + wTx.put(LogicalDatastoreType.CONFIGURATION, vppEpIid, vppEp, true); + } else { + wTx.delete(LogicalDatastoreType.CONFIGURATION, vppEpIid); + } + syncedChain.submitNow(wTx); + } + + @VisibleForTesting + VppEndpoint buildVppEndpoint(Port port, BaseEndpointByPort bebp) { + PortBindingExtension portBinding = port.getAugmentation(PortBindingExtension.class); + ExcludeFromPolicy excludeFromPolicy = new ExcludeFromPolicyBuilder().setExcludeFromPolicy(true).build(); + VppEndpointBuilder vppEpBuilder = new VppEndpointBuilder().setDescription("neutron port") + .setContextId(bebp.getContextId()) + .setContextType(bebp.getContextType()) + .setAddress(bebp.getAddress()) + .setAddressType(bebp.getAddressType()) + .setVppInterfaceName(VPP_INTERFACE_NAME_PREFIX + bebp.getPortId().getValue()) + .setVppNodeId(new NodeId(portBinding.getHostId())); + + if (port.getDeviceOwner().contains(COMPUTE_OWNER)) { + vppEpBuilder.setInterfaceTypeChoice( + new VhostUserCaseBuilder().setSocket(getSocketFromPortBinding(portBinding)).build()); + Optional portSecurity = + Optional.fromNullable(port.getAugmentation(PortSecurityExtension.class)); + if (portSecurity.isPresent() && !portSecurity.get().isPortSecurityEnabled()) { + vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy); + } + + } else if (port.getDeviceOwner().contains(DHCP_OWNER) && port.getMacAddress() != null) { + IpAddress dhcpServerIpAddress = port.getFixedIps().stream().findFirst().isPresent() ? + port.getFixedIps().stream().findFirst().get().getIpAddress() : null; + TapCase tapCase = new TapCaseBuilder().setPhysicalAddress(new PhysAddress(port.getMacAddress().getValue())) + .setName(createPortName(port.getUuid())) + .setDhcpServerAddress(dhcpServerIpAddress) + .build(); + vppEpBuilder.setInterfaceTypeChoice(tapCase); + + } else if (isValidQRouterPort(port)) { + TapCase tapCase = new TapCaseBuilder().setPhysicalAddress(new PhysAddress(port.getMacAddress().getValue())) + .setName(createQRouterPortName(port.getUuid())) + .build(); + vppEpBuilder.setInterfaceTypeChoice(tapCase); + vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy); + + } else if (isValidVppRouterPort(port)) { + if (!DEFAULT_NODE.equals(routingNode.getValue())) { + LOG.warn( + "Host-id changed by ODL for port {}. This is a supplementary workaround for choosing a routing node.", + port); + vppEpBuilder.setVppNodeId(routingNode); + } else if (port.getDeviceId() != null) { + LOG.debug("Resolving host-id for unbound router port {}", port.getUuid()); + Optional optPorts = syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, + InstanceIdentifier.builder(Neutron.class).child(Ports.class).build()); + if (optPorts.isPresent() && optPorts.get().getPort() != null) { + java.util.Optional optPortOnTheSameNode = optPorts.get() + .getPort() + .stream() + .filter(p -> !p.getUuid().equals(port.getUuid())) + .filter(p -> p.getAugmentation(PortBindingExtension.class) != null) + .filter(p -> p.getDeviceOwner().contains(DHCP_OWNER)) + .findFirst(); + if (optPortOnTheSameNode.isPresent()) { + PortBindingExtension binding = + optPortOnTheSameNode.get().getAugmentation(PortBindingExtension.class); + if (binding != null && binding.getHostId() != null) { + vppEpBuilder.setVppNodeId(new NodeId(binding.getHostId())); + } else { + LOG.warn("Cannot resolve location of router-port {}", port.getUuid()); + return null; + } + } + } + } + vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy); + vppEpBuilder.setInterfaceTypeChoice(getLoopbackCase(port)); + } + return vppEpBuilder.build(); + } + + private String getSocketFromPortBinding(@Nonnull PortBindingExtension portBindingExtension) { + List vifDetails = nullToEmpty(portBindingExtension.getVifDetails()); + + for (VifDetails detail : vifDetails) { + if (VHOST_SOCKET_KEY.equalsIgnoreCase(detail.getDetailsKey())) { + return detail.getValue(); + } + } + return null; + } + + private LoopbackCase getLoopbackCase(Port port) { + LoopbackCaseBuilder loopbackCase = + new LoopbackCaseBuilder().setPhysAddress(new PhysAddress(port.getMacAddress().getValue())); + Optional fixedIpsOptional = resolveFirstFixedIps(port); + if (fixedIpsOptional.isPresent() && fixedIpsOptional.get().getIpAddress() != null) { + loopbackCase.setIpAddress(fixedIpsOptional.get().getIpAddress()); + Optional subnetOptional = syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, + InstanceIdentifier.builder(Neutron.class) + .child(Subnets.class) + .child(Subnet.class, new SubnetKey(fixedIpsOptional.get().getSubnetId())) + .build()); + if (subnetOptional.isPresent()) { + Ipv4Prefix ipv4Prefix = subnetOptional.get().getCidr().getIpv4Prefix(); + loopbackCase.setIpPrefix(new IpPrefix(ipv4Prefix)); + } else { + LOG.warn("IpPrefix for loopback port: {} was not set.", port); + } + if (loopbackCase.getIpAddress() != null && loopbackCase.getIpPrefix() != null) { + loopbackCase.setBvi(true); + LOG.trace("Creating loopback BVI interface: {} for VPP router port: {}.", loopbackCase, port); + } + + } else { + LOG.warn("IpAddress for loopback port: {} was not set.", port); + } + return loopbackCase.build(); + } + + /** + * If Qrouter (L3 Agent) is in use, any of Openstack neutron routers is not going be mapped + * to ODL neutron. + */ + private boolean isValidQRouterPort(Port port) { + Optional optRouter = getRouterOptional(port); + return !optRouter.isPresent() && port.getDeviceOwner().contains(ROUTER_OWNER) && port.getMacAddress() != null; + } + + private boolean isValidVppRouterPort(Port port) { + Optional optRouter = getRouterOptional(port); + return optRouter.isPresent() && port.getDeviceOwner().contains(ROUTER_OWNER) && port.getMacAddress() != null; + } + + private Optional getRouterOptional(Port port) { + if (Strings.isNullOrEmpty(port.getDeviceId())) { + return Optional.absent(); + } + RouterKey routerKey = null; + try { + routerKey = new RouterKey(new Uuid(port.getDeviceId())); + } catch (IllegalArgumentException e) { + // port.getDeviceId() may not match Uuid.PATTERN_CONSTANTS + return Optional.absent(); + } + InstanceIdentifier routerIid = + InstanceIdentifier.builder(Neutron.class).child(Routers.class).child(Router.class, routerKey).build(); + Optional optRouter = syncedChain.readFromDs(LogicalDatastoreType.CONFIGURATION, routerIid); + return optRouter; + } + + public static Optional resolveFirstFixedIps(Port port) { + List fixedIps = port.getFixedIps(); + if (fixedIps != null && !fixedIps.isEmpty()) { + return Optional.of(fixedIps.get(0)); + } + return Optional.absent(); + } + + private String createPortName(Uuid portUuid) { + String tapPortName; + String uuid = portUuid.getValue(); + if (uuid != null && uuid.length() >= 12) { + tapPortName = TAP_PORT_NAME_PREFIX + uuid.substring(0, 11); + } else { + tapPortName = TAP_PORT_NAME_PREFIX + uuid; + } + return tapPortName; + } + + private String createQRouterPortName(Uuid portUuid) { + String tapPortName; + String uuid = portUuid.getValue(); + if (uuid != null && uuid.length() >= 12) { + tapPortName = RT_PORT_NAME_PREFIX + uuid.substring(0, 11); + } else { + tapPortName = RT_PORT_NAME_PREFIX + uuid; + } + return tapPortName; + } + + private InstanceIdentifier createVppEndpointIid(VppEndpointKey vppEpKey) { + return InstanceIdentifier.builder(Config.class).child(VppEndpoint.class, vppEpKey).build(); + } + + private InstanceIdentifier createBaseEpByPortIid(Uuid uuid) { + return createBaseEpByPortIid(new UniqueId(uuid.getValue())); + } + + private InstanceIdentifier createBaseEpByPortIid(UniqueId uuid) { + return InstanceIdentifier.builder(Mappings.class) + .child(GbpByNeutronMappings.class) + .child(BaseEndpointsByPorts.class) + .child(BaseEndpointByPort.class, new BaseEndpointByPortKey(uuid)) + .build(); + } + + InstanceIdentifier createWildcartedPortIid() { + return portsIid().child(Port.class).build(); + } + + private InstanceIdentifier createPortIid(UniqueId uuid) { + return portsIid().child(Port.class, new PortKey(new Uuid(uuid.getValue()))).build(); + } + + private InstanceIdentifierBuilder portsIid() { + return InstanceIdentifier.builder(Neutron.class).child(Ports.class); + } + + @Override + public void onTransactionChainFailed(TransactionChain chain, AsyncTransaction transaction, + Throwable cause) { + LOG.error("Transaction chain failed. {} \nTransaction which caused the chain to fail {}", cause.getMessage(), + transaction, cause); + syncedChain.closeChain(); + this.syncedChain = new SyncedChain(Preconditions.checkNotNull(dataBroker.createTransactionChain(this))); + } + + @Override + public void onTransactionChainSuccessful(TransactionChain chain) { + LOG.trace("Transaction chain was successful. {}", chain); + } + + private List nullToEmpty(@Nullable List list) { + return list == null ? Collections.emptyList() : list; + } +} diff --git a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/util/HostconfigUtil.java b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/util/HostconfigUtil.java index 487c9c756..3a0b71b36 100644 --- a/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/util/HostconfigUtil.java +++ b/neutron-vpp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/util/HostconfigUtil.java @@ -1,72 +1,72 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.util; - -import java.util.List; - -import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.Hostconfig; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.HostconfigBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; - -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - - -public class HostconfigUtil { - - public static final String L2_HOST_TYPE = "ODL L2"; - private static final String VHOST_USER = "vhostuser"; - private static final String VNIC_TYPE = "normal"; - private static final String HAS_DATAPATH_TYPE_NETDEV = "False"; - private static final String SUPPORT_VHOST_USER = "True"; - private static final String VHOSTUSER_MODE = "server"; - private static final List supportedNetworkTypes = Lists.newArrayList("local", "vlan", "vxlan", "gre"); - - public static Hostconfig createHostconfigsDataFor(NodeId nodeId, SocketInfo socketInfo) { - Preconditions.checkNotNull(nodeId); - Preconditions.checkNotNull(socketInfo); - JsonObject odlL2 = new JsonObject(); - odlL2.add("allowed_network_types", buildSupportedNetworkTypes()); - odlL2.add("supported_vnic_types", buildSupportedVnicTypes(socketInfo)); - return new HostconfigBuilder().setHostId(nodeId.getValue()) - .setHostType(L2_HOST_TYPE) - .setConfig(odlL2.toString()) - .build(); - } - - private static JsonArray buildSupportedNetworkTypes() { - JsonArray networkTypes = new JsonArray(); - supportedNetworkTypes.forEach(networkTypes::add); - return networkTypes; - } - - private static JsonArray buildSupportedVnicTypes(SocketInfo socketInfo) { - JsonArray supportedVnicTypes = new JsonArray(); - JsonObject supportedVnicType = new JsonObject(); - supportedVnicType.addProperty("vnic_type", VNIC_TYPE); - supportedVnicType.addProperty("vif_type", VHOST_USER); - supportedVnicType.add("vif_details", buildVifDetails(socketInfo)); - supportedVnicTypes.add(supportedVnicType); - return supportedVnicTypes; - } - - private static JsonObject buildVifDetails(SocketInfo socketInfo) { - JsonObject vifDetails = new JsonObject(); - vifDetails.addProperty("has_datapath_type_netdev", HAS_DATAPATH_TYPE_NETDEV); - vifDetails.addProperty("support_vhost_user", SUPPORT_VHOST_USER); - vifDetails.addProperty("port_prefix", socketInfo.getSocketPrefix()); - vifDetails.addProperty("vhostuser_socket_dir", socketInfo.getSocketPath()); - vifDetails.addProperty("vhostuser_mode", VHOSTUSER_MODE); - vifDetails.addProperty("vhostuser_socket", socketInfo.getVhostUserSocket()); - return vifDetails; - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.util; + +import java.util.List; + +import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.Hostconfig; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.HostconfigBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + + +public class HostconfigUtil { + + public static final String L2_HOST_TYPE = "ODL L2"; + private static final String VHOST_USER = "vhostuser"; + private static final String VNIC_TYPE = "normal"; + private static final String HAS_DATAPATH_TYPE_NETDEV = "False"; + private static final String SUPPORT_VHOST_USER = "True"; + private static final String VHOSTUSER_MODE = "server"; + private static final List supportedNetworkTypes = Lists.newArrayList("local", "vlan", "vxlan", "gre"); + + public static Hostconfig createHostconfigsDataFor(NodeId nodeId, SocketInfo socketInfo) { + Preconditions.checkNotNull(nodeId); + Preconditions.checkNotNull(socketInfo); + JsonObject odlL2 = new JsonObject(); + odlL2.add("allowed_network_types", buildSupportedNetworkTypes()); + odlL2.add("supported_vnic_types", buildSupportedVnicTypes(socketInfo)); + return new HostconfigBuilder().setHostId(nodeId.getValue()) + .setHostType(L2_HOST_TYPE) + .setConfig(odlL2.toString()) + .build(); + } + + private static JsonArray buildSupportedNetworkTypes() { + JsonArray networkTypes = new JsonArray(); + supportedNetworkTypes.forEach(networkTypes::add); + return networkTypes; + } + + private static JsonArray buildSupportedVnicTypes(SocketInfo socketInfo) { + JsonArray supportedVnicTypes = new JsonArray(); + JsonObject supportedVnicType = new JsonObject(); + supportedVnicType.addProperty("vnic_type", VNIC_TYPE); + supportedVnicType.addProperty("vif_type", VHOST_USER); + supportedVnicType.add("vif_details", buildVifDetails(socketInfo)); + supportedVnicTypes.add(supportedVnicType); + return supportedVnicTypes; + } + + private static JsonObject buildVifDetails(SocketInfo socketInfo) { + JsonObject vifDetails = new JsonObject(); + vifDetails.addProperty("has_datapath_type_netdev", HAS_DATAPATH_TYPE_NETDEV); + vifDetails.addProperty("support_vhost_user", SUPPORT_VHOST_USER); + vifDetails.addProperty("port_prefix", socketInfo.getSocketPrefix()); + vifDetails.addProperty("vhostuser_socket_dir", socketInfo.getSocketPath()); + vifDetails.addProperty("vhostuser_mode", VHOSTUSER_MODE); + vifDetails.addProperty("vhostuser_socket", socketInfo.getVhostUserSocket()); + return vifDetails; + } +} diff --git a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/TestResources.java b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/TestResources.java index 50c8be8b9..eccfde536 100644 --- a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/TestResources.java +++ b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/TestResources.java @@ -1,101 +1,101 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.hostconfigs; - -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.util.HostconfigUtil; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererNodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.Hostconfigs; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.Hostconfig; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.HostconfigKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import com.google.common.base.Optional; - -public class TestResources extends AbstractDataBrokerTest { - - protected DataBroker dataBroker; - - void setDataBroker() { - this.dataBroker = getDataBroker(); - } - - void writeTopologyNode(TopologyId topologyId, NodeId nodeId) throws InterruptedException, ExecutionException { - WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); - wTx.put(LogicalDatastoreType.CONFIGURATION, createNodeIid(topologyId, nodeId), new NodeBuilder().setNodeId(nodeId).build(), true); - wTx.submit().get(); - } - - void writeRendererNode(InstanceIdentifier nodeIid) throws InterruptedException, - ExecutionException { - InstanceIdentifier rendererNodeIid = createRendererNodeIid(nodeIid); - RendererNode rendererNode = new RendererNodeBuilder().setNodePath(nodeIid).build(); - WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); - wTx.put(LogicalDatastoreType.OPERATIONAL, rendererNodeIid, rendererNode, true); - wTx.submit().get(); - } - - void deleteRendererNode(InstanceIdentifier nodeIid) throws InterruptedException, ExecutionException { - InstanceIdentifier rendererNodeIid = createRendererNodeIid(nodeIid); - WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); - wTx.delete(LogicalDatastoreType.OPERATIONAL, rendererNodeIid); - wTx.submit().get(); - } - - Optional readHostconfig(NodeId nodeId) throws InterruptedException, ExecutionException { - ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); - Optional opt = rTx.read(LogicalDatastoreType.OPERATIONAL, createHostconfigWildcardNodeIid(nodeId)) - .get(); - rTx.close(); - return opt; - } - - static InstanceIdentifier createNodeIid(TopologyId topologyId, NodeId nodeId) { - return InstanceIdentifier.builder(NetworkTopology.class) - .child(Topology.class, new TopologyKey(topologyId)) - .child(Node.class, new NodeKey(nodeId)) - .build(); - } - - InstanceIdentifier createRendererNodeIid(InstanceIdentifier nodeIid) { - return InstanceIdentifier.builder(Renderers.class) - .child(Renderer.class, new RendererKey(VppNodeListener.VPP_RENDERER_NAME)) - .child(RendererNodes.class) - .child(RendererNode.class, new RendererNodeKey(nodeIid)) - .build(); - } - - InstanceIdentifier createHostconfigWildcardNodeIid(NodeId nodeId) { - return InstanceIdentifier.builder(Neutron.class) - .child(Hostconfigs.class) - .child(Hostconfig.class, new HostconfigKey(nodeId.getValue(), HostconfigUtil.L2_HOST_TYPE)) - .build(); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.hostconfigs; + +import java.util.concurrent.ExecutionException; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.util.HostconfigUtil; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.Renderers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererNodes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.Hostconfigs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.Hostconfig; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.HostconfigKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +import com.google.common.base.Optional; + +public class TestResources extends AbstractDataBrokerTest { + + protected DataBroker dataBroker; + + void setDataBroker() { + this.dataBroker = getDataBroker(); + } + + void writeTopologyNode(TopologyId topologyId, NodeId nodeId) throws InterruptedException, ExecutionException { + WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); + wTx.put(LogicalDatastoreType.CONFIGURATION, createNodeIid(topologyId, nodeId), new NodeBuilder().setNodeId(nodeId).build(), true); + wTx.submit().get(); + } + + void writeRendererNode(InstanceIdentifier nodeIid) throws InterruptedException, + ExecutionException { + InstanceIdentifier rendererNodeIid = createRendererNodeIid(nodeIid); + RendererNode rendererNode = new RendererNodeBuilder().setNodePath(nodeIid).build(); + WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); + wTx.put(LogicalDatastoreType.OPERATIONAL, rendererNodeIid, rendererNode, true); + wTx.submit().get(); + } + + void deleteRendererNode(InstanceIdentifier nodeIid) throws InterruptedException, ExecutionException { + InstanceIdentifier rendererNodeIid = createRendererNodeIid(nodeIid); + WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); + wTx.delete(LogicalDatastoreType.OPERATIONAL, rendererNodeIid); + wTx.submit().get(); + } + + Optional readHostconfig(NodeId nodeId) throws InterruptedException, ExecutionException { + ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); + Optional opt = rTx.read(LogicalDatastoreType.OPERATIONAL, createHostconfigWildcardNodeIid(nodeId)) + .get(); + rTx.close(); + return opt; + } + + static InstanceIdentifier createNodeIid(TopologyId topologyId, NodeId nodeId) { + return InstanceIdentifier.builder(NetworkTopology.class) + .child(Topology.class, new TopologyKey(topologyId)) + .child(Node.class, new NodeKey(nodeId)) + .build(); + } + + InstanceIdentifier createRendererNodeIid(InstanceIdentifier nodeIid) { + return InstanceIdentifier.builder(Renderers.class) + .child(Renderer.class, new RendererKey(VppNodeListener.VPP_RENDERER_NAME)) + .child(RendererNodes.class) + .child(RendererNode.class, new RendererNodeKey(nodeIid)) + .build(); + } + + InstanceIdentifier createHostconfigWildcardNodeIid(NodeId nodeId) { + return InstanceIdentifier.builder(Neutron.class) + .child(Hostconfigs.class) + .child(Hostconfig.class, new HostconfigKey(nodeId.getValue(), HostconfigUtil.L2_HOST_TYPE)) + .build(); + } +} diff --git a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/VppNodeListenerTest.java b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/VppNodeListenerTest.java index 12c1ec9f2..4fdcda6f4 100644 --- a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/VppNodeListenerTest.java +++ b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/hostconfigs/VppNodeListenerTest.java @@ -1,57 +1,57 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.hostconfigs; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.concurrent.ExecutionException; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class VppNodeListenerTest extends TestResources { - - private TopologyId topologyId = new TopologyId("topology1"); - private NodeId nodeId = new NodeId("node1"); - private InstanceIdentifier nodeIid = createNodeIid(topologyId, nodeId); - private VppNodeListener vppNodeListener; - - @Before - public void init() throws InterruptedException, ExecutionException { - String socketPath = "/tmp/"; - String socketPrefix = "socket_"; - setDataBroker(); - vppNodeListener = new VppNodeListener(dataBroker, new SocketInfo(socketPath, socketPrefix)); - writeTopologyNode(topologyId, nodeId); - writeRendererNode(createNodeIid(topologyId, nodeId)); - } - - @Test - public void writeDataTest() throws InterruptedException, ExecutionException { - assertTrue(readHostconfig(nodeId).isPresent()); - } - - @Test - public void deleteDataTest() throws InterruptedException, ExecutionException { - deleteRendererNode(nodeIid); - assertFalse(readHostconfig(nodeId).isPresent()); - } - - @After - public void after() { - vppNodeListener.close(); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.hostconfigs; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.concurrent.ExecutionException; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class VppNodeListenerTest extends TestResources { + + private TopologyId topologyId = new TopologyId("topology1"); + private NodeId nodeId = new NodeId("node1"); + private InstanceIdentifier nodeIid = createNodeIid(topologyId, nodeId); + private VppNodeListener vppNodeListener; + + @Before + public void init() throws InterruptedException, ExecutionException { + String socketPath = "/tmp/"; + String socketPrefix = "socket_"; + setDataBroker(); + vppNodeListener = new VppNodeListener(dataBroker, new SocketInfo(socketPath, socketPrefix)); + writeTopologyNode(topologyId, nodeId); + writeRendererNode(createNodeIid(topologyId, nodeId)); + } + + @Test + public void writeDataTest() throws InterruptedException, ExecutionException { + assertTrue(readHostconfig(nodeId).isPresent()); + } + + @Test + public void deleteDataTest() throws InterruptedException, ExecutionException { + deleteRendererNode(nodeIid); + assertFalse(readHostconfig(nodeId).isPresent()); + } + + @After + public void after() { + vppNodeListener.close(); + } +} diff --git a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NetworkAwareTest.java b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NetworkAwareTest.java index 5b45f2162..e55187d9a 100644 --- a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NetworkAwareTest.java +++ b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NetworkAwareTest.java @@ -1,176 +1,176 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.List; -import java.util.UUID; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.FlatNetwork; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.VlanNetwork; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.GbpBridgeDomain; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.bridge.domain.base.attributes.PhysicalLocationRef; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeFlat; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVlan; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder; - -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableList; - -public class NetworkAwareTest extends AbstractDataBrokerTest { - - private DataBroker dataBroker; - private NetworkAware networkAware; - private NetworkProviderExtensionBuilder netExtBuilder; - - @Before - public void init() { - dataBroker = Mockito.spy(getDataBroker()); - networkAware = new NetworkAware(dataBroker); - netExtBuilder = new NetworkProviderExtensionBuilder(); - netExtBuilder.setPhysicalNetwork("physicalNet"); - } - - @Test - public void testProcessCreatedNeutronDto_flat() { - netExtBuilder.setNetworkType(NetworkTypeFlat.class); - Network network = createTestNetwork("net", netExtBuilder.build()); - networkAware.processCreatedNeutronDto(network); - ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); - Optional optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - networkAware.getGbpBridgeDomainIid(network.getUuid().getValue()), rTx); - assertTrue(optBrDomain.isPresent()); - } - - @Test - public void testProcessUpdatedNeutronDto() { - netExtBuilder.setNetworkType(NetworkTypeFlat.class); - Network network1 = createTestNetwork("net1", netExtBuilder.build()); - Network network2 = new NetworkBuilder(network1).setName("net2") - .addAugmentation(NetworkProviderExtension.class, netExtBuilder.build()) - .build(); - networkAware.processUpdatedNeutronDto(network1, network2); - ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); - Optional optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - networkAware.getGbpBridgeDomainIid(network2.getUuid().getValue()), rTx); - assertTrue(optBrDomain.isPresent()); - assertEquals(optBrDomain.get().getDescription(), "net2"); - } - - @Test - public void testProcessDeletedNeutronDto() { - netExtBuilder.setNetworkType(NetworkTypeFlat.class); - Network network = createTestNetwork("net1", netExtBuilder.build()); - networkAware.processDeletedNeutronDto(network); - ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); - Optional optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - networkAware.getGbpBridgeDomainIid(network.getUuid().getValue()), rTx); - assertFalse(optBrDomain.isPresent()); - } - - @Test - public void testCreateBridgeDomain_vlanNetwork() { - netExtBuilder.setNetworkType(NetworkTypeVlan.class); - netExtBuilder.setSegmentationId("2016"); - Network vlanNetwork = createTestNetwork("VlanNet", netExtBuilder.build()); - GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(vlanNetwork); - assertEquals(bridgeDomain.getId(), vlanNetwork.getUuid().getValue()); - assertEquals(bridgeDomain.getDescription(), vlanNetwork.getName()); - assertEquals(bridgeDomain.getType(), VlanNetwork.class); - assertEquals(bridgeDomain.getVlan(), new VlanId(Integer.valueOf(2016))); - } - - @Test - public void testCreateBridgeDomain_flatNetwork() { - netExtBuilder.setNetworkType(NetworkTypeFlat.class); - Network flatNetwork = createTestNetwork("FlatNet", netExtBuilder.build()); - GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(flatNetwork); - assertEquals(bridgeDomain.getId(), flatNetwork.getUuid().getValue()); - assertEquals(bridgeDomain.getDescription(), flatNetwork.getName()); - assertEquals(bridgeDomain.getType(), FlatNetwork.class); - } - - @Test - public void testCreateBridgeDomain_noPhysicalNetwork() { - netExtBuilder.setNetworkType(NetworkTypeFlat.class); - netExtBuilder.setPhysicalNetwork(null); - Network flatNetwork = createTestNetwork("FlatNet", netExtBuilder.build()); - GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(flatNetwork); - assertNull(bridgeDomain.getPhysicalLocationRef()); - } - - @Test - public void testCreateBridgeDomain_noNetworkType() { - Network vlanNetwork = createTestNetwork("noTypeNet", new NetworkProviderExtensionBuilder().build()); - GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(vlanNetwork); - assertNull(bridgeDomain); - } - - @Test - public void testResolveDomainLocations() { - NodeId nodeId = new NodeId("node1"); - TpId tpId = new TpId("tp1"); - TopologyId topologyId = new TopologyId("physicalNet"); - writeBasicTopology(topologyId, nodeId, tpId); - NetworkProviderExtension netExt = new NetworkProviderExtensionBuilder().setPhysicalNetwork("physicalNet") - .build(); - List resolvedLocations = networkAware.resolveDomainLocations(netExt); - PhysicalLocationRef physLocationRef = resolvedLocations.get(0); - assertEquals(nodeId, physLocationRef.getNodeId()); - assertEquals(tpId.getValue(), physLocationRef.getInterface().get(0)); - } - - private Network createTestNetwork(String name, NetworkProviderExtension ext) { - return new NetworkBuilder().setUuid(new Uuid(UUID.randomUUID().toString())) - .setName(name) - .addAugmentation(NetworkProviderExtension.class, ext) - .build(); - } - - private void writeBasicTopology(TopologyId topologyId, NodeId nodeId, TpId tpId) { - TerminationPoint tp = new TerminationPointBuilder().setTpId(tpId).build(); - Node node = new NodeBuilder().setNodeId(new NodeId(nodeId)) - .setTerminationPoint(ImmutableList.of(tp)) - .build(); - Topology topology = new TopologyBuilder().setTopologyId(topologyId) - .setNode(ImmutableList.of(node)) - .build(); - WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); - wTx.put(LogicalDatastoreType.CONFIGURATION, networkAware.getTopologyIid(new TopologyId("physicalNet")), - topology, true); - DataStoreHelper.submitToDs(wTx); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.List; +import java.util.UUID; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.FlatNetwork; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.VlanNetwork; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.GbpBridgeDomain; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.bridge.domain.base.attributes.PhysicalLocationRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeFlat; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVlan; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder; + +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; + +public class NetworkAwareTest extends AbstractDataBrokerTest { + + private DataBroker dataBroker; + private NetworkAware networkAware; + private NetworkProviderExtensionBuilder netExtBuilder; + + @Before + public void init() { + dataBroker = Mockito.spy(getDataBroker()); + networkAware = new NetworkAware(dataBroker); + netExtBuilder = new NetworkProviderExtensionBuilder(); + netExtBuilder.setPhysicalNetwork("physicalNet"); + } + + @Test + public void testProcessCreatedNeutronDto_flat() { + netExtBuilder.setNetworkType(NetworkTypeFlat.class); + Network network = createTestNetwork("net", netExtBuilder.build()); + networkAware.processCreatedNeutronDto(network); + ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); + Optional optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + networkAware.getGbpBridgeDomainIid(network.getUuid().getValue()), rTx); + assertTrue(optBrDomain.isPresent()); + } + + @Test + public void testProcessUpdatedNeutronDto() { + netExtBuilder.setNetworkType(NetworkTypeFlat.class); + Network network1 = createTestNetwork("net1", netExtBuilder.build()); + Network network2 = new NetworkBuilder(network1).setName("net2") + .addAugmentation(NetworkProviderExtension.class, netExtBuilder.build()) + .build(); + networkAware.processUpdatedNeutronDto(network1, network2); + ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); + Optional optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + networkAware.getGbpBridgeDomainIid(network2.getUuid().getValue()), rTx); + assertTrue(optBrDomain.isPresent()); + assertEquals(optBrDomain.get().getDescription(), "net2"); + } + + @Test + public void testProcessDeletedNeutronDto() { + netExtBuilder.setNetworkType(NetworkTypeFlat.class); + Network network = createTestNetwork("net1", netExtBuilder.build()); + networkAware.processDeletedNeutronDto(network); + ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); + Optional optBrDomain = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + networkAware.getGbpBridgeDomainIid(network.getUuid().getValue()), rTx); + assertFalse(optBrDomain.isPresent()); + } + + @Test + public void testCreateBridgeDomain_vlanNetwork() { + netExtBuilder.setNetworkType(NetworkTypeVlan.class); + netExtBuilder.setSegmentationId("2016"); + Network vlanNetwork = createTestNetwork("VlanNet", netExtBuilder.build()); + GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(vlanNetwork); + assertEquals(bridgeDomain.getId(), vlanNetwork.getUuid().getValue()); + assertEquals(bridgeDomain.getDescription(), vlanNetwork.getName()); + assertEquals(bridgeDomain.getType(), VlanNetwork.class); + assertEquals(bridgeDomain.getVlan(), new VlanId(Integer.valueOf(2016))); + } + + @Test + public void testCreateBridgeDomain_flatNetwork() { + netExtBuilder.setNetworkType(NetworkTypeFlat.class); + Network flatNetwork = createTestNetwork("FlatNet", netExtBuilder.build()); + GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(flatNetwork); + assertEquals(bridgeDomain.getId(), flatNetwork.getUuid().getValue()); + assertEquals(bridgeDomain.getDescription(), flatNetwork.getName()); + assertEquals(bridgeDomain.getType(), FlatNetwork.class); + } + + @Test + public void testCreateBridgeDomain_noPhysicalNetwork() { + netExtBuilder.setNetworkType(NetworkTypeFlat.class); + netExtBuilder.setPhysicalNetwork(null); + Network flatNetwork = createTestNetwork("FlatNet", netExtBuilder.build()); + GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(flatNetwork); + assertNull(bridgeDomain.getPhysicalLocationRef()); + } + + @Test + public void testCreateBridgeDomain_noNetworkType() { + Network vlanNetwork = createTestNetwork("noTypeNet", new NetworkProviderExtensionBuilder().build()); + GbpBridgeDomain bridgeDomain = networkAware.createGbpBridgeDomain(vlanNetwork); + assertNull(bridgeDomain); + } + + @Test + public void testResolveDomainLocations() { + NodeId nodeId = new NodeId("node1"); + TpId tpId = new TpId("tp1"); + TopologyId topologyId = new TopologyId("physicalNet"); + writeBasicTopology(topologyId, nodeId, tpId); + NetworkProviderExtension netExt = new NetworkProviderExtensionBuilder().setPhysicalNetwork("physicalNet") + .build(); + List resolvedLocations = networkAware.resolveDomainLocations(netExt); + PhysicalLocationRef physLocationRef = resolvedLocations.get(0); + assertEquals(nodeId, physLocationRef.getNodeId()); + assertEquals(tpId.getValue(), physLocationRef.getInterface().get(0)); + } + + private Network createTestNetwork(String name, NetworkProviderExtension ext) { + return new NetworkBuilder().setUuid(new Uuid(UUID.randomUUID().toString())) + .setName(name) + .addAugmentation(NetworkProviderExtension.class, ext) + .build(); + } + + private void writeBasicTopology(TopologyId topologyId, NodeId nodeId, TpId tpId) { + TerminationPoint tp = new TerminationPointBuilder().setTpId(tpId).build(); + Node node = new NodeBuilder().setNodeId(new NodeId(nodeId)) + .setTerminationPoint(ImmutableList.of(tp)) + .build(); + Topology topology = new TopologyBuilder().setTopologyId(topologyId) + .setNode(ImmutableList.of(node)) + .build(); + WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); + wTx.put(LogicalDatastoreType.CONFIGURATION, networkAware.getTopologyIid(new TopologyId("physicalNet")), + topology, true); + DataStoreHelper.submitToDs(wTx); + } +} diff --git a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NeutronListenerTest.java b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NeutronListenerTest.java index 3d2028013..ff5d5f3d7 100644 --- a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NeutronListenerTest.java +++ b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/NeutronListenerTest.java @@ -1,108 +1,108 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.verify; - -import java.util.concurrent.ExecutionException; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.BaseEndpointsByPorts; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPort; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class NeutronListenerTest extends AbstractDataBrokerTest { - - private DataBroker dataBroker; - - private NodeId routingNode; - private Port port; - private BaseEndpointByPort bebp; - private NeutronListener neutronListener; - private PortAware baseEpByPortListener; - - @Before - public void init() { - port = TestUtils.createValidVppPort(); - bebp = TestUtils.createBaseEndpointByPortForPort(); - dataBroker = getDataBroker(); - neutronListener = new NeutronListener(dataBroker, routingNode); - neutronListener.clearDataChangeProviders(); - baseEpByPortListener = Mockito.spy(new PortAware(new PortHandler( - dataBroker, routingNode), dataBroker)); - neutronListener.addDataChangeProvider(baseEpByPortListener); - } - - @Test - public void constructorTest() { - dataBroker = Mockito.spy(dataBroker); - NeutronListener neutronListener = new NeutronListener(dataBroker, routingNode); - verify(dataBroker).registerDataTreeChangeListener( - eq(new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, - InstanceIdentifier.builder(Neutron.class) - .build())), any(NeutronListener.class)); - verify(dataBroker).registerDataTreeChangeListener( - eq(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, - InstanceIdentifier.builder(Mappings.class) - .child(GbpByNeutronMappings.class) - .child(BaseEndpointsByPorts.class) - .child(BaseEndpointByPort.class) - .build())), any(PortAware.class)); - neutronListener.close(); - } - - @Test - public void testProcessCreatedNeutronDto() throws Exception { - putPortAndBaseEndpointByPort(); - neutronListener.close(); - verify(baseEpByPortListener).processCreatedNeutronDto(port); - } - - @Test - public void testProcessUpdatedNeutronDto() throws Exception { - putPortAndBaseEndpointByPort(); - Port updatedPort = new PortBuilder(port).setName("renamed").build(); - WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); - wTx.put(LogicalDatastoreType.CONFIGURATION, TestUtils.createPortIid(updatedPort.getKey()), updatedPort); - wTx.submit().get(); - neutronListener.close(); - verify(baseEpByPortListener).processUpdatedNeutronDto(port, updatedPort); - } - - @Test - public void testProcessDeletedNeutronDto() throws Exception { - putPortAndBaseEndpointByPort(); - WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); - wTx.delete(LogicalDatastoreType.CONFIGURATION, TestUtils.createPortIid(port.getKey())); - wTx.submit().get(); - verify(baseEpByPortListener).processDeletedNeutronDto(port); - } - - private void putPortAndBaseEndpointByPort() throws InterruptedException, ExecutionException { - WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); - wTx.put(LogicalDatastoreType.CONFIGURATION, TestUtils.createPortIid(port.getKey()), port); - wTx.put(LogicalDatastoreType.OPERATIONAL, TestUtils.createBaseEpByPortIid(port.getUuid()), bebp); - wTx.submit().get(); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.verify; + +import java.util.concurrent.ExecutionException; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.BaseEndpointsByPorts; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPort; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class NeutronListenerTest extends AbstractDataBrokerTest { + + private DataBroker dataBroker; + + private NodeId routingNode; + private Port port; + private BaseEndpointByPort bebp; + private NeutronListener neutronListener; + private PortAware baseEpByPortListener; + + @Before + public void init() { + port = TestUtils.createValidVppPort(); + bebp = TestUtils.createBaseEndpointByPortForPort(); + dataBroker = getDataBroker(); + neutronListener = new NeutronListener(dataBroker, routingNode); + neutronListener.clearDataChangeProviders(); + baseEpByPortListener = Mockito.spy(new PortAware(new PortHandler( + dataBroker, routingNode), dataBroker)); + neutronListener.addDataChangeProvider(baseEpByPortListener); + } + + @Test + public void constructorTest() { + dataBroker = Mockito.spy(dataBroker); + NeutronListener neutronListener = new NeutronListener(dataBroker, routingNode); + verify(dataBroker).registerDataTreeChangeListener( + eq(new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, + InstanceIdentifier.builder(Neutron.class) + .build())), any(NeutronListener.class)); + verify(dataBroker).registerDataTreeChangeListener( + eq(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.builder(Mappings.class) + .child(GbpByNeutronMappings.class) + .child(BaseEndpointsByPorts.class) + .child(BaseEndpointByPort.class) + .build())), any(PortAware.class)); + neutronListener.close(); + } + + @Test + public void testProcessCreatedNeutronDto() throws Exception { + putPortAndBaseEndpointByPort(); + neutronListener.close(); + verify(baseEpByPortListener).processCreatedNeutronDto(port); + } + + @Test + public void testProcessUpdatedNeutronDto() throws Exception { + putPortAndBaseEndpointByPort(); + Port updatedPort = new PortBuilder(port).setName("renamed").build(); + WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); + wTx.put(LogicalDatastoreType.CONFIGURATION, TestUtils.createPortIid(updatedPort.getKey()), updatedPort); + wTx.submit().get(); + neutronListener.close(); + verify(baseEpByPortListener).processUpdatedNeutronDto(port, updatedPort); + } + + @Test + public void testProcessDeletedNeutronDto() throws Exception { + putPortAndBaseEndpointByPort(); + WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); + wTx.delete(LogicalDatastoreType.CONFIGURATION, TestUtils.createPortIid(port.getKey())); + wTx.submit().get(); + verify(baseEpByPortListener).processDeletedNeutronDto(port); + } + + private void putPortAndBaseEndpointByPort() throws InterruptedException, ExecutionException { + WriteTransaction wTx = dataBroker.newWriteOnlyTransaction(); + wTx.put(LogicalDatastoreType.CONFIGURATION, TestUtils.createPortIid(port.getKey()), port); + wTx.put(LogicalDatastoreType.OPERATIONAL, TestUtils.createBaseEpByPortIid(port.getUuid()), bebp); + wTx.submit().get(); + } +} diff --git a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/TestUtils.java b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/TestUtils.java index eae5be27e..05eecb846 100644 --- a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/TestUtils.java +++ b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/processors/TestUtils.java @@ -1,141 +1,141 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.Collections; -import java.util.Iterator; - -import javax.annotation.Nonnull; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils; -import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.UniqueId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.MacAddressType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.AddressType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.BaseEndpointsByPorts; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPort; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPortBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPortKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpoint; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtension; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtensionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.binding.attributes.VifDetailsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.binding.attributes.VifDetailsKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.Routers; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.Router; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.RouterBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.RouterKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; - -public class TestUtils { - static String TEST_SOCKET = "/tmp/socket_testsocket"; - static final String NODE_1 = "devstack-control"; - static final String DUMMY_UUID = "00000000-1111-2222-3333-444444444444"; - - public static Port createValidVppPort() { - PortBindingExtension portBindingExt = new PortBindingExtensionBuilder().setHostId(NODE_1) - .setVifType("vhostuser") - .setVifDetails(Collections.singletonList( - new VifDetailsBuilder().setKey(new VifDetailsKey("vhostuser_socket")) - .setValue(TEST_SOCKET) - .build())) - .build(); - return new PortBuilder().setUuid(new Uuid(DUMMY_UUID)) - .setDeviceOwner("compute") - .setDeviceId(DUMMY_UUID) - .setMacAddress(new MacAddress("00:11:00:00:11:11")) - .addAugmentation(PortBindingExtension.class, portBindingExt) - .build(); - } - - public static Port createNonVppPort() { - return new PortBuilder().setUuid(new Uuid(DUMMY_UUID)) - .setDeviceOwner("owner1") - .build(); - } - - public static BaseEndpointByPort createBaseEndpointByPortForPort() { - return new BaseEndpointByPortBuilder().setContextId(new ContextId("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")) - .setAddress("00:11:11:11:11:11") - .setPortId(new UniqueId(DUMMY_UUID)) - .setContextType(MappingUtils.L2_BRDIGE_DOMAIN) - .setAddressType(MacAddressType.class) - .build(); - } - - static void writeQrouter(@Nonnull DataBroker dataBroker, @Nonnull RouterKey routerKey) { - WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); - tx.put(LogicalDatastoreType.CONFIGURATION, createNeutronRouterIid(routerKey), - new RouterBuilder().setKey(routerKey).build(), true); - DataStoreHelper.submitToDs(tx); - } - - public static VppEndpointKey createVppEndpointKey(BaseEndpointByPort bebp) { - return new VppEndpointKey(bebp.getAddress(), bebp.getAddressType(), bebp.getContextId(), bebp.getContextType()); - } - - public static InstanceIdentifier createVppEpIid(VppEndpointKey key) { - return InstanceIdentifier.builder(Config.class).child(VppEndpoint.class, key).build(); - } - - public static InstanceIdentifier createVppEpIid(String addr, Class addrType, - ContextId ctxId, Class ctxType) { - return createVppEpIid(new VppEndpointKey(addr, addrType, ctxId, ctxType)); - } - - public static InstanceIdentifier createPortIid(PortKey portKey) { - return InstanceIdentifier.builder(Neutron.class).child(Ports.class).child(Port.class, portKey).build(); - } - - public static InstanceIdentifier createBaseEpByPortIid(Uuid uuid) { - return createBaseEpByPortIid(new UniqueId(uuid.getValue())); - } - - public static InstanceIdentifier createBaseEpByPortIid(UniqueId uuid) { - return InstanceIdentifier.builder(Mappings.class) - .child(GbpByNeutronMappings.class) - .child(BaseEndpointsByPorts.class) - .child(BaseEndpointByPort.class, new BaseEndpointByPortKey(uuid)) - .build(); - } - - public static InstanceIdentifier createNeutronRouterIid(RouterKey routerKey) { - return InstanceIdentifier.builder(Neutron.class).child(Routers.class).child(Router.class, routerKey).build(); - } - - public static void assertPathArgumentTypes(Iterable pathArguments, Class[] expectedTypes) { - assertNotNull(pathArguments); - Iterator it = pathArguments.iterator(); - for (int i = 0; i < expectedTypes.length; ++i) { - assertTrue("Next path argument expected.", it.hasNext()); - assertEquals("Unexpected path argument type.", expectedTypes[i], it.next().getType()); - } - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.processors; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.Collections; +import java.util.Iterator; + +import javax.annotation.Nonnull; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.UniqueId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.MacAddressType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.AddressType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.BaseEndpointsByPorts; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPort; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPortBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.base.endpoints.by.ports.BaseEndpointByPortKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpoint; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtension; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtensionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.binding.attributes.VifDetailsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.binding.attributes.VifDetailsKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.Routers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.Router; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.RouterBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.RouterKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; + +public class TestUtils { + static String TEST_SOCKET = "/tmp/socket_testsocket"; + static final String NODE_1 = "devstack-control"; + static final String DUMMY_UUID = "00000000-1111-2222-3333-444444444444"; + + public static Port createValidVppPort() { + PortBindingExtension portBindingExt = new PortBindingExtensionBuilder().setHostId(NODE_1) + .setVifType("vhostuser") + .setVifDetails(Collections.singletonList( + new VifDetailsBuilder().setKey(new VifDetailsKey("vhostuser_socket")) + .setValue(TEST_SOCKET) + .build())) + .build(); + return new PortBuilder().setUuid(new Uuid(DUMMY_UUID)) + .setDeviceOwner("compute") + .setDeviceId(DUMMY_UUID) + .setMacAddress(new MacAddress("00:11:00:00:11:11")) + .addAugmentation(PortBindingExtension.class, portBindingExt) + .build(); + } + + public static Port createNonVppPort() { + return new PortBuilder().setUuid(new Uuid(DUMMY_UUID)) + .setDeviceOwner("owner1") + .build(); + } + + public static BaseEndpointByPort createBaseEndpointByPortForPort() { + return new BaseEndpointByPortBuilder().setContextId(new ContextId("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")) + .setAddress("00:11:11:11:11:11") + .setPortId(new UniqueId(DUMMY_UUID)) + .setContextType(MappingUtils.L2_BRDIGE_DOMAIN) + .setAddressType(MacAddressType.class) + .build(); + } + + static void writeQrouter(@Nonnull DataBroker dataBroker, @Nonnull RouterKey routerKey) { + WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); + tx.put(LogicalDatastoreType.CONFIGURATION, createNeutronRouterIid(routerKey), + new RouterBuilder().setKey(routerKey).build(), true); + DataStoreHelper.submitToDs(tx); + } + + public static VppEndpointKey createVppEndpointKey(BaseEndpointByPort bebp) { + return new VppEndpointKey(bebp.getAddress(), bebp.getAddressType(), bebp.getContextId(), bebp.getContextType()); + } + + public static InstanceIdentifier createVppEpIid(VppEndpointKey key) { + return InstanceIdentifier.builder(Config.class).child(VppEndpoint.class, key).build(); + } + + public static InstanceIdentifier createVppEpIid(String addr, Class addrType, + ContextId ctxId, Class ctxType) { + return createVppEpIid(new VppEndpointKey(addr, addrType, ctxId, ctxType)); + } + + public static InstanceIdentifier createPortIid(PortKey portKey) { + return InstanceIdentifier.builder(Neutron.class).child(Ports.class).child(Port.class, portKey).build(); + } + + public static InstanceIdentifier createBaseEpByPortIid(Uuid uuid) { + return createBaseEpByPortIid(new UniqueId(uuid.getValue())); + } + + public static InstanceIdentifier createBaseEpByPortIid(UniqueId uuid) { + return InstanceIdentifier.builder(Mappings.class) + .child(GbpByNeutronMappings.class) + .child(BaseEndpointsByPorts.class) + .child(BaseEndpointByPort.class, new BaseEndpointByPortKey(uuid)) + .build(); + } + + public static InstanceIdentifier createNeutronRouterIid(RouterKey routerKey) { + return InstanceIdentifier.builder(Neutron.class).child(Routers.class).child(Router.class, routerKey).build(); + } + + public static void assertPathArgumentTypes(Iterable pathArguments, Class[] expectedTypes) { + assertNotNull(pathArguments); + Iterator it = pathArguments.iterator(); + for (int i = 0; i < expectedTypes.length; ++i) { + assertTrue("Next path argument expected.", it.hasNext()); + assertEquals("Unexpected path argument type.", expectedTypes[i], it.next().getType()); + } + } +} diff --git a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/util/HostconfigUtilTest.java b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/util/HostconfigUtilTest.java index dc32d35cf..f70c81d6c 100644 --- a/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/util/HostconfigUtilTest.java +++ b/neutron-vpp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/neutron/vpp/mapper/util/HostconfigUtilTest.java @@ -1,36 +1,36 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.util; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo; -import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.Hostconfig; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; - - -public class HostconfigUtilTest { - - private final NodeId NODE_ID = new NodeId("node1"); - private final String HOST_TYPE = "ODL L2"; - private final String PATH = "/tmp/"; - private final String PREFIX = "socket_"; - private final String VHOSTUSER = "vhostuser"; - - @Test - public void createHostconfigsDataForTest() { - Hostconfig hc = HostconfigUtil.createHostconfigsDataFor(NODE_ID, new SocketInfo(PATH, PREFIX)); - assertEquals(hc.getHostId(), NODE_ID.getValue()); - assertEquals(hc.getHostType(), HOST_TYPE); - assertTrue(hc.getConfig().contains(PATH)); - assertTrue(hc.getConfig().contains(VHOSTUSER)); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.util; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.hostconfig.rev150712.hostconfig.attributes.hostconfigs.Hostconfig; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; + + +public class HostconfigUtilTest { + + private final NodeId NODE_ID = new NodeId("node1"); + private final String HOST_TYPE = "ODL L2"; + private final String PATH = "/tmp/"; + private final String PREFIX = "socket_"; + private final String VHOSTUSER = "vhostuser"; + + @Test + public void createHostconfigsDataForTest() { + Hostconfig hc = HostconfigUtil.createHostconfigsDataFor(NODE_ID, new SocketInfo(PATH, PREFIX)); + assertEquals(hc.getHostId(), NODE_ID.getValue()); + assertEquals(hc.getHostType(), HOST_TYPE); + assertTrue(hc.getConfig().contains(PATH)); + assertTrue(hc.getConfig().contains(VHOSTUSER)); + } +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/EndpointListenerCovrgTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/EndpointListenerCovrgTest.java index ff20e02c2..4005ece94 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/EndpointListenerCovrgTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/EndpointListenerCovrgTest.java @@ -1,83 +1,83 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.iovisor.endpoint; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -import java.util.Set; - -import com.google.common.collect.ImmutableSet; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.util.IidFactory; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class EndpointListenerCovrgTest { - - private EndpointListener listener; - private DataObjectModification rootNode; - private Set> changes; - - private InstanceIdentifier rootIdentifier; - - @SuppressWarnings("unchecked") - @Before - public void init() { - DataBroker dataProvider = mock(DataBroker.class); - - EndpointManager endpointManager = mock(EndpointManager.class); - listener = spy(new EndpointListener(dataProvider, endpointManager)); - - EndpointL3 endpointL3 = mock(EndpointL3.class); - - rootNode = mock(DataObjectModification.class); - rootIdentifier = IidFactory.l3EndpointsIidWildcard(); - DataTreeIdentifier rootPath = - new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, rootIdentifier); - - DataTreeModification change = mock(DataTreeModification.class); - - when(change.getRootNode()).thenReturn(rootNode); - when(change.getRootPath()).thenReturn(rootPath); - - changes = ImmutableSet.of(change); - - when(rootNode.getDataBefore()).thenReturn(endpointL3); - when(rootNode.getDataAfter()).thenReturn(endpointL3); - } - - @Test - public void testOnWrite() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); - - listener.onDataTreeChanged(changes); - } - - @Test(expected = UnsupportedOperationException.class) - public void testOnDelete() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); - - listener.onDataTreeChanged(changes); - } - - @Test - public void testOnSubtreeModified() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); - - listener.onDataTreeChanged(changes); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.iovisor.endpoint; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.util.IidFactory; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class EndpointListenerCovrgTest { + + private EndpointListener listener; + private DataObjectModification rootNode; + private Set> changes; + + private InstanceIdentifier rootIdentifier; + + @SuppressWarnings("unchecked") + @Before + public void init() { + DataBroker dataProvider = mock(DataBroker.class); + + EndpointManager endpointManager = mock(EndpointManager.class); + listener = spy(new EndpointListener(dataProvider, endpointManager)); + + EndpointL3 endpointL3 = mock(EndpointL3.class); + + rootNode = mock(DataObjectModification.class); + rootIdentifier = IidFactory.l3EndpointsIidWildcard(); + DataTreeIdentifier rootPath = + new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, rootIdentifier); + + DataTreeModification change = mock(DataTreeModification.class); + + when(change.getRootNode()).thenReturn(rootNode); + when(change.getRootPath()).thenReturn(rootPath); + + changes = ImmutableSet.of(change); + + when(rootNode.getDataBefore()).thenReturn(endpointL3); + when(rootNode.getDataAfter()).thenReturn(endpointL3); + } + + @Test + public void testOnWrite() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + + listener.onDataTreeChanged(changes); + } + + @Test(expected = UnsupportedOperationException.class) + public void testOnDelete() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); + + listener.onDataTreeChanged(changes); + } + + @Test + public void testOnSubtreeModified() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); + + listener.onDataTreeChanged(changes); + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/IovisorEndpointAugCovrgTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/IovisorEndpointAugCovrgTest.java index c44617d73..861c65cef 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/IovisorEndpointAugCovrgTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/IovisorEndpointAugCovrgTest.java @@ -1,69 +1,69 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.iovisor.endpoint; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry; -import org.opendaylight.groupbasedpolicy.renderer.iovisor.test.GbpIovisorDataBrokerTest; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.iovisor.rev151030.IovisorModuleAugmentationInput; - -public class IovisorEndpointAugCovrgTest extends GbpIovisorDataBrokerTest { - - private EpRendererAugmentationRegistry epRAR; - private IovisorEndpointAug aug; - - @Before - public void init() { - epRAR = mock(EpRendererAugmentationRegistry.class); - - aug = new IovisorEndpointAug(epRAR); - } - - @Test - public void testClose() throws Exception { - IovisorEndpointAug other = new IovisorEndpointAug(epRAR); - other.close(); - - verify(epRAR).unregister(any(IovisorEndpointAug.class)); - } - - @Test - public void testBuildEndpointAugmentation() { - assertNull(aug.buildEndpointAugmentation(null)); - } - - @Test - public void testBuildEndpointL3Augmentation() { - RegisterEndpointInput input = mock(RegisterEndpointInput.class); - IovisorModuleAugmentationInput iomAugInput = mock(IovisorModuleAugmentationInput.class); - when(input.getAugmentation(IovisorModuleAugmentationInput.class)).thenReturn(iomAugInput); - assertNotNull(aug.buildEndpointL3Augmentation(input)); - } - - @Test - public void testBuildEndpointL3Augmentation_Null() { - RegisterEndpointInput input = mock(RegisterEndpointInput.class); - when(input.getAugmentation(IovisorModuleAugmentationInput.class)).thenReturn(null); - assertNull(aug.buildEndpointL3Augmentation(input)); - } - - @Test - public void testBuildL3PrefixEndpointAugmentation() { - assertNull(aug.buildL3PrefixEndpointAugmentation(null)); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.iovisor.endpoint; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry; +import org.opendaylight.groupbasedpolicy.renderer.iovisor.test.GbpIovisorDataBrokerTest; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.iovisor.rev151030.IovisorModuleAugmentationInput; + +public class IovisorEndpointAugCovrgTest extends GbpIovisorDataBrokerTest { + + private EpRendererAugmentationRegistry epRAR; + private IovisorEndpointAug aug; + + @Before + public void init() { + epRAR = mock(EpRendererAugmentationRegistry.class); + + aug = new IovisorEndpointAug(epRAR); + } + + @Test + public void testClose() throws Exception { + IovisorEndpointAug other = new IovisorEndpointAug(epRAR); + other.close(); + + verify(epRAR).unregister(any(IovisorEndpointAug.class)); + } + + @Test + public void testBuildEndpointAugmentation() { + assertNull(aug.buildEndpointAugmentation(null)); + } + + @Test + public void testBuildEndpointL3Augmentation() { + RegisterEndpointInput input = mock(RegisterEndpointInput.class); + IovisorModuleAugmentationInput iomAugInput = mock(IovisorModuleAugmentationInput.class); + when(input.getAugmentation(IovisorModuleAugmentationInput.class)).thenReturn(iomAugInput); + assertNotNull(aug.buildEndpointL3Augmentation(input)); + } + + @Test + public void testBuildEndpointL3Augmentation_Null() { + RegisterEndpointInput input = mock(RegisterEndpointInput.class); + when(input.getAugmentation(IovisorModuleAugmentationInput.class)).thenReturn(null); + assertNull(aug.buildEndpointL3Augmentation(input)); + } + + @Test + public void testBuildL3PrefixEndpointAugmentation() { + assertNull(aug.buildL3PrefixEndpointAugmentation(null)); + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ActionDefinitionListenerTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ActionDefinitionListenerTest.java index daf720988..ff5b87c9a 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ActionDefinitionListenerTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ActionDefinitionListenerTest.java @@ -1,108 +1,108 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.Set; - -import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.CheckedFuture; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class ActionDefinitionListenerTest { - - private ActionDefinitionListener listener; - private DataObjectModification rootNode; - private Set> changes; - - private InstanceIdentifier rootIdentifier; - private DataBroker dataProvider; - - @SuppressWarnings("unchecked") - @Before - public void init() { - dataProvider = mock(DataBroker.class); - - listener = spy(new ActionDefinitionListener(dataProvider)); - - ActionDefinitionKey key = mock(ActionDefinitionKey.class); - rootNode = mock(DataObjectModification.class); - rootIdentifier = - InstanceIdentifier.builder(SubjectFeatureDefinitions.class).child(ActionDefinition.class, key).build(); - DataTreeIdentifier rootPath = - new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); - - DataTreeModification change = mock(DataTreeModification.class); - - when(change.getRootNode()).thenReturn(rootNode); - when(change.getRootPath()).thenReturn(rootPath); - - changes = ImmutableSet.of(change); - - ActionDefinition def = new ActionDefinitionBuilder().setId(AllowActionDefinition.ID).build(); - - when(rootNode.getDataBefore()).thenReturn(def); - when(rootNode.getDataAfter()).thenReturn(def); - } - - @Test - public void testOnWrite() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(listener).onSubtreeModified(rootNode, rootIdentifier); - } - - @Test - public void testOnDelete() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(listener).onDelete(rootNode, rootIdentifier); - } - - @Test - public void testOnSubtreeModified() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(listener).onSubtreeModified(rootNode, rootIdentifier); - } - - private WriteTransaction resetTransaction() { - WriteTransaction wt = mock(WriteTransaction.class); - CheckedFuture checkedFuture = mock(CheckedFuture.class); - when(wt.submit()).thenReturn(checkedFuture); - when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt); - return wt; - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.CheckedFuture; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class ActionDefinitionListenerTest { + + private ActionDefinitionListener listener; + private DataObjectModification rootNode; + private Set> changes; + + private InstanceIdentifier rootIdentifier; + private DataBroker dataProvider; + + @SuppressWarnings("unchecked") + @Before + public void init() { + dataProvider = mock(DataBroker.class); + + listener = spy(new ActionDefinitionListener(dataProvider)); + + ActionDefinitionKey key = mock(ActionDefinitionKey.class); + rootNode = mock(DataObjectModification.class); + rootIdentifier = + InstanceIdentifier.builder(SubjectFeatureDefinitions.class).child(ActionDefinition.class, key).build(); + DataTreeIdentifier rootPath = + new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); + + DataTreeModification change = mock(DataTreeModification.class); + + when(change.getRootNode()).thenReturn(rootNode); + when(change.getRootPath()).thenReturn(rootPath); + + changes = ImmutableSet.of(change); + + ActionDefinition def = new ActionDefinitionBuilder().setId(AllowActionDefinition.ID).build(); + + when(rootNode.getDataBefore()).thenReturn(def); + when(rootNode.getDataAfter()).thenReturn(def); + } + + @Test + public void testOnWrite() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(listener).onSubtreeModified(rootNode, rootIdentifier); + } + + @Test + public void testOnDelete() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(listener).onDelete(rootNode, rootIdentifier); + } + + @Test + public void testOnSubtreeModified() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(listener).onSubtreeModified(rootNode, rootIdentifier); + } + + private WriteTransaction resetTransaction() { + WriteTransaction wt = mock(WriteTransaction.class); + CheckedFuture checkedFuture = mock(CheckedFuture.class); + when(wt.submit()).thenReturn(checkedFuture); + when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt); + return wt; + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/AllowActionTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/AllowActionTest.java index 2ac13317e..2c67742eb 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/AllowActionTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/AllowActionTest.java @@ -1,52 +1,52 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.ValidationResult; -import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder; - -public class AllowActionTest { - - AllowAction action; - - @Before - public void init() { - action = new AllowAction(); - } - - @Test - public void testGetId() { - assertEquals(action.getId(), AllowActionDefinition.ID); - } - - @Test - public void testGetActionDef() { - assertEquals(action.getActionDef(), AllowActionDefinition.DEFINITION); - } - - @Test - public void testGetSupportedParameterValues() { - assertTrue(action.getSupportedParameterValues().isEmpty()); - } - - @Test - public void testValidate() { - ActionInstance actionInstance = new ActionInstanceBuilder().build(); - ValidationResult result = action.validate(actionInstance); - assertTrue(result.isValid()); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.ValidationResult; +import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder; + +public class AllowActionTest { + + AllowAction action; + + @Before + public void init() { + action = new AllowAction(); + } + + @Test + public void testGetId() { + assertEquals(action.getId(), AllowActionDefinition.ID); + } + + @Test + public void testGetActionDef() { + assertEquals(action.getActionDef(), AllowActionDefinition.DEFINITION); + } + + @Test + public void testGetSupportedParameterValues() { + assertTrue(action.getSupportedParameterValues().isEmpty()); + } + + @Test + public void testValidate() { + ActionInstance actionInstance = new ActionInstanceBuilder().build(); + ValidationResult result = action.validate(actionInstance); + assertTrue(result.isValid()); + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassificationResultTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassificationResultTest.java index 74646facb..6d21f18ff 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassificationResultTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassificationResultTest.java @@ -1,51 +1,51 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; - -public class ClassificationResultTest { - - private static final String ERROR_MESSAGE = "error message"; - private ClassificationResult resultOk; - private ClassificationResult resultError; - - @Before - public void init() { - List list = new ArrayList<>(); - list.add("string"); - resultOk = new ClassificationResult(list); - resultError = new ClassificationResult(ERROR_MESSAGE); - } - - @Test - public void testConstructor_Result() { - assertTrue(resultOk.isSuccessfull()); - } - - @Test - public void testConstructor_ErrorMsg() { - assertFalse(resultError.isSuccessfull()); - } - - @Test - public void testGetErrorMessage() { - assertEquals(resultOk.getErrorMessage(), ClassificationResult.DEFAULT_ERROR_MESSAGE); - assertEquals(resultError.getErrorMessage(), ERROR_MESSAGE); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class ClassificationResultTest { + + private static final String ERROR_MESSAGE = "error message"; + private ClassificationResult resultOk; + private ClassificationResult resultError; + + @Before + public void init() { + List list = new ArrayList<>(); + list.add("string"); + resultOk = new ClassificationResult(list); + resultError = new ClassificationResult(ERROR_MESSAGE); + } + + @Test + public void testConstructor_Result() { + assertTrue(resultOk.isSuccessfull()); + } + + @Test + public void testConstructor_ErrorMsg() { + assertFalse(resultError.isSuccessfull()); + } + + @Test + public void testGetErrorMessage() { + assertEquals(resultOk.getErrorMessage(), ClassificationResult.DEFAULT_ERROR_MESSAGE); + assertEquals(resultError.getErrorMessage(), ERROR_MESSAGE); + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassifierDefinitionListenerTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassifierDefinitionListenerTest.java index 3dd38c47b..b644ecc2a 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassifierDefinitionListenerTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassifierDefinitionListenerTest.java @@ -1,109 +1,109 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.Set; - -import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.CheckedFuture; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class ClassifierDefinitionListenerTest { - - private ClassifierDefinitionListener listener; - private DataObjectModification rootNode; - private Set> changes; - - private InstanceIdentifier rootIdentifier; - private DataBroker dataProvider; - - @SuppressWarnings("unchecked") - @Before - public void init() { - dataProvider = mock(DataBroker.class); - - listener = spy(new ClassifierDefinitionListener(dataProvider)); - - ClassifierDefinitionKey key = mock(ClassifierDefinitionKey.class); - rootNode = mock(DataObjectModification.class); - rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class) - .child(ClassifierDefinition.class, key) - .build(); - DataTreeIdentifier rootPath = - new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); - - DataTreeModification change = mock(DataTreeModification.class); - - when(change.getRootNode()).thenReturn(rootNode); - when(change.getRootPath()).thenReturn(rootPath); - - changes = ImmutableSet.of(change); - - ClassifierDefinition def = new ClassifierDefinitionBuilder().setId(EtherTypeClassifierDefinition.ID).build(); - - when(rootNode.getDataBefore()).thenReturn(def); - when(rootNode.getDataAfter()).thenReturn(def); - } - - @Test - public void testOnWrite() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(listener).onSubtreeModified(rootNode, rootIdentifier); - } - - @Test - public void testOnDelete() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(listener).onDelete(rootNode, rootIdentifier); - } - - @Test - public void testOnSubtreeModified() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(listener).onSubtreeModified(rootNode, rootIdentifier); - } - - private WriteTransaction resetTransaction() { - WriteTransaction wt = mock(WriteTransaction.class); - CheckedFuture checkedFuture = mock(CheckedFuture.class); - when(wt.submit()).thenReturn(checkedFuture); - when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt); - return wt; - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.CheckedFuture; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class ClassifierDefinitionListenerTest { + + private ClassifierDefinitionListener listener; + private DataObjectModification rootNode; + private Set> changes; + + private InstanceIdentifier rootIdentifier; + private DataBroker dataProvider; + + @SuppressWarnings("unchecked") + @Before + public void init() { + dataProvider = mock(DataBroker.class); + + listener = spy(new ClassifierDefinitionListener(dataProvider)); + + ClassifierDefinitionKey key = mock(ClassifierDefinitionKey.class); + rootNode = mock(DataObjectModification.class); + rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class) + .child(ClassifierDefinition.class, key) + .build(); + DataTreeIdentifier rootPath = + new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); + + DataTreeModification change = mock(DataTreeModification.class); + + when(change.getRootNode()).thenReturn(rootNode); + when(change.getRootPath()).thenReturn(rootPath); + + changes = ImmutableSet.of(change); + + ClassifierDefinition def = new ClassifierDefinitionBuilder().setId(EtherTypeClassifierDefinition.ID).build(); + + when(rootNode.getDataBefore()).thenReturn(def); + when(rootNode.getDataAfter()).thenReturn(def); + } + + @Test + public void testOnWrite() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(listener).onSubtreeModified(rootNode, rootIdentifier); + } + + @Test + public void testOnDelete() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(listener).onDelete(rootNode, rootIdentifier); + } + + @Test + public void testOnSubtreeModified() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(listener).onSubtreeModified(rootNode, rootIdentifier); + } + + private WriteTransaction resetTransaction() { + WriteTransaction wt = mock(WriteTransaction.class); + CheckedFuture checkedFuture = mock(CheckedFuture.class); + when(wt.submit()).thenReturn(checkedFuture); + when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt); + return wt; + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/EtherTypeClassifierTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/EtherTypeClassifierTest.java index 8720c2fbe..bafa3caa9 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/EtherTypeClassifierTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/EtherTypeClassifierTest.java @@ -1,87 +1,87 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; -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.parameters.type.ParameterType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; - -public class EtherTypeClassifierTest { - - @Test - public void testGetId() { - assertEquals(EtherTypeClassifierDefinition.ID, Classifier.ETHER_TYPE_CL.getId()); - } - - @Test - public void testGetClassifierDefinition() { - assertEquals(EtherTypeClassifierDefinition.DEFINITION, Classifier.ETHER_TYPE_CL.getClassifierDefinition()); - } - - @Test - public void testGetSupportedParameterValues() { - List valuesList = Classifier.ETHER_TYPE_CL.getSupportedParameterValues(); - assertEquals(1, valuesList.size()); - - SupportedParameterValues values = valuesList.get(0); - assertNotNull(values); - assertEquals(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, values.getParameterName().getValue()); - ParameterType pt = values.getParameterType(); - assertTrue(pt instanceof Int); - } - - @Test - public void testCheckPresenceOfRequiredParams() { - Map params = new HashMap<>(); - ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.ARP_VALUE).build(); - params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv); - - try { - Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params); - } catch (IllegalArgumentException e) { - fail("Required parameter missing"); - } - } - - @Test(expected = IllegalArgumentException.class) - public void testCheckPresenceOfRequiredParams_noParam() { - Map params = new HashMap<>(); - - Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params); - } - - @Test(expected = IllegalArgumentException.class) - public void testCheckPresenceOfRequiredParams_nullValue() { - Map params = new HashMap<>(); - ParameterValue pv = new ParameterValueBuilder().build(); - params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv); - - Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params); - } - - @Test - public void testGetParent() { - assertNull(Classifier.ETHER_TYPE_CL.getParent()); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +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.parameters.type.ParameterType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; + +public class EtherTypeClassifierTest { + + @Test + public void testGetId() { + assertEquals(EtherTypeClassifierDefinition.ID, Classifier.ETHER_TYPE_CL.getId()); + } + + @Test + public void testGetClassifierDefinition() { + assertEquals(EtherTypeClassifierDefinition.DEFINITION, Classifier.ETHER_TYPE_CL.getClassifierDefinition()); + } + + @Test + public void testGetSupportedParameterValues() { + List valuesList = Classifier.ETHER_TYPE_CL.getSupportedParameterValues(); + assertEquals(1, valuesList.size()); + + SupportedParameterValues values = valuesList.get(0); + assertNotNull(values); + assertEquals(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, values.getParameterName().getValue()); + ParameterType pt = values.getParameterType(); + assertTrue(pt instanceof Int); + } + + @Test + public void testCheckPresenceOfRequiredParams() { + Map params = new HashMap<>(); + ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.ARP_VALUE).build(); + params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv); + + try { + Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params); + } catch (IllegalArgumentException e) { + fail("Required parameter missing"); + } + } + + @Test(expected = IllegalArgumentException.class) + public void testCheckPresenceOfRequiredParams_noParam() { + Map params = new HashMap<>(); + + Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params); + } + + @Test(expected = IllegalArgumentException.class) + public void testCheckPresenceOfRequiredParams_nullValue() { + Map params = new HashMap<>(); + ParameterValue pv = new ParameterValueBuilder().build(); + params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv); + + Classifier.ETHER_TYPE_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testGetParent() { + assertNull(Classifier.ETHER_TYPE_CL.getParent()); + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/IpProtoClassifierTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/IpProtoClassifierTest.java index 57734e1fb..10befcf5c 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/IpProtoClassifierTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/IpProtoClassifierTest.java @@ -1,113 +1,113 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; -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.parameters.type.ParameterType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; - -public class IpProtoClassifierTest { - - @Test - public void testGetId() { - assertEquals(IpProtoClassifierDefinition.ID, Classifier.IP_PROTO_CL.getId()); - } - - @Test - public void testGetClassifierDefinition() { - assertEquals(IpProtoClassifierDefinition.DEFINITION, Classifier.IP_PROTO_CL.getClassifierDefinition()); - } - - @Test - public void testGetSupportedParameterValues() { - List valuesList = Classifier.IP_PROTO_CL.getSupportedParameterValues(); - assertEquals(1, valuesList.size()); - - SupportedParameterValues values = valuesList.get(0); - assertNotNull(values); - assertEquals(IpProtoClassifierDefinition.PROTO_PARAM, values.getParameterName().getValue()); - ParameterType pt = values.getParameterType(); - assertTrue(pt instanceof Int); - } - - @Test - public void testCheckPresenceOfRequiredParams() { - Map params = prepareParams(IpProtoClassifierDefinition.UDP_VALUE); - - try { - Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); - } catch (IllegalArgumentException e) { - fail("Required parameter missing"); - } - } - - @Test(expected = IllegalArgumentException.class) - public void testCheckPresenceOfRequiredParams_noParam() { - Map params = new HashMap<>(); - - Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); - } - - @Test(expected = IllegalArgumentException.class) - public void testCheckPresenceOfRequiredParams_nullValue() { - Map params = prepareParams_nullValue(); - - Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); - } - - @Test - public void testGetIpProtoValue() { - Long expected = IpProtoClassifierDefinition.UDP_VALUE; - - assertEquals(expected, IpProtoClassifier.getIpProtoValue(prepareParams(expected))); - } - - @Test - public void testGetIpProtoValue_badParams() { - Map params = prepareParams_nullValue(); - - assertNull(IpProtoClassifier.getIpProtoValue(params)); - assertNull(IpProtoClassifier.getIpProtoValue(new HashMap())); - assertNull(IpProtoClassifier.getIpProtoValue(null)); - } - - @Test - public void testGetParent() { - assertEquals(Classifier.IP_PROTO_CL.getParent(), Classifier.ETHER_TYPE_CL); - } - - private Map prepareParams(Long intValue) { - Map params = new HashMap<>(); - ParameterValue pv = new ParameterValueBuilder().setIntValue(intValue).build(); - params.put(IpProtoClassifierDefinition.PROTO_PARAM, pv); - return params; - } - - private Map prepareParams_nullValue() { - Map params = new HashMap<>(); - ParameterValue pv = new ParameterValueBuilder().build(); - params.put(IpProtoClassifierDefinition.PROTO_PARAM, pv); - return params; - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; +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.parameters.type.ParameterType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; + +public class IpProtoClassifierTest { + + @Test + public void testGetId() { + assertEquals(IpProtoClassifierDefinition.ID, Classifier.IP_PROTO_CL.getId()); + } + + @Test + public void testGetClassifierDefinition() { + assertEquals(IpProtoClassifierDefinition.DEFINITION, Classifier.IP_PROTO_CL.getClassifierDefinition()); + } + + @Test + public void testGetSupportedParameterValues() { + List valuesList = Classifier.IP_PROTO_CL.getSupportedParameterValues(); + assertEquals(1, valuesList.size()); + + SupportedParameterValues values = valuesList.get(0); + assertNotNull(values); + assertEquals(IpProtoClassifierDefinition.PROTO_PARAM, values.getParameterName().getValue()); + ParameterType pt = values.getParameterType(); + assertTrue(pt instanceof Int); + } + + @Test + public void testCheckPresenceOfRequiredParams() { + Map params = prepareParams(IpProtoClassifierDefinition.UDP_VALUE); + + try { + Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); + } catch (IllegalArgumentException e) { + fail("Required parameter missing"); + } + } + + @Test(expected = IllegalArgumentException.class) + public void testCheckPresenceOfRequiredParams_noParam() { + Map params = new HashMap<>(); + + Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); + } + + @Test(expected = IllegalArgumentException.class) + public void testCheckPresenceOfRequiredParams_nullValue() { + Map params = prepareParams_nullValue(); + + Classifier.IP_PROTO_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testGetIpProtoValue() { + Long expected = IpProtoClassifierDefinition.UDP_VALUE; + + assertEquals(expected, IpProtoClassifier.getIpProtoValue(prepareParams(expected))); + } + + @Test + public void testGetIpProtoValue_badParams() { + Map params = prepareParams_nullValue(); + + assertNull(IpProtoClassifier.getIpProtoValue(params)); + assertNull(IpProtoClassifier.getIpProtoValue(new HashMap())); + assertNull(IpProtoClassifier.getIpProtoValue(null)); + } + + @Test + public void testGetParent() { + assertEquals(Classifier.IP_PROTO_CL.getParent(), Classifier.ETHER_TYPE_CL); + } + + private Map prepareParams(Long intValue) { + Map params = new HashMap<>(); + ParameterValue pv = new ParameterValueBuilder().setIntValue(intValue).build(); + params.put(IpProtoClassifierDefinition.PROTO_PARAM, pv); + return params; + } + + private Map prepareParams_nullValue() { + Map params = new HashMap<>(); + ParameterValue pv = new ParameterValueBuilder().build(); + params.put(IpProtoClassifierDefinition.PROTO_PARAM, pv); + return params; + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/L4ClassifierTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/L4ClassifierTest.java index 14ddba629..d72cf4c68 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/L4ClassifierTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/L4ClassifierTest.java @@ -1,172 +1,172 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; -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.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.ParameterType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; - -public class L4ClassifierTest { - - private ParameterValue pvSrcPort80; - private ParameterValue pvDstPort80; - private ParameterValue pvDstPort_null; - private ParameterValue pvSrcRange81_82; - private ParameterValue pvDstRange81_82; - private ParameterValue pvDstRange82_81; - private ParameterValue pvDstRange_null; - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @Before - public void init() { - pvSrcPort80 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.SRC_PORT_PARAM)).setIntValue(80L).build(); - pvDstPort80 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).setIntValue(80L).build(); - pvDstPort_null = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).build(); - pvSrcRange81_82 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM)) - .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build()) - .build(); - pvDstRange81_82 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) - .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build()) - .build(); - pvDstRange82_81 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) - .setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build()) - .build(); - pvDstRange_null = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) - //.setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build()) - .build(); - } - - @Test - public void testGetId() { - assertEquals(L4ClassifierDefinition.ID, Classifier.L4_CL.getId()); - } - - @Test - public void testGetClassifierDefinition() { - assertEquals(L4ClassifierDefinition.DEFINITION, Classifier.L4_CL.getClassifierDefinition()); - } - - @Test - public void testGetSupportedParameterValues() { - List valuesList = Classifier.L4_CL.getSupportedParameterValues(); - assertEquals(4, valuesList.size()); - - SupportedParameterValues values = valuesList.get(0); - assertNotNull(values); - assertEquals(L4ClassifierDefinition.SRC_PORT_PARAM, values.getParameterName().getValue()); - ParameterType pt = values.getParameterType(); - assertTrue(pt instanceof Int); - } - - @Test - public void testCheckPresenceOfRequiredParams_Empty() throws Exception { - // TODO check: sending empty map is ok? - Classifier.L4_CL.checkPresenceOfRequiredParams(new HashMap()); - } - - @Test - public void testCheckPresenceOfRequiredParams_SinglePorts() throws Exception { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort80); - - Classifier.L4_CL.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_PortRanges() throws Exception { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82); - params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange81_82); - - Classifier.L4_CL.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_DstPortNull() throws IllegalArgumentException { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort_null); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED); - Classifier.L4_CL.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_DstRangeNull() throws IllegalArgumentException { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange_null); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED); - Classifier.L4_CL.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_ParamConflict() throws IllegalArgumentException { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(L4Classifier.EXC_MSG_MUT_EXCLUSIVE_PARAMS); - Classifier.L4_CL.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_RangeInverted() throws IllegalArgumentException { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange82_81); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(L4Classifier.EXC_MSG_RANGE_VALUE_MISMATCH); - Classifier.L4_CL.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_emptyParams() { - - Classifier.L4_CL.checkPresenceOfRequiredParams(new HashMap()); - } - - @Test - public void testGetParent() { - assertEquals(Classifier.L4_CL.getParent(), Classifier.IP_PROTO_CL); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; +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.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.ParameterType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; + +public class L4ClassifierTest { + + private ParameterValue pvSrcPort80; + private ParameterValue pvDstPort80; + private ParameterValue pvDstPort_null; + private ParameterValue pvSrcRange81_82; + private ParameterValue pvDstRange81_82; + private ParameterValue pvDstRange82_81; + private ParameterValue pvDstRange_null; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Before + public void init() { + pvSrcPort80 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.SRC_PORT_PARAM)).setIntValue(80L).build(); + pvDstPort80 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).setIntValue(80L).build(); + pvDstPort_null = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).build(); + pvSrcRange81_82 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM)) + .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build()) + .build(); + pvDstRange81_82 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) + .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build()) + .build(); + pvDstRange82_81 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) + .setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build()) + .build(); + pvDstRange_null = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) + //.setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build()) + .build(); + } + + @Test + public void testGetId() { + assertEquals(L4ClassifierDefinition.ID, Classifier.L4_CL.getId()); + } + + @Test + public void testGetClassifierDefinition() { + assertEquals(L4ClassifierDefinition.DEFINITION, Classifier.L4_CL.getClassifierDefinition()); + } + + @Test + public void testGetSupportedParameterValues() { + List valuesList = Classifier.L4_CL.getSupportedParameterValues(); + assertEquals(4, valuesList.size()); + + SupportedParameterValues values = valuesList.get(0); + assertNotNull(values); + assertEquals(L4ClassifierDefinition.SRC_PORT_PARAM, values.getParameterName().getValue()); + ParameterType pt = values.getParameterType(); + assertTrue(pt instanceof Int); + } + + @Test + public void testCheckPresenceOfRequiredParams_Empty() throws Exception { + // TODO check: sending empty map is ok? + Classifier.L4_CL.checkPresenceOfRequiredParams(new HashMap()); + } + + @Test + public void testCheckPresenceOfRequiredParams_SinglePorts() throws Exception { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort80); + + Classifier.L4_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_PortRanges() throws Exception { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82); + params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange81_82); + + Classifier.L4_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_DstPortNull() throws IllegalArgumentException { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort_null); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED); + Classifier.L4_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_DstRangeNull() throws IllegalArgumentException { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange_null); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED); + Classifier.L4_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_ParamConflict() throws IllegalArgumentException { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(L4Classifier.EXC_MSG_MUT_EXCLUSIVE_PARAMS); + Classifier.L4_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_RangeInverted() throws IllegalArgumentException { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange82_81); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(L4Classifier.EXC_MSG_RANGE_VALUE_MISMATCH); + Classifier.L4_CL.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_emptyParams() { + + Classifier.L4_CL.checkPresenceOfRequiredParams(new HashMap()); + } + + @Test + public void testGetParent() { + assertEquals(Classifier.L4_CL.getParent(), Classifier.IP_PROTO_CL); + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ParamDerivatorTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ParamDerivatorTest.java index 5884bb471..1ef61583b 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ParamDerivatorTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ParamDerivatorTest.java @@ -1,56 +1,56 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; -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; - -public class ParamDerivatorTest { - - private ParamDerivator derivator = ParamDerivator.ETHER_TYPE_DERIVATOR; - - @Test - public void testDeriveParameter_noDerivation() { - Map params = new HashMap<>(); - ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.IPv4_VALUE).build(); - params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv); - - List> result = derivator.deriveParameter(params); - - assertEquals(1, result.size()); - assertEquals(params, result.get(0)); - } - - @Test - public void testDeriveParameter_withDerivation() { - Map params = new HashMap<>(); - ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.IPv4_VALUE).build(); - params.put("dummy key", pv); - - List> derivedParams = derivator.deriveParameter(params); - - assertEquals(2, derivedParams.size()); - - Map ipv4Params = derivedParams.get(0); - Map ipv6Params = derivedParams.get(1); - - assertTrue(ipv4Params.containsKey(EtherTypeClassifierDefinition.ETHERTYPE_PARAM)); - assertTrue(ipv6Params.containsKey(EtherTypeClassifierDefinition.ETHERTYPE_PARAM)); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +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; + +public class ParamDerivatorTest { + + private ParamDerivator derivator = ParamDerivator.ETHER_TYPE_DERIVATOR; + + @Test + public void testDeriveParameter_noDerivation() { + Map params = new HashMap<>(); + ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.IPv4_VALUE).build(); + params.put(EtherTypeClassifierDefinition.ETHERTYPE_PARAM, pv); + + List> result = derivator.deriveParameter(params); + + assertEquals(1, result.size()); + assertEquals(params, result.get(0)); + } + + @Test + public void testDeriveParameter_withDerivation() { + Map params = new HashMap<>(); + ParameterValue pv = new ParameterValueBuilder().setIntValue(EtherTypeClassifierDefinition.IPv4_VALUE).build(); + params.put("dummy key", pv); + + List> derivedParams = derivator.deriveParameter(params); + + assertEquals(2, derivedParams.size()); + + Map ipv4Params = derivedParams.get(0); + Map ipv6Params = derivedParams.get(1); + + assertTrue(ipv4Params.containsKey(EtherTypeClassifierDefinition.ETHERTYPE_PARAM)); + assertTrue(ipv6Params.containsKey(EtherTypeClassifierDefinition.ETHERTYPE_PARAM)); + } + +} diff --git a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/SubjectFeaturesTest.java b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/SubjectFeaturesTest.java index 743ca9e8a..a3d0bab71 100755 --- a/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/SubjectFeaturesTest.java +++ b/renderers/iovisor/src/test/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/SubjectFeaturesTest.java @@ -1,41 +1,41 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; - -import static junit.framework.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.Assert; -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; - -public class SubjectFeaturesTest { - - @Test - public void testGetClassifier() { - assertEquals(Classifier.ETHER_TYPE_CL, SubjectFeatures.getClassifier(EtherTypeClassifierDefinition.ID)); - assertEquals(Classifier.IP_PROTO_CL, SubjectFeatures.getClassifier(IpProtoClassifierDefinition.ID)); - assertEquals(Classifier.L4_CL, SubjectFeatures.getClassifier(L4ClassifierDefinition.ID)); - } - - @Test - public void testGetActions() { - assertNotNull(SubjectFeatures.getActions()); - } - - @Test - public void testGetAction() { - Assert.assertEquals(AllowActionDefinition.DEFINITION, - SubjectFeatures.getAction(AllowActionDefinition.ID).getActionDef()); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.iovisor.sf; + +import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Assert; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; + +public class SubjectFeaturesTest { + + @Test + public void testGetClassifier() { + assertEquals(Classifier.ETHER_TYPE_CL, SubjectFeatures.getClassifier(EtherTypeClassifierDefinition.ID)); + assertEquals(Classifier.IP_PROTO_CL, SubjectFeatures.getClassifier(IpProtoClassifierDefinition.ID)); + assertEquals(Classifier.L4_CL, SubjectFeatures.getClassifier(L4ClassifierDefinition.ID)); + } + + @Test + public void testGetActions() { + assertNotNull(SubjectFeatures.getActions()); + } + + @Test + public void testGetAction() { + Assert.assertEquals(AllowActionDefinition.DEFINITION, + SubjectFeatures.getAction(AllowActionDefinition.ID).getActionDef()); + } + +} diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/mapper/policyenforcer/NetworkElements.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/mapper/policyenforcer/NetworkElements.java index 4cc50bb9f..c85e29e19 100644 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/mapper/policyenforcer/NetworkElements.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/mapper/policyenforcer/NetworkElements.java @@ -1,99 +1,99 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.policyenforcer; - -import org.opendaylight.groupbasedpolicy.dto.EgKey; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.OrdinalFactory; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.OrdinalFactory.EndpointFwdCtxOrdinals; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class NetworkElements { - - private static final Logger LOG = LoggerFactory.getLogger(NetworkElements.class); - private final Endpoint srcEp; - private final Endpoint dstEp; - private final EgKey srcEpg; - private final EgKey dstEpg; - private NodeId srcNodeId; - private NodeId dstNodeId; - private final NodeId localNodeId; - private EndpointFwdCtxOrdinals srcEpOrdinals; - private EndpointFwdCtxOrdinals dstEpOrdinals; - - public NetworkElements(Endpoint srcEp, Endpoint dstEp, EgKey srcEpg, EgKey dstEpg, NodeId nodeId, OfContext ctx) throws Exception { - this.srcEp = srcEp; - this.dstEp = dstEp; - this.srcEpg = srcEpg; - this.dstEpg = dstEpg; - this.localNodeId = nodeId; - this.srcEpOrdinals = OrdinalFactory.getEndpointFwdCtxOrdinals(ctx, srcEp); - if (this.srcEpOrdinals == null) { - LOG.debug("getEndpointFwdCtxOrdinals is null for EP {}", srcEp); - return; - } - this.dstEpOrdinals = OrdinalFactory.getEndpointFwdCtxOrdinals(ctx, dstEp); - if (this.dstEpOrdinals == null) { - LOG.debug("getEndpointFwdCtxOrdinals is null for EP {}", dstEp); - return; - } - if (dstEp.getAugmentation(OfOverlayContext.class) != null) { - this.dstNodeId = dstEp.getAugmentation(OfOverlayContext.class).getNodeId(); - } - if (srcEp.getAugmentation(OfOverlayContext.class) != null) { - this.srcNodeId = srcEp.getAugmentation(OfOverlayContext.class).getNodeId(); - } - } - - - public Endpoint getSrcEp() { - return srcEp; - } - - - public Endpoint getDstEp() { - return dstEp; - } - - public EgKey getSrcEpg() { - return srcEpg; - } - - public EgKey getDstEpg() { - return dstEpg; - } - - public NodeId getSrcNodeId() { - return srcNodeId; - } - - - public NodeId getDstNodeId() { - return dstNodeId; - } - - - public NodeId getLocalNodeId() { - return localNodeId; - } - - - public EndpointFwdCtxOrdinals getSrcEpOrdinals() { - return srcEpOrdinals; - } - - - public EndpointFwdCtxOrdinals getDstEpOrdinals() { - return dstEpOrdinals; - } - +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.policyenforcer; + +import org.opendaylight.groupbasedpolicy.dto.EgKey; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.OrdinalFactory; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.OrdinalFactory.EndpointFwdCtxOrdinals; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class NetworkElements { + + private static final Logger LOG = LoggerFactory.getLogger(NetworkElements.class); + private final Endpoint srcEp; + private final Endpoint dstEp; + private final EgKey srcEpg; + private final EgKey dstEpg; + private NodeId srcNodeId; + private NodeId dstNodeId; + private final NodeId localNodeId; + private EndpointFwdCtxOrdinals srcEpOrdinals; + private EndpointFwdCtxOrdinals dstEpOrdinals; + + public NetworkElements(Endpoint srcEp, Endpoint dstEp, EgKey srcEpg, EgKey dstEpg, NodeId nodeId, OfContext ctx) throws Exception { + this.srcEp = srcEp; + this.dstEp = dstEp; + this.srcEpg = srcEpg; + this.dstEpg = dstEpg; + this.localNodeId = nodeId; + this.srcEpOrdinals = OrdinalFactory.getEndpointFwdCtxOrdinals(ctx, srcEp); + if (this.srcEpOrdinals == null) { + LOG.debug("getEndpointFwdCtxOrdinals is null for EP {}", srcEp); + return; + } + this.dstEpOrdinals = OrdinalFactory.getEndpointFwdCtxOrdinals(ctx, dstEp); + if (this.dstEpOrdinals == null) { + LOG.debug("getEndpointFwdCtxOrdinals is null for EP {}", dstEp); + return; + } + if (dstEp.getAugmentation(OfOverlayContext.class) != null) { + this.dstNodeId = dstEp.getAugmentation(OfOverlayContext.class).getNodeId(); + } + if (srcEp.getAugmentation(OfOverlayContext.class) != null) { + this.srcNodeId = srcEp.getAugmentation(OfOverlayContext.class).getNodeId(); + } + } + + + public Endpoint getSrcEp() { + return srcEp; + } + + + public Endpoint getDstEp() { + return dstEp; + } + + public EgKey getSrcEpg() { + return srcEpg; + } + + public EgKey getDstEpg() { + return dstEpg; + } + + public NodeId getSrcNodeId() { + return srcNodeId; + } + + + public NodeId getDstNodeId() { + return dstNodeId; + } + + + public NodeId getLocalNodeId() { + return localNodeId; + } + + + public EndpointFwdCtxOrdinals getSrcEpOrdinals() { + return srcEpOrdinals; + } + + + public EndpointFwdCtxOrdinals getDstEpOrdinals() { + return dstEpOrdinals; + } + } \ No newline at end of file diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayAugTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayAugTest.java index ddd370007..b9f108a00 100644 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayAugTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayAugTest.java @@ -1,156 +1,156 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TransactionMockUtils; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder; -import org.opendaylight.yangtools.yang.binding.Augmentation; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class OfOverlayAugTest { - - private static final String PORT_NAME = "portName"; - private DataBroker dataProvider; - private EpRendererAugmentationRegistry epRendererAugmentationRegistry; - private OfOverlayAug ofOverlayAug; - - @Before - public void init() { - dataProvider = mock(DataBroker.class); - epRendererAugmentationRegistry = mock(EpRendererAugmentationRegistry.class); - ofOverlayAug = new OfOverlayAug(dataProvider, epRendererAugmentationRegistry); - } - - @Test - public void testConstructor() throws Exception { - OfOverlayAug other = new OfOverlayAug(dataProvider, epRendererAugmentationRegistry); - other.close(); - } - - @SuppressWarnings("unchecked") - @Test - public void testBuildEndpointAugmentation() throws ExecutionException, InterruptedException { - Nodes nodes = buildNodes(); - - ReadOnlyTransaction roTx = mock(ReadOnlyTransaction.class); - TransactionMockUtils.setupRoTx(roTx, LogicalDatastoreType.OPERATIONAL, - InstanceIdentifier.builder(Nodes.class).build(), true, nodes); - when(dataProvider.newReadOnlyTransaction()).thenReturn(roTx); - - OfOverlayContextInput contextInput = - new OfOverlayContextInputBuilder().setPortName(new Name(PORT_NAME)).build(); - - RegisterEndpointInput input = - new RegisterEndpointInputBuilder().addAugmentation(OfOverlayContextInput.class, contextInput).build(); - - Map.Entry>, Augmentation> entry = - ofOverlayAug.buildEndpointAugmentation(input); - - assertNotNull(entry); - assertNotNull(entry.getValue()); - } - - @Test - public void testBuildEndpointAugmentation_null() { - RegisterEndpointInput input = new RegisterEndpointInputBuilder().build(); - - Map.Entry>, Augmentation> entry = - ofOverlayAug.buildEndpointAugmentation(input); - - assertNull(entry); - } - - @SuppressWarnings("unchecked") - @Test - public void testBuildEndpointL3Augmentation() throws ExecutionException, InterruptedException { - Nodes nodes = buildNodes(); - - ReadOnlyTransaction roTx = mock(ReadOnlyTransaction.class); - TransactionMockUtils.setupRoTx(roTx, LogicalDatastoreType.OPERATIONAL, - InstanceIdentifier.builder(Nodes.class).build(), true, nodes); - when(dataProvider.newReadOnlyTransaction()).thenReturn(roTx); - - OfOverlayContextInput contextInput = - new OfOverlayContextInputBuilder().setPortName(new Name(PORT_NAME)).build(); - - RegisterEndpointInput input = - new RegisterEndpointInputBuilder().addAugmentation(OfOverlayContextInput.class, contextInput).build(); - - Map.Entry>, Augmentation> entry = - ofOverlayAug.buildEndpointL3Augmentation(input); - - assertNotNull(entry); - assertNotNull(entry.getValue()); - } - - @Test - public void testBuildEndpointL3Augmentation_null() { - RegisterEndpointInput input = new RegisterEndpointInputBuilder().build(); - - Map.Entry>, Augmentation> entry = - ofOverlayAug.buildEndpointL3Augmentation(input); - - assertNull(entry); - } - - @Test - public void testBuildL3PrefixEndpointAugmentation() { - RegisterL3PrefixEndpointInput input = new RegisterL3PrefixEndpointInputBuilder().build(); - Map.Entry>, Augmentation> entry = - ofOverlayAug.buildL3PrefixEndpointAugmentation(input); - - // always returns null - assertNull(entry); - } - - private Nodes buildNodes() { - FlowCapableNodeConnector fcnc = new FlowCapableNodeConnectorBuilder().setName(PORT_NAME).build(); - NodeConnector nc = new NodeConnectorBuilder().addAugmentation(FlowCapableNodeConnector.class, fcnc).build(); - List nodeConnectorList = new ArrayList<>(); - nodeConnectorList.add(nc); - Node node = new NodeBuilder().setNodeConnector(nodeConnectorList).build(); - List nodeList = new ArrayList<>(); - nodeList.add(node); - return new NodesBuilder().setNode(nodeList).build(); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TransactionMockUtils; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder; +import org.opendaylight.yangtools.yang.binding.Augmentation; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class OfOverlayAugTest { + + private static final String PORT_NAME = "portName"; + private DataBroker dataProvider; + private EpRendererAugmentationRegistry epRendererAugmentationRegistry; + private OfOverlayAug ofOverlayAug; + + @Before + public void init() { + dataProvider = mock(DataBroker.class); + epRendererAugmentationRegistry = mock(EpRendererAugmentationRegistry.class); + ofOverlayAug = new OfOverlayAug(dataProvider, epRendererAugmentationRegistry); + } + + @Test + public void testConstructor() throws Exception { + OfOverlayAug other = new OfOverlayAug(dataProvider, epRendererAugmentationRegistry); + other.close(); + } + + @SuppressWarnings("unchecked") + @Test + public void testBuildEndpointAugmentation() throws ExecutionException, InterruptedException { + Nodes nodes = buildNodes(); + + ReadOnlyTransaction roTx = mock(ReadOnlyTransaction.class); + TransactionMockUtils.setupRoTx(roTx, LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.builder(Nodes.class).build(), true, nodes); + when(dataProvider.newReadOnlyTransaction()).thenReturn(roTx); + + OfOverlayContextInput contextInput = + new OfOverlayContextInputBuilder().setPortName(new Name(PORT_NAME)).build(); + + RegisterEndpointInput input = + new RegisterEndpointInputBuilder().addAugmentation(OfOverlayContextInput.class, contextInput).build(); + + Map.Entry>, Augmentation> entry = + ofOverlayAug.buildEndpointAugmentation(input); + + assertNotNull(entry); + assertNotNull(entry.getValue()); + } + + @Test + public void testBuildEndpointAugmentation_null() { + RegisterEndpointInput input = new RegisterEndpointInputBuilder().build(); + + Map.Entry>, Augmentation> entry = + ofOverlayAug.buildEndpointAugmentation(input); + + assertNull(entry); + } + + @SuppressWarnings("unchecked") + @Test + public void testBuildEndpointL3Augmentation() throws ExecutionException, InterruptedException { + Nodes nodes = buildNodes(); + + ReadOnlyTransaction roTx = mock(ReadOnlyTransaction.class); + TransactionMockUtils.setupRoTx(roTx, LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.builder(Nodes.class).build(), true, nodes); + when(dataProvider.newReadOnlyTransaction()).thenReturn(roTx); + + OfOverlayContextInput contextInput = + new OfOverlayContextInputBuilder().setPortName(new Name(PORT_NAME)).build(); + + RegisterEndpointInput input = + new RegisterEndpointInputBuilder().addAugmentation(OfOverlayContextInput.class, contextInput).build(); + + Map.Entry>, Augmentation> entry = + ofOverlayAug.buildEndpointL3Augmentation(input); + + assertNotNull(entry); + assertNotNull(entry.getValue()); + } + + @Test + public void testBuildEndpointL3Augmentation_null() { + RegisterEndpointInput input = new RegisterEndpointInputBuilder().build(); + + Map.Entry>, Augmentation> entry = + ofOverlayAug.buildEndpointL3Augmentation(input); + + assertNull(entry); + } + + @Test + public void testBuildL3PrefixEndpointAugmentation() { + RegisterL3PrefixEndpointInput input = new RegisterL3PrefixEndpointInputBuilder().build(); + Map.Entry>, Augmentation> entry = + ofOverlayAug.buildL3PrefixEndpointAugmentation(input); + + // always returns null + assertNull(entry); + } + + private Nodes buildNodes() { + FlowCapableNodeConnector fcnc = new FlowCapableNodeConnectorBuilder().setName(PORT_NAME).build(); + NodeConnector nc = new NodeConnectorBuilder().addAugmentation(FlowCapableNodeConnector.class, fcnc).build(); + List nodeConnectorList = new ArrayList<>(); + nodeConnectorList.add(nc); + Node node = new NodeBuilder().setNodeConnector(nodeConnectorList).build(); + List nodeList = new ArrayList<>(); + nodeList.add(node); + return new NodesBuilder().setNode(nodeList).build(); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayL3NatAugTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayL3NatAugTest.java index b606add33..81db451c4 100644 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayL3NatAugTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayL3NatAugTest.java @@ -1,80 +1,80 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.mockito.Mockito.mock; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry; -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.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressInputBuilder; - -public class OfOverlayL3NatAugTest { - - private OfOverlayL3NatAug ofOverlayL3NatAug; - private EpRendererAugmentationRegistry epRendererAugmentationRegistry; - - @Before - public void init() { - epRendererAugmentationRegistry = mock(EpRendererAugmentationRegistry.class); - ofOverlayL3NatAug = new OfOverlayL3NatAug(epRendererAugmentationRegistry); - } - - @Test - public void testConstructor() throws Exception { - OfOverlayL3NatAug other = new OfOverlayL3NatAug(epRendererAugmentationRegistry); - other.close(); - } - - @Test - public void testBuildEndpointAugmentation() { - RegisterEndpointInput input = new RegisterEndpointInputBuilder().build(); - // no op - assertNull(ofOverlayL3NatAug.buildEndpointAugmentation(input)); - } - - @Test - public void testBuildEndpointL3Augmentation() { - NatAddressInput natAddressInput = new NatAddressInputBuilder().setNatAddress( - new IpAddress(new Ipv4Address("10.0.0.2"))).build(); - RegisterEndpointInput input = - new RegisterEndpointInputBuilder().addAugmentation(NatAddressInput.class, - natAddressInput).build(); - assertNotNull(ofOverlayL3NatAug.buildEndpointL3Augmentation(input)); - } - - @Test - public void testBuildEndpointL3Augmentation_noAug() { - RegisterEndpointInput input = new RegisterEndpointInputBuilder().build(); - assertNull(ofOverlayL3NatAug.buildEndpointL3Augmentation(input)); - } - - @Test - public void testBuildL3PrefixEndpointAugmentation() { - RegisterL3PrefixEndpointInput input = new RegisterL3PrefixEndpointInputBuilder().build(); - // no op - - assertNull(ofOverlayL3NatAug.buildL3PrefixEndpointAugmentation(input)); - } - - @Test - public void testClose() { - // fail("Not yet implemented"); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentationRegistry; +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.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressInputBuilder; + +public class OfOverlayL3NatAugTest { + + private OfOverlayL3NatAug ofOverlayL3NatAug; + private EpRendererAugmentationRegistry epRendererAugmentationRegistry; + + @Before + public void init() { + epRendererAugmentationRegistry = mock(EpRendererAugmentationRegistry.class); + ofOverlayL3NatAug = new OfOverlayL3NatAug(epRendererAugmentationRegistry); + } + + @Test + public void testConstructor() throws Exception { + OfOverlayL3NatAug other = new OfOverlayL3NatAug(epRendererAugmentationRegistry); + other.close(); + } + + @Test + public void testBuildEndpointAugmentation() { + RegisterEndpointInput input = new RegisterEndpointInputBuilder().build(); + // no op + assertNull(ofOverlayL3NatAug.buildEndpointAugmentation(input)); + } + + @Test + public void testBuildEndpointL3Augmentation() { + NatAddressInput natAddressInput = new NatAddressInputBuilder().setNatAddress( + new IpAddress(new Ipv4Address("10.0.0.2"))).build(); + RegisterEndpointInput input = + new RegisterEndpointInputBuilder().addAugmentation(NatAddressInput.class, + natAddressInput).build(); + assertNotNull(ofOverlayL3NatAug.buildEndpointL3Augmentation(input)); + } + + @Test + public void testBuildEndpointL3Augmentation_noAug() { + RegisterEndpointInput input = new RegisterEndpointInputBuilder().build(); + assertNull(ofOverlayL3NatAug.buildEndpointL3Augmentation(input)); + } + + @Test + public void testBuildL3PrefixEndpointAugmentation() { + RegisterL3PrefixEndpointInput input = new RegisterL3PrefixEndpointInputBuilder().build(); + // no op + + assertNull(ofOverlayL3NatAug.buildL3PrefixEndpointAugmentation(input)); + } + + @Test + public void testClose() { + // fail("Not yet implemented"); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ChainActionFlowsTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ChainActionFlowsTest.java index e88eea004..fccd023ae 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ChainActionFlowsTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/ChainActionFlowsTest.java @@ -1,293 +1,293 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow; - -import com.google.common.base.Preconditions; -import org.junit.Before; -import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.opendaylight.groupbasedpolicy.dto.EgKey; -import org.opendaylight.groupbasedpolicy.dto.PolicyInfo; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.MapperUtilsTest; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.policyenforcer.NetworkElements; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader.SfcNshHeaderBuilder; -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.Ipv4Prefix; -import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg4; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg5; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg6; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg7; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlanGpe; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.RegMatch; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.addNxNsiMatch; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.addNxNspMatch; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.addNxRegMatch; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.addNxTunIdMatch; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.applyActionIns; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.base; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.gotoTableIns; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.instructions; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadNshc1RegAction; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadNshc2RegAction; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadRegAction; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadTunGpeNpAction; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadTunIPv4Action; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadTunIdAction; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxOutputRegAction; -import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxPopNshAction; - -public class ChainActionFlowsTest extends MapperUtilsTest { - - @Captor - private final ArgumentCaptor nodeIdCaptor = ArgumentCaptor.forClass(NodeId.class); - private final ArgumentCaptor tableIdCaptor = ArgumentCaptor.forClass(Short.class); - private final ArgumentCaptor flowCaptor = ArgumentCaptor.forClass(Flow.class); - - @Before - public void init() { - ctx = mock(OfContext.class); - endpointManager = mock(EndpointManager.class); - switchManager = mock(SwitchManager.class); - policyManager = mock(PolicyManager.class); - policyInfo = mock(PolicyInfo.class); - ofWriter = mock(OfWriter.class); - } - - @Test - public void createChainTunnelFlows_directionIn() throws Exception { - // Tenant - TenantBuilder tenantBuilder = buildTenant(); - Tenant tenant = tenantBuilder.build(); - // Source Endpoint - EndpointBuilder sourceEndpointBuilder = buildEndpoint(IPV4_0, MAC_0, CONNECTOR_0); - Endpoint sourceEndpoint = sourceEndpointBuilder.build(); - EgKey sourceEgKey = new EgKey(tenant.getId(), ENDPOINT_GROUP_0); - // Destination Endpoint - EndpointBuilder destinationEndpointBuilder = buildEndpoint(IPV4_1, MAC_1, CONNECTOR_1); - Endpoint destinationEndpoint = destinationEndpointBuilder.build(); - EgKey destinationEgKey = new EgKey(tenant.getId(), ENDPOINT_GROUP_1); - // Nsh header - SfcNshHeaderBuilder nshHeaderBuilder = new SfcNshHeaderBuilder(); - nshHeaderBuilder.setNshMetaC1(Long.valueOf(0L)); - nshHeaderBuilder.setNshNsiFromChain((short) 250); - nshHeaderBuilder.setNshNspFromChain(27L); - SfcNshHeader nshHeader = nshHeaderBuilder.build(); - - when(ctx.getTenant(any(TenantId.class))).thenReturn(getTestIndexedTenant()); - when(ctx.getEndpointManager()).thenReturn(endpointManager); - when(ctx.getSwitchManager()).thenReturn(switchManager); - when(ctx.getPolicyManager()).thenReturn(policyManager); - when(ctx.getCurrentPolicy()).thenReturn(policyInfo); - when(switchManager.getTunnelPort(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(CONNECTOR_2); - when(switchManager.getTunnelIP(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(new IpAddress(IPV4_2)); - when(policyManager.getTABLEID_PORTSECURITY()).thenReturn((short) 4); - when(policyManager.getTABLEID_SOURCE_MAPPER()).thenReturn((short) 2); - - // Net elements - NetworkElements netElements = new NetworkElements(sourceEndpoint, destinationEndpoint, sourceEgKey, - destinationEgKey, NODE_ID, ctx); - assertNotNull(netElements); - - ChainActionFlows.createChainTunnelFlows(nshHeader, netElements, ofWriter, ctx, HasDirection.Direction.In); - - // Verify flows and capture arguments - verify(ofWriter, times(4)).writeFlow(nodeIdCaptor.capture(), tableIdCaptor.capture(), flowCaptor.capture()); - - // Verify nodeIds - for (NodeId capturedNodeId : nodeIdCaptor.getAllValues()) { - assertEquals(capturedNodeId, NODE_ID); - } - - // Verify tableIds - List tableIds = tableIdCaptor.getAllValues(); - Short expectedTableIds[] = {4, 2, 0, 2}; - assertArrayEquals(expectedTableIds, tableIds.toArray()); - - // Verify flows - List flows = flowCaptor.getAllValues(); - assertNotNull(flows); - assertTrue(flows.size() == 4); - assertEquals(flows.get(0), allowFromChainTestFlow()); - assertEquals(flows.get(1), createChainTunnelTestFlow(netElements).get(0)); // contains only 1 entry - assertEquals(flows.get(2), allowFromChainTunnelTestFlow()); - assertEquals(flows.get(3), createChainBroadcastTestFlow()); - } - - @Test - public void createChainTunnelFlows_directionOut() throws Exception { - // Tenant - TenantBuilder tenantBuilder = buildTenant(); - Tenant tenant = tenantBuilder.build(); - // Source Endpoint - EndpointBuilder sourceEndpointBuilder = buildEndpoint(IPV4_0, MAC_0, CONNECTOR_0); - Endpoint sourceEndpoint = sourceEndpointBuilder.build(); - EgKey sourceEgKey = new EgKey(tenant.getId(), ENDPOINT_GROUP_0); - // Destination Endpoint - EndpointBuilder destinationEndpointBuilder = buildEndpoint(IPV4_1, MAC_1, CONNECTOR_1); - Endpoint destinationEndpoint = destinationEndpointBuilder.build(); - EgKey destinationEgKey = new EgKey(tenant.getId(), ENDPOINT_GROUP_1); - // Nsh header - SfcNshHeaderBuilder nshHeaderBuilder = new SfcNshHeaderBuilder(); - nshHeaderBuilder.setNshMetaC1(Long.valueOf(0L)); - nshHeaderBuilder.setNshNsiToChain((short) 255); - nshHeaderBuilder.setNshNspToChain(27L); - nshHeaderBuilder.setNshTunIpDst(IPV4_2); - SfcNshHeader nshHeader = nshHeaderBuilder.build(); - - when(ctx.getTenant(any(TenantId.class))).thenReturn(getTestIndexedTenant()); - when(ctx.getEndpointManager()).thenReturn(endpointManager); - when(ctx.getSwitchManager()).thenReturn(switchManager); - when(ctx.getPolicyManager()).thenReturn(policyManager); - when(ctx.getCurrentPolicy()).thenReturn(policyInfo); - when(switchManager.getTunnelPort(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(CONNECTOR_2); - when(switchManager.getTunnelIP(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(new IpAddress(IPV4_2)); - when(policyManager.getTABLEID_EXTERNAL_MAPPER()).thenReturn((short) 6); - - - // Net elements - NetworkElements netElements = new NetworkElements(sourceEndpoint, destinationEndpoint, sourceEgKey, - destinationEgKey, NODE_ID, ctx); - assertNotNull(netElements); - - ChainActionFlows.createChainTunnelFlows(nshHeader, netElements, ofWriter, ctx, HasDirection.Direction.Out); - - // Verify flows and capture arguments - verify(ofWriter, times(1)).writeFlow(NODE_ID, (short) 6, createExternalTestFlow(netElements)); - } - - private Flow allowFromChainTestFlow() { - MatchBuilder matchBuilder = new MatchBuilder(); - FlowUtils.addNxNshc1RegMatch(matchBuilder, 0L); - FlowUtils.addNxNsiMatch(matchBuilder, (short) 250); - FlowUtils.addNxNspMatch(matchBuilder, 27L); - Match match = matchBuilder.setInPort(CONNECTOR_2).build(); - - FlowId flowId = FlowIdUtils.newFlowId((short) 4, "chainport", match); - FlowBuilder flowBuilder = new FlowBuilder().setTableId((short) 4).setBarrier(false).setHardTimeout(0) - .setIdleTimeout(0).setId(flowId).setPriority(1200).setMatch(match) - .setInstructions(FlowUtils.gotoTableInstructions((short) 2)); - return flowBuilder.build(); - } - - private List createChainTunnelTestFlow(NetworkElements networkElements) { - Preconditions.checkNotNull(networkElements); - List flows = new ArrayList<>(); - Action segReg = nxLoadRegAction(NxmNxReg0.class, BigInteger.valueOf(1L)); - Action scgReg = nxLoadRegAction(NxmNxReg1.class, BigInteger.valueOf(0xffffff)); - Action bdReg = nxLoadRegAction(NxmNxReg4.class, BigInteger.valueOf(3L)); - Action fdReg = nxLoadRegAction(NxmNxReg5.class, BigInteger.valueOf(4L)); - Action vrfReg = nxLoadRegAction(NxmNxReg6.class, BigInteger.valueOf(5L)); - for (L3Address address : networkElements.getDstEp().getL3Address()) { - Layer3Match l3Match = new Ipv4MatchBuilder().setIpv4Source(new Ipv4Prefix(address.getIpAddress() - .getIpv4Address().getValue() + IP_PREFIX_32)).build(); - MatchBuilder mb = new MatchBuilder().setInPort(CONNECTOR_2).setLayer3Match(l3Match) - .setEthernetMatch(FlowUtils.ethernetMatch(null, null, FlowUtils.IPv4)); - addNxTunIdMatch(mb, networkElements.getSrcEpOrdinals().getTunnelId()); - addNxNspMatch(mb, 27L); - addNxNsiMatch(mb, (short) 250); - Match match = mb.build(); - FlowId flowId = FlowIdUtils.newFlowId((short) 2, "chaintunnel", match); - FlowBuilder flowBuilder = base((short) 2).setId(flowId).setPriority(150).setMatch(match).setInstructions( - instructions(applyActionIns(segReg, scgReg, bdReg, fdReg, vrfReg), - gotoTableIns(ctx.getPolicyManager().getTABLEID_DESTINATION_MAPPER()))); - flows.add(flowBuilder.build()); - } - assertTrue(flows.size() == 1); - return flows; - } - - private Flow allowFromChainTunnelTestFlow() { - MatchBuilder matchBuilder = new MatchBuilder().setInPort(CONNECTOR_2); - addNxRegMatch(matchBuilder, RegMatch.of(NxmNxReg1.class, 0xffffffL)); - Match match = matchBuilder.build(); - FlowId flowId = FlowIdUtils.newFlowId((short) 0, "chainport", match); - FlowBuilder flowBuilder = base((short) 0).setId(flowId).setMatch(match) - .setPriority(65000).setInstructions(instructions(applyActionIns(nxPopNshAction(), nxOutputRegAction(NxmNxReg7.class)))); - return flowBuilder.build(); - } - - private Flow createChainBroadcastTestFlow() { - MatchBuilder matchBuilder = new MatchBuilder().setInPort(CONNECTOR_2); - addNxNsiMatch(matchBuilder, (short) 250); - addNxNspMatch(matchBuilder, 27L); - addNxTunIdMatch(matchBuilder, 4); - Match match = matchBuilder.build(); - FlowId flowId = FlowIdUtils.newFlowId((short) 2, "chainbroadcast", match); - FlowBuilder flowBuilder = base((short) 2).setId(flowId).setPriority(150).setMatch(match) - .setInstructions(instructions(applyActionIns(nxLoadRegAction(NxmNxReg5.class, BigInteger.valueOf(4))), - gotoTableIns(ctx.getPolicyManager().getTABLEID_DESTINATION_MAPPER()))); - return flowBuilder.build(); - } - - private Flow createExternalTestFlow(NetworkElements networkElements) { - int matchTunnelId = networkElements.getSrcEpOrdinals().getTunnelId(); - long setTunnelId = networkElements.getDstEpOrdinals().getTunnelId(); - final short TUN_GPE_NP_NSH = 0x4; - - Action loadC1 = nxLoadNshc1RegAction(Long.valueOf(0)); - Action loadC2 = nxLoadNshc2RegAction(setTunnelId); - Action loadChainTunVnId = nxLoadTunIdAction(BigInteger.valueOf(setTunnelId), false); - Action loadChainTunDest = nxLoadTunIPv4Action(IPV4_2.getValue(), false); - Action loadTunGpeNp = nxLoadTunGpeNpAction(BigInteger.valueOf(TUN_GPE_NP_NSH), false); - Action outputAction = FlowUtils.createActionResubmit(null, (short) 0); - - MatchBuilder matchBuilder = new MatchBuilder(); - addNxRegMatch(matchBuilder, RegMatch.of(NxmNxReg6.class, 5L)); - addNxTunIdMatch(matchBuilder, matchTunnelId); - addNxNspMatch(matchBuilder, 27L); - addNxNsiMatch(matchBuilder, (short) 255); - - - Match match = matchBuilder.build(); - FlowId flowId = FlowIdUtils.newFlowId(((short) 6), "chainexternal", match); - FlowBuilder flowBuilder = base((short) 6).setId(flowId).setPriority(1000).setMatch(match) - .setInstructions(instructions(applyActionIns(loadC1, loadC2, loadChainTunDest, loadChainTunVnId, loadTunGpeNp, - outputAction))); - return flowBuilder.build(); - } -} +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow; + +import com.google.common.base.Preconditions; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.opendaylight.groupbasedpolicy.dto.EgKey; +import org.opendaylight.groupbasedpolicy.dto.PolicyInfo; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.MapperUtilsTest; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper.policyenforcer.NetworkElements; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader.SfcNshHeaderBuilder; +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.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg4; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg5; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg7; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlanGpe; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.RegMatch; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.addNxNsiMatch; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.addNxNspMatch; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.addNxRegMatch; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.addNxTunIdMatch; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.applyActionIns; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.base; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.gotoTableIns; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.instructions; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadNshc1RegAction; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadNshc2RegAction; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadRegAction; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadTunGpeNpAction; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadTunIPv4Action; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxLoadTunIdAction; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxOutputRegAction; +import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxPopNshAction; + +public class ChainActionFlowsTest extends MapperUtilsTest { + + @Captor + private final ArgumentCaptor nodeIdCaptor = ArgumentCaptor.forClass(NodeId.class); + private final ArgumentCaptor tableIdCaptor = ArgumentCaptor.forClass(Short.class); + private final ArgumentCaptor flowCaptor = ArgumentCaptor.forClass(Flow.class); + + @Before + public void init() { + ctx = mock(OfContext.class); + endpointManager = mock(EndpointManager.class); + switchManager = mock(SwitchManager.class); + policyManager = mock(PolicyManager.class); + policyInfo = mock(PolicyInfo.class); + ofWriter = mock(OfWriter.class); + } + + @Test + public void createChainTunnelFlows_directionIn() throws Exception { + // Tenant + TenantBuilder tenantBuilder = buildTenant(); + Tenant tenant = tenantBuilder.build(); + // Source Endpoint + EndpointBuilder sourceEndpointBuilder = buildEndpoint(IPV4_0, MAC_0, CONNECTOR_0); + Endpoint sourceEndpoint = sourceEndpointBuilder.build(); + EgKey sourceEgKey = new EgKey(tenant.getId(), ENDPOINT_GROUP_0); + // Destination Endpoint + EndpointBuilder destinationEndpointBuilder = buildEndpoint(IPV4_1, MAC_1, CONNECTOR_1); + Endpoint destinationEndpoint = destinationEndpointBuilder.build(); + EgKey destinationEgKey = new EgKey(tenant.getId(), ENDPOINT_GROUP_1); + // Nsh header + SfcNshHeaderBuilder nshHeaderBuilder = new SfcNshHeaderBuilder(); + nshHeaderBuilder.setNshMetaC1(Long.valueOf(0L)); + nshHeaderBuilder.setNshNsiFromChain((short) 250); + nshHeaderBuilder.setNshNspFromChain(27L); + SfcNshHeader nshHeader = nshHeaderBuilder.build(); + + when(ctx.getTenant(any(TenantId.class))).thenReturn(getTestIndexedTenant()); + when(ctx.getEndpointManager()).thenReturn(endpointManager); + when(ctx.getSwitchManager()).thenReturn(switchManager); + when(ctx.getPolicyManager()).thenReturn(policyManager); + when(ctx.getCurrentPolicy()).thenReturn(policyInfo); + when(switchManager.getTunnelPort(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(CONNECTOR_2); + when(switchManager.getTunnelIP(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(new IpAddress(IPV4_2)); + when(policyManager.getTABLEID_PORTSECURITY()).thenReturn((short) 4); + when(policyManager.getTABLEID_SOURCE_MAPPER()).thenReturn((short) 2); + + // Net elements + NetworkElements netElements = new NetworkElements(sourceEndpoint, destinationEndpoint, sourceEgKey, + destinationEgKey, NODE_ID, ctx); + assertNotNull(netElements); + + ChainActionFlows.createChainTunnelFlows(nshHeader, netElements, ofWriter, ctx, HasDirection.Direction.In); + + // Verify flows and capture arguments + verify(ofWriter, times(4)).writeFlow(nodeIdCaptor.capture(), tableIdCaptor.capture(), flowCaptor.capture()); + + // Verify nodeIds + for (NodeId capturedNodeId : nodeIdCaptor.getAllValues()) { + assertEquals(capturedNodeId, NODE_ID); + } + + // Verify tableIds + List tableIds = tableIdCaptor.getAllValues(); + Short expectedTableIds[] = {4, 2, 0, 2}; + assertArrayEquals(expectedTableIds, tableIds.toArray()); + + // Verify flows + List flows = flowCaptor.getAllValues(); + assertNotNull(flows); + assertTrue(flows.size() == 4); + assertEquals(flows.get(0), allowFromChainTestFlow()); + assertEquals(flows.get(1), createChainTunnelTestFlow(netElements).get(0)); // contains only 1 entry + assertEquals(flows.get(2), allowFromChainTunnelTestFlow()); + assertEquals(flows.get(3), createChainBroadcastTestFlow()); + } + + @Test + public void createChainTunnelFlows_directionOut() throws Exception { + // Tenant + TenantBuilder tenantBuilder = buildTenant(); + Tenant tenant = tenantBuilder.build(); + // Source Endpoint + EndpointBuilder sourceEndpointBuilder = buildEndpoint(IPV4_0, MAC_0, CONNECTOR_0); + Endpoint sourceEndpoint = sourceEndpointBuilder.build(); + EgKey sourceEgKey = new EgKey(tenant.getId(), ENDPOINT_GROUP_0); + // Destination Endpoint + EndpointBuilder destinationEndpointBuilder = buildEndpoint(IPV4_1, MAC_1, CONNECTOR_1); + Endpoint destinationEndpoint = destinationEndpointBuilder.build(); + EgKey destinationEgKey = new EgKey(tenant.getId(), ENDPOINT_GROUP_1); + // Nsh header + SfcNshHeaderBuilder nshHeaderBuilder = new SfcNshHeaderBuilder(); + nshHeaderBuilder.setNshMetaC1(Long.valueOf(0L)); + nshHeaderBuilder.setNshNsiToChain((short) 255); + nshHeaderBuilder.setNshNspToChain(27L); + nshHeaderBuilder.setNshTunIpDst(IPV4_2); + SfcNshHeader nshHeader = nshHeaderBuilder.build(); + + when(ctx.getTenant(any(TenantId.class))).thenReturn(getTestIndexedTenant()); + when(ctx.getEndpointManager()).thenReturn(endpointManager); + when(ctx.getSwitchManager()).thenReturn(switchManager); + when(ctx.getPolicyManager()).thenReturn(policyManager); + when(ctx.getCurrentPolicy()).thenReturn(policyInfo); + when(switchManager.getTunnelPort(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(CONNECTOR_2); + when(switchManager.getTunnelIP(NODE_ID, TunnelTypeVxlanGpe.class)).thenReturn(new IpAddress(IPV4_2)); + when(policyManager.getTABLEID_EXTERNAL_MAPPER()).thenReturn((short) 6); + + + // Net elements + NetworkElements netElements = new NetworkElements(sourceEndpoint, destinationEndpoint, sourceEgKey, + destinationEgKey, NODE_ID, ctx); + assertNotNull(netElements); + + ChainActionFlows.createChainTunnelFlows(nshHeader, netElements, ofWriter, ctx, HasDirection.Direction.Out); + + // Verify flows and capture arguments + verify(ofWriter, times(1)).writeFlow(NODE_ID, (short) 6, createExternalTestFlow(netElements)); + } + + private Flow allowFromChainTestFlow() { + MatchBuilder matchBuilder = new MatchBuilder(); + FlowUtils.addNxNshc1RegMatch(matchBuilder, 0L); + FlowUtils.addNxNsiMatch(matchBuilder, (short) 250); + FlowUtils.addNxNspMatch(matchBuilder, 27L); + Match match = matchBuilder.setInPort(CONNECTOR_2).build(); + + FlowId flowId = FlowIdUtils.newFlowId((short) 4, "chainport", match); + FlowBuilder flowBuilder = new FlowBuilder().setTableId((short) 4).setBarrier(false).setHardTimeout(0) + .setIdleTimeout(0).setId(flowId).setPriority(1200).setMatch(match) + .setInstructions(FlowUtils.gotoTableInstructions((short) 2)); + return flowBuilder.build(); + } + + private List createChainTunnelTestFlow(NetworkElements networkElements) { + Preconditions.checkNotNull(networkElements); + List flows = new ArrayList<>(); + Action segReg = nxLoadRegAction(NxmNxReg0.class, BigInteger.valueOf(1L)); + Action scgReg = nxLoadRegAction(NxmNxReg1.class, BigInteger.valueOf(0xffffff)); + Action bdReg = nxLoadRegAction(NxmNxReg4.class, BigInteger.valueOf(3L)); + Action fdReg = nxLoadRegAction(NxmNxReg5.class, BigInteger.valueOf(4L)); + Action vrfReg = nxLoadRegAction(NxmNxReg6.class, BigInteger.valueOf(5L)); + for (L3Address address : networkElements.getDstEp().getL3Address()) { + Layer3Match l3Match = new Ipv4MatchBuilder().setIpv4Source(new Ipv4Prefix(address.getIpAddress() + .getIpv4Address().getValue() + IP_PREFIX_32)).build(); + MatchBuilder mb = new MatchBuilder().setInPort(CONNECTOR_2).setLayer3Match(l3Match) + .setEthernetMatch(FlowUtils.ethernetMatch(null, null, FlowUtils.IPv4)); + addNxTunIdMatch(mb, networkElements.getSrcEpOrdinals().getTunnelId()); + addNxNspMatch(mb, 27L); + addNxNsiMatch(mb, (short) 250); + Match match = mb.build(); + FlowId flowId = FlowIdUtils.newFlowId((short) 2, "chaintunnel", match); + FlowBuilder flowBuilder = base((short) 2).setId(flowId).setPriority(150).setMatch(match).setInstructions( + instructions(applyActionIns(segReg, scgReg, bdReg, fdReg, vrfReg), + gotoTableIns(ctx.getPolicyManager().getTABLEID_DESTINATION_MAPPER()))); + flows.add(flowBuilder.build()); + } + assertTrue(flows.size() == 1); + return flows; + } + + private Flow allowFromChainTunnelTestFlow() { + MatchBuilder matchBuilder = new MatchBuilder().setInPort(CONNECTOR_2); + addNxRegMatch(matchBuilder, RegMatch.of(NxmNxReg1.class, 0xffffffL)); + Match match = matchBuilder.build(); + FlowId flowId = FlowIdUtils.newFlowId((short) 0, "chainport", match); + FlowBuilder flowBuilder = base((short) 0).setId(flowId).setMatch(match) + .setPriority(65000).setInstructions(instructions(applyActionIns(nxPopNshAction(), nxOutputRegAction(NxmNxReg7.class)))); + return flowBuilder.build(); + } + + private Flow createChainBroadcastTestFlow() { + MatchBuilder matchBuilder = new MatchBuilder().setInPort(CONNECTOR_2); + addNxNsiMatch(matchBuilder, (short) 250); + addNxNspMatch(matchBuilder, 27L); + addNxTunIdMatch(matchBuilder, 4); + Match match = matchBuilder.build(); + FlowId flowId = FlowIdUtils.newFlowId((short) 2, "chainbroadcast", match); + FlowBuilder flowBuilder = base((short) 2).setId(flowId).setPriority(150).setMatch(match) + .setInstructions(instructions(applyActionIns(nxLoadRegAction(NxmNxReg5.class, BigInteger.valueOf(4))), + gotoTableIns(ctx.getPolicyManager().getTABLEID_DESTINATION_MAPPER()))); + return flowBuilder.build(); + } + + private Flow createExternalTestFlow(NetworkElements networkElements) { + int matchTunnelId = networkElements.getSrcEpOrdinals().getTunnelId(); + long setTunnelId = networkElements.getDstEpOrdinals().getTunnelId(); + final short TUN_GPE_NP_NSH = 0x4; + + Action loadC1 = nxLoadNshc1RegAction(Long.valueOf(0)); + Action loadC2 = nxLoadNshc2RegAction(setTunnelId); + Action loadChainTunVnId = nxLoadTunIdAction(BigInteger.valueOf(setTunnelId), false); + Action loadChainTunDest = nxLoadTunIPv4Action(IPV4_2.getValue(), false); + Action loadTunGpeNp = nxLoadTunGpeNpAction(BigInteger.valueOf(TUN_GPE_NP_NSH), false); + Action outputAction = FlowUtils.createActionResubmit(null, (short) 0); + + MatchBuilder matchBuilder = new MatchBuilder(); + addNxRegMatch(matchBuilder, RegMatch.of(NxmNxReg6.class, 5L)); + addNxTunIdMatch(matchBuilder, matchTunnelId); + addNxNspMatch(matchBuilder, 27L); + addNxNsiMatch(matchBuilder, (short) 255); + + + Match match = matchBuilder.build(); + FlowId flowId = FlowIdUtils.newFlowId(((short) 6), "chainexternal", match); + FlowBuilder flowBuilder = base((short) 6).setId(flowId).setPriority(1000).setMatch(match) + .setInstructions(instructions(applyActionIns(loadC1, loadC2, loadChainTunDest, loadChainTunVnId, loadTunGpeNp, + outputAction))); + return flowBuilder.build(); + } +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java index fd9ee41c3..806c4e855 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/FlowTableTest.java @@ -1,42 +1,42 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow; - -import java.util.Map; - -import org.junit.Ignore; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class FlowTableTest extends OfTableTest { - protected FlowTable table; - InstanceIdentifier tiid; - - protected void setup() throws Exception { - tiid = FlowUtils.createTablePath(nodeId, - table.getTableId()); - } - - @Ignore - protected OfWriter dosync(Map flows) throws Exception { - OfWriter ofWriter = new OfWriter(); - if (flows != null) { - for (String key : flows.keySet()) { - Flow flow = flows.get(key); - if (flow != null) { - ofWriter.writeFlow(nodeId, flow.getTableId(), flow); - } - } - } - //table.sync(NODE_ID, ofWriter); - return ofWriter; - } -} +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow; + +import java.util.Map; + +import org.junit.Ignore; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class FlowTableTest extends OfTableTest { + protected FlowTable table; + InstanceIdentifier
tiid; + + protected void setup() throws Exception { + tiid = FlowUtils.createTablePath(nodeId, + table.getTableId()); + } + + @Ignore + protected OfWriter dosync(Map flows) throws Exception { + OfWriter ofWriter = new OfWriter(); + if (flows != null) { + for (String key : flows.keySet()) { + Flow flow = flows.get(key); + if (flow != null) { + ofWriter.writeFlow(nodeId, flow.getTableId(), flow); + } + } + } + //table.sync(NODE_ID, ofWriter); + return ofWriter; + } +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java index dd64248a2..38c3be56e 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/OfTableTest.java @@ -1,286 +1,286 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockOfContext; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockPolicyManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.MockEndpointManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.MockSwitchManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier; -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.IpPrefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; - -import com.google.common.collect.ImmutableList; - -public class OfTableTest { - protected MockOfContext ctx; - - protected MockEndpointManager endpointManager; - protected MockPolicyManager policyManager; - protected MockSwitchManager switchManager; - protected NodeId nodeId = new NodeId("openflow:1"); - protected NodeId remoteNodeId = new NodeId("openflow:2"); - protected NodeConnectorId nodeConnectorId = - new NodeConnectorId(nodeId.getValue() + ":4"); - - protected NodeConnectorId tunnelId = - new NodeConnectorId(nodeId.getValue() + ":42"); - - protected L3ContextId l3c = new L3ContextId("2cf51ee4-e996-467e-a277-2d380334a91d"); - protected L2BridgeDomainId bd = new L2BridgeDomainId("c95182ba-7807-43f8-98f7-6c7c720b7639"); - protected L2FloodDomainId fd = new L2FloodDomainId("98e1439e-52d2-46f8-bd69-5136e6088771"); - protected L2FloodDomainId ext_fd = new L2FloodDomainId("d8024f7a-b83e-11e5-9912-ba0be0483c18"); - protected SubnetId sub = new SubnetId("4fcf8dfc-53b5-4aef-84d3-6b5586992fcb"); - protected SubnetId sub2 = new SubnetId("c285a59f-fcb8-42e6-bf29-87ea522fd626"); - protected SubnetId sub3 = new SubnetId("a0380d52-2a25-48ef-882c-a4d4cd9e00ec"); - protected SubnetId ext_sub = new SubnetId("8da17ad9-3261-4dc9-bcff-928a2f73cce7"); - protected TenantId tid = new TenantId("1118c691-8520-47ad-80b8-4cf5e3fe3302"); - protected EndpointGroupId eg = new EndpointGroupId("36dec84a-08c7-497b-80b6-a0035af72a12"); - protected EndpointGroupId eg2 = new EndpointGroupId("632e5e11-7988-4eb5-8fe6-6c182d890276"); - protected ContractId cid = new ContractId("a5874893-bcd5-46de-96af-3c8d99bedf9f"); - - protected void initCtx() { - endpointManager = new MockEndpointManager(); - policyManager = new MockPolicyManager(endpointManager); - switchManager = new MockSwitchManager(); - ctx = new MockOfContext(null, - policyManager, - switchManager, - endpointManager, - null); - } - - protected TenantBuilder baseTenant() { - return new TenantBuilder().setId(tid) - .setPolicy(new PolicyBuilder() - .setEndpointGroup(ImmutableList.of( - new EndpointGroupBuilder().setId(eg) - .setNetworkDomain(sub) - .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder() - .setName(new SelectorName("cns1")).setContract(ImmutableList.of(cid)).build())) - .build(), - new EndpointGroupBuilder().setId(eg2) - .setNetworkDomain(sub2) - .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder() - .setName(new SelectorName("pns1")).setContract(ImmutableList.of(cid)).build())) - .build())) - .setSubjectFeatureInstances( - new SubjectFeatureInstancesBuilder() - .setClassifierInstance( - ImmutableList - .of(new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80")) - .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId()) - .setParameterValue(ImmutableList.of( - new ParameterValueBuilder().setName(new ParameterName("destport")) - .setIntValue(Long.valueOf(80)) - .build(), - new ParameterValueBuilder().setName(new ParameterName("proto")) - .setIntValue(Long.valueOf(6)) - .build())) - .build(), new ClassifierInstanceBuilder() - .setName(new ClassifierName("tcp_src_80")) - .setClassifierDefinitionId(Classifier.L4_CL.getId()) - .setParameterValue(ImmutableList.of( - new ParameterValueBuilder() - .setName(new ParameterName("sourceport")) - .setIntValue(Long.valueOf(80)) - .build(), - new ParameterValueBuilder().setName(new ParameterName("proto")) - .setIntValue(Long.valueOf(6)) - .build())) - .build(), - new ClassifierInstanceBuilder() - .setName(new ClassifierName("ether_type")) - .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId()) - .setParameterValue(ImmutableList.of(new ParameterValueBuilder() - .setName(new ParameterName("ethertype")) - .setIntValue(Long.valueOf(FlowUtils.IPv4)) - .build())) - .build())) - .setActionInstance( - ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow")) - .setActionDefinitionId(new AllowAction().getId()) - .build())) - .build()) - .build()) - .setForwardingContext( - new ForwardingContextBuilder() - .setL3Context(ImmutableList.of(new L3ContextBuilder().setId(l3c).build())) - .setL2BridgeDomain( - ImmutableList.of(new L2BridgeDomainBuilder().setId(bd).setParent(l3c).build())) - .setL2FloodDomain(ImmutableList.of( - new L2FloodDomainBuilder() - .setId(fd) - .setParent(bd) - .addAugmentation(Segmentation.class, - new SegmentationBuilder() - .setSegmentationId(Integer.valueOf(216)) - .build()) - .build(), - new L2FloodDomainBuilder() - .setId(ext_fd) - .addAugmentation(Segmentation.class, - new SegmentationBuilder() - .setSegmentationId(Integer.valueOf(2016)) - .build()) - .build())) - .setSubnet(ImmutableList.of( - new SubnetBuilder().setId(sub2) - .setParent(fd) - .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24"))) - .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1"))) - .build(), - new SubnetBuilder().setId(sub) - .setParent(fd) - .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24"))) - .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1"))) - .build(), - new SubnetBuilder().setId(sub3) - .setParent(bd) - .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24"))) - .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1"))) - .build(), - new SubnetBuilder() - .setId(ext_sub) - .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24"))) - .setParent(ext_fd) - .build())) - .build()); - } - - protected ContractBuilder baseContract(List subjects) { - ContractBuilder contractBuilder = new ContractBuilder().setId(cid).setSubject(subjects); - // TODO refactor - if (subjects == null) { - return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test")) - .setSubjectRefs(ImmutableList.of(new SubjectName("s1"))) - .build())); - } - List subjectNames = new ArrayList<>(); - for (Subject subject : subjects) { - subjectNames.add(subject.getName()); - } - return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test")) - .setSubjectRefs(subjectNames) - .build())); - } - - protected SubjectBuilder baseSubject(Direction direction) { - return new SubjectBuilder() - .setName(new SubjectName("s1")) - .setRule(ImmutableList.of(new RuleBuilder() - .setActionRef(ImmutableList.of(new ActionRefBuilder() - .setName(new ActionName("allow")) - .build())) - .setClassifierRef(ImmutableList.of(new ClassifierRefBuilder() - .setName(new ClassifierName("tcp_dst_80")) - .setDirection(direction) - .setInstanceName(new ClassifierName("tcp_dst_80")) - .build())) - .build())); - } - - - protected Subject createSubject(String name, List rules){ - return new SubjectBuilder().setName(new SubjectName(name)).setRule(rules).build(); - } - - protected List createClassifierRefs(Map refNamesAndDirections) { - List refs = new ArrayList<>(); - for (String refName : refNamesAndDirections.keySet()) { - refs.add(new ClassifierRefBuilder().setName(new ClassifierName(refName)) - .setDirection(refNamesAndDirections.get(refName)) - .setInstanceName(new ClassifierName(refName)) - .build()); - } - return refs; - } - - protected EndpointBuilder baseEP() { - return new EndpointBuilder() - .setL2Context(bd) - .setTenant(tid) - .setEndpointGroup(eg) - .setMacAddress(new MacAddress("00:00:00:00:00:01")) - .setNetworkContainment(sub2); - } - - protected EndpointBuilder localEP() { - OfOverlayContext ofc = new OfOverlayContextBuilder() - .setNodeId(nodeId) - .setNodeConnectorId(nodeConnectorId) - .build(); - return baseEP() - .addAugmentation(OfOverlayContext.class, ofc); - } - - protected EndpointBuilder remoteEP(NodeId id) { - OfOverlayContext ofc = new OfOverlayContextBuilder() - .setNodeId(id) - .setNodeConnectorId(new NodeConnectorId(id.getValue() + ":5")) - .build(); - return baseEP() - .setMacAddress(new MacAddress("00:00:00:00:00:02")) - .addAugmentation(OfOverlayContext.class, ofc); - } - -} +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockOfContext; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.MockPolicyManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.MockEndpointManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.MockSwitchManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier; +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.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; + +import com.google.common.collect.ImmutableList; + +public class OfTableTest { + protected MockOfContext ctx; + + protected MockEndpointManager endpointManager; + protected MockPolicyManager policyManager; + protected MockSwitchManager switchManager; + protected NodeId nodeId = new NodeId("openflow:1"); + protected NodeId remoteNodeId = new NodeId("openflow:2"); + protected NodeConnectorId nodeConnectorId = + new NodeConnectorId(nodeId.getValue() + ":4"); + + protected NodeConnectorId tunnelId = + new NodeConnectorId(nodeId.getValue() + ":42"); + + protected L3ContextId l3c = new L3ContextId("2cf51ee4-e996-467e-a277-2d380334a91d"); + protected L2BridgeDomainId bd = new L2BridgeDomainId("c95182ba-7807-43f8-98f7-6c7c720b7639"); + protected L2FloodDomainId fd = new L2FloodDomainId("98e1439e-52d2-46f8-bd69-5136e6088771"); + protected L2FloodDomainId ext_fd = new L2FloodDomainId("d8024f7a-b83e-11e5-9912-ba0be0483c18"); + protected SubnetId sub = new SubnetId("4fcf8dfc-53b5-4aef-84d3-6b5586992fcb"); + protected SubnetId sub2 = new SubnetId("c285a59f-fcb8-42e6-bf29-87ea522fd626"); + protected SubnetId sub3 = new SubnetId("a0380d52-2a25-48ef-882c-a4d4cd9e00ec"); + protected SubnetId ext_sub = new SubnetId("8da17ad9-3261-4dc9-bcff-928a2f73cce7"); + protected TenantId tid = new TenantId("1118c691-8520-47ad-80b8-4cf5e3fe3302"); + protected EndpointGroupId eg = new EndpointGroupId("36dec84a-08c7-497b-80b6-a0035af72a12"); + protected EndpointGroupId eg2 = new EndpointGroupId("632e5e11-7988-4eb5-8fe6-6c182d890276"); + protected ContractId cid = new ContractId("a5874893-bcd5-46de-96af-3c8d99bedf9f"); + + protected void initCtx() { + endpointManager = new MockEndpointManager(); + policyManager = new MockPolicyManager(endpointManager); + switchManager = new MockSwitchManager(); + ctx = new MockOfContext(null, + policyManager, + switchManager, + endpointManager, + null); + } + + protected TenantBuilder baseTenant() { + return new TenantBuilder().setId(tid) + .setPolicy(new PolicyBuilder() + .setEndpointGroup(ImmutableList.of( + new EndpointGroupBuilder().setId(eg) + .setNetworkDomain(sub) + .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder() + .setName(new SelectorName("cns1")).setContract(ImmutableList.of(cid)).build())) + .build(), + new EndpointGroupBuilder().setId(eg2) + .setNetworkDomain(sub2) + .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder() + .setName(new SelectorName("pns1")).setContract(ImmutableList.of(cid)).build())) + .build())) + .setSubjectFeatureInstances( + new SubjectFeatureInstancesBuilder() + .setClassifierInstance( + ImmutableList + .of(new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80")) + .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId()) + .setParameterValue(ImmutableList.of( + new ParameterValueBuilder().setName(new ParameterName("destport")) + .setIntValue(Long.valueOf(80)) + .build(), + new ParameterValueBuilder().setName(new ParameterName("proto")) + .setIntValue(Long.valueOf(6)) + .build())) + .build(), new ClassifierInstanceBuilder() + .setName(new ClassifierName("tcp_src_80")) + .setClassifierDefinitionId(Classifier.L4_CL.getId()) + .setParameterValue(ImmutableList.of( + new ParameterValueBuilder() + .setName(new ParameterName("sourceport")) + .setIntValue(Long.valueOf(80)) + .build(), + new ParameterValueBuilder().setName(new ParameterName("proto")) + .setIntValue(Long.valueOf(6)) + .build())) + .build(), + new ClassifierInstanceBuilder() + .setName(new ClassifierName("ether_type")) + .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId()) + .setParameterValue(ImmutableList.of(new ParameterValueBuilder() + .setName(new ParameterName("ethertype")) + .setIntValue(Long.valueOf(FlowUtils.IPv4)) + .build())) + .build())) + .setActionInstance( + ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow")) + .setActionDefinitionId(new AllowAction().getId()) + .build())) + .build()) + .build()) + .setForwardingContext( + new ForwardingContextBuilder() + .setL3Context(ImmutableList.of(new L3ContextBuilder().setId(l3c).build())) + .setL2BridgeDomain( + ImmutableList.of(new L2BridgeDomainBuilder().setId(bd).setParent(l3c).build())) + .setL2FloodDomain(ImmutableList.of( + new L2FloodDomainBuilder() + .setId(fd) + .setParent(bd) + .addAugmentation(Segmentation.class, + new SegmentationBuilder() + .setSegmentationId(Integer.valueOf(216)) + .build()) + .build(), + new L2FloodDomainBuilder() + .setId(ext_fd) + .addAugmentation(Segmentation.class, + new SegmentationBuilder() + .setSegmentationId(Integer.valueOf(2016)) + .build()) + .build())) + .setSubnet(ImmutableList.of( + new SubnetBuilder().setId(sub2) + .setParent(fd) + .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24"))) + .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1"))) + .build(), + new SubnetBuilder().setId(sub) + .setParent(fd) + .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24"))) + .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1"))) + .build(), + new SubnetBuilder().setId(sub3) + .setParent(bd) + .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24"))) + .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1"))) + .build(), + new SubnetBuilder() + .setId(ext_sub) + .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24"))) + .setParent(ext_fd) + .build())) + .build()); + } + + protected ContractBuilder baseContract(List subjects) { + ContractBuilder contractBuilder = new ContractBuilder().setId(cid).setSubject(subjects); + // TODO refactor + if (subjects == null) { + return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test")) + .setSubjectRefs(ImmutableList.of(new SubjectName("s1"))) + .build())); + } + List subjectNames = new ArrayList<>(); + for (Subject subject : subjects) { + subjectNames.add(subject.getName()); + } + return contractBuilder.setClause(ImmutableList.of(new ClauseBuilder().setName(new ClauseName("test")) + .setSubjectRefs(subjectNames) + .build())); + } + + protected SubjectBuilder baseSubject(Direction direction) { + return new SubjectBuilder() + .setName(new SubjectName("s1")) + .setRule(ImmutableList.of(new RuleBuilder() + .setActionRef(ImmutableList.of(new ActionRefBuilder() + .setName(new ActionName("allow")) + .build())) + .setClassifierRef(ImmutableList.of(new ClassifierRefBuilder() + .setName(new ClassifierName("tcp_dst_80")) + .setDirection(direction) + .setInstanceName(new ClassifierName("tcp_dst_80")) + .build())) + .build())); + } + + + protected Subject createSubject(String name, List rules){ + return new SubjectBuilder().setName(new SubjectName(name)).setRule(rules).build(); + } + + protected List createClassifierRefs(Map refNamesAndDirections) { + List refs = new ArrayList<>(); + for (String refName : refNamesAndDirections.keySet()) { + refs.add(new ClassifierRefBuilder().setName(new ClassifierName(refName)) + .setDirection(refNamesAndDirections.get(refName)) + .setInstanceName(new ClassifierName(refName)) + .build()); + } + return refs; + } + + protected EndpointBuilder baseEP() { + return new EndpointBuilder() + .setL2Context(bd) + .setTenant(tid) + .setEndpointGroup(eg) + .setMacAddress(new MacAddress("00:00:00:00:00:01")) + .setNetworkContainment(sub2); + } + + protected EndpointBuilder localEP() { + OfOverlayContext ofc = new OfOverlayContextBuilder() + .setNodeId(nodeId) + .setNodeConnectorId(nodeConnectorId) + .build(); + return baseEP() + .addAugmentation(OfOverlayContext.class, ofc); + } + + protected EndpointBuilder remoteEP(NodeId id) { + OfOverlayContext ofc = new OfOverlayContextBuilder() + .setNodeId(id) + .setNodeConnectorId(new NodeConnectorId(id.getValue() + ":5")) + .build(); + return baseEP() + .setMacAddress(new MacAddress("00:00:00:00:00:02")) + .addAugmentation(OfOverlayContext.class, ofc); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/mapper/MapperUtilsTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/mapper/MapperUtilsTest.java index 1f18edee2..c6d50ef11 100644 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/mapper/MapperUtilsTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/mapper/MapperUtilsTest.java @@ -1,381 +1,381 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper; - -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; -import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; -import org.opendaylight.groupbasedpolicy.dto.IndexedTenant; -import org.opendaylight.groupbasedpolicy.dto.PolicyInfo; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.ChainAction; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier; -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.IpPrefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; - -import java.util.ArrayList; -import java.util.List; - -public abstract class MapperUtilsTest { - - protected static final MacAddress MAC_0 = new MacAddress("00:00:00:00:00:00"); - protected static final MacAddress MAC_1 = new MacAddress("00:00:00:00:00:01"); - protected static final MacAddress MAC_2 = new MacAddress("00:00:00:00:00:02"); - protected static final Ipv4Address IPV4_0 = new Ipv4Address("170.0.0.1"); - protected static final Ipv4Address IPV4_1 = new Ipv4Address("190.0.0.1"); - protected static final Ipv4Address IPV4_2 = new Ipv4Address("210.0.0.1"); - protected static final Ipv6Address IPV6_1 = new Ipv6Address("2000:db80:85a3:08ba:0947:8a2e:3a70:7334"); - protected static final Ipv6Address IPV6_2 = new Ipv6Address("0947:db80:3a70:7334:85a3:8a2e:2000:08ba"); - protected static final NodeConnectorId CONNECTOR_0 = new NodeConnectorId("0"); - protected static final NodeConnectorId CONNECTOR_1 = new NodeConnectorId("1"); - protected static final NodeConnectorId CONNECTOR_2 = new NodeConnectorId("2"); - protected static final SubnetId SUBNET_0 = new SubnetId("subnet0"); - protected static final SubnetId SUBNET_1 = new SubnetId("subnet1"); - protected static final SubnetId SUBNET_2 = new SubnetId("subnet2"); - protected static final SubnetId SUBNET_EXT = new SubnetId("externalSubnet"); - protected static final String IP_PREFIX_32 = "/32"; - protected static final String IP_PREFIX_128 = "/128"; - protected static final TenantId TENANT_ID = new TenantId("tenantId"); - protected static final NodeId NODE_ID = new NodeId("nodeId"); - protected static final EndpointGroupId ENDPOINT_GROUP_0 = new EndpointGroupId("eg0"); - protected static final EndpointGroupId ENDPOINT_GROUP_1 = new EndpointGroupId("eg1"); - protected static final EndpointGroupId ENDPOINT_GROUP_2 = new EndpointGroupId("eg2"); - protected static final SubnetId NET_DOMAIN_ID = new SubnetId("ndId"); - protected static final L2BridgeDomainId L2BD_ID = new L2BridgeDomainId("l2bdId"); - protected static final L2FloodDomainId L2FD_ID = new L2FloodDomainId("l2fdId"); - protected static final L2FloodDomainId L2_FD_ID_EXT = new L2FloodDomainId("externalL2fdId"); - protected static final L3ContextId L3C_ID = new L3ContextId("l3cId"); - protected static final ContractId CONTRACT_ID = new ContractId("contractId"); - protected static final ContextId CONTEXT_ID = new L3ContextId("ctxId"); - // Often used strings - protected static final String ALLOW = "allow"; - protected static final String CHAIN = "chain"; - protected static final String L2 = "L2"; - protected static final String OPENFLOW = "openflow:"; - protected static final String DROP_ALL = "dropAll"; - protected static final String DROP = "drop"; - protected static final String TCP_SRC = "tcp_src_80"; - // Mock variables - protected Short tableId; - protected OfContext ctx; - protected OfWriter ofWriter; - protected SwitchManager switchManager; - protected PolicyManager policyManager; - protected EndpointManager endpointManager; - protected PolicyInfo policyInfo; - protected FlowTable table; - - protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match, - Instructions instructions) { - return FlowUtils.base(tableId) - .setId(flowId) - .setPriority(priority) - .setMatch(match) - .setInstructions(instructions); - } - - protected EndpointL3Builder buildL3Endpoint(Ipv4Address natIp, Ipv4Address ip, MacAddress mac, String l2bd) { - Preconditions.checkNotNull(natIp); - Preconditions.checkNotNull(ip); - Preconditions.checkNotNull(mac); - - NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv4Address(natIp))).build(); - - EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress) - .setIpAddress(new IpAddress(ip)) - .setMacAddress(new MacAddress(mac)); - if (l2bd != null) { - endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd)); - } - if (ip.equals(IPV4_0)) { - endpointL3Builder.setNetworkContainment(SUBNET_0); - } else if (ip.equals(IPV4_1)) { - endpointL3Builder.setNetworkContainment(SUBNET_1); - } else if (ip.equals(IPV4_2)) { - endpointL3Builder.setNetworkContainment(SUBNET_2); - } - return endpointL3Builder; - } - - protected EndpointL3Builder buildL3Endpoint(Ipv6Address natIp, Ipv6Address ip, MacAddress mac, String l2bd) { - Preconditions.checkNotNull(natIp); - Preconditions.checkNotNull(ip); - Preconditions.checkNotNull(mac); - - NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv6Address(natIp))).build(); - - EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress) - .setIpAddress(new IpAddress(ip)) - .setMacAddress(new MacAddress(mac)); - if (l2bd != null) { - endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd)); - } - return endpointL3Builder; - } - - public SegmentationBuilder buildSegmentation() { - return new SegmentationBuilder().setSegmentationId(1); - } - - protected TenantBuilder buildTenant() { - Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups()) - .setSubjectFeatureInstances(getSubjectFeatureInstances()) - .build(); - - return new TenantBuilder().setId(TENANT_ID) - .setForwardingContext(buildForwardingContext().build()) - .setPolicy(policy); - } - - protected TenantBuilder buildTenant(ActionInstance actionInstance) { - Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups()) - .setSubjectFeatureInstances(getSubjectFeatureInstances(actionInstance)) - .build(); - - return new TenantBuilder().setId(TENANT_ID) - .setForwardingContext(buildForwardingContext().build()) - .setPolicy(policy); - } - - protected IndexedTenant getTestIndexedTenant() { - return new IndexedTenant(buildTenant().build()); - } - - protected IndexedTenant getTestIndexedTenant(ActionInstance actionInstance) { - return new IndexedTenant(buildTenant(actionInstance).build()); - } - - protected ForwardingContextBuilder buildForwardingContext() { - return new ForwardingContextBuilder().setL2FloodDomain(getL2FloodDomainList(false)) - .setL2BridgeDomain(getL2BridgeDomainList()) - .setL3Context(getL3ContextList()) - .setSubnet(getSubnetList()); - } - - protected List getL3ContextList() { - L3Context l3Context = new L3ContextBuilder().setId(L3C_ID).build(); - return ImmutableList.of(l3Context); - } - - protected List getL2BridgeDomainList() { - L2BridgeDomain l2BridgeDomain = new L2BridgeDomainBuilder().setId(L2BD_ID).setParent(L3C_ID).build(); - return ImmutableList.of(l2BridgeDomain); - } - - protected List getL2FloodDomainList(boolean external) { - L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder().setId(L2FD_ID) - .setParent(new L2BridgeDomainId(L2BD_ID)) - .addAugmentation(Segmentation.class, buildSegmentation().build()); - if (external) { - l2FloodDomainBuilder.setId(L2_FD_ID_EXT); - } - return ImmutableList.of(l2FloodDomainBuilder.build()); - } - - protected List getL3AddressList(Ipv4Address l3IpAddress, L3ContextId l3ContextId) { - L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)) - .setL3Context(new L3ContextId(l3ContextId)) - .build(); - return ImmutableList.of(l3Address); - } - - protected List getL3AddressList(Ipv6Address l3IpAddress) { - L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)).build(); - return ImmutableList.of(l3Address); - } - - protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) { - return new OfOverlayContextBuilder().setNodeConnectorId(connector).setNodeId(NODE_ID); - } - - protected EndpointBuilder buildEndpoint(Ipv4Address l3IpAddress, MacAddress mac, NodeConnectorId connector) { - EndpointBuilder endpointBuilder = new EndpointBuilder().setTenant(TENANT_ID) - .setL3Address(getL3AddressList(l3IpAddress, L3C_ID)) - .setMacAddress(new MacAddress(mac)) - .setL2Context(new L2BridgeDomainId(L2BD_ID)) - .setEndpointGroup(ENDPOINT_GROUP_0) - .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build()); - if (l3IpAddress.equals(IPV4_0)) { - endpointBuilder.setNetworkContainment(SUBNET_0); - } else if (l3IpAddress.equals(IPV4_1)) { - endpointBuilder.setNetworkContainment(SUBNET_1); - } else if (l3IpAddress.equals(IPV4_2)) { - endpointBuilder.setNetworkContainment(SUBNET_2); - } - return endpointBuilder; - } - - protected EndpointBuilder buildEndpoint(Ipv6Address l3IpAddress, MacAddress mac, NodeConnectorId connector) { - return new EndpointBuilder().setTenant(TENANT_ID) - .setL3Address(getL3AddressList(l3IpAddress)) - .setMacAddress(new MacAddress(mac)) - .setL2Context(new L2BridgeDomainId(L2BD_ID)) - .setEndpointGroup(ENDPOINT_GROUP_0) - .setNetworkContainment(NET_DOMAIN_ID) - .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build()); - } - - public List getEndpointGroups() { - return ImmutableList.of( - new EndpointGroupBuilder().setId(ENDPOINT_GROUP_0) - .setNetworkDomain(SUBNET_0) - .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder() - .setName(new SelectorName("cns1")).setContract(ImmutableList.of(CONTRACT_ID)).build())) - .build(), - new EndpointGroupBuilder().setId(ENDPOINT_GROUP_1) - .setNetworkDomain(SUBNET_1) - .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder() - .setName(new SelectorName("pns1")).setContract(ImmutableList.of(CONTRACT_ID)).build())) - .build()); - } - - protected SubjectFeatureInstances getSubjectFeatureInstances() { - SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder(); - return builder.setClassifierInstance(ImmutableList.of( - new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80")) - .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId()) - .setParameterValue(ImmutableList.of( - new ParameterValueBuilder().setName(new ParameterName("destport")) - .setIntValue(80L) // Endpoint - - .build(), - new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build())) - .build(), - new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC)) - .setClassifierDefinitionId(Classifier.L4_CL.getId()) - .setParameterValue(ImmutableList.of( - new ParameterValueBuilder().setName(new ParameterName("sourceport")) - .setIntValue(80L) - .build(), - new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build())) - .build(), - new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type")) - .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId()) - .setParameterValue(ImmutableList.of(new ParameterValueBuilder() - .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build())) - .build())) - .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow")) - .setActionDefinitionId(new AllowAction().getId()) - .build())) - .build(); - } - - protected SubjectFeatureInstances getSubjectFeatureInstances(ActionInstance actionInstance) { - SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder(); - return builder.setClassifierInstance(ImmutableList.of( - new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80")) - .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId()) - .setParameterValue(ImmutableList.of( - new ParameterValueBuilder().setName(new ParameterName("destport")) - .setIntValue(80L) // Endpoint - - .build(), - new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build())) - .build(), - new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC)) - .setClassifierDefinitionId(Classifier.L4_CL.getId()) - .setParameterValue(ImmutableList.of( - new ParameterValueBuilder().setName(new ParameterName("sourceport")) - .setIntValue(80L) - .build(), - new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build())) - .build(), - new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type")) - .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId()) - .setParameterValue(ImmutableList.of(new ParameterValueBuilder() - .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build())) - .build())) - .setActionInstance(ImmutableList.of(actionInstance)) - .build(); - } - - protected List getSubnetList() { - return ImmutableList.of( - new SubnetBuilder().setId(SUBNET_0) - .setParent(L2FD_ID) - .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24"))) - .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1"))) - .build(), - new SubnetBuilder().setId(SUBNET_1) - .setParent(L2FD_ID) - .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24"))) - .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1"))) - .build(), - new SubnetBuilder().setId(SUBNET_2) - .setParent(L2BD_ID) - .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24"))) - .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1"))) - .build(), - new SubnetBuilder().setId(SUBNET_EXT) - .setParent(L2_FD_ID_EXT) - .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24"))) - .build()); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.mapper; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; +import org.opendaylight.groupbasedpolicy.dto.IndexedTenant; +import org.opendaylight.groupbasedpolicy.dto.PolicyInfo; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowTable; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.AllowAction; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.ChainAction; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Classifier; +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.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.l3endpoint.rev151217.NatAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.Segmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.SegmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ForwardingContextBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Policy; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomainBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomainBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3ContextBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.SubnetBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstances; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.SubjectFeatureInstancesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstanceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; + +import java.util.ArrayList; +import java.util.List; + +public abstract class MapperUtilsTest { + + protected static final MacAddress MAC_0 = new MacAddress("00:00:00:00:00:00"); + protected static final MacAddress MAC_1 = new MacAddress("00:00:00:00:00:01"); + protected static final MacAddress MAC_2 = new MacAddress("00:00:00:00:00:02"); + protected static final Ipv4Address IPV4_0 = new Ipv4Address("170.0.0.1"); + protected static final Ipv4Address IPV4_1 = new Ipv4Address("190.0.0.1"); + protected static final Ipv4Address IPV4_2 = new Ipv4Address("210.0.0.1"); + protected static final Ipv6Address IPV6_1 = new Ipv6Address("2000:db80:85a3:08ba:0947:8a2e:3a70:7334"); + protected static final Ipv6Address IPV6_2 = new Ipv6Address("0947:db80:3a70:7334:85a3:8a2e:2000:08ba"); + protected static final NodeConnectorId CONNECTOR_0 = new NodeConnectorId("0"); + protected static final NodeConnectorId CONNECTOR_1 = new NodeConnectorId("1"); + protected static final NodeConnectorId CONNECTOR_2 = new NodeConnectorId("2"); + protected static final SubnetId SUBNET_0 = new SubnetId("subnet0"); + protected static final SubnetId SUBNET_1 = new SubnetId("subnet1"); + protected static final SubnetId SUBNET_2 = new SubnetId("subnet2"); + protected static final SubnetId SUBNET_EXT = new SubnetId("externalSubnet"); + protected static final String IP_PREFIX_32 = "/32"; + protected static final String IP_PREFIX_128 = "/128"; + protected static final TenantId TENANT_ID = new TenantId("tenantId"); + protected static final NodeId NODE_ID = new NodeId("nodeId"); + protected static final EndpointGroupId ENDPOINT_GROUP_0 = new EndpointGroupId("eg0"); + protected static final EndpointGroupId ENDPOINT_GROUP_1 = new EndpointGroupId("eg1"); + protected static final EndpointGroupId ENDPOINT_GROUP_2 = new EndpointGroupId("eg2"); + protected static final SubnetId NET_DOMAIN_ID = new SubnetId("ndId"); + protected static final L2BridgeDomainId L2BD_ID = new L2BridgeDomainId("l2bdId"); + protected static final L2FloodDomainId L2FD_ID = new L2FloodDomainId("l2fdId"); + protected static final L2FloodDomainId L2_FD_ID_EXT = new L2FloodDomainId("externalL2fdId"); + protected static final L3ContextId L3C_ID = new L3ContextId("l3cId"); + protected static final ContractId CONTRACT_ID = new ContractId("contractId"); + protected static final ContextId CONTEXT_ID = new L3ContextId("ctxId"); + // Often used strings + protected static final String ALLOW = "allow"; + protected static final String CHAIN = "chain"; + protected static final String L2 = "L2"; + protected static final String OPENFLOW = "openflow:"; + protected static final String DROP_ALL = "dropAll"; + protected static final String DROP = "drop"; + protected static final String TCP_SRC = "tcp_src_80"; + // Mock variables + protected Short tableId; + protected OfContext ctx; + protected OfWriter ofWriter; + protected SwitchManager switchManager; + protected PolicyManager policyManager; + protected EndpointManager endpointManager; + protected PolicyInfo policyInfo; + protected FlowTable table; + + protected FlowBuilder buildFlow(FlowId flowId, short tableId, Integer priority, Match match, + Instructions instructions) { + return FlowUtils.base(tableId) + .setId(flowId) + .setPriority(priority) + .setMatch(match) + .setInstructions(instructions); + } + + protected EndpointL3Builder buildL3Endpoint(Ipv4Address natIp, Ipv4Address ip, MacAddress mac, String l2bd) { + Preconditions.checkNotNull(natIp); + Preconditions.checkNotNull(ip); + Preconditions.checkNotNull(mac); + + NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv4Address(natIp))).build(); + + EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress) + .setIpAddress(new IpAddress(ip)) + .setMacAddress(new MacAddress(mac)); + if (l2bd != null) { + endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd)); + } + if (ip.equals(IPV4_0)) { + endpointL3Builder.setNetworkContainment(SUBNET_0); + } else if (ip.equals(IPV4_1)) { + endpointL3Builder.setNetworkContainment(SUBNET_1); + } else if (ip.equals(IPV4_2)) { + endpointL3Builder.setNetworkContainment(SUBNET_2); + } + return endpointL3Builder; + } + + protected EndpointL3Builder buildL3Endpoint(Ipv6Address natIp, Ipv6Address ip, MacAddress mac, String l2bd) { + Preconditions.checkNotNull(natIp); + Preconditions.checkNotNull(ip); + Preconditions.checkNotNull(mac); + + NatAddress natAddress = new NatAddressBuilder().setNatAddress(new IpAddress(new Ipv6Address(natIp))).build(); + + EndpointL3Builder endpointL3Builder = new EndpointL3Builder().addAugmentation(NatAddress.class, natAddress) + .setIpAddress(new IpAddress(ip)) + .setMacAddress(new MacAddress(mac)); + if (l2bd != null) { + endpointL3Builder.setL2Context(new L2BridgeDomainId(l2bd)); + } + return endpointL3Builder; + } + + public SegmentationBuilder buildSegmentation() { + return new SegmentationBuilder().setSegmentationId(1); + } + + protected TenantBuilder buildTenant() { + Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups()) + .setSubjectFeatureInstances(getSubjectFeatureInstances()) + .build(); + + return new TenantBuilder().setId(TENANT_ID) + .setForwardingContext(buildForwardingContext().build()) + .setPolicy(policy); + } + + protected TenantBuilder buildTenant(ActionInstance actionInstance) { + Policy policy = new PolicyBuilder().setEndpointGroup(getEndpointGroups()) + .setSubjectFeatureInstances(getSubjectFeatureInstances(actionInstance)) + .build(); + + return new TenantBuilder().setId(TENANT_ID) + .setForwardingContext(buildForwardingContext().build()) + .setPolicy(policy); + } + + protected IndexedTenant getTestIndexedTenant() { + return new IndexedTenant(buildTenant().build()); + } + + protected IndexedTenant getTestIndexedTenant(ActionInstance actionInstance) { + return new IndexedTenant(buildTenant(actionInstance).build()); + } + + protected ForwardingContextBuilder buildForwardingContext() { + return new ForwardingContextBuilder().setL2FloodDomain(getL2FloodDomainList(false)) + .setL2BridgeDomain(getL2BridgeDomainList()) + .setL3Context(getL3ContextList()) + .setSubnet(getSubnetList()); + } + + protected List getL3ContextList() { + L3Context l3Context = new L3ContextBuilder().setId(L3C_ID).build(); + return ImmutableList.of(l3Context); + } + + protected List getL2BridgeDomainList() { + L2BridgeDomain l2BridgeDomain = new L2BridgeDomainBuilder().setId(L2BD_ID).setParent(L3C_ID).build(); + return ImmutableList.of(l2BridgeDomain); + } + + protected List getL2FloodDomainList(boolean external) { + L2FloodDomainBuilder l2FloodDomainBuilder = new L2FloodDomainBuilder().setId(L2FD_ID) + .setParent(new L2BridgeDomainId(L2BD_ID)) + .addAugmentation(Segmentation.class, buildSegmentation().build()); + if (external) { + l2FloodDomainBuilder.setId(L2_FD_ID_EXT); + } + return ImmutableList.of(l2FloodDomainBuilder.build()); + } + + protected List getL3AddressList(Ipv4Address l3IpAddress, L3ContextId l3ContextId) { + L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)) + .setL3Context(new L3ContextId(l3ContextId)) + .build(); + return ImmutableList.of(l3Address); + } + + protected List getL3AddressList(Ipv6Address l3IpAddress) { + L3Address l3Address = new L3AddressBuilder().setIpAddress(new IpAddress(l3IpAddress)).build(); + return ImmutableList.of(l3Address); + } + + protected OfOverlayContextBuilder getOfOverlayContext(NodeConnectorId connector) { + return new OfOverlayContextBuilder().setNodeConnectorId(connector).setNodeId(NODE_ID); + } + + protected EndpointBuilder buildEndpoint(Ipv4Address l3IpAddress, MacAddress mac, NodeConnectorId connector) { + EndpointBuilder endpointBuilder = new EndpointBuilder().setTenant(TENANT_ID) + .setL3Address(getL3AddressList(l3IpAddress, L3C_ID)) + .setMacAddress(new MacAddress(mac)) + .setL2Context(new L2BridgeDomainId(L2BD_ID)) + .setEndpointGroup(ENDPOINT_GROUP_0) + .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build()); + if (l3IpAddress.equals(IPV4_0)) { + endpointBuilder.setNetworkContainment(SUBNET_0); + } else if (l3IpAddress.equals(IPV4_1)) { + endpointBuilder.setNetworkContainment(SUBNET_1); + } else if (l3IpAddress.equals(IPV4_2)) { + endpointBuilder.setNetworkContainment(SUBNET_2); + } + return endpointBuilder; + } + + protected EndpointBuilder buildEndpoint(Ipv6Address l3IpAddress, MacAddress mac, NodeConnectorId connector) { + return new EndpointBuilder().setTenant(TENANT_ID) + .setL3Address(getL3AddressList(l3IpAddress)) + .setMacAddress(new MacAddress(mac)) + .setL2Context(new L2BridgeDomainId(L2BD_ID)) + .setEndpointGroup(ENDPOINT_GROUP_0) + .setNetworkContainment(NET_DOMAIN_ID) + .addAugmentation(OfOverlayContext.class, getOfOverlayContext(connector).build()); + } + + public List getEndpointGroups() { + return ImmutableList.of( + new EndpointGroupBuilder().setId(ENDPOINT_GROUP_0) + .setNetworkDomain(SUBNET_0) + .setConsumerNamedSelector(ImmutableList.of(new ConsumerNamedSelectorBuilder() + .setName(new SelectorName("cns1")).setContract(ImmutableList.of(CONTRACT_ID)).build())) + .build(), + new EndpointGroupBuilder().setId(ENDPOINT_GROUP_1) + .setNetworkDomain(SUBNET_1) + .setProviderNamedSelector(ImmutableList.of(new ProviderNamedSelectorBuilder() + .setName(new SelectorName("pns1")).setContract(ImmutableList.of(CONTRACT_ID)).build())) + .build()); + } + + protected SubjectFeatureInstances getSubjectFeatureInstances() { + SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder(); + return builder.setClassifierInstance(ImmutableList.of( + new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80")) + .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId()) + .setParameterValue(ImmutableList.of( + new ParameterValueBuilder().setName(new ParameterName("destport")) + .setIntValue(80L) // Endpoint + + .build(), + new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build())) + .build(), + new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC)) + .setClassifierDefinitionId(Classifier.L4_CL.getId()) + .setParameterValue(ImmutableList.of( + new ParameterValueBuilder().setName(new ParameterName("sourceport")) + .setIntValue(80L) + .build(), + new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build())) + .build(), + new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type")) + .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId()) + .setParameterValue(ImmutableList.of(new ParameterValueBuilder() + .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build())) + .build())) + .setActionInstance(ImmutableList.of(new ActionInstanceBuilder().setName(new ActionName("allow")) + .setActionDefinitionId(new AllowAction().getId()) + .build())) + .build(); + } + + protected SubjectFeatureInstances getSubjectFeatureInstances(ActionInstance actionInstance) { + SubjectFeatureInstancesBuilder builder = new SubjectFeatureInstancesBuilder(); + return builder.setClassifierInstance(ImmutableList.of( + new ClassifierInstanceBuilder().setName(new ClassifierName("tcp_dst_80")) + .setClassifierDefinitionId(L4ClassifierDefinition.DEFINITION.getId()) + .setParameterValue(ImmutableList.of( + new ParameterValueBuilder().setName(new ParameterName("destport")) + .setIntValue(80L) // Endpoint + + .build(), + new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build())) + .build(), + new ClassifierInstanceBuilder().setName(new ClassifierName(TCP_SRC)) + .setClassifierDefinitionId(Classifier.L4_CL.getId()) + .setParameterValue(ImmutableList.of( + new ParameterValueBuilder().setName(new ParameterName("sourceport")) + .setIntValue(80L) + .build(), + new ParameterValueBuilder().setName(new ParameterName("proto")).setIntValue(6L).build())) + .build(), + new ClassifierInstanceBuilder().setName(new ClassifierName("ether_type")) + .setClassifierDefinitionId(Classifier.ETHER_TYPE_CL.getId()) + .setParameterValue(ImmutableList.of(new ParameterValueBuilder() + .setName(new ParameterName("ethertype")).setIntValue(FlowUtils.IPv4).build())) + .build())) + .setActionInstance(ImmutableList.of(actionInstance)) + .build(); + } + + protected List getSubnetList() { + return ImmutableList.of( + new SubnetBuilder().setId(SUBNET_0) + .setParent(L2FD_ID) + .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.1.0/24"))) + .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.1.1"))) + .build(), + new SubnetBuilder().setId(SUBNET_1) + .setParent(L2FD_ID) + .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.0.0/24"))) + .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.0.1"))) + .build(), + new SubnetBuilder().setId(SUBNET_2) + .setParent(L2BD_ID) + .setIpPrefix(new IpPrefix(new Ipv4Prefix("10.0.2.0/24"))) + .setVirtualRouterIp(new IpAddress(new Ipv4Address("10.0.2.1"))) + .build(), + new SubnetBuilder().setId(SUBNET_EXT) + .setParent(L2_FD_ID_EXT) + .setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.111.0/24"))) + .build()); + } +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ActionDefinitionListenerTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ActionDefinitionListenerTest.java index b9d33229c..26ce912ed 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ActionDefinitionListenerTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ActionDefinitionListenerTest.java @@ -1,120 +1,120 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.Set; - -import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.CheckedFuture; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedActionDefinition; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class ActionDefinitionListenerTest { - - private ActionDefinitionListener listener; - private DataObjectModification rootNode; - private Set> changes; - - private DataBroker dataProvider; - - private InstanceIdentifier rootIdentifier; - - @SuppressWarnings("unchecked") - @Before - public void init() { - - dataProvider = mock(DataBroker.class); - - listener = spy(new ActionDefinitionListener(dataProvider)); - - ActionDefinitionKey key = mock(ActionDefinitionKey.class); - - rootNode = mock(DataObjectModification.class); - rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class) - .child(ActionDefinition.class, key) - .build(); - DataTreeIdentifier rootPath = - new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); - - DataTreeModification change = mock(DataTreeModification.class); - - when(change.getRootNode()).thenReturn(rootNode); - when(change.getRootPath()).thenReturn(rootPath); - - changes = ImmutableSet.of(change); - - ActionDefinition def = new ActionDefinitionBuilder().setId(AllowActionDefinition.ID).build(); - - when(rootNode.getDataBefore()).thenReturn(def); - when(rootNode.getDataAfter()).thenReturn(def); - } - - @Test - public void testOnDataTreeChanged_Write() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); - - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), - any(SupportedActionDefinition.class), eq(true)); - } - - @Test - public void testOnDataTreeChanged_SubtreeModified() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); - - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), - any(SupportedActionDefinition.class), eq(true)); - } - - @Test - public void testOnDataTreeChanged_Delete() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); - - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(wt).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class)); - } - - private WriteTransaction resetTransaction() { - WriteTransaction wt = mock(WriteTransaction.class); - CheckedFuture checkedFuture = mock(CheckedFuture.class); - when(wt.submit()).thenReturn(checkedFuture); - when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt); - return wt; - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.CheckedFuture; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinitionKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedActionDefinition; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class ActionDefinitionListenerTest { + + private ActionDefinitionListener listener; + private DataObjectModification rootNode; + private Set> changes; + + private DataBroker dataProvider; + + private InstanceIdentifier rootIdentifier; + + @SuppressWarnings("unchecked") + @Before + public void init() { + + dataProvider = mock(DataBroker.class); + + listener = spy(new ActionDefinitionListener(dataProvider)); + + ActionDefinitionKey key = mock(ActionDefinitionKey.class); + + rootNode = mock(DataObjectModification.class); + rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class) + .child(ActionDefinition.class, key) + .build(); + DataTreeIdentifier rootPath = + new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); + + DataTreeModification change = mock(DataTreeModification.class); + + when(change.getRootNode()).thenReturn(rootNode); + when(change.getRootPath()).thenReturn(rootPath); + + changes = ImmutableSet.of(change); + + ActionDefinition def = new ActionDefinitionBuilder().setId(AllowActionDefinition.ID).build(); + + when(rootNode.getDataBefore()).thenReturn(def); + when(rootNode.getDataAfter()).thenReturn(def); + } + + @Test + public void testOnDataTreeChanged_Write() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), + any(SupportedActionDefinition.class), eq(true)); + } + + @Test + public void testOnDataTreeChanged_SubtreeModified() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); + + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), + any(SupportedActionDefinition.class), eq(true)); + } + + @Test + public void testOnDataTreeChanged_Delete() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); + + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(wt).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class)); + } + + private WriteTransaction resetTransaction() { + WriteTransaction wt = mock(WriteTransaction.class); + CheckedFuture checkedFuture = mock(CheckedFuture.class); + when(wt.submit()).thenReturn(checkedFuture); + when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt); + return wt; + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ClassifierDefinitionListenerTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ClassifierDefinitionListenerTest.java index 20f75b21a..2c89ebe3b 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ClassifierDefinitionListenerTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/sf/ClassifierDefinitionListenerTest.java @@ -1,124 +1,124 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.Set; - -import com.google.common.collect.ImmutableSet; -import com.google.common.util.concurrent.CheckedFuture; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedClassifierDefinition; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class ClassifierDefinitionListenerTest { - - private ClassifierDefinitionListener listener; - private DataObjectModification rootNode; - private Set> changes; - - private DataBroker dataProvider; - - private InstanceIdentifier rootIdentifier; - - @SuppressWarnings("unchecked") - @Before - public void init() { - - dataProvider = mock(DataBroker.class); - - listener = spy(new ClassifierDefinitionListener(dataProvider)); - - ClassifierDefinitionKey key = mock(ClassifierDefinitionKey.class); - - rootNode = mock(DataObjectModification.class); - rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class) - .child(ClassifierDefinition.class, key) - .build(); - DataTreeIdentifier rootPath = - new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); - - DataTreeModification change = mock(DataTreeModification.class); - - when(change.getRootNode()).thenReturn(rootNode); - when(change.getRootPath()).thenReturn(rootPath); - - changes = ImmutableSet.of(change); - - ClassifierDefinition def = - new ClassifierDefinitionBuilder().setId(EtherTypeClassifierDefinition.ID).build(); - - when(rootNode.getDataBefore()).thenReturn(def); - when(rootNode.getDataAfter()).thenReturn(def); - } - - @Test - public void testOnDataTreeChanged_Write() { - when(rootNode.getModificationType()).thenReturn( - DataObjectModification.ModificationType.WRITE); - - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), - any(SupportedClassifierDefinition.class), eq(true)); - } - - @Test - public void testOnDataTreeChanged_SubtreeModified() { - when(rootNode.getModificationType()).thenReturn( - DataObjectModification.ModificationType.SUBTREE_MODIFIED); - - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), - any(SupportedClassifierDefinition.class), eq(true)); - } - - @Test - public void testOnDataTreeChanged_Delete() { - when(rootNode.getModificationType()).thenReturn( - DataObjectModification.ModificationType.DELETE); - - WriteTransaction wt = resetTransaction(); - - listener.onDataTreeChanged(changes); - - verify(wt).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class)); - } - - private WriteTransaction resetTransaction() { - WriteTransaction wt = mock(WriteTransaction.class); - CheckedFuture checkedFuture = mock(CheckedFuture.class); - when(wt.submit()).thenReturn(checkedFuture); - when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt); - return wt; - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.CheckedFuture; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinitionKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedClassifierDefinition; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class ClassifierDefinitionListenerTest { + + private ClassifierDefinitionListener listener; + private DataObjectModification rootNode; + private Set> changes; + + private DataBroker dataProvider; + + private InstanceIdentifier rootIdentifier; + + @SuppressWarnings("unchecked") + @Before + public void init() { + + dataProvider = mock(DataBroker.class); + + listener = spy(new ClassifierDefinitionListener(dataProvider)); + + ClassifierDefinitionKey key = mock(ClassifierDefinitionKey.class); + + rootNode = mock(DataObjectModification.class); + rootIdentifier = InstanceIdentifier.builder(SubjectFeatureDefinitions.class) + .child(ClassifierDefinition.class, key) + .build(); + DataTreeIdentifier rootPath = + new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); + + DataTreeModification change = mock(DataTreeModification.class); + + when(change.getRootNode()).thenReturn(rootNode); + when(change.getRootPath()).thenReturn(rootPath); + + changes = ImmutableSet.of(change); + + ClassifierDefinition def = + new ClassifierDefinitionBuilder().setId(EtherTypeClassifierDefinition.ID).build(); + + when(rootNode.getDataBefore()).thenReturn(def); + when(rootNode.getDataAfter()).thenReturn(def); + } + + @Test + public void testOnDataTreeChanged_Write() { + when(rootNode.getModificationType()).thenReturn( + DataObjectModification.ModificationType.WRITE); + + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), + any(SupportedClassifierDefinition.class), eq(true)); + } + + @Test + public void testOnDataTreeChanged_SubtreeModified() { + when(rootNode.getModificationType()).thenReturn( + DataObjectModification.ModificationType.SUBTREE_MODIFIED); + + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(wt).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), + any(SupportedClassifierDefinition.class), eq(true)); + } + + @Test + public void testOnDataTreeChanged_Delete() { + when(rootNode.getModificationType()).thenReturn( + DataObjectModification.ModificationType.DELETE); + + WriteTransaction wt = resetTransaction(); + + listener.onDataTreeChanged(changes); + + verify(wt).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class)); + } + + private WriteTransaction resetTransaction() { + WriteTransaction wt = mock(WriteTransaction.class); + CheckedFuture checkedFuture = mock(CheckedFuture.class); + when(wt.submit()).thenReturn(checkedFuture); + when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt); + return wt; + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/OFStatisticsManagerTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/OFStatisticsManagerTest.java index f819633e3..7e12fbf92 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/OFStatisticsManagerTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/OFStatisticsManagerTest.java @@ -1,85 +1,85 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics; - -import static org.mockito.Mockito.mock; - -import java.util.Map; -import java.util.concurrent.ScheduledExecutorService; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.StatisticsManager; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class OFStatisticsManagerTest { - - private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1"); - private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1"); - private final ContractId contractId = new ContractId("contract1"); - private final TenantId tenantId = new TenantId("tenant1"); - private final ClassifierName classifierName = ClassifierName.getDefaultInstance("classifier1"); - private final SubjectName subjectName = SubjectName.getDefaultInstance("subject1"); - private final RuleName ruleName = new RuleName("rule1"); - - private InstanceIdentifier rpIid; - private ResolvedPolicy resolvedPolicy; - - private ScheduledExecutorService executor; - private StatisticsManager statisticsManager; - - private OFStatisticsManager ofStatisticsManager; - private Classifier classifier; - private Map, Classifier> classifierByIid; - - @Before - public void init() { - executor = mock(ScheduledExecutorService.class); - statisticsManager = mock(StatisticsManager.class); - - classifier = new ClassifierBuilder() - .setName(classifierName) - .build(); - resolvedPolicy = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, - consumerEpgId, providerEpgId, classifier); - - rpIid = InstanceIdentifier.create(ResolvedPolicy.class); - - ofStatisticsManager = new OFStatisticsManager(executor, statisticsManager); - ofStatisticsManager.setDelay(20L); - ofStatisticsManager.setSflowCollectorUri("http://localhost:1234"); - - classifierByIid = - ResolvedPolicyClassifierListener.resolveClassifiers(resolvedPolicy, rpIid); - } - - @Test - public void testConstructor() throws Exception { - OFStatisticsManager other = new OFStatisticsManager(executor, statisticsManager); - other.close(); - } - - @Test - public void testTTT(){ - for (Map.Entry, Classifier> classifierEntry : classifierByIid.entrySet()) { - ofStatisticsManager.pullStatsForClassifier(classifierEntry.getKey(), - classifierEntry.getValue()); - } - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics; + +import static org.mockito.Mockito.mock; + +import java.util.Map; +import java.util.concurrent.ScheduledExecutorService; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.StatisticsManager; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class OFStatisticsManagerTest { + + private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1"); + private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1"); + private final ContractId contractId = new ContractId("contract1"); + private final TenantId tenantId = new TenantId("tenant1"); + private final ClassifierName classifierName = ClassifierName.getDefaultInstance("classifier1"); + private final SubjectName subjectName = SubjectName.getDefaultInstance("subject1"); + private final RuleName ruleName = new RuleName("rule1"); + + private InstanceIdentifier rpIid; + private ResolvedPolicy resolvedPolicy; + + private ScheduledExecutorService executor; + private StatisticsManager statisticsManager; + + private OFStatisticsManager ofStatisticsManager; + private Classifier classifier; + private Map, Classifier> classifierByIid; + + @Before + public void init() { + executor = mock(ScheduledExecutorService.class); + statisticsManager = mock(StatisticsManager.class); + + classifier = new ClassifierBuilder() + .setName(classifierName) + .build(); + resolvedPolicy = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, + consumerEpgId, providerEpgId, classifier); + + rpIid = InstanceIdentifier.create(ResolvedPolicy.class); + + ofStatisticsManager = new OFStatisticsManager(executor, statisticsManager); + ofStatisticsManager.setDelay(20L); + ofStatisticsManager.setSflowCollectorUri("http://localhost:1234"); + + classifierByIid = + ResolvedPolicyClassifierListener.resolveClassifiers(resolvedPolicy, rpIid); + } + + @Test + public void testConstructor() throws Exception { + OFStatisticsManager other = new OFStatisticsManager(executor, statisticsManager); + other.close(); + } + + @Test + public void testTTT(){ + for (Map.Entry, Classifier> classifierEntry : classifierByIid.entrySet()) { + ofStatisticsManager.pullStatsForClassifier(classifierEntry.getKey(), + classifierEntry.getValue()); + } + } +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ReadGbpFlowCacheTaskTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ReadGbpFlowCacheTaskTest.java index 873b73dc8..6ba1ef273 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ReadGbpFlowCacheTaskTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ReadGbpFlowCacheTaskTest.java @@ -1,66 +1,66 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import javax.ws.rs.core.MultivaluedMap; - -import java.util.concurrent.ScheduledExecutorService; - -import com.sun.jersey.api.client.ClientResponse; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; -import org.opendaylight.groupbasedpolicy.api.StatisticsManager; - -public class ReadGbpFlowCacheTaskTest { - - ReadGbpFlowCacheTask task; - private JsonRestClientResponse response; - - @Before - public void init() { - StatisticsManager statisticsManager = mock(StatisticsManager.class); - ScheduledExecutorService executor = mock(ScheduledExecutorService.class); - ClientResponse clientResponse = mock(ClientResponse.class); - response = mock(JsonRestClientResponse.class); - when(response.getJsonResponse()).thenReturn("[{\"one\":1, \"two\":2, \"three\":3}]"); - when(response.getStatusCode()).thenReturn(200); - when(response.getClientResponse()).thenReturn(clientResponse); - SFlowRTConnection connection = mock(SFlowRTConnection.class); - when(connection.get(anyString(), Mockito.>any())).thenReturn(response); - when(connection.getExecutor()).thenReturn(executor); - doNothing().when(executor).execute(any(Runnable.class)); - - task = new ReadGbpFlowCacheTask("cache1", connection, statisticsManager, 100, 0.1, "sum"); - } - - @Test - public void testRun() { - task.run(); - } - - @Test - public void testRun_response300() { - when(response.getStatusCode()).thenReturn(300); - task.run(); - } - - @Test - public void testRun_response400() { - when(response.getStatusCode()).thenReturn(400); - task.run(); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import javax.ws.rs.core.MultivaluedMap; + +import java.util.concurrent.ScheduledExecutorService; + +import com.sun.jersey.api.client.ClientResponse; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.groupbasedpolicy.api.StatisticsManager; + +public class ReadGbpFlowCacheTaskTest { + + ReadGbpFlowCacheTask task; + private JsonRestClientResponse response; + + @Before + public void init() { + StatisticsManager statisticsManager = mock(StatisticsManager.class); + ScheduledExecutorService executor = mock(ScheduledExecutorService.class); + ClientResponse clientResponse = mock(ClientResponse.class); + response = mock(JsonRestClientResponse.class); + when(response.getJsonResponse()).thenReturn("[{\"one\":1, \"two\":2, \"three\":3}]"); + when(response.getStatusCode()).thenReturn(200); + when(response.getClientResponse()).thenReturn(clientResponse); + SFlowRTConnection connection = mock(SFlowRTConnection.class); + when(connection.get(anyString(), Mockito.>any())).thenReturn(response); + when(connection.getExecutor()).thenReturn(executor); + doNothing().when(executor).execute(any(Runnable.class)); + + task = new ReadGbpFlowCacheTask("cache1", connection, statisticsManager, 100, 0.1, "sum"); + } + + @Test + public void testRun() { + task.run(); + } + + @Test + public void testRun_response300() { + when(response.getStatusCode()).thenReturn(300); + task.run(); + } + + @Test + public void testRun_response400() { + when(response.getStatusCode()).thenReturn(400); + task.run(); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ResolvedPolicyClassifierListenerTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ResolvedPolicyClassifierListenerTest.java index 430eb59d2..6292d4dd9 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ResolvedPolicyClassifierListenerTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ResolvedPolicyClassifierListenerTest.java @@ -1,121 +1,121 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.Set; - -import com.google.common.collect.ImmutableSet; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.ParameterValueList; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPolicies; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicyKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class ResolvedPolicyClassifierListenerTest { - - private ResolvedPolicyClassifierListener classifierListener; - private DataObjectModification rootNode; - private Set> changes; - - private InstanceIdentifier rootIdentifier; - - private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1"); - private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1"); - private final ContractId contractId = new ContractId("contract1"); - private final TenantId tenantId = new TenantId("tenant1"); - private final ClassifierName classifierName = new ClassifierName("classifier1"); - private final SubjectName subjectName = new SubjectName("subject1"); - private final RuleName ruleName = new RuleName("rule1"); - - @SuppressWarnings("unchecked") - @Before - public void init() { - DataBroker dataProvider = mock(DataBroker.class); - OFStatisticsManager ofStatisticsManager = mock(OFStatisticsManager.class); - - classifierListener = spy(new ResolvedPolicyClassifierListener(dataProvider, ofStatisticsManager)); - - ResolvedPolicyKey key = mock(ResolvedPolicyKey.class); - rootNode = mock(DataObjectModification.class); - rootIdentifier = InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class, key).build(); - DataTreeIdentifier rootPath = - new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); - - DataTreeModification change = mock(DataTreeModification.class); - - when(change.getRootNode()).thenReturn(rootNode); - when(change.getRootPath()).thenReturn(rootPath); - - changes = ImmutableSet.of(change); - - ParameterValueList parameterValues = new ParameterValueList(); - parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) - .addProto(IpProtoClassifierDefinition.TCP_VALUE); - - Classifier classifier = new ClassifierBuilder().setName(classifierName) - .setClassifierDefinitionId(IpProtoClassifierDefinition.ID) - .setParameterValue(parameterValues) - .build(); - ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, - providerEpgId, classifier); - when(rootNode.getDataBefore()).thenReturn(rp); - when(rootNode.getDataAfter()).thenReturn(rp); - } - - @Test - public void testOnWrite() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); - - classifierListener.onDataTreeChanged(changes); - - verify(classifierListener).onWrite(rootNode, rootIdentifier); - } - - @Test - public void testOnDelete() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); - - classifierListener.onDataTreeChanged(changes); - - verify(classifierListener).onDelete(rootNode, rootIdentifier); - } - - @Test - public void testOnSubtreeModified() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); - - classifierListener.onDataTreeChanged(changes); - - verify(classifierListener).onSubtreeModified(rootNode, rootIdentifier); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Set; + +import com.google.common.collect.ImmutableSet; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.ParameterValueList; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.ResolvedPolicies; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicyKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class ResolvedPolicyClassifierListenerTest { + + private ResolvedPolicyClassifierListener classifierListener; + private DataObjectModification rootNode; + private Set> changes; + + private InstanceIdentifier rootIdentifier; + + private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1"); + private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1"); + private final ContractId contractId = new ContractId("contract1"); + private final TenantId tenantId = new TenantId("tenant1"); + private final ClassifierName classifierName = new ClassifierName("classifier1"); + private final SubjectName subjectName = new SubjectName("subject1"); + private final RuleName ruleName = new RuleName("rule1"); + + @SuppressWarnings("unchecked") + @Before + public void init() { + DataBroker dataProvider = mock(DataBroker.class); + OFStatisticsManager ofStatisticsManager = mock(OFStatisticsManager.class); + + classifierListener = spy(new ResolvedPolicyClassifierListener(dataProvider, ofStatisticsManager)); + + ResolvedPolicyKey key = mock(ResolvedPolicyKey.class); + rootNode = mock(DataObjectModification.class); + rootIdentifier = InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class, key).build(); + DataTreeIdentifier rootPath = + new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); + + DataTreeModification change = mock(DataTreeModification.class); + + when(change.getRootNode()).thenReturn(rootNode); + when(change.getRootPath()).thenReturn(rootPath); + + changes = ImmutableSet.of(change); + + ParameterValueList parameterValues = new ParameterValueList(); + parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) + .addProto(IpProtoClassifierDefinition.TCP_VALUE); + + Classifier classifier = new ClassifierBuilder().setName(classifierName) + .setClassifierDefinitionId(IpProtoClassifierDefinition.ID) + .setParameterValue(parameterValues) + .build(); + ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, + providerEpgId, classifier); + when(rootNode.getDataBefore()).thenReturn(rp); + when(rootNode.getDataAfter()).thenReturn(rp); + } + + @Test + public void testOnWrite() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + + classifierListener.onDataTreeChanged(changes); + + verify(classifierListener).onWrite(rootNode, rootIdentifier); + } + + @Test + public void testOnDelete() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); + + classifierListener.onDataTreeChanged(changes); + + verify(classifierListener).onDelete(rootNode, rootIdentifier); + } + + @Test + public void testOnSubtreeModified() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); + + classifierListener.onDataTreeChanged(changes); + + verify(classifierListener).onSubtreeModified(rootNode, rootIdentifier); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/SflowClientSettingsListenerTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/SflowClientSettingsListenerTest.java index c5e1b2074..baf32c45f 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/SflowClientSettingsListenerTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/SflowClientSettingsListenerTest.java @@ -1,97 +1,97 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.Set; -import java.util.concurrent.ScheduledExecutorService; - -import com.google.common.collect.ImmutableSet; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.api.StatisticsManager; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.sflow.values.SflowClientSettings; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class SflowClientSettingsListenerTest { - - private SflowClientSettingsListener listener; - private DataObjectModification rootNode; - private Set> changes; - - private InstanceIdentifier rootIdentifier; - - @SuppressWarnings("unchecked") - @Before - public void init() { - DataBroker dataProvider = mock(DataBroker.class); - - StatisticsManager ofStatisticsManager = mock(StatisticsManager.class); - ScheduledExecutorService executor = mock(ScheduledExecutorService.class); - listener = spy(new SflowClientSettingsListener(dataProvider, executor, ofStatisticsManager)); - - SflowClientSettings sflowClientSettings = mock(SflowClientSettings.class); - - rootNode = mock(DataObjectModification.class); - rootIdentifier = InstanceIdentifier.builder(OfOverlayConfig.class).child(SflowClientSettings.class).build(); - DataTreeIdentifier rootPath = - new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); - - DataTreeModification change = mock(DataTreeModification.class); - - when(change.getRootNode()).thenReturn(rootNode); - when(change.getRootPath()).thenReturn(rootPath); - - changes = ImmutableSet.of(change); - - when(rootNode.getDataBefore()).thenReturn(sflowClientSettings); - when(rootNode.getDataAfter()).thenReturn(sflowClientSettings); - } - - @Test - public void testOnWrite() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); - - listener.onDataTreeChanged(changes); - - verify(listener).onWrite(rootNode, rootIdentifier); - } - - @Test - public void testOnDelete() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); - - listener.onDataTreeChanged(changes); - - verify(listener).onDelete(rootNode, rootIdentifier); - } - - @Test - public void testOnSubtreeModified() { - when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); - - // first call will initialize uninitialized dependencies; - // second call will call #close on them - listener.onDataTreeChanged(changes); - listener.onDataTreeChanged(changes); - verify(listener, times(2)).onSubtreeModified(rootNode, rootIdentifier); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Set; +import java.util.concurrent.ScheduledExecutorService; + +import com.google.common.collect.ImmutableSet; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.api.StatisticsManager; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.sflow.values.SflowClientSettings; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class SflowClientSettingsListenerTest { + + private SflowClientSettingsListener listener; + private DataObjectModification rootNode; + private Set> changes; + + private InstanceIdentifier rootIdentifier; + + @SuppressWarnings("unchecked") + @Before + public void init() { + DataBroker dataProvider = mock(DataBroker.class); + + StatisticsManager ofStatisticsManager = mock(StatisticsManager.class); + ScheduledExecutorService executor = mock(ScheduledExecutorService.class); + listener = spy(new SflowClientSettingsListener(dataProvider, executor, ofStatisticsManager)); + + SflowClientSettings sflowClientSettings = mock(SflowClientSettings.class); + + rootNode = mock(DataObjectModification.class); + rootIdentifier = InstanceIdentifier.builder(OfOverlayConfig.class).child(SflowClientSettings.class).build(); + DataTreeIdentifier rootPath = + new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, rootIdentifier); + + DataTreeModification change = mock(DataTreeModification.class); + + when(change.getRootNode()).thenReturn(rootNode); + when(change.getRootPath()).thenReturn(rootPath); + + changes = ImmutableSet.of(change); + + when(rootNode.getDataBefore()).thenReturn(sflowClientSettings); + when(rootNode.getDataAfter()).thenReturn(sflowClientSettings); + } + + @Test + public void testOnWrite() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + + listener.onDataTreeChanged(changes); + + verify(listener).onWrite(rootNode, rootIdentifier); + } + + @Test + public void testOnDelete() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); + + listener.onDataTreeChanged(changes); + + verify(listener).onDelete(rootNode, rootIdentifier); + } + + @Test + public void testOnSubtreeModified() { + when(rootNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); + + // first call will initialize uninitialized dependencies; + // second call will call #close on them + listener.onDataTreeChanged(changes); + listener.onDataTreeChanged(changes); + verify(listener, times(2)).onSubtreeModified(rootNode, rootIdentifier); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheBuilderTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheBuilderTest.java index 5750241ee..3e3d292d8 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheBuilderTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheBuilderTest.java @@ -1,77 +1,77 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction; - -public class FlowCacheBuilderTest { - - private static final String NAME_1 = "name_1"; - private static final Direction direction = Direction.Bidirectional; - private static final String VALUE_1 = "value_1"; - private FlowCacheDefinition flowCacheDefinition; - private FlowCache.FlowCacheBuilder builder; - - @Before - public void init() { - builder = new FlowCache.FlowCacheBuilder(); - flowCacheDefinition = FlowCacheDefinition.builder().setValue(VALUE_1).build(); - } - - @Test - public void testConstructor() { - FlowCache.FlowCacheBuilder b = null; - try { - b = new FlowCache.FlowCacheBuilder(); - } catch (Exception e) { - fail("Exception thrown: " + e.getMessage()); - } - assertNotNull(b); - } - - @Test - public void testSetName() { - builder.setName(NAME_1); - - assertEquals(NAME_1, builder.getName()); - } - - @Test - public void testSetDefinition() { - builder.setDefinition(flowCacheDefinition); - - assertEquals(VALUE_1, builder.getDefinition().getValue()); - } - - @Test - public void testSetDirection() { - builder.setDirection(direction); - - assertEquals(direction, builder.getDirection()); - } - - @Test - public void testBuild() { - FlowCache cache = builder.setName(NAME_1) - .setDefinition(flowCacheDefinition) - .setDirection(direction) - .build(); - - assertNotNull(cache); - assertEquals(NAME_1, cache.getName()); - assertEquals(flowCacheDefinition, cache.getDefinition()); - assertEquals(direction, cache.getDirection()); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction; + +public class FlowCacheBuilderTest { + + private static final String NAME_1 = "name_1"; + private static final Direction direction = Direction.Bidirectional; + private static final String VALUE_1 = "value_1"; + private FlowCacheDefinition flowCacheDefinition; + private FlowCache.FlowCacheBuilder builder; + + @Before + public void init() { + builder = new FlowCache.FlowCacheBuilder(); + flowCacheDefinition = FlowCacheDefinition.builder().setValue(VALUE_1).build(); + } + + @Test + public void testConstructor() { + FlowCache.FlowCacheBuilder b = null; + try { + b = new FlowCache.FlowCacheBuilder(); + } catch (Exception e) { + fail("Exception thrown: " + e.getMessage()); + } + assertNotNull(b); + } + + @Test + public void testSetName() { + builder.setName(NAME_1); + + assertEquals(NAME_1, builder.getName()); + } + + @Test + public void testSetDefinition() { + builder.setDefinition(flowCacheDefinition); + + assertEquals(VALUE_1, builder.getDefinition().getValue()); + } + + @Test + public void testSetDirection() { + builder.setDirection(direction); + + assertEquals(direction, builder.getDirection()); + } + + @Test + public void testBuild() { + FlowCache cache = builder.setName(NAME_1) + .setDefinition(flowCacheDefinition) + .setDirection(direction) + .build(); + + assertNotNull(cache); + assertEquals(NAME_1, cache.getName()); + assertEquals(flowCacheDefinition, cache.getDefinition()); + assertEquals(direction, cache.getDirection()); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheDefinitionBuilderTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheDefinitionBuilderTest.java index 33c7adcf8..1de94c4dd 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheDefinitionBuilderTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheDefinitionBuilderTest.java @@ -1,69 +1,69 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -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.junit.Assert.fail; - -import org.junit.Before; -import org.junit.Test; - -public class FlowCacheDefinitionBuilderTest { - - private static final String VALUE = "value-1"; - - private FlowCacheDefinition.FlowCacheDefinitionBuilder builder; - - @Before - public void init() { - builder = new FlowCacheDefinition.FlowCacheDefinitionBuilder(); - } - - @Test - public void testConstructor() { - FlowCacheDefinition.FlowCacheDefinitionBuilder b = null; - try { - b = new FlowCacheDefinition.FlowCacheDefinitionBuilder(); - } catch (Exception e) { - fail("Exception thrown: " + e.getMessage()); - } - assertNotNull(b); - assertFalse(b.isLog()); - assertNotNull(b.getFilterBuilder()); - assertNotNull(b.getKeysBuilder()); - assertNotNull(b.getValue()); - } - - @Test - public void testSetValue() { - builder.setValue(VALUE); - assertEquals(VALUE, builder.getValue()); - } - - @Test - public void testSetLog() { - builder.setLog(true); - assertTrue(builder.isLog()); - } - - @Test - public void testBuild() { - builder.setValue(VALUE).setLog(true); - FlowCacheDefinition definition = builder.build(); - - assertEquals(VALUE, definition.getValue()); - assertTrue(definition.getLog()); - assertNotNull(definition.getKeys()); - assertNotNull(definition.getFilter()); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +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.junit.Assert.fail; + +import org.junit.Before; +import org.junit.Test; + +public class FlowCacheDefinitionBuilderTest { + + private static final String VALUE = "value-1"; + + private FlowCacheDefinition.FlowCacheDefinitionBuilder builder; + + @Before + public void init() { + builder = new FlowCacheDefinition.FlowCacheDefinitionBuilder(); + } + + @Test + public void testConstructor() { + FlowCacheDefinition.FlowCacheDefinitionBuilder b = null; + try { + b = new FlowCacheDefinition.FlowCacheDefinitionBuilder(); + } catch (Exception e) { + fail("Exception thrown: " + e.getMessage()); + } + assertNotNull(b); + assertFalse(b.isLog()); + assertNotNull(b.getFilterBuilder()); + assertNotNull(b.getKeysBuilder()); + assertNotNull(b.getValue()); + } + + @Test + public void testSetValue() { + builder.setValue(VALUE); + assertEquals(VALUE, builder.getValue()); + } + + @Test + public void testSetLog() { + builder.setLog(true); + assertTrue(builder.isLog()); + } + + @Test + public void testBuild() { + builder.setValue(VALUE).setLog(true); + FlowCacheDefinition definition = builder.build(); + + assertEquals(VALUE, definition.getValue()); + assertTrue(definition.getLog()); + assertNotNull(definition.getKeys()); + assertNotNull(definition.getFilter()); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheDefinitionTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheDefinitionTest.java index 37021c7b6..fd4cf8d58 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheDefinitionTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheDefinitionTest.java @@ -1,28 +1,28 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import org.junit.Test; - -public class FlowCacheDefinitionTest { - - @Test - public void testBuilder() { - FlowCacheDefinition.FlowCacheDefinitionBuilder builder = null; - try { - builder = FlowCacheDefinition.builder(); - } catch (Exception e) { - fail("Exception thrown: " + e.getMessage()); - } - assertNotNull(builder); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import org.junit.Test; + +public class FlowCacheDefinitionTest { + + @Test + public void testBuilder() { + FlowCacheDefinition.FlowCacheDefinitionBuilder builder = null; + try { + builder = FlowCacheDefinition.builder(); + } catch (Exception e) { + fail("Exception thrown: " + e.getMessage()); + } + assertNotNull(builder); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFactoryTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFactoryTest.java index 791ea8de5..835b8b2c7 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFactoryTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFactoryTest.java @@ -1,248 +1,248 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.Arrays; -import java.util.List; - -import com.google.common.collect.ImmutableList; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.ResolvedPolicyClassifierListener; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.util.FlowCacheCons; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.util.IidSflowNameUtil; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.ParameterValueList; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class FlowCacheFactoryTest { - - private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1"); - private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1"); - private final ContractId contractId = new ContractId("contract1"); - private final TenantId tenantId = new TenantId("tenant1"); - private final ClassifierName classifierName = ClassifierName.getDefaultInstance("classifier1"); - private final SubjectName subjectName = SubjectName.getDefaultInstance("subject1"); - private final RuleName ruleName = new RuleName("rule1"); - - private InstanceIdentifier rpIid; - private String expectedName; - - @Before - public void init() { - rpIid = InstanceIdentifier.create(ResolvedPolicy.class); - expectedName = tenantId.getValue() + IidSflowNameUtil.KEY_DELIMETER + contractId.getValue() - + IidSflowNameUtil.KEY_DELIMETER + subjectName.getValue() + IidSflowNameUtil.DELIMETER - + ruleName.getValue() + IidSflowNameUtil.DELIMETER + classifierName.getValue() - + IidSflowNameUtil.DELIMETER + FlowCacheCons.Value.BYTES.get(); - } - - @Test - public void testCreateFlowCache_EtherTypeClassifier_IPv4() { - ParameterValueList parameterValues = new ParameterValueList(); - parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE); - - Classifier classifier = newEtherTypeClassifier(parameterValues); - ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, - providerEpgId, classifier); - - FlowCache flowCache = callCreateFlowCache(rp, classifier); - - assertNotNull(flowCache); - - List keys = Arrays.asList(flowCache.getKeyNames()); - List expectedKeys = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), - FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); - - assertEquals(expectedName, flowCache.getName()); - assertEquals(expectedKeys.size(), keys.size()); - assertTrue(keys.containsAll(expectedKeys)); - } - - @Test - public void testCreateFlowCache_IpProtoClassifier_TCP_IPv4() { - - ParameterValueList parameterValues = new ParameterValueList(); - parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) - .addProto(IpProtoClassifierDefinition.TCP_VALUE); - - Classifier classifier = newIpProtoClassifier(parameterValues); - ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, - providerEpgId, classifier); - - FlowCache flowCache = callCreateFlowCache(rp, classifier); - - assertNotNull(flowCache); - - List keys = Arrays.asList(flowCache.getKeyNames()); - List expectedKeys = - ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), FlowCacheCons.Key.IP_PROTOCOL.get(), - FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); - - assertEquals(expectedName, flowCache.getName()); - assertEquals(expectedKeys.size(), keys.size()); - assertTrue(keys.containsAll(expectedKeys)); - } - - @Test - public void testCreateFlowCache_IpProtoClassifier_UDP_noEthertype() { - ParameterValueList parameterValues = new ParameterValueList(); - parameterValues.addProto(IpProtoClassifierDefinition.UDP_VALUE); - - Classifier classifier = newIpProtoClassifier(parameterValues); - ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, - providerEpgId, classifier); - - FlowCache flowCache = callCreateFlowCache(rp, classifier); - - assertNotNull(flowCache); - - List keys = Arrays.asList(flowCache.getKeyNames()); - List expectedKeys = - ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), FlowCacheCons.Key.IP_PROTOCOL.get(), - FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); - - assertEquals(expectedName, flowCache.getName()); - assertEquals(expectedKeys.size(), keys.size()); - assertTrue(keys.containsAll(expectedKeys)); - } - - @Test - public void testCreateFlowCache_L4Classifier_dstPort() { - ParameterValueList parameterValues = new ParameterValueList(); - parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) - .addProto(IpProtoClassifierDefinition.TCP_VALUE) - .addDstPort((long) 80); - Classifier classifier = newL4Classifier(parameterValues); - ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, - providerEpgId, classifier); - - FlowCache flowCache = callCreateFlowCache(rp, classifier); - - assertNotNull(flowCache); - - List keys = Arrays.asList(flowCache.getKeyNames()); - List expectedKeys = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), - FlowCacheCons.Key.IP_PROTOCOL.get(), FlowCacheCons.Key.TCP_DST_PORT.get(), - FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); - - assertEquals(expectedName, flowCache.getName()); - assertEquals(expectedKeys.size(), keys.size()); - assertTrue(keys.containsAll(expectedKeys)); - - ParameterValueList parameterValuesUDP = new ParameterValueList(); - parameterValuesUDP.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) - .addProto(IpProtoClassifierDefinition.UDP_VALUE) - .addDstPort((long) 80); - Classifier classifierUDP = newL4Classifier(parameterValuesUDP); - ResolvedPolicy rpUDP = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, - providerEpgId, classifierUDP); - - FlowCache flowCacheUDP = callCreateFlowCache(rpUDP, classifierUDP); - - assertNotNull(flowCacheUDP); - - List keysUDP = Arrays.asList(flowCacheUDP.getKeyNames()); - List expectedKeysUDP = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), - FlowCacheCons.Key.IP_PROTOCOL.get(), FlowCacheCons.Key.UDP_DST_PORT.get(), - FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); - - assertEquals(expectedName, flowCacheUDP.getName()); - assertEquals(expectedKeysUDP.size(), keysUDP.size()); - assertTrue(keysUDP.containsAll(expectedKeysUDP)); - } - - @Test - public void testCreateFlowCache_L4Classifier_srcPort() { - ParameterValueList parameterValues = new ParameterValueList(); - parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) - .addProto(IpProtoClassifierDefinition.TCP_VALUE) - .addSrcPort((long) 80); - Classifier classifier = newL4Classifier(parameterValues); - ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, - providerEpgId, classifier); - - FlowCache flowCache = callCreateFlowCache(rp, classifier); - - assertNotNull(flowCache); - - List keys = Arrays.asList(flowCache.getKeyNames()); - List expectedKeys = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), - FlowCacheCons.Key.IP_PROTOCOL.get(), FlowCacheCons.Key.TCP_SRC_PORT.get(), - FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); - - assertEquals(expectedName, flowCache.getName()); - assertEquals(expectedKeys.size(), keys.size()); - assertTrue(keys.containsAll(expectedKeys)); - - ParameterValueList parameterValuesUDP = new ParameterValueList(); - parameterValuesUDP.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) - .addProto(IpProtoClassifierDefinition.UDP_VALUE) - .addSrcPort((long) 80); - Classifier classifierUDP = newL4Classifier(parameterValuesUDP); - ResolvedPolicy rpUDP = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, - providerEpgId, classifierUDP); - - FlowCache flowCacheUDP = callCreateFlowCache(rpUDP, classifierUDP); - - assertNotNull(flowCacheUDP); - - List keysUDP = Arrays.asList(flowCacheUDP.getKeyNames()); - List expectedKeysUDP = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), - FlowCacheCons.Key.IP_PROTOCOL.get(), FlowCacheCons.Key.UDP_SRC_PORT.get(), - FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); - - assertEquals(expectedName, flowCacheUDP.getName()); - assertEquals(expectedKeysUDP.size(), keysUDP.size()); - assertTrue(keysUDP.containsAll(expectedKeysUDP)); - } - - private Classifier newClassifier(ClassifierDefinitionId classifierDefinitionId, - ParameterValueList parameterValues) { - return new ClassifierBuilder().setName(classifierName) - .setClassifierDefinitionId(classifierDefinitionId) - .setParameterValue(parameterValues) - .build(); - } - - private Classifier newEtherTypeClassifier(ParameterValueList parameterValues) { - return newClassifier(EtherTypeClassifierDefinition.ID, parameterValues); - } - - private Classifier newIpProtoClassifier(ParameterValueList parameterValues) { - return newClassifier(IpProtoClassifierDefinition.ID, parameterValues); - } - - private Classifier newL4Classifier(ParameterValueList parameterValues) { - return newClassifier(L4ClassifierDefinition.ID, parameterValues); - } - - private FlowCache callCreateFlowCache(ResolvedPolicy rp, Classifier classifier) { - return FlowCacheFactory.createFlowCache( - TestUtils.getClassifierIid(ResolvedPolicyClassifierListener.resolveClassifiers(rp, rpIid)), classifier, - FlowCacheCons.Value.BYTES); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.List; + +import com.google.common.collect.ImmutableList; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.ResolvedPolicyClassifierListener; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.util.FlowCacheCons; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.util.IidSflowNameUtil; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.ParameterValueList; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class FlowCacheFactoryTest { + + private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1"); + private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1"); + private final ContractId contractId = new ContractId("contract1"); + private final TenantId tenantId = new TenantId("tenant1"); + private final ClassifierName classifierName = ClassifierName.getDefaultInstance("classifier1"); + private final SubjectName subjectName = SubjectName.getDefaultInstance("subject1"); + private final RuleName ruleName = new RuleName("rule1"); + + private InstanceIdentifier rpIid; + private String expectedName; + + @Before + public void init() { + rpIid = InstanceIdentifier.create(ResolvedPolicy.class); + expectedName = tenantId.getValue() + IidSflowNameUtil.KEY_DELIMETER + contractId.getValue() + + IidSflowNameUtil.KEY_DELIMETER + subjectName.getValue() + IidSflowNameUtil.DELIMETER + + ruleName.getValue() + IidSflowNameUtil.DELIMETER + classifierName.getValue() + + IidSflowNameUtil.DELIMETER + FlowCacheCons.Value.BYTES.get(); + } + + @Test + public void testCreateFlowCache_EtherTypeClassifier_IPv4() { + ParameterValueList parameterValues = new ParameterValueList(); + parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE); + + Classifier classifier = newEtherTypeClassifier(parameterValues); + ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, + providerEpgId, classifier); + + FlowCache flowCache = callCreateFlowCache(rp, classifier); + + assertNotNull(flowCache); + + List keys = Arrays.asList(flowCache.getKeyNames()); + List expectedKeys = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), + FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); + + assertEquals(expectedName, flowCache.getName()); + assertEquals(expectedKeys.size(), keys.size()); + assertTrue(keys.containsAll(expectedKeys)); + } + + @Test + public void testCreateFlowCache_IpProtoClassifier_TCP_IPv4() { + + ParameterValueList parameterValues = new ParameterValueList(); + parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) + .addProto(IpProtoClassifierDefinition.TCP_VALUE); + + Classifier classifier = newIpProtoClassifier(parameterValues); + ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, + providerEpgId, classifier); + + FlowCache flowCache = callCreateFlowCache(rp, classifier); + + assertNotNull(flowCache); + + List keys = Arrays.asList(flowCache.getKeyNames()); + List expectedKeys = + ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), FlowCacheCons.Key.IP_PROTOCOL.get(), + FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); + + assertEquals(expectedName, flowCache.getName()); + assertEquals(expectedKeys.size(), keys.size()); + assertTrue(keys.containsAll(expectedKeys)); + } + + @Test + public void testCreateFlowCache_IpProtoClassifier_UDP_noEthertype() { + ParameterValueList parameterValues = new ParameterValueList(); + parameterValues.addProto(IpProtoClassifierDefinition.UDP_VALUE); + + Classifier classifier = newIpProtoClassifier(parameterValues); + ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, + providerEpgId, classifier); + + FlowCache flowCache = callCreateFlowCache(rp, classifier); + + assertNotNull(flowCache); + + List keys = Arrays.asList(flowCache.getKeyNames()); + List expectedKeys = + ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), FlowCacheCons.Key.IP_PROTOCOL.get(), + FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); + + assertEquals(expectedName, flowCache.getName()); + assertEquals(expectedKeys.size(), keys.size()); + assertTrue(keys.containsAll(expectedKeys)); + } + + @Test + public void testCreateFlowCache_L4Classifier_dstPort() { + ParameterValueList parameterValues = new ParameterValueList(); + parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) + .addProto(IpProtoClassifierDefinition.TCP_VALUE) + .addDstPort((long) 80); + Classifier classifier = newL4Classifier(parameterValues); + ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, + providerEpgId, classifier); + + FlowCache flowCache = callCreateFlowCache(rp, classifier); + + assertNotNull(flowCache); + + List keys = Arrays.asList(flowCache.getKeyNames()); + List expectedKeys = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), + FlowCacheCons.Key.IP_PROTOCOL.get(), FlowCacheCons.Key.TCP_DST_PORT.get(), + FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); + + assertEquals(expectedName, flowCache.getName()); + assertEquals(expectedKeys.size(), keys.size()); + assertTrue(keys.containsAll(expectedKeys)); + + ParameterValueList parameterValuesUDP = new ParameterValueList(); + parameterValuesUDP.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) + .addProto(IpProtoClassifierDefinition.UDP_VALUE) + .addDstPort((long) 80); + Classifier classifierUDP = newL4Classifier(parameterValuesUDP); + ResolvedPolicy rpUDP = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, + providerEpgId, classifierUDP); + + FlowCache flowCacheUDP = callCreateFlowCache(rpUDP, classifierUDP); + + assertNotNull(flowCacheUDP); + + List keysUDP = Arrays.asList(flowCacheUDP.getKeyNames()); + List expectedKeysUDP = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), + FlowCacheCons.Key.IP_PROTOCOL.get(), FlowCacheCons.Key.UDP_DST_PORT.get(), + FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); + + assertEquals(expectedName, flowCacheUDP.getName()); + assertEquals(expectedKeysUDP.size(), keysUDP.size()); + assertTrue(keysUDP.containsAll(expectedKeysUDP)); + } + + @Test + public void testCreateFlowCache_L4Classifier_srcPort() { + ParameterValueList parameterValues = new ParameterValueList(); + parameterValues.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) + .addProto(IpProtoClassifierDefinition.TCP_VALUE) + .addSrcPort((long) 80); + Classifier classifier = newL4Classifier(parameterValues); + ResolvedPolicy rp = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, + providerEpgId, classifier); + + FlowCache flowCache = callCreateFlowCache(rp, classifier); + + assertNotNull(flowCache); + + List keys = Arrays.asList(flowCache.getKeyNames()); + List expectedKeys = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), + FlowCacheCons.Key.IP_PROTOCOL.get(), FlowCacheCons.Key.TCP_SRC_PORT.get(), + FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); + + assertEquals(expectedName, flowCache.getName()); + assertEquals(expectedKeys.size(), keys.size()); + assertTrue(keys.containsAll(expectedKeys)); + + ParameterValueList parameterValuesUDP = new ParameterValueList(); + parameterValuesUDP.addEthertype(EtherTypeClassifierDefinition.IPv4_VALUE) + .addProto(IpProtoClassifierDefinition.UDP_VALUE) + .addSrcPort((long) 80); + Classifier classifierUDP = newL4Classifier(parameterValuesUDP); + ResolvedPolicy rpUDP = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, consumerEpgId, + providerEpgId, classifierUDP); + + FlowCache flowCacheUDP = callCreateFlowCache(rpUDP, classifierUDP); + + assertNotNull(flowCacheUDP); + + List keysUDP = Arrays.asList(flowCacheUDP.getKeyNames()); + List expectedKeysUDP = ImmutableList.of(FlowCacheCons.Key.ETH_PROTOCOL.get(), + FlowCacheCons.Key.IP_PROTOCOL.get(), FlowCacheCons.Key.UDP_SRC_PORT.get(), + FlowCacheCons.Key.IP_SOURCE.get(), FlowCacheCons.Key.IP_DESTINATION.get()); + + assertEquals(expectedName, flowCacheUDP.getName()); + assertEquals(expectedKeysUDP.size(), keysUDP.size()); + assertTrue(keysUDP.containsAll(expectedKeysUDP)); + } + + private Classifier newClassifier(ClassifierDefinitionId classifierDefinitionId, + ParameterValueList parameterValues) { + return new ClassifierBuilder().setName(classifierName) + .setClassifierDefinitionId(classifierDefinitionId) + .setParameterValue(parameterValues) + .build(); + } + + private Classifier newEtherTypeClassifier(ParameterValueList parameterValues) { + return newClassifier(EtherTypeClassifierDefinition.ID, parameterValues); + } + + private Classifier newIpProtoClassifier(ParameterValueList parameterValues) { + return newClassifier(IpProtoClassifierDefinition.ID, parameterValues); + } + + private Classifier newL4Classifier(ParameterValueList parameterValues) { + return newClassifier(L4ClassifierDefinition.ID, parameterValues); + } + + private FlowCache callCreateFlowCache(ResolvedPolicy rp, Classifier classifier) { + return FlowCacheFactory.createFlowCache( + TestUtils.getClassifierIid(ResolvedPolicyClassifierListener.resolveClassifiers(rp, rpIid)), classifier, + FlowCacheCons.Value.BYTES); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFilterBuilderTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFilterBuilderTest.java index 85a02a323..0a41de2ee 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFilterBuilderTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFilterBuilderTest.java @@ -1,80 +1,80 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; - -public class FlowCacheFilterBuilderTest { - - private static final String VALUE_1 = "value_1"; - private static final String VALUE_2 = "value_2"; - private static final String VALUE_3 = "value_3"; - private static final List LIST = new ArrayList<>(); - - private FlowCacheFilter.FlowCacheFilterBuilder builder; - - @Before - public void init() { - builder = new FlowCacheFilter.FlowCacheFilterBuilder(); - LIST.add(VALUE_1); - LIST.add(VALUE_2); - } - - @Test - public void testConstructor() { - FlowCacheFilter.FlowCacheFilterBuilder b = null; - try { - b = new FlowCacheFilter.FlowCacheFilterBuilder(); - } catch (Exception e) { - fail("Exception thrown: " + e.getMessage()); - } - assertNotNull(b); - assertNotNull(b.getValues()); - assertTrue(b.getValues().isEmpty()); - } - - @Test - public void testSetValues() { - builder.setValues(LIST); - - assertFalse(builder.getValues().isEmpty()); - assertEquals(LIST.size(), builder.getValues().size()); - assertEquals(LIST.get(0), builder.getValues().get(0)); - } - - @Test - public void testAddValue() { - builder.setValues(LIST); - int expectedSize = LIST.size() + 1; - - builder.addValue(VALUE_3); - - assertEquals(expectedSize, builder.getValues().size()); - } - - @Test - public void testBuild() { - builder.setValues(LIST); - - FlowCacheFilter filter = builder.build(); - - assertTrue(filter.getValue().contains(VALUE_1)); - assertTrue(filter.getValue().contains(VALUE_2)); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class FlowCacheFilterBuilderTest { + + private static final String VALUE_1 = "value_1"; + private static final String VALUE_2 = "value_2"; + private static final String VALUE_3 = "value_3"; + private static final List LIST = new ArrayList<>(); + + private FlowCacheFilter.FlowCacheFilterBuilder builder; + + @Before + public void init() { + builder = new FlowCacheFilter.FlowCacheFilterBuilder(); + LIST.add(VALUE_1); + LIST.add(VALUE_2); + } + + @Test + public void testConstructor() { + FlowCacheFilter.FlowCacheFilterBuilder b = null; + try { + b = new FlowCacheFilter.FlowCacheFilterBuilder(); + } catch (Exception e) { + fail("Exception thrown: " + e.getMessage()); + } + assertNotNull(b); + assertNotNull(b.getValues()); + assertTrue(b.getValues().isEmpty()); + } + + @Test + public void testSetValues() { + builder.setValues(LIST); + + assertFalse(builder.getValues().isEmpty()); + assertEquals(LIST.size(), builder.getValues().size()); + assertEquals(LIST.get(0), builder.getValues().get(0)); + } + + @Test + public void testAddValue() { + builder.setValues(LIST); + int expectedSize = LIST.size() + 1; + + builder.addValue(VALUE_3); + + assertEquals(expectedSize, builder.getValues().size()); + } + + @Test + public void testBuild() { + builder.setValues(LIST); + + FlowCacheFilter filter = builder.build(); + + assertTrue(filter.getValue().contains(VALUE_1)); + assertTrue(filter.getValue().contains(VALUE_2)); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFilterTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFilterTest.java index 059f55006..5b37f5615 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFilterTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheFilterTest.java @@ -1,28 +1,28 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import org.junit.Test; - -public class FlowCacheFilterTest { - - @Test - public void testBuilder() { - FlowCacheFilter.FlowCacheFilterBuilder builder = null; - try { - builder = FlowCacheFilter.builder(); - } catch (Exception e) { - fail("Exception thrown: " + e.getMessage()); - } - assertNotNull(builder); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import org.junit.Test; + +public class FlowCacheFilterTest { + + @Test + public void testBuilder() { + FlowCacheFilter.FlowCacheFilterBuilder builder = null; + try { + builder = FlowCacheFilter.builder(); + } catch (Exception e) { + fail("Exception thrown: " + e.getMessage()); + } + assertNotNull(builder); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheKeysBuilderTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheKeysBuilderTest.java index 6227e0952..7c66567e8 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheKeysBuilderTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheKeysBuilderTest.java @@ -1,80 +1,80 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; - -public class FlowCacheKeysBuilderTest { - - private static final String VALUE_1 = "value_1"; - private static final String VALUE_2 = "value_2"; - private static final String VALUE_3 = "value_3"; - private static final List LIST = new ArrayList<>(); - - private FlowCacheKeys.FlowCacheKeysBuilder builder; - - @Before - public void init() { - builder = new FlowCacheKeys.FlowCacheKeysBuilder(); - LIST.add(VALUE_1); - LIST.add(VALUE_2); - } - - @Test - public void testConstructor() { - FlowCacheKeys.FlowCacheKeysBuilder b = null; - try { - b = new FlowCacheKeys.FlowCacheKeysBuilder(); - } catch (Exception e) { - fail("Exception thrown: " + e.getMessage()); - } - assertNotNull(b); - assertNotNull(b.getValues()); - assertTrue(b.getValues().isEmpty()); - } - - @Test - public void testSetValues() { - builder.setValues(LIST); - - assertFalse(builder.getValues().isEmpty()); - assertEquals(LIST.size(), builder.getValues().size()); - assertEquals(LIST.get(0), builder.getValues().get(0)); - } - - @Test - public void testAddValue() { - builder.setValues(LIST); - int expectedSize = LIST.size() + 1; - - builder.addValue(VALUE_3); - - assertEquals(expectedSize, builder.getValues().size()); - } - - @Test - public void testBuild() { - builder.setValues(LIST); - - FlowCacheKeys keys = builder.build(); - - assertTrue(keys.getValue().contains(VALUE_1)); - assertTrue(keys.getValue().contains(VALUE_2)); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class FlowCacheKeysBuilderTest { + + private static final String VALUE_1 = "value_1"; + private static final String VALUE_2 = "value_2"; + private static final String VALUE_3 = "value_3"; + private static final List LIST = new ArrayList<>(); + + private FlowCacheKeys.FlowCacheKeysBuilder builder; + + @Before + public void init() { + builder = new FlowCacheKeys.FlowCacheKeysBuilder(); + LIST.add(VALUE_1); + LIST.add(VALUE_2); + } + + @Test + public void testConstructor() { + FlowCacheKeys.FlowCacheKeysBuilder b = null; + try { + b = new FlowCacheKeys.FlowCacheKeysBuilder(); + } catch (Exception e) { + fail("Exception thrown: " + e.getMessage()); + } + assertNotNull(b); + assertNotNull(b.getValues()); + assertTrue(b.getValues().isEmpty()); + } + + @Test + public void testSetValues() { + builder.setValues(LIST); + + assertFalse(builder.getValues().isEmpty()); + assertEquals(LIST.size(), builder.getValues().size()); + assertEquals(LIST.get(0), builder.getValues().get(0)); + } + + @Test + public void testAddValue() { + builder.setValues(LIST); + int expectedSize = LIST.size() + 1; + + builder.addValue(VALUE_3); + + assertEquals(expectedSize, builder.getValues().size()); + } + + @Test + public void testBuild() { + builder.setValues(LIST); + + FlowCacheKeys keys = builder.build(); + + assertTrue(keys.getValue().contains(VALUE_1)); + assertTrue(keys.getValue().contains(VALUE_2)); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheKeysTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheKeysTest.java index 31e40fc34..dd06f5e37 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheKeysTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheKeysTest.java @@ -1,28 +1,28 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import org.junit.Test; - -public class FlowCacheKeysTest { - - @Test - public void testBuilder() { - FlowCacheKeys.FlowCacheKeysBuilder builder = null; - try { - builder = FlowCacheKeys.builder(); - } catch (Exception e) { - fail("Exception thrown: " + e.getMessage()); - } - assertNotNull(builder); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import org.junit.Test; + +public class FlowCacheKeysTest { + + @Test + public void testBuilder() { + FlowCacheKeys.FlowCacheKeysBuilder builder = null; + try { + builder = FlowCacheKeys.builder(); + } catch (Exception e) { + fail("Exception thrown: " + e.getMessage()); + } + assertNotNull(builder); + } + +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheTest.java index c8f37abd3..6479c4de3 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/flowcache/FlowCacheTest.java @@ -1,69 +1,69 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection; - -public class FlowCacheTest { - - private static final String KEY_1 = "key_1"; - private static final String KEY_2 = "key_2"; - private static final String NAME_1 = "name_1"; - private static final HasDirection.Direction direction = HasDirection.Direction.Bidirectional; - private static final String VALUE_1 = "value_1"; - private static FlowCacheDefinition flowCacheDefinition; - private List keysValues; - private String json; - - @Before - public void init() { - keysValues = new ArrayList<>(); - keysValues.add(KEY_1); - keysValues.add(KEY_2); - - FlowCacheDefinition.FlowCacheDefinitionBuilder flowCacheDefinitionBuilder = FlowCacheDefinition.builder(); - flowCacheDefinitionBuilder.getKeysBuilder().setValues(keysValues); - flowCacheDefinition = flowCacheDefinitionBuilder.setValue(VALUE_1).setLog(true).build(); - - json = "{\"keys\":\"" + KEY_1 + "," + KEY_2 + "\"," + "\"value\":\"" + VALUE_1 + "\"," - + "\"filter\":\"\",\"log\":true}"; - } - - @Test - public void testBuilder() { - FlowCache.FlowCacheBuilder builder = null; - try { - builder = FlowCache.builder(); - } catch (Exception e) { - fail("Exception thrown: " + e.getMessage()); - } - assertNotNull(builder); - } - - @Test - public void testConstructor_Implicitely() { - FlowCache flowCache = - FlowCache.builder().setDefinition(flowCacheDefinition).setDirection(direction).setName(NAME_1).build(); - - assertEquals(keysValues.size(), flowCache.getKeyNum()); - assertEquals(keysValues.get(0), flowCache.getKeyNames()[0]); - assertEquals(keysValues.get(1), flowCache.getKeyNames()[1]); - assertEquals(FlowCache.API_FLOW + NAME_1 + FlowCache.SUFFIX_JSON, flowCache.getPath()); - assertEquals(json, flowCache.getJsonDefinition()); - - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.flowcache; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection; + +public class FlowCacheTest { + + private static final String KEY_1 = "key_1"; + private static final String KEY_2 = "key_2"; + private static final String NAME_1 = "name_1"; + private static final HasDirection.Direction direction = HasDirection.Direction.Bidirectional; + private static final String VALUE_1 = "value_1"; + private static FlowCacheDefinition flowCacheDefinition; + private List keysValues; + private String json; + + @Before + public void init() { + keysValues = new ArrayList<>(); + keysValues.add(KEY_1); + keysValues.add(KEY_2); + + FlowCacheDefinition.FlowCacheDefinitionBuilder flowCacheDefinitionBuilder = FlowCacheDefinition.builder(); + flowCacheDefinitionBuilder.getKeysBuilder().setValues(keysValues); + flowCacheDefinition = flowCacheDefinitionBuilder.setValue(VALUE_1).setLog(true).build(); + + json = "{\"keys\":\"" + KEY_1 + "," + KEY_2 + "\"," + "\"value\":\"" + VALUE_1 + "\"," + + "\"filter\":\"\",\"log\":true}"; + } + + @Test + public void testBuilder() { + FlowCache.FlowCacheBuilder builder = null; + try { + builder = FlowCache.builder(); + } catch (Exception e) { + fail("Exception thrown: " + e.getMessage()); + } + assertNotNull(builder); + } + + @Test + public void testConstructor_Implicitely() { + FlowCache flowCache = + FlowCache.builder().setDefinition(flowCacheDefinition).setDirection(direction).setName(NAME_1).build(); + + assertEquals(keysValues.size(), flowCache.getKeyNum()); + assertEquals(keysValues.get(0), flowCache.getKeyNames()[0]); + assertEquals(keysValues.get(1), flowCache.getKeyNames()[1]); + assertEquals(FlowCache.API_FLOW + NAME_1 + FlowCache.SUFFIX_JSON, flowCache.getPath()); + assertEquals(json, flowCache.getJsonDefinition()); + + } +} diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/util/IidSflowNameUtilTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/util/IidSflowNameUtilTest.java index a493f470c..94627d570 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/util/IidSflowNameUtilTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/util/IidSflowNameUtilTest.java @@ -1,96 +1,96 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.util; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.ResolvedPolicyClassifierListener; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class IidSflowNameUtilTest { - - private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1"); - private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1"); - private final ContractId contractId = new ContractId("contract1"); - private final TenantId tenantId = new TenantId("tenant1"); - private final ClassifierName classifierName = ClassifierName.getDefaultInstance("classifier1"); - private final SubjectName subjectName = SubjectName.getDefaultInstance("subject1"); - private final RuleName ruleName = new RuleName("rule1"); - private InstanceIdentifier rpIid; - private String testName; - private ResolvedPolicy resolvedPolicy; - - @Before - public void init() { - Classifier classifier = mock(Classifier.class); - when(classifier.getKey()).thenReturn(new ClassifierKey(classifierName)); - - resolvedPolicy = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, - consumerEpgId, providerEpgId, classifier); - - rpIid = InstanceIdentifier.create(ResolvedPolicy.class); - testName = - tenantId.getValue() + IidSflowNameUtil.KEY_DELIMETER + contractId.getValue() + IidSflowNameUtil.KEY_DELIMETER + subjectName - .getValue() + IidSflowNameUtil.DELIMETER + ruleName.getValue() + IidSflowNameUtil.DELIMETER + classifierName - .getValue() + IidSflowNameUtil.DELIMETER + FlowCacheCons.Value.BYTES.get(); - } - - @Test - public void testCreateFlowCacheName() { - InstanceIdentifier classifierIid = TestUtils.getClassifierIid( - ResolvedPolicyClassifierListener.resolveClassifiers(resolvedPolicy, rpIid)); - - assertEquals(testName, - IidSflowNameUtil.createFlowCacheName(classifierIid, FlowCacheCons.Value.BYTES)); - } - - @Test - public void testResolveContractIdFromFlowCacheName() { - assertEquals(contractId.getValue(), - IidSflowNameUtil.resolveContractIdFromFlowCacheName(testName).getValue()); - } - - @Test - public void testResolveSubjectNameFromFlowCacheName() { - assertEquals(subjectName.getValue(), - IidSflowNameUtil.resolveSubjectNameFromFlowCacheName(testName).getValue()); - } - - @Test - public void testResolveRuleNameFromFlowCacheName() { - assertEquals(ruleName.getValue(), - IidSflowNameUtil.resolveRuleNameFromFlowCacheName(testName).getValue()); - } - - @Test - public void testResolveClassifierNameFromFlowCacheName() { - assertEquals(classifierName.getValue(), - IidSflowNameUtil.resolveClassifierNameFromFlowCacheName(testName).getValue()); - } - - @Test - public void testResolveFlowCacheValue() { - assertEquals(FlowCacheCons.Value.BYTES.get(), - IidSflowNameUtil.resolveFlowCacheValue(testName)); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.util; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.statistics.ResolvedPolicyClassifierListener; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.test.TestUtils; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.ClassifierKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class IidSflowNameUtilTest { + + private final EndpointGroupId consumerEpgId = new EndpointGroupId("consumerEpg1"); + private final EndpointGroupId providerEpgId = new EndpointGroupId("providerEpg1"); + private final ContractId contractId = new ContractId("contract1"); + private final TenantId tenantId = new TenantId("tenant1"); + private final ClassifierName classifierName = ClassifierName.getDefaultInstance("classifier1"); + private final SubjectName subjectName = SubjectName.getDefaultInstance("subject1"); + private final RuleName ruleName = new RuleName("rule1"); + private InstanceIdentifier rpIid; + private String testName; + private ResolvedPolicy resolvedPolicy; + + @Before + public void init() { + Classifier classifier = mock(Classifier.class); + when(classifier.getKey()).thenReturn(new ClassifierKey(classifierName)); + + resolvedPolicy = TestUtils.newResolvedPolicy(tenantId, contractId, subjectName, ruleName, + consumerEpgId, providerEpgId, classifier); + + rpIid = InstanceIdentifier.create(ResolvedPolicy.class); + testName = + tenantId.getValue() + IidSflowNameUtil.KEY_DELIMETER + contractId.getValue() + IidSflowNameUtil.KEY_DELIMETER + subjectName + .getValue() + IidSflowNameUtil.DELIMETER + ruleName.getValue() + IidSflowNameUtil.DELIMETER + classifierName + .getValue() + IidSflowNameUtil.DELIMETER + FlowCacheCons.Value.BYTES.get(); + } + + @Test + public void testCreateFlowCacheName() { + InstanceIdentifier classifierIid = TestUtils.getClassifierIid( + ResolvedPolicyClassifierListener.resolveClassifiers(resolvedPolicy, rpIid)); + + assertEquals(testName, + IidSflowNameUtil.createFlowCacheName(classifierIid, FlowCacheCons.Value.BYTES)); + } + + @Test + public void testResolveContractIdFromFlowCacheName() { + assertEquals(contractId.getValue(), + IidSflowNameUtil.resolveContractIdFromFlowCacheName(testName).getValue()); + } + + @Test + public void testResolveSubjectNameFromFlowCacheName() { + assertEquals(subjectName.getValue(), + IidSflowNameUtil.resolveSubjectNameFromFlowCacheName(testName).getValue()); + } + + @Test + public void testResolveRuleNameFromFlowCacheName() { + assertEquals(ruleName.getValue(), + IidSflowNameUtil.resolveRuleNameFromFlowCacheName(testName).getValue()); + } + + @Test + public void testResolveClassifierNameFromFlowCacheName() { + assertEquals(classifierName.getValue(), + IidSflowNameUtil.resolveClassifierNameFromFlowCacheName(testName).getValue()); + } + + @Test + public void testResolveFlowCacheValue() { + assertEquals(FlowCacheCons.Value.BYTES.get(), + IidSflowNameUtil.resolveFlowCacheValue(testName)); + } + +} diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/nat/NatManager.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/nat/NatManager.java index ef01eb379..bc1904457 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/nat/NatManager.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/nat/NatManager.java @@ -1,84 +1,84 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.vpp.nat; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.NatInstanceCommand; -import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.NatInstanceCommand.NatInstanceCommandBuilder; -import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.PolicyContext; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.GbpNetconfTransaction; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.nat.config.nat.instances.nat.instance.mapping.table.MappingEntryBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.NatAddressRenderer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.Endpoints; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -import org.slf4j.Logger; - -import com.google.common.base.Function; -import com.google.common.collect.Sets; -import com.google.common.collect.Table; - -public abstract class NatManager { - - protected final DataBroker dataBroker; - - public NatManager(DataBroker dataBroker) { - this.dataBroker = dataBroker; - } - - abstract Logger getLogger(); - - abstract void submit(NatInstanceCommandBuilder nat, NodeId nodeId); - - public abstract List resolveNodesForSnat(); - - abstract public Map staticEntries( - Table> staticEntries); - - public abstract void dynamicEntries(PolicyContext ctx, Map nodeBuilders); - - public void clearNodes(@Nonnull Endpoints before, @Nullable Endpoints after) { - Function> f = x -> { - return nullToEmpty(x.getAddressEndpointWithLocation()).stream() - .filter(ep -> ep.getAugmentation(NatAddressRenderer.class) != null) - .filter(ep -> ep.getAbsoluteLocation() != null) - .map(ep -> (ExternalLocationCase) ep.getAbsoluteLocation().getLocationType()) - .filter(loc -> loc.getExternalNodeMountPoint() != null) - .map(loc -> loc.getExternalNodeMountPoint().firstKeyOf(Node.class).getNodeId()) - .collect(Collectors.toSet()); - }; - Set nodesToClear = (after != null) ? Sets.difference(f.apply(before), f.apply(after)) : f.apply(before); - NatInstanceCommand natCmd = new NatInstanceCommandBuilder().setOperation(General.Operations.DELETE).build(); - getLogger().info("Clearing NAT from nodes {}", nodesToClear); - nodesToClear.forEach(nodeId -> GbpNetconfTransaction - .netconfSyncedDelete(VppIidFactory.getNetconfNodeIid(nodeId), natCmd, GbpNetconfTransaction.RETRY_COUNT)); - } - - private List nullToEmpty(@Nullable List list) { - return list == null ? Collections.emptyList() : list; - } - - public void submitNatChanges(Map nat) { - nat.keySet().forEach(nodeId -> { - submit(nat.get(nodeId), nodeId); - }); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.nat; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.NatInstanceCommand; +import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.NatInstanceCommand.NatInstanceCommandBuilder; +import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.PolicyContext; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.GbpNetconfTransaction; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.nat.config.nat.instances.nat.instance.mapping.table.MappingEntryBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.NatAddressRenderer; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.Endpoints; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.slf4j.Logger; + +import com.google.common.base.Function; +import com.google.common.collect.Sets; +import com.google.common.collect.Table; + +public abstract class NatManager { + + protected final DataBroker dataBroker; + + public NatManager(DataBroker dataBroker) { + this.dataBroker = dataBroker; + } + + abstract Logger getLogger(); + + abstract void submit(NatInstanceCommandBuilder nat, NodeId nodeId); + + public abstract List resolveNodesForSnat(); + + abstract public Map staticEntries( + Table> staticEntries); + + public abstract void dynamicEntries(PolicyContext ctx, Map nodeBuilders); + + public void clearNodes(@Nonnull Endpoints before, @Nullable Endpoints after) { + Function> f = x -> { + return nullToEmpty(x.getAddressEndpointWithLocation()).stream() + .filter(ep -> ep.getAugmentation(NatAddressRenderer.class) != null) + .filter(ep -> ep.getAbsoluteLocation() != null) + .map(ep -> (ExternalLocationCase) ep.getAbsoluteLocation().getLocationType()) + .filter(loc -> loc.getExternalNodeMountPoint() != null) + .map(loc -> loc.getExternalNodeMountPoint().firstKeyOf(Node.class).getNodeId()) + .collect(Collectors.toSet()); + }; + Set nodesToClear = (after != null) ? Sets.difference(f.apply(before), f.apply(after)) : f.apply(before); + NatInstanceCommand natCmd = new NatInstanceCommandBuilder().setOperation(General.Operations.DELETE).build(); + getLogger().info("Clearing NAT from nodes {}", nodesToClear); + nodesToClear.forEach(nodeId -> GbpNetconfTransaction + .netconfSyncedDelete(VppIidFactory.getNetconfNodeIid(nodeId), natCmd, GbpNetconfTransaction.RETRY_COUNT)); + } + + private List nullToEmpty(@Nullable List list) { + return list == null ? Collections.emptyList() : list; + } + + public void submitNatChanges(Map nat) { + nat.keySet().forEach(nodeId -> { + submit(nat.get(nodeId), nodeId); + }); + } +} diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/nat/NatUtil.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/nat/NatUtil.java index 198cfb34c..f820aee1f 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/nat/NatUtil.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/nat/NatUtil.java @@ -1,311 +1,311 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.vpp.nat; - -import java.net.Inet4Address; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.apache.commons.net.util.SubnetUtils; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.renderer.vpp.config.ConfigUtil; -import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.PolicyContext; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.GbpNetconfTransaction; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; -import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; -import org.opendaylight.groupbasedpolicy.util.NetUtils; -import org.opendaylight.vbd.impl.transaction.VbdNetconfTransaction; -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.IpPrefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.nat.config.nat.instances.nat.instance.mapping.table.MappingEntryBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.nat.parameters.ExternalIpAddressPool; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.nat.parameters.ExternalIpAddressPoolBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.SubnetAugmentRenderer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererNodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.RendererForwardingByTenant; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.VppInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.renderers.renderer.renderer.nodes.renderer.node.PhysicalInterface; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.renderers.renderer.renderer.nodes.renderer.node.PhysicalInterfaceKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816.NatInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.Nat; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.NatBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.nat.InboundBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.nat.OutboundBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; - -public class NatUtil { - private static final Logger LOG = LoggerFactory.getLogger(NatUtil.class); - - @SuppressWarnings("unchecked") - static Function, NodeId> resolveNodeId = (intf) -> { - return Preconditions - .checkNotNull(checkIid(intf).firstKeyOf(RendererNode.class).getNodePath().firstKeyOf(Node.class)) - .getNodeId(); - }; - - @SuppressWarnings("unchecked") - static Function, InstanceIdentifier> resolveInterfaceIid = (intf) -> { - checkIid(intf); - return VppIidFactory - .getInterfaceIID(new InterfaceKey(checkIid(intf).firstKeyOf(PhysicalInterface.class).getInterfaceName())); - }; - - static private InstanceIdentifier checkIid(InstanceIdentifier iid) { - Preconditions.checkNotNull(iid.firstKeyOf(RendererNode.class).getNodePath().firstKeyOf(Node.class)); - return iid; - } - - public void setInboundInterface(Interface iface, WriteTransaction wTx) { - InstanceIdentifier natIid = buildNatIid(VppIidFactory.getInterfaceIID(iface.getKey())); - Nat nat = - new NatBuilder().setInbound(new InboundBuilder().setNat44Support(true).setPostRouting(ConfigUtil.getInstance().isL3FlatEnabled()).build()) - .build(); - wTx.put(LogicalDatastoreType.CONFIGURATION, natIid, nat); - } - - public static void setOutboundInterface(Interface iface, InstanceIdentifier vppIid) { - InstanceIdentifier natIid = buildNatIid(VppIidFactory.getInterfaceIID(iface.getKey())); - Nat nat = - new NatBuilder().setOutbound(new OutboundBuilder().setNat44Support(true).setPostRouting(ConfigUtil.getInstance().isL3FlatEnabled()).build()) - .build(); - GbpNetconfTransaction.netconfSyncedWrite(vppIid, natIid, nat, GbpNetconfTransaction.RETRY_COUNT); - - } - - public static void unsetOutboundInterface(Interface iface, InstanceIdentifier vppIid) { - InstanceIdentifier natIid = buildNatIid(VppIidFactory.getInterfaceIID(iface.getKey())); - GbpNetconfTransaction.netconfSyncedDelete(vppIid, natIid, GbpNetconfTransaction.RETRY_COUNT); - } - - public static InstanceIdentifier buildNatIid(InstanceIdentifier ifaceIid) { - return ifaceIid.builder().augmentation(NatInterfaceAugmentation.class).child(Nat.class).build(); - } - - public static @Nonnull List> resolvePhysicalInterface(IpPrefix extSubnetPrefix, - ReadOnlyTransaction rTx) { - Optional readFromDs = - DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, VppIidFactory.getRendererNodesIid(), rTx); - rTx.close(); - if (!readFromDs.isPresent() || readFromDs.get().getRendererNode() == null) { - return Collections.emptyList(); - } - RendererNodes rendererNodes = readFromDs.get(); - List - vppNodes = - rendererNodes.getRendererNode() - .stream() - .filter(rn -> rn.getAugmentation(VppInterfaceAugmentation.class) != null) - .filter(rn -> rn.getAugmentation(VppInterfaceAugmentation.class).getPhysicalInterface() != null) - .collect(Collectors.toList()); - List> iids = new ArrayList<>(); - for (RendererNode rn : vppNodes) { - java.util.Optional - optResolvedIface = - rn.getAugmentation(VppInterfaceAugmentation.class) - .getPhysicalInterface() - .stream() - .filter(phIface -> phIface.getAddress() != null) - .filter(phIface -> phIface.getAddress() - .stream() - .anyMatch(ipAddr -> NetUtils.isInRange(extSubnetPrefix, String.valueOf(ipAddr.getValue())))) - .findFirst(); - if (optResolvedIface.isPresent()) { - iids.add(VppIidFactory.getRendererNodeIid(rn) - .builder() - .augmentation(VppInterfaceAugmentation.class) - .child(PhysicalInterface.class, new PhysicalInterfaceKey(optResolvedIface.get().getKey())) - .build()); - } - } - return iids; - } - - public static @Nonnull List> resolvePhysicalInterface(ReadOnlyTransaction rTx) { - Optional readFromDs = - DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, VppIidFactory.getRendererNodesIid(), rTx); - rTx.close(); - if (!readFromDs.isPresent() || readFromDs.get().getRendererNode() == null) { - return Collections.emptyList(); - } - RendererNodes rendererNodes = readFromDs.get(); - List - vppNodes = - rendererNodes.getRendererNode() - .stream() - .filter(rn -> rn.getAugmentation(VppInterfaceAugmentation.class) != null) - .filter(rn -> rn.getAugmentation(VppInterfaceAugmentation.class).getPhysicalInterface() != null) - .collect(Collectors.toList()); - List> iids = new ArrayList<>(); - for (RendererNode rn : vppNodes) { - java.util.Optional - optResolvedIface = - rn.getAugmentation(VppInterfaceAugmentation.class) - .getPhysicalInterface() - .stream() - .filter(phIface -> phIface.getAddress() != null) - .filter(phIface -> phIface.isExternal()) - .findFirst(); - if (optResolvedIface.isPresent()) { - iids.add(VppIidFactory.getRendererNodeIid(rn) - .builder() - .augmentation(VppInterfaceAugmentation.class) - .child(PhysicalInterface.class, new PhysicalInterfaceKey(optResolvedIface.get().getKey())) - .build()); - } - } - return iids; - } - - public static Optional createStaticEntry(String internal, Ipv4Address external) { - IpAddress internalIp = null; - try { - InetAddress inetAddr = InetAddress.getByName(internal); - if (inetAddr instanceof Inet4Address) { - internalIp = new IpAddress(new Ipv4Address(internal)); - } else if (inetAddr instanceof Inet6Address) { - internalIp = new IpAddress(new Ipv6Address(internal)); - } - } catch (UnknownHostException e) { - LOG.error("Cannot resolve host IP {}. {}", internal, e.getMessage()); - return Optional.absent(); - } - SubnetUtils subnet = new SubnetUtils(internal + "/32"); - Long index = Integer.toUnsignedLong(subnet.getInfo().asInteger(internal)); - MappingEntryBuilder mappingEntryBuilder = new MappingEntryBuilder() - .setType( - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.MappingEntry.Type.Static) - .setIndex(index) - .setInternalSrcAddress(internalIp) - .setExternalSrcAddress(external); - return Optional.of(mappingEntryBuilder); - } - - public static List resolveDynamicNat(@Nonnull PolicyContext policyCtx, - @Nullable List sNatEntries) { - Optional> forwardingByTenantLists = Optional.of(policyCtx) - .transform(x -> x.getPolicy()) - .transform(x -> x.getConfiguration()) - .transform(x -> x.getRendererForwarding()) - .transform(x -> x.getRendererForwardingByTenant()); - if (!forwardingByTenantLists.isPresent()) { - LOG.warn("No dynamic NAT resolved in cfg version {}.", policyCtx.getPolicy().getVersion()); - return ImmutableList.of(); - } - Map extCache = new HashMap<>(); - forwardingByTenantLists.get() - .stream() - .map(rft -> rft.getRendererNetworkDomain()) - .flatMap(Collection::stream) - .filter(domain -> domain.getAugmentation(SubnetAugmentRenderer.class) != null) - .map(domain -> domain.getAugmentation(SubnetAugmentRenderer.class).getSubnet()) - .filter(subnet -> !subnet.isIsTenant() && subnet.getAllocationPool() != null) - .forEach(subnet -> { - final IpPrefix subnetIpPrefix = subnet.getIpPrefix(); - subnet.getAllocationPool().forEach(pool -> { - if (subnetIpPrefix.getIpv4Prefix() != null) { - final String firstEntry = pool.getFirst(); - final String lastEntry = pool.getLast(); - extCache.putAll(resolveDynamicNatPrefix(subnetIpPrefix.getIpv4Prefix(), firstEntry, lastEntry, - sNatEntries)); - } - }); - }); - List extPools = extCache.entrySet() - .stream() - .map(entry -> new ExternalIpAddressPoolBuilder().setPoolId(entry.getKey()) - .setExternalIpPool(entry.getValue()) - .build()) - .collect(Collectors.toList()); - LOG.trace("Resolved dynamic NAT pools in cfg version {}: {}", policyCtx.getPolicy().getVersion(), extPools); - return extPools; - } - - - static Map resolveDynamicNatPrefix(@Nonnull final Ipv4Prefix prefix, - @Nonnull final String first, - @Nullable final String last, - @Nullable final List natEntries) { - LOG.trace("Resolving Ipv4Prefix. prefix: {}, first: {}, last: {}", prefix.getValue(), first, last); - final SubnetUtils subnet = new SubnetUtils(prefix.getValue()); - final Map extCache = new HashMap<>(); - int min = subnet.getInfo().asInteger(first); - // loop through all addresses - for (String address : subnet.getInfo().getAllAddresses()) { - int asInt = subnet.getInfo().asInteger(address); - if (asInt < min) { - continue; - } - extCache.put(Integer.toUnsignedLong(asInt), new Ipv4Prefix(address + "/32")); - if (last == null || subnet.getInfo().asInteger(address) >= subnet.getInfo().asInteger(last)) { - break; - } - } - if (natEntries != null) { - // remove every static NAT entry from extCache - for (MappingEntryBuilder natEntry : natEntries) { - final Ipv4Address externalSrcAddress = natEntry.getExternalSrcAddress(); - final long id = Integer.toUnsignedLong(subnet.getInfo().asInteger(externalSrcAddress.getValue())); - if (extCache.get(id) != null) { - extCache.remove(id); - } - } - } - return extCache; - } - - public static void resolveOutboundNatInterface(InstanceIdentifier mountPointIid, - NodeId nodeId, Map extInterfaces) { - if (extInterfaces.containsKey(nodeId)){ - PhysicalInterfaceKey physicalInterfaceKey = extInterfaces.get(nodeId); - Optional readIfaces = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - InstanceIdentifier.create(Interfaces.class), - VbdNetconfTransaction.NODE_DATA_BROKER_MAP.get(mountPointIid).getKey().newReadOnlyTransaction()); - if(readIfaces.isPresent() ) { - for (Interface nodeInterface : readIfaces.get().getInterface()) { - if (nodeInterface.getName().equals(physicalInterfaceKey.getInterfaceName())) { - LOG.trace("Setting outbound NAT on interface {} on node: {}", nodeInterface.getName(), mountPointIid); - NatUtil.setOutboundInterface(nodeInterface, mountPointIid); - } - } - - } - - } - - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.nat; + +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.apache.commons.net.util.SubnetUtils; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.renderer.vpp.config.ConfigUtil; +import org.opendaylight.groupbasedpolicy.renderer.vpp.policy.PolicyContext; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.GbpNetconfTransaction; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.groupbasedpolicy.util.NetUtils; +import org.opendaylight.vbd.impl.transaction.VbdNetconfTransaction; +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.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.nat.config.nat.instances.nat.instance.mapping.table.MappingEntryBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.nat.parameters.ExternalIpAddressPool; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.nat.parameters.ExternalIpAddressPoolBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.SubnetAugmentRenderer; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.RendererNodes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.forwarding.RendererForwardingByTenant; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.VppInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.renderers.renderer.renderer.nodes.renderer.node.PhysicalInterface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.renderers.renderer.renderer.nodes.renderer.node.PhysicalInterfaceKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816.NatInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.Nat; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.NatBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.nat.InboundBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.nat.OutboundBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +public class NatUtil { + private static final Logger LOG = LoggerFactory.getLogger(NatUtil.class); + + @SuppressWarnings("unchecked") + static Function, NodeId> resolveNodeId = (intf) -> { + return Preconditions + .checkNotNull(checkIid(intf).firstKeyOf(RendererNode.class).getNodePath().firstKeyOf(Node.class)) + .getNodeId(); + }; + + @SuppressWarnings("unchecked") + static Function, InstanceIdentifier> resolveInterfaceIid = (intf) -> { + checkIid(intf); + return VppIidFactory + .getInterfaceIID(new InterfaceKey(checkIid(intf).firstKeyOf(PhysicalInterface.class).getInterfaceName())); + }; + + static private InstanceIdentifier checkIid(InstanceIdentifier iid) { + Preconditions.checkNotNull(iid.firstKeyOf(RendererNode.class).getNodePath().firstKeyOf(Node.class)); + return iid; + } + + public void setInboundInterface(Interface iface, WriteTransaction wTx) { + InstanceIdentifier natIid = buildNatIid(VppIidFactory.getInterfaceIID(iface.getKey())); + Nat nat = + new NatBuilder().setInbound(new InboundBuilder().setNat44Support(true).setPostRouting(ConfigUtil.getInstance().isL3FlatEnabled()).build()) + .build(); + wTx.put(LogicalDatastoreType.CONFIGURATION, natIid, nat); + } + + public static void setOutboundInterface(Interface iface, InstanceIdentifier vppIid) { + InstanceIdentifier natIid = buildNatIid(VppIidFactory.getInterfaceIID(iface.getKey())); + Nat nat = + new NatBuilder().setOutbound(new OutboundBuilder().setNat44Support(true).setPostRouting(ConfigUtil.getInstance().isL3FlatEnabled()).build()) + .build(); + GbpNetconfTransaction.netconfSyncedWrite(vppIid, natIid, nat, GbpNetconfTransaction.RETRY_COUNT); + + } + + public static void unsetOutboundInterface(Interface iface, InstanceIdentifier vppIid) { + InstanceIdentifier natIid = buildNatIid(VppIidFactory.getInterfaceIID(iface.getKey())); + GbpNetconfTransaction.netconfSyncedDelete(vppIid, natIid, GbpNetconfTransaction.RETRY_COUNT); + } + + public static InstanceIdentifier buildNatIid(InstanceIdentifier ifaceIid) { + return ifaceIid.builder().augmentation(NatInterfaceAugmentation.class).child(Nat.class).build(); + } + + public static @Nonnull List> resolvePhysicalInterface(IpPrefix extSubnetPrefix, + ReadOnlyTransaction rTx) { + Optional readFromDs = + DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, VppIidFactory.getRendererNodesIid(), rTx); + rTx.close(); + if (!readFromDs.isPresent() || readFromDs.get().getRendererNode() == null) { + return Collections.emptyList(); + } + RendererNodes rendererNodes = readFromDs.get(); + List + vppNodes = + rendererNodes.getRendererNode() + .stream() + .filter(rn -> rn.getAugmentation(VppInterfaceAugmentation.class) != null) + .filter(rn -> rn.getAugmentation(VppInterfaceAugmentation.class).getPhysicalInterface() != null) + .collect(Collectors.toList()); + List> iids = new ArrayList<>(); + for (RendererNode rn : vppNodes) { + java.util.Optional + optResolvedIface = + rn.getAugmentation(VppInterfaceAugmentation.class) + .getPhysicalInterface() + .stream() + .filter(phIface -> phIface.getAddress() != null) + .filter(phIface -> phIface.getAddress() + .stream() + .anyMatch(ipAddr -> NetUtils.isInRange(extSubnetPrefix, String.valueOf(ipAddr.getValue())))) + .findFirst(); + if (optResolvedIface.isPresent()) { + iids.add(VppIidFactory.getRendererNodeIid(rn) + .builder() + .augmentation(VppInterfaceAugmentation.class) + .child(PhysicalInterface.class, new PhysicalInterfaceKey(optResolvedIface.get().getKey())) + .build()); + } + } + return iids; + } + + public static @Nonnull List> resolvePhysicalInterface(ReadOnlyTransaction rTx) { + Optional readFromDs = + DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL, VppIidFactory.getRendererNodesIid(), rTx); + rTx.close(); + if (!readFromDs.isPresent() || readFromDs.get().getRendererNode() == null) { + return Collections.emptyList(); + } + RendererNodes rendererNodes = readFromDs.get(); + List + vppNodes = + rendererNodes.getRendererNode() + .stream() + .filter(rn -> rn.getAugmentation(VppInterfaceAugmentation.class) != null) + .filter(rn -> rn.getAugmentation(VppInterfaceAugmentation.class).getPhysicalInterface() != null) + .collect(Collectors.toList()); + List> iids = new ArrayList<>(); + for (RendererNode rn : vppNodes) { + java.util.Optional + optResolvedIface = + rn.getAugmentation(VppInterfaceAugmentation.class) + .getPhysicalInterface() + .stream() + .filter(phIface -> phIface.getAddress() != null) + .filter(phIface -> phIface.isExternal()) + .findFirst(); + if (optResolvedIface.isPresent()) { + iids.add(VppIidFactory.getRendererNodeIid(rn) + .builder() + .augmentation(VppInterfaceAugmentation.class) + .child(PhysicalInterface.class, new PhysicalInterfaceKey(optResolvedIface.get().getKey())) + .build()); + } + } + return iids; + } + + public static Optional createStaticEntry(String internal, Ipv4Address external) { + IpAddress internalIp = null; + try { + InetAddress inetAddr = InetAddress.getByName(internal); + if (inetAddr instanceof Inet4Address) { + internalIp = new IpAddress(new Ipv4Address(internal)); + } else if (inetAddr instanceof Inet6Address) { + internalIp = new IpAddress(new Ipv6Address(internal)); + } + } catch (UnknownHostException e) { + LOG.error("Cannot resolve host IP {}. {}", internal, e.getMessage()); + return Optional.absent(); + } + SubnetUtils subnet = new SubnetUtils(internal + "/32"); + Long index = Integer.toUnsignedLong(subnet.getInfo().asInteger(internal)); + MappingEntryBuilder mappingEntryBuilder = new MappingEntryBuilder() + .setType( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.nat.rev150908.MappingEntry.Type.Static) + .setIndex(index) + .setInternalSrcAddress(internalIp) + .setExternalSrcAddress(external); + return Optional.of(mappingEntryBuilder); + } + + public static List resolveDynamicNat(@Nonnull PolicyContext policyCtx, + @Nullable List sNatEntries) { + Optional> forwardingByTenantLists = Optional.of(policyCtx) + .transform(x -> x.getPolicy()) + .transform(x -> x.getConfiguration()) + .transform(x -> x.getRendererForwarding()) + .transform(x -> x.getRendererForwardingByTenant()); + if (!forwardingByTenantLists.isPresent()) { + LOG.warn("No dynamic NAT resolved in cfg version {}.", policyCtx.getPolicy().getVersion()); + return ImmutableList.of(); + } + Map extCache = new HashMap<>(); + forwardingByTenantLists.get() + .stream() + .map(rft -> rft.getRendererNetworkDomain()) + .flatMap(Collection::stream) + .filter(domain -> domain.getAugmentation(SubnetAugmentRenderer.class) != null) + .map(domain -> domain.getAugmentation(SubnetAugmentRenderer.class).getSubnet()) + .filter(subnet -> !subnet.isIsTenant() && subnet.getAllocationPool() != null) + .forEach(subnet -> { + final IpPrefix subnetIpPrefix = subnet.getIpPrefix(); + subnet.getAllocationPool().forEach(pool -> { + if (subnetIpPrefix.getIpv4Prefix() != null) { + final String firstEntry = pool.getFirst(); + final String lastEntry = pool.getLast(); + extCache.putAll(resolveDynamicNatPrefix(subnetIpPrefix.getIpv4Prefix(), firstEntry, lastEntry, + sNatEntries)); + } + }); + }); + List extPools = extCache.entrySet() + .stream() + .map(entry -> new ExternalIpAddressPoolBuilder().setPoolId(entry.getKey()) + .setExternalIpPool(entry.getValue()) + .build()) + .collect(Collectors.toList()); + LOG.trace("Resolved dynamic NAT pools in cfg version {}: {}", policyCtx.getPolicy().getVersion(), extPools); + return extPools; + } + + + static Map resolveDynamicNatPrefix(@Nonnull final Ipv4Prefix prefix, + @Nonnull final String first, + @Nullable final String last, + @Nullable final List natEntries) { + LOG.trace("Resolving Ipv4Prefix. prefix: {}, first: {}, last: {}", prefix.getValue(), first, last); + final SubnetUtils subnet = new SubnetUtils(prefix.getValue()); + final Map extCache = new HashMap<>(); + int min = subnet.getInfo().asInteger(first); + // loop through all addresses + for (String address : subnet.getInfo().getAllAddresses()) { + int asInt = subnet.getInfo().asInteger(address); + if (asInt < min) { + continue; + } + extCache.put(Integer.toUnsignedLong(asInt), new Ipv4Prefix(address + "/32")); + if (last == null || subnet.getInfo().asInteger(address) >= subnet.getInfo().asInteger(last)) { + break; + } + } + if (natEntries != null) { + // remove every static NAT entry from extCache + for (MappingEntryBuilder natEntry : natEntries) { + final Ipv4Address externalSrcAddress = natEntry.getExternalSrcAddress(); + final long id = Integer.toUnsignedLong(subnet.getInfo().asInteger(externalSrcAddress.getValue())); + if (extCache.get(id) != null) { + extCache.remove(id); + } + } + } + return extCache; + } + + public static void resolveOutboundNatInterface(InstanceIdentifier mountPointIid, + NodeId nodeId, Map extInterfaces) { + if (extInterfaces.containsKey(nodeId)){ + PhysicalInterfaceKey physicalInterfaceKey = extInterfaces.get(nodeId); + Optional readIfaces = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + InstanceIdentifier.create(Interfaces.class), + VbdNetconfTransaction.NODE_DATA_BROKER_MAP.get(mountPointIid).getKey().newReadOnlyTransaction()); + if(readIfaces.isPresent() ) { + for (Interface nodeInterface : readIfaces.get().getInterface()) { + if (nodeInterface.getName().equals(physicalInterfaceKey.getInterfaceName())) { + LOG.trace("Setting outbound NAT on interface {} on node: {}", nodeInterface.getName(), mountPointIid); + NatUtil.setOutboundInterface(nodeInterface, mountPointIid); + } + } + + } + + } + + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/VppRendererDataBrokerTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/VppRendererDataBrokerTest.java index ca1b88622..0da74e377 100644 --- a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/VppRendererDataBrokerTest.java +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/VppRendererDataBrokerTest.java @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.vpp; - -import com.google.common.collect.ImmutableList; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.StaticRoutes1; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.Routing; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.LocationProviders; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816.NatInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unnumbered.interfaces.rev170510.unnumbered.config.attributes.Unnumbered; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.VhostUser; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.dhcp.rev170315.dhcp.attributes.relays.Relay; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; - -import javax.annotation.Nonnull; -import java.util.Collection; - -public class VppRendererDataBrokerTest extends CustomDataBrokerTest { - - @Nonnull - @Override - public Collection> getClassesFromModules() { - return ImmutableList.of(Interfaces.class, Interface.class, VhostUser.class, NetworkTopology.class, - Topology.class, Node.class, NetconfNode.class, Renderer.class, LocationProviders.class, Config.class, - NatInterfaceAugmentation.class, Routing.class, StaticRoutes1.class, Relay.class, Unnumbered.class); - } -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.StaticRoutes1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.Routing; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.LocationProviders; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816.NatInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unnumbered.interfaces.rev170510.unnumbered.config.attributes.Unnumbered; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.VhostUser; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.dhcp.rev170315.dhcp.attributes.relays.Relay; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; + +import javax.annotation.Nonnull; +import java.util.Collection; + +public class VppRendererDataBrokerTest extends CustomDataBrokerTest { + + @Nonnull + @Override + public Collection> getClassesFromModules() { + return ImmutableList.of(Interfaces.class, Interface.class, VhostUser.class, NetworkTopology.class, + Topology.class, Node.class, NetconfNode.class, Renderer.class, LocationProviders.class, Config.class, + NatInterfaceAugmentation.class, Routing.class, StaticRoutes1.class, Relay.class, Unnumbered.class); + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/LoopbackCommandTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/LoopbackCommandTest.java index fbaa3fe93..745ece86f 100644 --- a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/LoopbackCommandTest.java +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/LoopbackCommandTest.java @@ -1,261 +1,261 @@ -/* - * Copyright (c) 2016 Cisco Systems. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.vpp.commands; - -import com.google.common.base.Optional; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; -import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; -import org.opendaylight.groupbasedpolicy.util.NetUtils; -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.IpPrefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.Interface1; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.Interface1Builder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.Ipv4Builder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.AddressBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.Subnet; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLength; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLengthBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816.NatInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816.NatInterfaceAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.NatBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.nat.InboundBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.Loopback; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.L2Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.LoopbackBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBasedBuilder; - -import java.util.Collections; -import java.util.concurrent.ExecutionException; - -public class LoopbackCommandTest extends VppRendererDataBrokerTest { - - private final static String DESCRIPTION = "used for testing"; - private final static String INTERFACE_NAME = "testInterface"; - private final static String BRIDGE_DOMAIN = "testBD"; - private final static boolean IS_BVI = true; - private final static PhysAddress MAC_ADDRESS = new PhysAddress("00:11:22:33:44:55"); - private final static IpAddress IP_ADDRESS = new IpAddress(new Ipv4Address("10.0.0.1")); - private final static IpPrefix IP_PREFIX = new IpPrefix(new Ipv4Prefix("10.0.0.1/24")); - - private final static String UPD_DESCRIPTION = "updated description"; - private final static PhysAddress UPD_MAC_ADDRESS = new PhysAddress("55:44:33:22:11:00"); - private final static IpAddress UPD_IP_ADDRESS = new IpAddress(new Ipv4Address("20.0.0.1")); - private final static IpPrefix UPD_IP_PREFIX = new IpPrefix(new Ipv4Prefix("20.0.0.1/24")); - - private final static VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder() - .setLoopback(new LoopbackBuilder().setMac(MAC_ADDRESS).build()); - - private final static VppInterfaceAugmentationBuilder vppAugmentationBuilderWithBD = - new VppInterfaceAugmentationBuilder(vppAugmentationBuilder.build()) - .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN) - .setBridgedVirtualInterface(IS_BVI).setSplitHorizonGroup((short)0) - .build()).build()); - - private final static InterfaceBuilder interfaceBuilder = - new InterfaceBuilder().setKey(new InterfaceKey(INTERFACE_NAME)) - .setEnabled(true) - .setDescription(DESCRIPTION) - .setType(Loopback.class) - .setName(INTERFACE_NAME) - .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled); - - private final static Interface1Builder - interface1Builder = - new Interface1Builder().setIpv4(new Ipv4Builder().setAddress(Collections.singletonList( - new AddressBuilder() - .setIp(new Ipv4AddressNoZone(IP_ADDRESS.getIpv4Address())) - .setSubnet(new PrefixLengthBuilder().setPrefixLength((short) NetUtils.getMaskFromPrefix(IP_PREFIX.getIpv4Prefix().getValue())).build()) - .build())) - .setEnabled(true) - .setForwarding(false) - .build()); - - private final static Interface BASIC_INTERFACE = - interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build()) - .addAugmentation(NatInterfaceAugmentation.class, new NatInterfaceAugmentationBuilder().setNat( - new NatBuilder().setInbound( - new InboundBuilder().setNat44Support(true).setPostRouting(false).build()).build()) - .build()) - .addAugmentation(Interface1.class, interface1Builder.build()).build(); - - private final static Interface BASIC_INTERFACE_WITH_BD = interfaceBuilder - .addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilderWithBD.build()).build(); - - private DataBroker dataBroker; - - @Before - public void init() { - dataBroker = getDataBroker(); - } - - @Test - public void testAddLoopback() throws ExecutionException, InterruptedException { - ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); - LoopbackCommand addCommand = LoopbackCommand.builder() - .setOperation(General.Operations.PUT) - .setInterfaceName(INTERFACE_NAME) - .setDescription(DESCRIPTION) - .setBvi(IS_BVI) - .setPhysAddress(MAC_ADDRESS) - .setIpPrefix(IP_PREFIX) - .setIpAddress(IP_ADDRESS) - .setEnabled(true) - .build(); - - Assert.assertEquals(IS_BVI, addCommand.getBvi()); - Assert.assertEquals(MAC_ADDRESS, addCommand.getPhysAddress()); - Assert.assertEquals(IP_ADDRESS, addCommand.getIpAddress()); - Assert.assertEquals(IP_PREFIX, addCommand.getIpPrefix()); - - Optional optional = executeCommand(rwTx, addCommand); - - Assert.assertTrue(optional.isPresent()); - Assert.assertEquals(BASIC_INTERFACE, optional.get()); - - } - - @Test - public void testAddLoopback_WithBridgeDomain() throws ExecutionException, InterruptedException { - ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); - LoopbackCommand addCommand = LoopbackCommand.builder() - .setOperation(General.Operations.PUT) - .setInterfaceName(INTERFACE_NAME) - .setDescription(DESCRIPTION) - .setBvi(true) - .setPhysAddress(MAC_ADDRESS) - .setIpPrefix(IP_PREFIX) - .setIpAddress(IP_ADDRESS) - .setBridgeDomain(BRIDGE_DOMAIN) - .setEnabled(true) - .build(); - - Assert.assertEquals(BRIDGE_DOMAIN, addCommand.getBridgeDomain()); - - Optional optional = executeCommand(rwTx, addCommand); - - Assert.assertTrue(optional.isPresent()); - Assert.assertEquals(BASIC_INTERFACE_WITH_BD, optional.get()); - } - - private Optional executeCommand(ReadWriteTransaction rwTx, LoopbackCommand addCommand) - throws ExecutionException, InterruptedException { - addCommand.execute(rwTx); - - rwTx.submit().get(); - - ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); - - return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), rTx); - } - - @Test - public void testDeleteLoopbackPort() throws ExecutionException, InterruptedException { - ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); - - rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), - BASIC_INTERFACE, true); - rwTx.submit().get(); - - Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue(optional.isPresent()); - - LoopbackCommand deleteCommand = LoopbackCommand.builder() - .setOperation(General.Operations.DELETE) - .setInterfaceName(INTERFACE_NAME) - .setIpPrefix(IP_PREFIX) - .setIpAddress(IP_ADDRESS) - .build(); - - ReadWriteTransaction rwTxDel = dataBroker.newReadWriteTransaction(); - deleteCommand.execute(rwTxDel); - rwTxDel.submit(); - - Optional optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())), - dataBroker.newReadOnlyTransaction()); - - Assert.assertFalse(optionalDeleted.isPresent()); - } - - @Test - public void testUpdateLoopbackPort() throws ExecutionException, InterruptedException { - ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); - - rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), - BASIC_INTERFACE, true); - rwTx.submit().get(); - - Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue(optional.isPresent()); - - LoopbackCommand updateCommand = LoopbackCommand.builder() - .setOperation(General.Operations.MERGE) - .setInterfaceName(INTERFACE_NAME) - .setDescription(UPD_DESCRIPTION) - .setPhysAddress(UPD_MAC_ADDRESS) - .setIpPrefix(UPD_IP_PREFIX) - .setIpAddress(UPD_IP_ADDRESS) - .setEnabled(false) - .build(); - - ReadWriteTransaction rwTxUpd = dataBroker.newReadWriteTransaction(); - updateCommand.execute(rwTxUpd); - rwTxUpd.submit().get(); - - Optional optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())), - dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue(optionalUpdated.isPresent()); - Interface updatedInterface = optionalUpdated.get(); - - Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription()); - Assert.assertFalse(updatedInterface.isEnabled()); - VppInterfaceAugmentation augmentation = updatedInterface.getAugmentation(VppInterfaceAugmentation.class); - Assert.assertEquals(INTERFACE_NAME, updatedInterface.getName()); - Assert.assertEquals(UPD_MAC_ADDRESS, augmentation.getLoopback().getMac()); - Interface1 interface1 = updatedInterface.getAugmentation(Interface1.class); - - // merge operation will add new ip address to list so index is 1 for new ip - String ip = interface1.getIpv4().getAddress().get(1).getIp().getValue(); - Subnet subnet = interface1.getIpv4().getAddress().get(1).getSubnet(); - String prefix = ""; - - if ( subnet instanceof PrefixLength){ - prefix = ((PrefixLength) subnet).getPrefixLength().toString(); - } - IpPrefix ipPrefix = new IpPrefix(new Ipv4Prefix(ip + "/" + prefix)); - IpAddress ipAddress = new IpAddress( new Ipv4Address(ip)); - Assert.assertEquals(UPD_IP_PREFIX, ipPrefix); - Assert.assertEquals(UPD_IP_ADDRESS, ipAddress); - } -} +/* + * Copyright (c) 2016 Cisco Systems. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.commands; + +import com.google.common.base.Optional; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.groupbasedpolicy.util.NetUtils; +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.IpPrefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.Interface1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.Interface1Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.Ipv4Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.AddressBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.Subnet; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLength; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLengthBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816.NatInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816.NatInterfaceAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.NatBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.nat.rev170816._interface.nat.attributes.nat.InboundBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.Loopback; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.L2Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.LoopbackBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBasedBuilder; + +import java.util.Collections; +import java.util.concurrent.ExecutionException; + +public class LoopbackCommandTest extends VppRendererDataBrokerTest { + + private final static String DESCRIPTION = "used for testing"; + private final static String INTERFACE_NAME = "testInterface"; + private final static String BRIDGE_DOMAIN = "testBD"; + private final static boolean IS_BVI = true; + private final static PhysAddress MAC_ADDRESS = new PhysAddress("00:11:22:33:44:55"); + private final static IpAddress IP_ADDRESS = new IpAddress(new Ipv4Address("10.0.0.1")); + private final static IpPrefix IP_PREFIX = new IpPrefix(new Ipv4Prefix("10.0.0.1/24")); + + private final static String UPD_DESCRIPTION = "updated description"; + private final static PhysAddress UPD_MAC_ADDRESS = new PhysAddress("55:44:33:22:11:00"); + private final static IpAddress UPD_IP_ADDRESS = new IpAddress(new Ipv4Address("20.0.0.1")); + private final static IpPrefix UPD_IP_PREFIX = new IpPrefix(new Ipv4Prefix("20.0.0.1/24")); + + private final static VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder() + .setLoopback(new LoopbackBuilder().setMac(MAC_ADDRESS).build()); + + private final static VppInterfaceAugmentationBuilder vppAugmentationBuilderWithBD = + new VppInterfaceAugmentationBuilder(vppAugmentationBuilder.build()) + .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN) + .setBridgedVirtualInterface(IS_BVI).setSplitHorizonGroup((short)0) + .build()).build()); + + private final static InterfaceBuilder interfaceBuilder = + new InterfaceBuilder().setKey(new InterfaceKey(INTERFACE_NAME)) + .setEnabled(true) + .setDescription(DESCRIPTION) + .setType(Loopback.class) + .setName(INTERFACE_NAME) + .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled); + + private final static Interface1Builder + interface1Builder = + new Interface1Builder().setIpv4(new Ipv4Builder().setAddress(Collections.singletonList( + new AddressBuilder() + .setIp(new Ipv4AddressNoZone(IP_ADDRESS.getIpv4Address())) + .setSubnet(new PrefixLengthBuilder().setPrefixLength((short) NetUtils.getMaskFromPrefix(IP_PREFIX.getIpv4Prefix().getValue())).build()) + .build())) + .setEnabled(true) + .setForwarding(false) + .build()); + + private final static Interface BASIC_INTERFACE = + interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build()) + .addAugmentation(NatInterfaceAugmentation.class, new NatInterfaceAugmentationBuilder().setNat( + new NatBuilder().setInbound( + new InboundBuilder().setNat44Support(true).setPostRouting(false).build()).build()) + .build()) + .addAugmentation(Interface1.class, interface1Builder.build()).build(); + + private final static Interface BASIC_INTERFACE_WITH_BD = interfaceBuilder + .addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilderWithBD.build()).build(); + + private DataBroker dataBroker; + + @Before + public void init() { + dataBroker = getDataBroker(); + } + + @Test + public void testAddLoopback() throws ExecutionException, InterruptedException { + ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); + LoopbackCommand addCommand = LoopbackCommand.builder() + .setOperation(General.Operations.PUT) + .setInterfaceName(INTERFACE_NAME) + .setDescription(DESCRIPTION) + .setBvi(IS_BVI) + .setPhysAddress(MAC_ADDRESS) + .setIpPrefix(IP_PREFIX) + .setIpAddress(IP_ADDRESS) + .setEnabled(true) + .build(); + + Assert.assertEquals(IS_BVI, addCommand.getBvi()); + Assert.assertEquals(MAC_ADDRESS, addCommand.getPhysAddress()); + Assert.assertEquals(IP_ADDRESS, addCommand.getIpAddress()); + Assert.assertEquals(IP_PREFIX, addCommand.getIpPrefix()); + + Optional optional = executeCommand(rwTx, addCommand); + + Assert.assertTrue(optional.isPresent()); + Assert.assertEquals(BASIC_INTERFACE, optional.get()); + + } + + @Test + public void testAddLoopback_WithBridgeDomain() throws ExecutionException, InterruptedException { + ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); + LoopbackCommand addCommand = LoopbackCommand.builder() + .setOperation(General.Operations.PUT) + .setInterfaceName(INTERFACE_NAME) + .setDescription(DESCRIPTION) + .setBvi(true) + .setPhysAddress(MAC_ADDRESS) + .setIpPrefix(IP_PREFIX) + .setIpAddress(IP_ADDRESS) + .setBridgeDomain(BRIDGE_DOMAIN) + .setEnabled(true) + .build(); + + Assert.assertEquals(BRIDGE_DOMAIN, addCommand.getBridgeDomain()); + + Optional optional = executeCommand(rwTx, addCommand); + + Assert.assertTrue(optional.isPresent()); + Assert.assertEquals(BASIC_INTERFACE_WITH_BD, optional.get()); + } + + private Optional executeCommand(ReadWriteTransaction rwTx, LoopbackCommand addCommand) + throws ExecutionException, InterruptedException { + addCommand.execute(rwTx); + + rwTx.submit().get(); + + ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); + + return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), rTx); + } + + @Test + public void testDeleteLoopbackPort() throws ExecutionException, InterruptedException { + ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); + + rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), + BASIC_INTERFACE, true); + rwTx.submit().get(); + + Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue(optional.isPresent()); + + LoopbackCommand deleteCommand = LoopbackCommand.builder() + .setOperation(General.Operations.DELETE) + .setInterfaceName(INTERFACE_NAME) + .setIpPrefix(IP_PREFIX) + .setIpAddress(IP_ADDRESS) + .build(); + + ReadWriteTransaction rwTxDel = dataBroker.newReadWriteTransaction(); + deleteCommand.execute(rwTxDel); + rwTxDel.submit(); + + Optional optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())), + dataBroker.newReadOnlyTransaction()); + + Assert.assertFalse(optionalDeleted.isPresent()); + } + + @Test + public void testUpdateLoopbackPort() throws ExecutionException, InterruptedException { + ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); + + rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), + BASIC_INTERFACE, true); + rwTx.submit().get(); + + Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue(optional.isPresent()); + + LoopbackCommand updateCommand = LoopbackCommand.builder() + .setOperation(General.Operations.MERGE) + .setInterfaceName(INTERFACE_NAME) + .setDescription(UPD_DESCRIPTION) + .setPhysAddress(UPD_MAC_ADDRESS) + .setIpPrefix(UPD_IP_PREFIX) + .setIpAddress(UPD_IP_ADDRESS) + .setEnabled(false) + .build(); + + ReadWriteTransaction rwTxUpd = dataBroker.newReadWriteTransaction(); + updateCommand.execute(rwTxUpd); + rwTxUpd.submit().get(); + + Optional optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())), + dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue(optionalUpdated.isPresent()); + Interface updatedInterface = optionalUpdated.get(); + + Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription()); + Assert.assertFalse(updatedInterface.isEnabled()); + VppInterfaceAugmentation augmentation = updatedInterface.getAugmentation(VppInterfaceAugmentation.class); + Assert.assertEquals(INTERFACE_NAME, updatedInterface.getName()); + Assert.assertEquals(UPD_MAC_ADDRESS, augmentation.getLoopback().getMac()); + Interface1 interface1 = updatedInterface.getAugmentation(Interface1.class); + + // merge operation will add new ip address to list so index is 1 for new ip + String ip = interface1.getIpv4().getAddress().get(1).getIp().getValue(); + Subnet subnet = interface1.getIpv4().getAddress().get(1).getSubnet(); + String prefix = ""; + + if ( subnet instanceof PrefixLength){ + prefix = ((PrefixLength) subnet).getPrefixLength().toString(); + } + IpPrefix ipPrefix = new IpPrefix(new Ipv4Prefix(ip + "/" + prefix)); + IpAddress ipAddress = new IpAddress( new Ipv4Address(ip)); + Assert.assertEquals(UPD_IP_PREFIX, ipPrefix); + Assert.assertEquals(UPD_IP_ADDRESS, ipAddress); + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/TapPortCommandTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/TapPortCommandTest.java index aeeb40681..373e07205 100644 --- a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/TapPortCommandTest.java +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/TapPortCommandTest.java @@ -1,205 +1,205 @@ -/* - * Copyright (c) 2016 Cisco Systems. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.vpp.commands; - -import com.google.common.base.Optional; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; -import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.Tap; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.L2Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.TapBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBasedBuilder; - -import java.util.concurrent.ExecutionException; - -public class TapPortCommandTest extends VppRendererDataBrokerTest { - - private final static String DESCRIPTION = "used for testing"; - private final static String INTERFACE_NAME = "testInterface"; - private final static String TAP_NAME = "testTap00:11:22:33:44:55"; - private final static String BRIDGE_DOMAIN = "testBD"; - private final static Long DEVICE_ID = 0L; - private final static PhysAddress MAC_ADDRESS = new PhysAddress("00:11:22:33:44:55"); - - private final static String UPD_DESCRIPTION = "updated description"; - private final static PhysAddress UPD_MAC_ADDRESS = new PhysAddress("55:44:33:22:11:00"); - private final static String UPD_TAP_NAME = "testTapUpd"; - private final static Long UPD_DEVICE_ID = 1L; - - private final static VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder() - .setTap(new TapBuilder().setMac(MAC_ADDRESS).setTapName(TAP_NAME).setDeviceInstance(DEVICE_ID).build()); - - private final static VppInterfaceAugmentationBuilder vppAugmentationBuilderWithBD = - new VppInterfaceAugmentationBuilder(vppAugmentationBuilder.build()) - .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN) - .setBridgedVirtualInterface(false).setSplitHorizonGroup((short)0) - .build()).build()); - - private final static InterfaceBuilder interfaceBuilder = - new InterfaceBuilder().setKey(new InterfaceKey(INTERFACE_NAME)) - .setEnabled(true) - .setDescription(DESCRIPTION) - .setType(Tap.class) - .setName(INTERFACE_NAME) - .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled); - - private final static Interface BASIC_INTERFACE = - interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build()).build(); - private final static Interface BASIC_INTERFACE_WITH_BD = interfaceBuilder - .addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilderWithBD.build()).build(); - - private DataBroker dataBroker; - - @Before - public void init() { - dataBroker = getDataBroker(); - } - - @Test - public void testAddTapPort() throws ExecutionException, InterruptedException { - ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); - TapPortCommand addCommand = TapPortCommand.builder() - .setOperation(General.Operations.PUT) - .setInterfaceName(INTERFACE_NAME) - .setTapName(TAP_NAME) - .setDescription(DESCRIPTION) - .setDeviceInstance(DEVICE_ID) - .setPhysAddress(MAC_ADDRESS) - .setEnabled(true) - .build(); - - Optional optional = executeCommand(rwTx, addCommand); - - Assert.assertTrue(optional.isPresent()); - Assert.assertEquals(BASIC_INTERFACE, optional.get()); - - } - - @Test - public void testAddTapPort_WithBridgeDomain() throws ExecutionException, InterruptedException { - ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); - TapPortCommand addCommand = TapPortCommand.builder() - .setOperation(General.Operations.PUT) - .setInterfaceName(INTERFACE_NAME) - .setTapName(TAP_NAME) - .setDescription(DESCRIPTION) - .setDeviceInstance(DEVICE_ID) - .setPhysAddress(MAC_ADDRESS) - .setBridgeDomain(BRIDGE_DOMAIN) - .setEnabled(true) - .build(); - - Optional optional = executeCommand(rwTx, addCommand); - - Assert.assertTrue(optional.isPresent()); - Assert.assertEquals(BASIC_INTERFACE_WITH_BD, optional.get()); - - } - - private Optional executeCommand(ReadWriteTransaction rwTx, TapPortCommand addCommand) - throws ExecutionException, InterruptedException { - addCommand.execute(rwTx); - - rwTx.submit().get(); - - ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); - - return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), rTx); - } - - @Test - public void testDeleteTapPort() throws ExecutionException, InterruptedException { - ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); - - rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), - BASIC_INTERFACE, true); - rwTx.submit().get(); - - Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue(optional.isPresent()); - - TapPortCommand deleteCommand = TapPortCommand.builder() - .setOperation(General.Operations.DELETE) - .setInterfaceName(INTERFACE_NAME) - .setTapName(TAP_NAME) - .build(); - - ReadWriteTransaction rwTxDel = dataBroker.newReadWriteTransaction(); - deleteCommand.execute(rwTxDel); - rwTxDel.submit(); - - Optional optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())), - dataBroker.newReadOnlyTransaction()); - - Assert.assertFalse(optionalDeleted.isPresent()); - } - - @Test - public void testUpdateTapPort() throws ExecutionException, InterruptedException { - ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); - - rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), - BASIC_INTERFACE, true); - rwTx.submit().get(); - - Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue(optional.isPresent()); - - TapPortCommand updateCommand = TapPortCommand.builder() - .setOperation(General.Operations.MERGE) - .setInterfaceName(INTERFACE_NAME) - .setTapName(UPD_TAP_NAME) - .setDescription(UPD_DESCRIPTION) - .setPhysAddress(UPD_MAC_ADDRESS) - .setDeviceInstance(UPD_DEVICE_ID) - .setEnabled(false) - .build(); - - ReadWriteTransaction rwTxUpd = dataBroker.newReadWriteTransaction(); - updateCommand.execute(rwTxUpd); - rwTxUpd.submit().get(); - - Optional optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())), - dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue(optionalUpdated.isPresent()); - Interface updatedInterface = optionalUpdated.get(); - - Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription()); - Assert.assertFalse(updatedInterface.isEnabled()); - VppInterfaceAugmentation augmentation = updatedInterface.getAugmentation(VppInterfaceAugmentation.class); - Assert.assertEquals(INTERFACE_NAME, updatedInterface.getName()); - Assert.assertEquals(UPD_DEVICE_ID, augmentation.getTap().getDeviceInstance()); - Assert.assertEquals(UPD_MAC_ADDRESS, augmentation.getTap().getMac()); - Assert.assertEquals(UPD_TAP_NAME, augmentation.getTap().getTapName()); - - } -} +/* + * Copyright (c) 2016 Cisco Systems. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.commands; + +import com.google.common.base.Optional; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.Tap; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.L2Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.TapBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBasedBuilder; + +import java.util.concurrent.ExecutionException; + +public class TapPortCommandTest extends VppRendererDataBrokerTest { + + private final static String DESCRIPTION = "used for testing"; + private final static String INTERFACE_NAME = "testInterface"; + private final static String TAP_NAME = "testTap00:11:22:33:44:55"; + private final static String BRIDGE_DOMAIN = "testBD"; + private final static Long DEVICE_ID = 0L; + private final static PhysAddress MAC_ADDRESS = new PhysAddress("00:11:22:33:44:55"); + + private final static String UPD_DESCRIPTION = "updated description"; + private final static PhysAddress UPD_MAC_ADDRESS = new PhysAddress("55:44:33:22:11:00"); + private final static String UPD_TAP_NAME = "testTapUpd"; + private final static Long UPD_DEVICE_ID = 1L; + + private final static VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder() + .setTap(new TapBuilder().setMac(MAC_ADDRESS).setTapName(TAP_NAME).setDeviceInstance(DEVICE_ID).build()); + + private final static VppInterfaceAugmentationBuilder vppAugmentationBuilderWithBD = + new VppInterfaceAugmentationBuilder(vppAugmentationBuilder.build()) + .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN) + .setBridgedVirtualInterface(false).setSplitHorizonGroup((short)0) + .build()).build()); + + private final static InterfaceBuilder interfaceBuilder = + new InterfaceBuilder().setKey(new InterfaceKey(INTERFACE_NAME)) + .setEnabled(true) + .setDescription(DESCRIPTION) + .setType(Tap.class) + .setName(INTERFACE_NAME) + .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled); + + private final static Interface BASIC_INTERFACE = + interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build()).build(); + private final static Interface BASIC_INTERFACE_WITH_BD = interfaceBuilder + .addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilderWithBD.build()).build(); + + private DataBroker dataBroker; + + @Before + public void init() { + dataBroker = getDataBroker(); + } + + @Test + public void testAddTapPort() throws ExecutionException, InterruptedException { + ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); + TapPortCommand addCommand = TapPortCommand.builder() + .setOperation(General.Operations.PUT) + .setInterfaceName(INTERFACE_NAME) + .setTapName(TAP_NAME) + .setDescription(DESCRIPTION) + .setDeviceInstance(DEVICE_ID) + .setPhysAddress(MAC_ADDRESS) + .setEnabled(true) + .build(); + + Optional optional = executeCommand(rwTx, addCommand); + + Assert.assertTrue(optional.isPresent()); + Assert.assertEquals(BASIC_INTERFACE, optional.get()); + + } + + @Test + public void testAddTapPort_WithBridgeDomain() throws ExecutionException, InterruptedException { + ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); + TapPortCommand addCommand = TapPortCommand.builder() + .setOperation(General.Operations.PUT) + .setInterfaceName(INTERFACE_NAME) + .setTapName(TAP_NAME) + .setDescription(DESCRIPTION) + .setDeviceInstance(DEVICE_ID) + .setPhysAddress(MAC_ADDRESS) + .setBridgeDomain(BRIDGE_DOMAIN) + .setEnabled(true) + .build(); + + Optional optional = executeCommand(rwTx, addCommand); + + Assert.assertTrue(optional.isPresent()); + Assert.assertEquals(BASIC_INTERFACE_WITH_BD, optional.get()); + + } + + private Optional executeCommand(ReadWriteTransaction rwTx, TapPortCommand addCommand) + throws ExecutionException, InterruptedException { + addCommand.execute(rwTx); + + rwTx.submit().get(); + + ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); + + return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), rTx); + } + + @Test + public void testDeleteTapPort() throws ExecutionException, InterruptedException { + ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); + + rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), + BASIC_INTERFACE, true); + rwTx.submit().get(); + + Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue(optional.isPresent()); + + TapPortCommand deleteCommand = TapPortCommand.builder() + .setOperation(General.Operations.DELETE) + .setInterfaceName(INTERFACE_NAME) + .setTapName(TAP_NAME) + .build(); + + ReadWriteTransaction rwTxDel = dataBroker.newReadWriteTransaction(); + deleteCommand.execute(rwTxDel); + rwTxDel.submit(); + + Optional optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())), + dataBroker.newReadOnlyTransaction()); + + Assert.assertFalse(optionalDeleted.isPresent()); + } + + @Test + public void testUpdateTapPort() throws ExecutionException, InterruptedException { + ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction(); + + rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), + BASIC_INTERFACE, true); + rwTx.submit().get(); + + Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue(optional.isPresent()); + + TapPortCommand updateCommand = TapPortCommand.builder() + .setOperation(General.Operations.MERGE) + .setInterfaceName(INTERFACE_NAME) + .setTapName(UPD_TAP_NAME) + .setDescription(UPD_DESCRIPTION) + .setPhysAddress(UPD_MAC_ADDRESS) + .setDeviceInstance(UPD_DEVICE_ID) + .setEnabled(false) + .build(); + + ReadWriteTransaction rwTxUpd = dataBroker.newReadWriteTransaction(); + updateCommand.execute(rwTxUpd); + rwTxUpd.submit().get(); + + Optional optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())), + dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue(optionalUpdated.isPresent()); + Interface updatedInterface = optionalUpdated.get(); + + Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription()); + Assert.assertFalse(updatedInterface.isEnabled()); + VppInterfaceAugmentation augmentation = updatedInterface.getAugmentation(VppInterfaceAugmentation.class); + Assert.assertEquals(INTERFACE_NAME, updatedInterface.getName()); + Assert.assertEquals(UPD_DEVICE_ID, augmentation.getTap().getDeviceInstance()); + Assert.assertEquals(UPD_MAC_ADDRESS, augmentation.getTap().getMac()); + Assert.assertEquals(UPD_TAP_NAME, augmentation.getTap().getTapName()); + + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/VhostUserCommandTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/VhostUserCommandTest.java index ff2e7eb6d..f9736bf8f 100644 --- a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/VhostUserCommandTest.java +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/VhostUserCommandTest.java @@ -1,182 +1,182 @@ -/* - * Copyright (c) 2016 Cisco Systems. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.vpp.commands; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; -import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VhostUserRole; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.L2Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.VhostUser; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.VhostUserBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBased; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBasedBuilder; - -import com.google.common.base.Optional; - -public class VhostUserCommandTest extends VppRendererDataBrokerTest { - - private final static String BRIDGE_DOMAIN = "testBD"; - private final static String DESCRIPTION = "used for testing"; - private final static String INTERFACE_NAME = "testInterface"; - private final static String SOCKET_NAME = "soc1"; - - private final static String UPD_BRIDGE_DOMAIN = "testBD2"; - private final static String UPD_DESCRIPTION = "updated description"; - private final static String UPD_SOCKET_NAME = "soc2"; - private final static boolean IS_BRIDGED_DEFAULT = false; - - private static Interface BASIC_INTERFACE; - - private DataBroker dataBroker; - - @Before - public void init() { - dataBroker = getDataBroker(); - - VhostUser vhostUser = new VhostUserBuilder().setRole(VhostUserRole.Server).setSocket(SOCKET_NAME).build(); - - VppInterfaceAugmentation vppAugmentation = new VppInterfaceAugmentationBuilder().setVhostUser(vhostUser) - .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN) - .setBridgedVirtualInterface(IS_BRIDGED_DEFAULT).setSplitHorizonGroup((short)0) - .build()).build()) - .build(); - - BASIC_INTERFACE = - new InterfaceBuilder().setDescription(DESCRIPTION) - .setEnabled(true) - .setKey(new InterfaceKey(INTERFACE_NAME)) - .setName(INTERFACE_NAME) - .setType( - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VhostUser.class) - .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled) - .addAugmentation(VppInterfaceAugmentation.class, vppAugmentation) - .build(); - } - - @Test - public void AddVhostTest() { - ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); - VhostUserCommand addCommand = VhostUserCommand.builder() - .setOperation(General.Operations.PUT) - .setName(INTERFACE_NAME) - .setDescription(DESCRIPTION) - .setRole(VhostUserRole.Server) - .setSocket(SOCKET_NAME) - .setBridgeDomain(BRIDGE_DOMAIN) - .setEnabled(true) - .build(); - - addCommand.execute(transaction); - - transaction.submit(); - - ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction(); - - Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), readOnlyTransaction); - - Assert.assertTrue("Interface was not written to DS", optional.isPresent()); - - Interface anInterface = optional.get(); - - Assert.assertEquals(BASIC_INTERFACE, anInterface); - - } - - @Test - public void DeleteVhostTest() { - ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); - - transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), - BASIC_INTERFACE, true); - transaction.submit(); - - Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue("Interface was not written to DS", optional.isPresent()); - - VhostUserCommand deleteCommand = VhostUserCommand.builder() - .setOperation(General.Operations.DELETE) - .setName(INTERFACE_NAME) - .setSocket(SOCKET_NAME) - .build(); - - ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction(); - deleteCommand.execute(deleteTransaction); - deleteTransaction.submit(); - - Optional optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())), - dataBroker.newReadOnlyTransaction()); - - Assert.assertFalse("Interface was not deleted from DS", optionalDeleted.isPresent()); - } - - @Test - public void UpdateVhostTest() { - ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); - - transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), - BASIC_INTERFACE, true); - transaction.submit(); - - Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue("Interface was not written to DS", optional.isPresent()); - - VhostUserCommand updateCommand = VhostUserCommand.builder() - .setOperation(General.Operations.MERGE) - .setName(INTERFACE_NAME) - .setDescription(UPD_DESCRIPTION) - .setEnabled(false) - .setRole(VhostUserRole.Client) - .setSocket(UPD_SOCKET_NAME) - .setBridgeDomain(UPD_BRIDGE_DOMAIN) - .build(); - - ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction(); - updateCommand.execute(deleteTransaction); - deleteTransaction.submit(); - - Optional optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, - VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())), - dataBroker.newReadOnlyTransaction()); - - Assert.assertTrue("Interface was not found in DS", optionalUpdated.isPresent()); - Interface updatedInterface = optionalUpdated.get(); - - Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription()); - Assert.assertFalse(updatedInterface.isEnabled()); - VppInterfaceAugmentation vppInterfaceAugmentation = - updatedInterface.getAugmentation(VppInterfaceAugmentation.class); - Assert.assertEquals(VhostUserRole.Client, vppInterfaceAugmentation.getVhostUser().getRole()); - Assert.assertEquals(UPD_SOCKET_NAME, vppInterfaceAugmentation.getVhostUser().getSocket()); - - Assert.assertTrue(vppInterfaceAugmentation.getL2().getInterconnection() instanceof BridgeBased); - - Assert.assertEquals(UPD_BRIDGE_DOMAIN, - ((BridgeBased) vppInterfaceAugmentation.getL2().getInterconnection()).getBridgeDomain()); - } -} +/* + * Copyright (c) 2016 Cisco Systems. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.commands; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; +import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; +import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VhostUserRole; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.L2Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.VhostUser; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.VhostUserBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBased; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBasedBuilder; + +import com.google.common.base.Optional; + +public class VhostUserCommandTest extends VppRendererDataBrokerTest { + + private final static String BRIDGE_DOMAIN = "testBD"; + private final static String DESCRIPTION = "used for testing"; + private final static String INTERFACE_NAME = "testInterface"; + private final static String SOCKET_NAME = "soc1"; + + private final static String UPD_BRIDGE_DOMAIN = "testBD2"; + private final static String UPD_DESCRIPTION = "updated description"; + private final static String UPD_SOCKET_NAME = "soc2"; + private final static boolean IS_BRIDGED_DEFAULT = false; + + private static Interface BASIC_INTERFACE; + + private DataBroker dataBroker; + + @Before + public void init() { + dataBroker = getDataBroker(); + + VhostUser vhostUser = new VhostUserBuilder().setRole(VhostUserRole.Server).setSocket(SOCKET_NAME).build(); + + VppInterfaceAugmentation vppAugmentation = new VppInterfaceAugmentationBuilder().setVhostUser(vhostUser) + .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN) + .setBridgedVirtualInterface(IS_BRIDGED_DEFAULT).setSplitHorizonGroup((short)0) + .build()).build()) + .build(); + + BASIC_INTERFACE = + new InterfaceBuilder().setDescription(DESCRIPTION) + .setEnabled(true) + .setKey(new InterfaceKey(INTERFACE_NAME)) + .setName(INTERFACE_NAME) + .setType( + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VhostUser.class) + .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled) + .addAugmentation(VppInterfaceAugmentation.class, vppAugmentation) + .build(); + } + + @Test + public void AddVhostTest() { + ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); + VhostUserCommand addCommand = VhostUserCommand.builder() + .setOperation(General.Operations.PUT) + .setName(INTERFACE_NAME) + .setDescription(DESCRIPTION) + .setRole(VhostUserRole.Server) + .setSocket(SOCKET_NAME) + .setBridgeDomain(BRIDGE_DOMAIN) + .setEnabled(true) + .build(); + + addCommand.execute(transaction); + + transaction.submit(); + + ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction(); + + Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), readOnlyTransaction); + + Assert.assertTrue("Interface was not written to DS", optional.isPresent()); + + Interface anInterface = optional.get(); + + Assert.assertEquals(BASIC_INTERFACE, anInterface); + + } + + @Test + public void DeleteVhostTest() { + ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); + + transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), + BASIC_INTERFACE, true); + transaction.submit(); + + Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue("Interface was not written to DS", optional.isPresent()); + + VhostUserCommand deleteCommand = VhostUserCommand.builder() + .setOperation(General.Operations.DELETE) + .setName(INTERFACE_NAME) + .setSocket(SOCKET_NAME) + .build(); + + ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction(); + deleteCommand.execute(deleteTransaction); + deleteTransaction.submit(); + + Optional optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())), + dataBroker.newReadOnlyTransaction()); + + Assert.assertFalse("Interface was not deleted from DS", optionalDeleted.isPresent()); + } + + @Test + public void UpdateVhostTest() { + ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); + + transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), + BASIC_INTERFACE, true); + transaction.submit(); + + Optional optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue("Interface was not written to DS", optional.isPresent()); + + VhostUserCommand updateCommand = VhostUserCommand.builder() + .setOperation(General.Operations.MERGE) + .setName(INTERFACE_NAME) + .setDescription(UPD_DESCRIPTION) + .setEnabled(false) + .setRole(VhostUserRole.Client) + .setSocket(UPD_SOCKET_NAME) + .setBridgeDomain(UPD_BRIDGE_DOMAIN) + .build(); + + ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction(); + updateCommand.execute(deleteTransaction); + deleteTransaction.submit(); + + Optional optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, + VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())), + dataBroker.newReadOnlyTransaction()); + + Assert.assertTrue("Interface was not found in DS", optionalUpdated.isPresent()); + Interface updatedInterface = optionalUpdated.get(); + + Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription()); + Assert.assertFalse(updatedInterface.isEnabled()); + VppInterfaceAugmentation vppInterfaceAugmentation = + updatedInterface.getAugmentation(VppInterfaceAugmentation.class); + Assert.assertEquals(VhostUserRole.Client, vppInterfaceAugmentation.getVhostUser().getRole()); + Assert.assertEquals(UPD_SOCKET_NAME, vppInterfaceAugmentation.getVhostUser().getSocket()); + + Assert.assertTrue(vppInterfaceAugmentation.getL2().getInterconnection() instanceof BridgeBased); + + Assert.assertEquals(UPD_BRIDGE_DOMAIN, + ((BridgeBased) vppInterfaceAugmentation.getL2().getInterconnection()).getBridgeDomain()); + } +} diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/L4ClassifierTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/L4ClassifierTest.java index bd4683386..296bebcf3 100644 --- a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/L4ClassifierTest.java +++ b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/sf/L4ClassifierTest.java @@ -1,173 +1,173 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.groupbasedpolicy.renderer.vpp.sf; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; -import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; -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.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.ParameterType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.*; - -public class L4ClassifierTest { - - private ParameterValue pvSrcPort80; - private ParameterValue pvDstPort80; - private ParameterValue pvDstPort_null; - private ParameterValue pvSrcRange81_82; - private ParameterValue pvDstRange81_82; - private ParameterValue pvDstRange82_81; - private ParameterValue pvDstRange_null; - private Classifier l4Cl; - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @Before - public void init() { - pvSrcPort80 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.SRC_PORT_PARAM)).setIntValue(80L).build(); - pvDstPort80 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).setIntValue(80L).build(); - pvDstPort_null = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).build(); - pvSrcRange81_82 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM)) - .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build()) - .build(); - pvDstRange81_82 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) - .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build()) - .build(); - pvDstRange82_81 = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) - .setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build()) - .build(); - pvDstRange_null = new ParameterValueBuilder().setName( - new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) - //.setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build()) - .build(); - l4Cl = SubjectFeatures.getClassifier(L4ClassifierDefinition.ID); - } - - @Test - public void testGetId() { - assertEquals(L4ClassifierDefinition.ID, l4Cl.getId()); - } - - @Test - public void testGetClassifierDefinition() { - assertEquals(L4ClassifierDefinition.DEFINITION, l4Cl.getClassifierDefinition()); - } - - @Test - public void testGetSupportedParameterValues() { - List valuesList = l4Cl.getSupportedParameterValues(); - assertEquals(4, valuesList.size()); - - SupportedParameterValues values = valuesList.get(0); - assertNotNull(values); - assertEquals(L4ClassifierDefinition.SRC_PORT_PARAM, values.getParameterName().getValue()); - ParameterType pt = values.getParameterType(); - assertTrue(pt instanceof Int); - } - - @Test - public void testCheckPresenceOfRequiredParams_Empty() throws Exception { - // TODO check: sending empty map is ok? - l4Cl.checkPresenceOfRequiredParams(new HashMap()); - } - - @Test - public void testCheckPresenceOfRequiredParams_SinglePorts() throws Exception { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort80); - - l4Cl.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_PortRanges() throws Exception { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82); - params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange81_82); - - l4Cl.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_DstPortNull() throws IllegalArgumentException { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort_null); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED); - l4Cl.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_DstRangeNull() throws IllegalArgumentException { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange_null); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED); - l4Cl.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_ParamConflict() throws IllegalArgumentException { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(L4Classifier.EXC_MSG_MUT_EXCLUSIVE_PARAMS); - l4Cl.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_RangeInverted() throws IllegalArgumentException { - Map params = new HashMap<>(); - params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); - params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange82_81); - - thrown.expect(IllegalArgumentException.class); - thrown.expectMessage(L4Classifier.EXC_MSG_RANGE_VALUE_MISMATCH); - l4Cl.checkPresenceOfRequiredParams(params); - } - - @Test - public void testCheckPresenceOfRequiredParams_emptyParams() { - - l4Cl.checkPresenceOfRequiredParams(new HashMap()); - } - - @Test - public void testGetParent() { - assertEquals(l4Cl.getParent(), SubjectFeatures.getClassifier(IpProtoClassifierDefinition.ID)); - } - -} +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.groupbasedpolicy.renderer.vpp.sf; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition; +import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName; +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.policy.rev140421.subject.feature.instance.parameter.value.RangeValueBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.ParameterType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.Int; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.*; + +public class L4ClassifierTest { + + private ParameterValue pvSrcPort80; + private ParameterValue pvDstPort80; + private ParameterValue pvDstPort_null; + private ParameterValue pvSrcRange81_82; + private ParameterValue pvDstRange81_82; + private ParameterValue pvDstRange82_81; + private ParameterValue pvDstRange_null; + private Classifier l4Cl; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Before + public void init() { + pvSrcPort80 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.SRC_PORT_PARAM)).setIntValue(80L).build(); + pvDstPort80 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).setIntValue(80L).build(); + pvDstPort_null = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_PARAM)).build(); + pvSrcRange81_82 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM)) + .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build()) + .build(); + pvDstRange81_82 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) + .setRangeValue(new RangeValueBuilder().setMin(81L).setMax(82L).build()) + .build(); + pvDstRange82_81 = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) + .setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build()) + .build(); + pvDstRange_null = new ParameterValueBuilder().setName( + new ParameterName(L4ClassifierDefinition.DST_PORT_RANGE_PARAM)) + //.setRangeValue(new RangeValueBuilder().setMin(82L).setMax(81L).build()) + .build(); + l4Cl = SubjectFeatures.getClassifier(L4ClassifierDefinition.ID); + } + + @Test + public void testGetId() { + assertEquals(L4ClassifierDefinition.ID, l4Cl.getId()); + } + + @Test + public void testGetClassifierDefinition() { + assertEquals(L4ClassifierDefinition.DEFINITION, l4Cl.getClassifierDefinition()); + } + + @Test + public void testGetSupportedParameterValues() { + List valuesList = l4Cl.getSupportedParameterValues(); + assertEquals(4, valuesList.size()); + + SupportedParameterValues values = valuesList.get(0); + assertNotNull(values); + assertEquals(L4ClassifierDefinition.SRC_PORT_PARAM, values.getParameterName().getValue()); + ParameterType pt = values.getParameterType(); + assertTrue(pt instanceof Int); + } + + @Test + public void testCheckPresenceOfRequiredParams_Empty() throws Exception { + // TODO check: sending empty map is ok? + l4Cl.checkPresenceOfRequiredParams(new HashMap()); + } + + @Test + public void testCheckPresenceOfRequiredParams_SinglePorts() throws Exception { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort80); + + l4Cl.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_PortRanges() throws Exception { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82); + params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange81_82); + + l4Cl.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_DstPortNull() throws IllegalArgumentException { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.DST_PORT_PARAM, pvDstPort_null); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED); + l4Cl.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_DstRangeNull() throws IllegalArgumentException { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange_null); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(L4Classifier.EXC_MSG_PARAM_VALUE_NOT_SPECIFIED); + l4Cl.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_ParamConflict() throws IllegalArgumentException { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.SRC_PORT_RANGE_PARAM, pvSrcRange81_82); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(L4Classifier.EXC_MSG_MUT_EXCLUSIVE_PARAMS); + l4Cl.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_RangeInverted() throws IllegalArgumentException { + Map params = new HashMap<>(); + params.put(L4ClassifierDefinition.SRC_PORT_PARAM, pvSrcPort80); + params.put(L4ClassifierDefinition.DST_PORT_RANGE_PARAM, pvDstRange82_81); + + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage(L4Classifier.EXC_MSG_RANGE_VALUE_MISMATCH); + l4Cl.checkPresenceOfRequiredParams(params); + } + + @Test + public void testCheckPresenceOfRequiredParams_emptyParams() { + + l4Cl.checkPresenceOfRequiredParams(new HashMap()); + } + + @Test + public void testGetParent() { + assertEquals(l4Cl.getParent(), SubjectFeatures.getClassifier(IpProtoClassifierDefinition.ID)); + } + +} -- 2.36.6