Update MRI projects for Aluminium
[ovsdb.git] / southbound / southbound-impl / src / test / java / org / opendaylight / ovsdb / southbound / ovsdb / transact / OvsdbNodeUpdateCommandTest.java
1 /*
2  * Copyright © 2015, 2017 Inocybe Technologies 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
9 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
10
11 import static org.mockito.ArgumentMatchers.any;
12 import static org.mockito.ArgumentMatchers.eq;
13 import static org.mockito.Mockito.doNothing;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.times;
16 import static org.mockito.Mockito.verify;
17 import static org.mockito.Mockito.when;
18
19 import com.google.common.collect.ImmutableMap;
20 import java.lang.reflect.Field;
21 import java.util.HashMap;
22 import java.util.Map;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.junit.runner.RunWith;
26 import org.mockito.Mock;
27 import org.mockito.Mockito;
28 import org.opendaylight.ovsdb.lib.notation.Column;
29 import org.opendaylight.ovsdb.lib.operations.Mutate;
30 import org.opendaylight.ovsdb.lib.operations.Operation;
31 import org.opendaylight.ovsdb.lib.operations.Operations;
32 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
33 import org.opendaylight.ovsdb.lib.schema.ColumnSchema;
34 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
35 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
36 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIds;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIdsBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchOtherConfigs;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchOtherConfigsBuilder;
45 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
46 import org.powermock.api.mockito.PowerMockito;
47 import org.powermock.api.support.membermodification.MemberMatcher;
48 import org.powermock.core.classloader.annotations.PrepareForTest;
49 import org.powermock.modules.junit4.PowerMockRunner;
50
51 @RunWith(PowerMockRunner.class)
52 @PrepareForTest({TransactUtils.class, OvsdbNodeUpdateCommand.class, InstanceIdentifier.class, Operations.class})
53 public class OvsdbNodeUpdateCommandTest {
54
55     private static final String EXTERNAL_ID_KEY = "external id key";
56     private static final String EXTERNAL_ID_VALUE = "external id value";
57     private static final String OTHER_CONFIG_KEY = "other config key";
58     private static final String OTHER_CONFIG_VALUE = "other config value";
59
60     @Mock private DataChangeEvent changes;
61     private OvsdbNodeUpdateCommand ovsdbNodeUpdateCommand;
62
63     @Before
64     public void setUp() {
65         ovsdbNodeUpdateCommand = mock(OvsdbNodeUpdateCommand.class, Mockito.CALLS_REAL_METHODS);
66     }
67
68     @SuppressWarnings("unchecked")
69     @Test
70     public void testExecute() throws Exception {
71         Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated = new HashMap<>();
72         InstanceIdentifier<OvsdbNodeAugmentation> iid = mock(InstanceIdentifier.class);
73         OvsdbNodeAugmentation ovsdbNode = mock(OvsdbNodeAugmentation.class);
74         updated.put(iid, ovsdbNode);
75         PowerMockito.mockStatic(TransactUtils.class);
76         PowerMockito.when(
77                 TransactUtils.extractCreatedOrUpdated(any(DataChangeEvent.class), eq(OvsdbNodeAugmentation.class)))
78                 .thenReturn(updated);
79
80         ConnectionInfo connectionInfo = mock(ConnectionInfo.class);
81         when(ovsdbNode.getConnectionInfo()).thenReturn(connectionInfo);
82         when(connectionInfo.getRemoteIp()).thenReturn(mock(IpAddress.class));
83         when(connectionInfo.getRemotePort()).thenReturn(mock(PortNumber.class));
84
85         OpenVSwitch ovs = mock(OpenVSwitch.class);
86         TransactionBuilder transaction = mock(TransactionBuilder.class);
87         when(transaction.getTypedRowWrapper(eq(OpenVSwitch.class))).thenReturn(ovs);
88
89
90         OpenvswitchExternalIds externalId = new OpenvswitchExternalIdsBuilder()
91                 .setExternalIdKey(EXTERNAL_ID_KEY)
92                 .setExternalIdValue(EXTERNAL_ID_VALUE)
93                 .build();
94         when(ovsdbNode.getOpenvswitchExternalIds()).thenReturn(Map.of(externalId.key(), externalId));
95         PowerMockito.suppress(MemberMatcher.method(OvsdbNodeUpdateCommand.class, "stampInstanceIdentifier",
96                 TransactionBuilder.class, InstanceIdentifier.class, InstanceIdentifierCodec.class));
97         PowerMockito.suppress(MemberMatcher.methodsDeclaredIn(InstanceIdentifier.class));
98         doNothing().when(ovs).setExternalIds(any(ImmutableMap.class));
99
100         Mutate<GenericTableSchema> mutate = mock(Mutate.class);
101         Operations op = setOpField();
102         Column<GenericTableSchema, Map<String, String>> column = mock(Column.class);
103         when(ovs.getExternalIdsColumn()).thenReturn(column);
104         when(column.getSchema()).thenReturn(mock(ColumnSchema.class));
105         when(column.getData()).thenReturn(new HashMap<>());
106         when(op.mutate(any(OpenVSwitch.class))).thenReturn(mutate);
107         when(transaction.add(any(Operation.class))).thenReturn(transaction);
108
109         OpenvswitchOtherConfigs otherConfig = new OpenvswitchOtherConfigsBuilder()
110                 .setOtherConfigKey(OTHER_CONFIG_KEY)
111                 .setOtherConfigValue(OTHER_CONFIG_VALUE)
112                 .build();
113
114         when(ovsdbNode.getOpenvswitchOtherConfigs()).thenReturn(Map.of(otherConfig.key(), otherConfig));
115         doNothing().when(ovs).setOtherConfig(any(ImmutableMap.class));
116         when(ovs.getOtherConfigColumn()).thenReturn(column);
117
118         ovsdbNodeUpdateCommand.execute(transaction, mock(BridgeOperationalState.class), changes,
119                 mock(InstanceIdentifierCodec.class));
120         verify(ovs, times(2)).getExternalIdsColumn();
121         verify(transaction, times(2)).add(eq(null));
122     }
123
124     static Operations setOpField() throws Exception {
125         Field opField = PowerMockito.field(Operations.class, "op");
126         Operations mockOp = mock(Operations.class);
127         opField.set(Operations.class, mockOp);
128         return mockOp;
129     }
130 }