2 * Copyright (c) 2016 Cisco Systems. 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
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.commands;
11 import com.google.common.base.Optional;
12 import org.junit.Assert;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
17 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest;
20 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;
21 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
22 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.StaticRoutes1;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.StaticRoutes1Builder;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.Ipv4Builder;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.Route;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.RouteBuilder;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.route.VppIpv4RouteBuilder;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.route.next.hop.options.SimpleNextHopBuilder;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.Static;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocol;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocolBuilder;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocolKey;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.routing.protocol.StaticRoutesBuilder;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev170917.RoutingProtocolVppAttr;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev170917.RoutingProtocolVppAttrBuilder;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev170917.VniReference;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol.VppProtocolAttributesBuilder;
42 import java.util.Collections;
43 import java.util.List;
44 import java.util.concurrent.ExecutionException;
46 public class RoutingCommandTest extends VppRendererDataBrokerTest {
48 private final static String NEXT_HOP = "10.0.0.1";
49 private final static String OUT_INTERFACE = "GigabitEthernet0/a/0";
50 private final static String PREFIX = "10.0.0.0/24";
51 private final static String PREFIX_2 = "0.0.0.0/0";
52 private final static String ROUTER_PROTOCOL = "vpp-routing-protocol_0";
53 private final static String ROUTE1_DESCRIPTION = "route 1";
54 private final static String ROUTE2_DESCRIPTION = "route 2";
55 private final static VniReference VNI_REFERENCE = new VniReference(0L);
56 private final static Route
58 new RouteBuilder().setId(1L)
59 .setDescription(ROUTE1_DESCRIPTION)
60 .setDestinationPrefix(new Ipv4Prefix(PREFIX))
61 .setNextHopOptions(new SimpleNextHopBuilder().setNextHop(new Ipv4Address(NEXT_HOP))
62 .setOutgoingInterface(OUT_INTERFACE)
64 .setVppIpv4Route(new VppIpv4RouteBuilder().setClassifyTable("0").build())
66 private final static Route
68 new RouteBuilder().setId(2L)
69 .setDescription(ROUTE2_DESCRIPTION)
70 .setDestinationPrefix(new Ipv4Prefix(PREFIX_2))
71 .setNextHopOptions(new SimpleNextHopBuilder().setNextHop(new Ipv4Address(NEXT_HOP))
72 .setOutgoingInterface(OUT_INTERFACE)
74 .setVppIpv4Route(new VppIpv4RouteBuilder().setClassifyTable("0").build())
76 private final static List<Route> ROUTES = Collections.singletonList(ROUTE_1);
77 private final static List<Route> ROUTES2 = Collections.singletonList(ROUTE_2);
79 private final static RoutingProtocol ROUTING_PROTOCOL = new RoutingProtocolBuilder()
81 .setType(Static.class)
82 .setName(ROUTER_PROTOCOL)
83 .addAugmentation(RoutingProtocolVppAttr.class, new RoutingProtocolVppAttrBuilder().setVppProtocolAttributes(
84 new VppProtocolAttributesBuilder().setPrimaryVrf(VNI_REFERENCE).build()).build())
85 .setStaticRoutes(new StaticRoutesBuilder().addAugmentation(StaticRoutes1.class,
86 new StaticRoutes1Builder().setIpv4(new Ipv4Builder().setRoute(ROUTES).build()).build()).build())
89 private DataBroker dataBroker;
93 dataBroker = getDataBroker();
97 public void addRoutingCommandTest() throws ExecutionException, InterruptedException {
98 ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
102 RoutingCommand.builder()
103 .setOperation(General.Operations.PUT)
104 .setRouterProtocol(ROUTER_PROTOCOL)
106 .setVrfId(VNI_REFERENCE.getValue())
109 Assert.assertEquals(General.Operations.PUT, routingCommand.getOperation());
110 Assert.assertEquals(ROUTER_PROTOCOL, routingCommand.getRouterProtocol());
111 Assert.assertEquals(VNI_REFERENCE.getValue(), routingCommand.getVrfId());
112 Assert.assertEquals(ROUTES, routingCommand.getRoutes());
114 Optional<RoutingProtocol> routingProtocolOptional = executeCommand(rwTx, routingCommand);
116 Assert.assertTrue(routingProtocolOptional.isPresent());
117 Assert.assertEquals(ROUTING_PROTOCOL, routingProtocolOptional.get());
121 public void removeRoutingCommandTest() throws ExecutionException, InterruptedException {
122 Optional<RoutingProtocol> optional = writeBasicRoutingProtocol();
123 ReadWriteTransaction rwTx;
125 Assert.assertTrue(optional.isPresent());
127 rwTx = dataBroker.newReadWriteTransaction();
128 RoutingCommand routingCommand =
129 RoutingCommand.builder()
130 .setOperation(General.Operations.DELETE)
131 .setRouterProtocol(ROUTER_PROTOCOL)
132 .setVrfId(VNI_REFERENCE.getValue())
134 routingCommand.execute(rwTx);
137 optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
138 VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routingCommand.getRouterProtocol())),
139 dataBroker.newReadOnlyTransaction());
141 Assert.assertFalse(optional.isPresent());
145 public void mergeRoutingCommandTest() throws ExecutionException, InterruptedException {
146 Optional<RoutingProtocol> optional = writeBasicRoutingProtocol();
147 ReadWriteTransaction rwTx;
149 Assert.assertTrue(optional.isPresent());
151 rwTx = dataBroker.newReadWriteTransaction();
155 RoutingCommand.builder()
156 .setOperation(General.Operations.MERGE)
157 .setRouterProtocol(ROUTER_PROTOCOL)
159 .setVrfId(VNI_REFERENCE.getValue())
162 routingCommand.execute(rwTx);
165 optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
166 VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routingCommand.getRouterProtocol())),
167 dataBroker.newReadOnlyTransaction());
169 Assert.assertTrue(optional.isPresent());
170 RoutingProtocol routingProtocol = optional.get();
171 StaticRoutes1 staticRoutes1 = routingProtocol.getStaticRoutes().getAugmentation(StaticRoutes1.class);
172 Assert.assertTrue(staticRoutes1.getIpv4().getRoute().contains(ROUTE_1));
173 Assert.assertTrue(staticRoutes1.getIpv4().getRoute().contains(ROUTE_2));
176 private Optional<RoutingProtocol> writeBasicRoutingProtocol() throws InterruptedException, ExecutionException {
177 ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
178 rwTx.put(LogicalDatastoreType.CONFIGURATION,
179 VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(ROUTER_PROTOCOL)), ROUTING_PROTOCOL, true);
182 return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
183 VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(ROUTER_PROTOCOL)),
184 dataBroker.newReadOnlyTransaction());
187 private Optional<RoutingProtocol> executeCommand(ReadWriteTransaction rwTx, RoutingCommand routingCommand)
188 throws ExecutionException, InterruptedException {
189 routingCommand.execute(rwTx);
193 ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
195 return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
196 VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routingCommand.getRouterProtocol())), rTx);