2 * Copyright © 2018 Orange Systems, Inc. and others. 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.transportpce.renderer.provisiondevice;
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.junit.Assert;
14 import org.junit.Test;
15 import org.mockito.Mockito;
16 import org.opendaylight.controller.md.sal.binding.api.MountPoint;
17 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
18 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
19 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
20 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
21 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
22 import org.opendaylight.transportpce.common.mapping.PortMapping;
23 import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
24 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
25 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
26 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
27 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
28 import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub;
29 import org.opendaylight.transportpce.renderer.stub.MountPointStub;
30 import org.opendaylight.transportpce.renderer.utils.ServiceImplementationDataUtils;
31 import org.opendaylight.transportpce.test.AbstractTest;
32 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackInput;
33 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackInputBuilder;
34 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackOutput;
35 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterface;
36 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterfaceBuilder;
37 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterfaceKey;
39 public class DeviceRendererServiceImplRollbackTest extends AbstractTest {
41 private DeviceRendererService deviceRendererService;
42 private CrossConnect crossConnect;
43 private OpenRoadmInterfaces openRoadmInterfaces;
45 private void setMountPoint(MountPoint mountPoint) {
46 MountPointService mountPointService = new MountPointServiceStub(mountPoint);
47 DeviceTransactionManager deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000);
48 this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(deviceTransactionManager);
49 this.openRoadmInterfaces = Mockito.spy(this.openRoadmInterfaces);
50 PortMapping portMapping = new PortMappingImpl(this.getDataBroker(), deviceTransactionManager,
51 this.openRoadmInterfaces);
52 OpenRoadmInterfaceFactory openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(portMapping,
53 this.openRoadmInterfaces);
54 this.crossConnect = new CrossConnectImpl(deviceTransactionManager);
55 this.crossConnect = Mockito.spy(this.crossConnect);
56 this.deviceRendererService = new DeviceRendererServiceImpl(this.getDataBroker(),
57 deviceTransactionManager, openRoadmInterfaceFactory, this.openRoadmInterfaces, this.crossConnect,
64 public void testRollbackEmptyInterface() {
65 setMountPoint(new MountPointStub(getDataBroker()));
66 RendererRollbackInput rendererRollbackInput = ServiceImplementationDataUtils.buildRendererRollbackInput();
67 RendererRollbackOutput rendererRollbackOutput =
68 this.deviceRendererService.rendererRollback(rendererRollbackInput);
69 Assert.assertTrue(rendererRollbackOutput.isSuccess());
70 Assert.assertTrue(rendererRollbackOutput.getFailedToRollback().isEmpty());
74 public void testRollbackConnectionIdNotExist() {
75 setMountPoint(new MountPointStub(getDataBroker()));
77 NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
78 nodeInterfaceBuilder.setNodeId("node1");
79 nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1"));
80 List<String> connectionID = new ArrayList<>();
81 connectionID.add("node1-PP");
82 nodeInterfaceBuilder.setConnectionId(connectionID);
83 List<NodeInterface> nodeInterfaces = new ArrayList<>();
84 nodeInterfaces.add(nodeInterfaceBuilder.build());
85 RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
86 rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces);
88 RendererRollbackOutput rendererRollbackOutput =
89 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
90 Assert.assertFalse(rendererRollbackOutput.isSuccess());
91 Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size());
92 Assert.assertEquals("node1", rendererRollbackOutput.getFailedToRollback().get(0).getNodeId());
96 public void testRollbackConnectionId() {
97 setMountPoint(new MountPointStub(getDataBroker()));
99 NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
100 nodeInterfaceBuilder.setNodeId("node1");
101 nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1"));
102 List<String> connectionID = new ArrayList<>();
103 connectionID.add("src-PP-dest-PP-20");
104 nodeInterfaceBuilder.setConnectionId(connectionID);
105 List<NodeInterface> nodeInterfaces = new ArrayList<>();
106 nodeInterfaces.add(nodeInterfaceBuilder.build());
107 RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
108 rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces);
110 Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect("node1", connectionID.get(0));
111 RendererRollbackOutput rendererRollbackOutput =
112 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
113 Assert.assertTrue("Rollback must success when cross connect returns true", rendererRollbackOutput.isSuccess());
114 Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size());
115 Assert.assertTrue("There must not be any failed interfaces when cross connect returns true",
116 rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty());
118 Mockito.doReturn(false).when(this.crossConnect).deleteCrossConnect("node1", connectionID.get(0));
119 rendererRollbackOutput =
120 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
121 Assert.assertFalse("Rollback must fail when cross connect returns false",rendererRollbackOutput.isSuccess());
122 Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size());
123 Assert.assertFalse(rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty());
124 Assert.assertEquals("node1", rendererRollbackOutput.getFailedToRollback().get(0).getNodeId());
126 Mockito.verify(this.crossConnect, Mockito.times(2)).deleteCrossConnect("node1", connectionID.get(0));
130 public void testRollbackInterfaces() throws OpenRoadmInterfaceException {
131 setMountPoint(new MountPointStub(getDataBroker()));
133 NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
134 nodeInterfaceBuilder.setNodeId("node1");
135 nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1"));
136 nodeInterfaceBuilder.setConnectionId(new ArrayList<>());
137 List<String> oduInterfacesId = new ArrayList<>();
138 oduInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-ODU");
139 nodeInterfaceBuilder.setOduInterfaceId(oduInterfacesId);
140 List<String> otuInterfacesId = new ArrayList<>();
141 otuInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-OTU");
142 nodeInterfaceBuilder.setOtuInterfaceId(otuInterfacesId);
143 List<String> ochInterfacesId = new ArrayList<>();
144 ochInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-20");
145 nodeInterfaceBuilder.setOchInterfaceId(ochInterfacesId);
146 List<NodeInterface> nodeInterfaces = new ArrayList<>();
147 nodeInterfaces.add(nodeInterfaceBuilder.build());
148 RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
149 rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces);
151 Mockito.doNothing().when(this.openRoadmInterfaces).deleteInterface(Mockito.eq("node1"), Mockito.anyString());
152 RendererRollbackOutput rendererRollbackOutput =
153 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
154 Assert.assertTrue(rendererRollbackOutput.isSuccess());
155 Assert.assertFalse(rendererRollbackOutput.getFailedToRollback().isEmpty());
156 Assert.assertTrue(rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty());
157 Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.anyString(),
158 Mockito.anyString());
159 Mockito.verify(this.openRoadmInterfaces, Mockito.times(3)).deleteInterface(Mockito.eq("node1"),
160 Mockito.anyString());
164 public void testRollbackInterfacesException() throws OpenRoadmInterfaceException {
165 setMountPoint(new MountPointStub(getDataBroker()));
167 NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
168 nodeInterfaceBuilder.setNodeId("node1");
169 nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1"));
170 nodeInterfaceBuilder.setConnectionId(new ArrayList<>());
171 List<String> ethInterfacesId = new ArrayList<>();
172 ethInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.CLIENT_TOKEN + "-ETHERNET");
173 nodeInterfaceBuilder.setEthInterfaceId(ethInterfacesId);
174 List<NodeInterface> nodeInterfaces = new ArrayList<>();
175 nodeInterfaces.add(nodeInterfaceBuilder.build());
176 RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
177 rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces);
179 Mockito.doThrow(OpenRoadmInterfaceException.class).when(this.openRoadmInterfaces)
180 .deleteInterface(Mockito.eq("node1"), Mockito.anyString());
181 RendererRollbackOutput rendererRollbackOutput =
182 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
183 Assert.assertFalse(rendererRollbackOutput.isSuccess());
184 Assert.assertEquals(1,rendererRollbackOutput.getFailedToRollback().size());
185 Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().get(0).getInterface().size());
186 Assert.assertEquals(ethInterfacesId.get(0), rendererRollbackOutput.getFailedToRollback().get(0)
187 .getInterface().get(0));
188 Mockito.verify(this.crossConnect, Mockito.times(0))
189 .deleteCrossConnect(Mockito.anyString(), Mockito.anyString());
190 Mockito.verify(this.openRoadmInterfaces, Mockito.times(1))
191 .deleteInterface("node1",ethInterfacesId.get(0));