Decompose RPC implementation classes
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / services / sal / SalBundleServiceImplTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.openflowplugin.impl.services.sal;
9
10 import static org.mockito.ArgumentMatchers.any;
11 import static org.mockito.Mockito.verify;
12 import static org.mockito.Mockito.when;
13
14 import com.google.common.util.concurrent.SettableFuture;
15 import java.util.List;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18 import org.mockito.Mock;
19 import org.mockito.junit.MockitoJUnitRunner;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.message.service.rev151020.SendExperimenter;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.message.service.rev151020.SendExperimenterInputBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.AddBundleMessagesInputBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.ControlBundleInputBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.add.bundle.messages.input.MessagesBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.add.bundle.messages.input.messages.Message;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.add.bundle.messages.input.messages.MessageBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleAddFlowCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleAddGroupCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleRemoveFlowCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleRemoveGroupCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleUpdateFlowCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleUpdateGroupCaseBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.bundle.inner.message.grouping.bundle.inner.message.BundleUpdatePortCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.send.experimenter.input.experimenter.message.of.choice.BundleAddMessageSalBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.send.experimenter.input.experimenter.message.of.choice.BundleControlSalBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.send.experimenter.input.experimenter.message.of.choice.bundle.add.message.sal.SalAddMessageDataBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.send.experimenter.input.experimenter.message.of.choice.bundle.control.sal.SalControlDataBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleControlType;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleFlags;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleId;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.bundle.common.grouping.BundleProperty;
47 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
48 import org.opendaylight.yangtools.yang.common.Uint32;
49
50 @RunWith(MockitoJUnitRunner.class)
51 public class SalBundleServiceImplTest {
52     private static final NodeRef NODE_REF = new NodeRef(InstanceIdentifier.create(Nodes.class)
53             .child(Node.class, new NodeKey(new NodeId("openflow:1"))));
54     private static final BundleId BUNDLE_ID = new BundleId(Uint32.ONE);
55     private static final BundleFlags BUNDLE_FLAGS = new BundleFlags(true, false);
56
57     @Mock
58     private SendExperimenter sendExperimenter;
59     @Mock
60     private List<BundleProperty> properties;
61
62     @Test
63     public void testControlBundle() {
64         final var service = new ControlBundleImpl(sendExperimenter);
65
66         final var input = new ControlBundleInputBuilder()
67                 .setNode(NODE_REF)
68                 .setBundleId(BUNDLE_ID)
69                 .setFlags(BUNDLE_FLAGS)
70                 .setType(BundleControlType.ONFBCTOPENREQUEST)
71                 .setBundleProperty(properties)
72                 .build();
73         when(sendExperimenter.invoke(any())).thenReturn(SettableFuture.create());
74         service.invoke(input);
75         verify(sendExperimenter).invoke(new SendExperimenterInputBuilder()
76             .setNode(NODE_REF)
77             .setExperimenterMessageOfChoice(new BundleControlSalBuilder()
78                 .setSalControlData(new SalControlDataBuilder(input).build())
79                 .build())
80             .build());
81     }
82
83     @Test
84     public void testAddBundleMessages() {
85         final var service = new AddBundleMessagesImpl(sendExperimenter);
86
87         final var innerMessages = createMessages();
88         final var messages = new MessagesBuilder().setMessage(innerMessages).build();
89         final var input = new AddBundleMessagesInputBuilder()
90                 .setNode(NODE_REF)
91                 .setBundleId(BUNDLE_ID)
92                 .setFlags(BUNDLE_FLAGS)
93                 .setBundleProperty(properties)
94                 .setMessages(messages)
95                 .build();
96         final var dataBuilder = new SalAddMessageDataBuilder();
97         dataBuilder.setBundleId(BUNDLE_ID).setFlags(BUNDLE_FLAGS).setBundleProperty(properties);
98
99         final var addMessageBuilder = new BundleAddMessageSalBuilder();
100         final var experimenterBuilder = new SendExperimenterInputBuilder()
101                 .setNode(NODE_REF);
102         when(sendExperimenter.invoke(any())).thenReturn(SettableFuture.create());
103         service.invoke(input);
104         for (var msg : innerMessages) {
105             verify(sendExperimenter).invoke(experimenterBuilder
106                 .setExperimenterMessageOfChoice(addMessageBuilder
107                     .setSalAddMessageData(
108                         dataBuilder.setNode(NODE_REF).setBundleInnerMessage(
109                             msg.getBundleInnerMessage())
110                         .build())
111                     .build())
112                 .build());
113         }
114     }
115
116     private static List<Message> createMessages() {
117         final var builder = new MessageBuilder().setNode(NODE_REF);
118         return List.of(
119             builder.setBundleInnerMessage(new BundleAddFlowCaseBuilder().build()).build(),
120             builder.setBundleInnerMessage(new BundleUpdateFlowCaseBuilder().build()).build(),
121             builder.setBundleInnerMessage(new BundleRemoveFlowCaseBuilder().build()).build(),
122             builder.setBundleInnerMessage(new BundleAddGroupCaseBuilder().build()).build(),
123             builder.setBundleInnerMessage(new BundleUpdateGroupCaseBuilder().build()).build(),
124             builder.setBundleInnerMessage(new BundleRemoveGroupCaseBuilder().build()).build(),
125             builder.setBundleInnerMessage(new BundleUpdatePortCaseBuilder().build()).build());
126     }
127 }