/*
* 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.ios_xe_provider.impl.util;
import com.google.common.collect.Lists;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyConfigurationContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.AddressEndpointKey;
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.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.forwarding.l2_l3.rev160427.IpPrefixType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L3Context;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.UnconfiguredRuleGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.unconfigured.rule.group.UnconfiguredResolvedRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.unconfigured.rule.groups.unconfigured.rule.group.UnconfiguredResolvedRuleBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.UnconfiguredRendererEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.unconfigured.endpoints.unconfigured.renderer.endpoint.UnconfiguredPeerEndpoint;
/**
* Test for {@link StatusUtil}.
*/
public class StatusUtilTest {
private static final TenantId TENANT_ID = new TenantId("unit-tenant-1");
private static final SubjectName SUBJECT_NAME = new SubjectName("unit-subject-1");
private static final ContractId CONTRACT_ID = new ContractId("unit-contract-1");
private static final String ADDRESS_1 = "unit-address-1";
private static final ContextId CONTEXT_ID_1 = new ContextId("unit-context-1");
private static final String ADDRESS_2 = "unit-address-2";
private static final ContextId CONTEXT_ID_2 = new ContextId("unit-context-2");
private static final String INFO_MESSAGE = "unit-info-1";
private PolicyConfigurationContext context;
@Before
public void setUp() throws Exception {
context = new PolicyConfigurationContext();
}
@Test
public void testAssembleFullyNotConfigurableRendererEP() throws Exception {
final PeerEndpoint peer1 = createPeer(ADDRESS_1, CONTEXT_ID_1);
final PeerEndpoint peer2 = createPeer(ADDRESS_2, CONTEXT_ID_2);
final RendererEndpoint rendererEP = createRendererEP(ADDRESS_1, CONTEXT_ID_1,
Lists.newArrayList(peer1, peer2)
);
context.setCurrentRendererEP(rendererEP);
final UnconfiguredRendererEndpoint actual = StatusUtil.assembleFullyNotConfigurableRendererEP(context, INFO_MESSAGE);
compareEPs(rendererEP, actual);
Assert.assertNull(actual.getUnconfiguredPeerExternalEndpoint());
Assert.assertNull(actual.getUnconfiguredPeerExternalContainmentEndpoint());
final List<UnconfiguredPeerEndpoint> unconfiguredPeerEndpoints = actual.getUnconfiguredPeerEndpoint();
Assert.assertEquals(2, unconfiguredPeerEndpoints.size());
compareEPs(peer1, unconfiguredPeerEndpoints.get(0));
Assert.assertTrue(unconfiguredPeerEndpoints.get(0).getUnconfiguredRuleGroup().isEmpty());
compareEPs(peer2, unconfiguredPeerEndpoints.get(1));
Assert.assertTrue(unconfiguredPeerEndpoints.get(1).getUnconfiguredRuleGroup().isEmpty());
}
private PeerEndpoint createPeer(final String address, final ContextId contextId) {
return new PeerEndpointBuilder(createRendererEP(address, contextId, Collections.emptyList()))
.setRuleGroupWithRendererEndpointParticipation(Collections.emptyList())
.build();
}
private RendererEndpoint createRendererEP(final String address, final ContextId contextId, final List<PeerEndpoint> peerEndpoints) {
return new RendererEndpointBuilder()
.setAddress(address)
.setAddressType(IpPrefixType.class)
.setContextId(contextId)
.setContextType(L3Context.class)
.setPeerEndpoint(peerEndpoints)
.build();
}
@Test
public void testAssembleNotConfigurableRendererEPForPeer() throws Exception {
final PeerEndpoint peer1 = createPeer(ADDRESS_1, CONTEXT_ID_1);
final PeerEndpoint peer2 = createPeer(ADDRESS_2, CONTEXT_ID_2);
final RendererEndpoint rendererEP = createRendererEP(ADDRESS_1, CONTEXT_ID_1,
Lists.newArrayList(peer1, peer2)
);
context.setCurrentRendererEP(rendererEP);
final UnconfiguredRendererEndpoint actual = StatusUtil.assembleNotConfigurableRendererEPForPeer(context, peer1, INFO_MESSAGE);
compareEPs(rendererEP, actual);
Assert.assertNull(actual.getUnconfiguredPeerExternalEndpoint());
Assert.assertNull(actual.getUnconfiguredPeerExternalContainmentEndpoint());
final List<UnconfiguredPeerEndpoint> unconfiguredPeerEndpoints = actual.getUnconfiguredPeerEndpoint();
Assert.assertEquals(1, unconfiguredPeerEndpoints.size());
compareEPs(peer1, unconfiguredPeerEndpoints.get(0));
Assert.assertTrue(unconfiguredPeerEndpoints.get(0).getUnconfiguredRuleGroup().isEmpty());
}
@Test
public void testAssemblePeerEndpoint() throws Exception {
final PeerEndpoint peerEndpoint = createPeer(ADDRESS_1, CONTEXT_ID_1);
final List<UnconfiguredPeerEndpoint> gatheredPeers = StatusUtil.assemblePeerEndpoint(Stream.of(peerEndpoint), null);
Assert.assertEquals(1, gatheredPeers.size());
final UnconfiguredPeerEndpoint actual = gatheredPeers.get(0);
compareEPs(peerEndpoint, actual);
Assert.assertTrue(actual.getUnconfiguredRuleGroup().isEmpty());
}
private void compareEPs(final AddressEndpointKey peerEndpoint, final AddressEndpointKey actual) {
Assert.assertEquals(peerEndpoint.getAddress(), actual.getAddress());
Assert.assertEquals(peerEndpoint.getAddressType(), actual.getAddressType());
Assert.assertEquals(peerEndpoint.getContextId(), actual.getContextId());
Assert.assertEquals(peerEndpoint.getContextType(), actual.getContextType());
}
@Test
public void testAssembleRuleGroups() throws Exception {
final UnconfiguredResolvedRuleBuilder unconfiguredResolvedRuleBuilder = new UnconfiguredResolvedRuleBuilder();
unconfiguredResolvedRuleBuilder.setRuleName(new RuleName("rule-name"));
final UnconfiguredResolvedRule resolvedRule = unconfiguredResolvedRuleBuilder.build();
final PolicyConfigurationContext context = new PolicyConfigurationContext();
context.setCurrentUnconfiguredRule(resolvedRule);
final RuleGroupWithRendererEndpointParticipation ruleGroup =
new RuleGroupWithRendererEndpointParticipationBuilder()
.setTenantId(TENANT_ID)
.setSubjectName(SUBJECT_NAME)
.setContractId(CONTRACT_ID)
.setRendererEndpointParticipation(EndpointPolicyParticipation.CONSUMER)
.build();
final List<UnconfiguredRuleGroup> gatheredRuleGroups = StatusUtil.assembleRuleGroups(Stream.of(ruleGroup), context);
Assert.assertEquals(1, gatheredRuleGroups.size());
final UnconfiguredRuleGroup actual = gatheredRuleGroups.get(0);
Assert.assertEquals(TENANT_ID, actual.getTenantId());
Assert.assertEquals(SUBJECT_NAME, actual.getSubjectName());
Assert.assertEquals(CONTRACT_ID, actual.getContractId());
Assert.assertEquals(Collections.singletonList(resolvedRule), actual.getUnconfiguredResolvedRule());
Assert.assertEquals(EndpointPolicyParticipation.CONSUMER, actual.getRendererEndpointParticipation());
}
}