Upgrade ietf-{inet,yang}-types to 2013-07-15
[ovsdb.git] / southbound / southbound-impl / src / test / java / org / opendaylight / ovsdb / southbound / transactions / md / OvsdbAutoAttachUpdateCommandTest.java
1 /*
2  * Copyright (c) 2016 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.transactions.md;
10
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Matchers.eq;
13 import static org.mockito.Mockito.doNothing;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.verify;
16 import static org.mockito.Mockito.when;
17
18 import com.google.common.base.Optional;
19 import com.google.common.collect.ImmutableMap;
20 import java.util.HashMap;
21 import java.util.Map;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.mockito.Mockito;
26 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
27 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
28 import org.opendaylight.ovsdb.lib.notation.Column;
29 import org.opendaylight.ovsdb.lib.notation.UUID;
30 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
31 import org.opendaylight.ovsdb.schema.openvswitch.AutoAttach;
32 import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance;
33 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
34 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.Autoattach;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.AutoattachKey;
39 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
40 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
41 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
42 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
43 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
45 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
46 import org.powermock.api.mockito.PowerMockito;
47 import org.powermock.api.support.membermodification.MemberModifier;
48 import org.powermock.core.classloader.annotations.PrepareForTest;
49 import org.powermock.modules.junit4.PowerMockRunner;
50
51 @PrepareForTest({OvsdbAutoAttachUpdateCommand.class, SouthboundUtil.class})
52 @RunWith(PowerMockRunner.class)
53 public class OvsdbAutoAttachUpdateCommandTest {
54
55     private static final String AUTOATTACH_SYSTEM_INFO = "AutoAttach Test";
56     private static final Map<Long, Long> AUTOATTACH_MAPPINGS = ImmutableMap.of(100L, 200L);
57     private static final UUID AUTOATTACH_UUID = new UUID("798f35d8-f40a-449a-94d3-c860f5547f9a");
58     private static final String CONNECTED_NODE_ID = "10.0.0.2";
59 //    private static final Map<String, String> AUTOATTACH_EXTERNAL_IDS =
60 //            ImmutableMap.of("opendaylight-autoattach-id", "autoattach://798f35d8-f40a-449a-94d3-c860f5547f9a");
61     private Map<UUID, AutoAttach> updatedAutoAttachRows = new HashMap<>();
62     private Map<UUID, AutoAttach> oldAutoAttachRows = new HashMap<>();
63     private OvsdbAutoAttachUpdateCommand ovsdbAutoAttachUpdateCommand;
64     private ReadWriteTransaction transaction;
65     private InstanceIdentifier<Autoattach> aaIid;
66
67     @SuppressWarnings("unchecked")
68     @Before
69     public void setUp() throws Exception {
70         ovsdbAutoAttachUpdateCommand = mock(OvsdbAutoAttachUpdateCommand.class, Mockito.CALLS_REAL_METHODS);
71
72         AutoAttach autoAttach = mock(AutoAttach.class);
73         updatedAutoAttachRows.put(AUTOATTACH_UUID, autoAttach);
74         oldAutoAttachRows.put(AUTOATTACH_UUID, autoAttach);
75
76         Column<GenericTableSchema, String> aaColumn = mock(Column.class);
77         when(autoAttach.getSystemNameColumn()).thenReturn(aaColumn);
78         when(autoAttach.getSystemDescriptionColumn()).thenReturn(aaColumn);
79         when(aaColumn.getData()).thenReturn(AUTOATTACH_SYSTEM_INFO);
80         Column<GenericTableSchema, Map<Long, Long>> aaMappingColumn = mock(Column.class);
81         when(autoAttach.getMappingsColumn()).thenReturn(aaMappingColumn);
82         when(aaMappingColumn.getData()).thenReturn(AUTOATTACH_MAPPINGS);
83
84         // FIXME: To be uncommented when Open vSwitch supports external_ids column
85 //        Column<GenericTableSchema, Map<String, String>> aaExternalIdsColumn = mock(Column.class);
86 //        when(autoAttach.getExternalIdsColumn()).thenReturn(aaExternalIdsColumn);
87 //        when(aaExternalIdsColumn.getData()).thenReturn(AUTOATTACH_EXTERNAL_IDS);
88         when(autoAttach.getUuid()).thenReturn(AUTOATTACH_UUID);
89
90         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
91         when(ovsdbAutoAttachUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
92         aaIid = InstanceIdentifier.create(NetworkTopology.class)
93                 .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
94                 .child(Node.class, new NodeKey(new NodeId(CONNECTED_NODE_ID))).augmentation(OvsdbNodeAugmentation.class)
95                 .child(Autoattach.class, new AutoattachKey(
96                         new Uri(SouthboundConstants.AUTOATTACH_URI_PREFIX + "://" + AUTOATTACH_UUID.toString())));
97         InstanceIdentifier<Node> connectionIid = aaIid.firstIdentifierOf(Node.class);
98         when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(connectionIid);
99         transaction = mock(ReadWriteTransaction.class);
100         doNothing().when(transaction).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
101                 any(Autoattach.class));
102         doNothing().when(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
103
104         PowerMockito.mockStatic(SouthboundUtil.class);
105         Optional<Node> ovsdbNode = mock(Optional.class);
106         PowerMockito.when(SouthboundUtil.readNode(transaction, connectionIid)).thenReturn(ovsdbNode);
107         when(ovsdbNode.isPresent()).thenReturn(true);
108         Node node = mock(Node.class);
109         when(ovsdbNode.get()).thenReturn(node);
110         NodeId nodeId = mock(NodeId.class);
111         when(node.getNodeId()).thenReturn(nodeId);
112
113         MemberModifier.field(OvsdbAutoAttachUpdateCommand.class, "updatedAutoAttachRows")
114                 .set(ovsdbAutoAttachUpdateCommand, updatedAutoAttachRows);
115         MemberModifier.field(OvsdbAutoAttachUpdateCommand.class, "oldAutoAttachRows").set(ovsdbAutoAttachUpdateCommand,
116                 oldAutoAttachRows);
117     }
118
119     @Test
120     public void testExecute() {
121         ovsdbAutoAttachUpdateCommand.execute(transaction);
122         verify(transaction).put(eq(LogicalDatastoreType.OPERATIONAL), eq(aaIid), any(Autoattach.class));
123     }
124 }