2 * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.bgp.openconfig.routing.policy.statement;
10 import static org.junit.Assert.assertEquals;
11 import static org.mockito.Mockito.doReturn;
12 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer.routeAttributeContainerFalse;
13 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.ExportAttributeTestUtil.createClusterInput;
14 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.ExportAttributeTestUtil.createInputWithOriginator;
15 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.ExportAttributeTestUtil.createPathInput;
16 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.ExportAttributeTestUtil.createPathInputWithAs;
18 import java.util.List;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.opendaylight.protocol.bgp.openconfig.routing.policy.impl.PolicyRIBBaseParametersImpl;
23 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer;
24 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.routing.policy.policy.definitions.policy.definition.statements.Statement;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.Attributes;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev171207.PeerRole;
29 public class ExportDefaultStatementTest extends AbstractStatementRegistryConsumerTest {
31 private BGPRouteEntryExportParameters exportParameters;
32 private List<Statement> defaultExportStatements;
33 private PolicyRIBBaseParametersImpl baseAttributes;
37 public void setUp() throws Exception {
39 this.defaultExportStatements = loadStatement("default-odl-export-policy");
40 this.baseAttributes = new PolicyRIBBaseParametersImpl(LOCAL_AS, IPV4, CLUSTER);
44 public void testToEbgp() {
45 final Statement statement = getStatementAndSetToRole("to-external", PeerRole.Ebgp);
47 final Attributes expectedOutput = createPathInputWithAs();
48 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createPathInput(null));
50 assertApplyExportStatement(statement, PeerRole.Ebgp, attributeContainer, expectedOutput);
51 assertApplyExportStatement(statement, PeerRole.Ibgp, attributeContainer, expectedOutput);
52 assertApplyExportStatement(statement, PeerRole.Internal, attributeContainer, expectedOutput);
53 assertApplyExportStatement(statement, PeerRole.RrClient, attributeContainer, expectedOutput);
57 public void testFromInternalToInternal() {
58 final Statement statement = getStatementAndSetToRole("from-internal-to-internal", PeerRole.Ibgp);
59 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
60 assertApplyExportStatement(statement, PeerRole.Ibgp, attributeContainer, null);
64 public void testFromExternalToInternal() {
65 final Statement statement = getStatementAndSetToRole("from-external-to-internal", PeerRole.Ibgp);
66 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
67 assertApplyExportStatement(statement, PeerRole.Ebgp, attributeContainer, attributeContainer.getAttributes());
71 public void testFromOdlInternalToInternal() {
72 final Statement statement = getStatementAndSetToRole("from-odl-internal-to-internal-or-rr-client",
74 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
75 assertApplyExportStatement(statement, PeerRole.Internal, attributeContainer, createClusterInput());
79 public void testFromRRclientToInternal() {
80 final Statement statement = getStatementAndSetToRole("from-rr-client-to-internal", PeerRole.Ibgp);
81 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
82 assertApplyExportStatement(statement, PeerRole.RrClient, attributeContainer, createInputWithOriginator());
86 public void testOdlInternal() {
87 final Statement statement = getStatementAndSetToRole("to-odl-internal", PeerRole.Internal);
88 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
90 assertApplyExportStatement(statement, PeerRole.Ebgp, attributeContainer, null);
91 assertApplyExportStatement(statement, PeerRole.Ibgp, attributeContainer, null);
92 assertApplyExportStatement(statement, PeerRole.Internal, attributeContainer, null);
93 assertApplyExportStatement(statement, PeerRole.RrClient, attributeContainer, null);
97 public void testFromExternalToRRClient() {
98 final Statement statement = getStatementAndSetToRole("from-external-to-route-reflector", PeerRole.RrClient);
99 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
100 assertApplyExportStatement(statement, PeerRole.Ebgp, attributeContainer, attributeContainer.getAttributes());
104 public void testFromInternalOrRRClientToRRClient() {
105 final Statement statement = getStatementAndSetToRole("from-internal-or-rr-client-to-route-reflector",
107 final Attributes expectedOutput = createInputWithOriginator();
108 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
110 assertApplyExportStatement(statement, PeerRole.Ibgp, attributeContainer, expectedOutput);
111 assertApplyExportStatement(statement, PeerRole.RrClient, attributeContainer, expectedOutput);
115 public void testFromOdlInternalToRRClient() {
116 final Statement statement = getStatementAndSetToRole("from-odl-internal-to-internal-or-rr-client",
118 final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
119 assertApplyExportStatement(statement, PeerRole.Internal, attributeContainer, createClusterInput());
122 private Statement getStatementAndSetToRole(final String statementName, final PeerRole toPeerRole) {
123 doReturn(toPeerRole).when(this.exportParameters).getToPeerRole();
124 return this.defaultExportStatements.stream()
125 .filter(st -> st.getName().equals(statementName)).findFirst().get();
128 private void assertApplyExportStatement(
129 final Statement statement, final PeerRole fromPeerRole,
130 final RouteAttributeContainer attInput,
131 final Attributes attExpected) {
132 doReturn(fromPeerRole).when(this.exportParameters).getFromPeerRole();
134 RouteAttributeContainer result = this.statementRegistry.applyExportStatement(
136 this.exportParameters,
139 assertEquals(attExpected, result.getAttributes());