2 * Copyright (c) 2016 Cisco 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.groupbasedpolicy.neutron.mapper.mapping;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotEquals;
13 import static org.junit.Assert.fail;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.when;
17 import com.google.common.base.Optional;
19 import java.util.concurrent.ExecutionException;
20 import java.util.concurrent.Future;
22 import org.junit.Before;
23 import org.junit.Rule;
24 import org.junit.Test;
25 import org.junit.rules.ExpectedException;
26 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
27 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
28 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
29 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronMapperDataBrokerTest;
30 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
31 import org.opendaylight.groupbasedpolicy.util.IidFactory;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
42 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
43 import org.opendaylight.yangtools.yang.common.RpcResult;
45 public class NeutronNetworkAwareDataStoreTest extends NeutronMapperDataBrokerTest {
47 private final Uuid tenantUuid = new Uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
48 private final Uuid networkUuid = new Uuid("dddddddd-dddd-dddd-dddd-dddddddddddd");
49 private static final long METADATA_IPV4_SERVER_PORT = 80;
51 private DataBroker dataBroker;
52 private NeutronNetworkAware networkAware;
53 private Neutron neutron;
54 private Future<RpcResult<Void>> futureRpcResult;
55 private Future<RpcResult<Void>> futureRpcFail;
56 private RpcResult<Void> rpcResult;
57 private RpcResult<Void> rpcFail;
58 private Network network;
59 private NetworkProviderExtension providerExtension;
62 public void init() throws ExecutionException, InterruptedException {
63 futureRpcResult = mock(Future.class);
64 futureRpcFail = mock(Future.class);
65 rpcResult = mock(RpcResult.class);
66 rpcFail = mock(RpcResult.class);
67 when(rpcResult.isSuccessful()).thenReturn(true);
68 when(rpcFail.isSuccessful()).thenReturn(false);
69 dataBroker = getDataBroker();
70 neutron = mock(Neutron.class);
72 when(futureRpcResult.get()).thenReturn(rpcResult);
73 when(futureRpcFail.get()).thenReturn(rpcFail);
75 providerExtension = new NetworkProviderExtensionBuilder().setPhysicalNetwork("physicalNetwork")
76 .setSegmentationId("segmentationId")
79 network = new NetworkBuilder().setTenantId(tenantUuid)
81 .setName("networkName")
82 .addAugmentation(NetworkProviderExtension.class, providerExtension)
85 networkAware = new NeutronNetworkAware(dataBroker, METADATA_IPV4_SERVER_PORT);
89 public ExpectedException thrown = ExpectedException.none();
92 public void testConstructor_invalidArgument() throws NullPointerException {
93 thrown.expect(NullPointerException.class);
94 new NeutronNetworkAware(null, METADATA_IPV4_SERVER_PORT);
98 public void testOnCreated() {
100 networkAware.onCreated(network, neutron);
102 assertNetworkExists(network);
106 public void testOnCreated_incorrectName() {
107 Network network = new NetworkBuilder().setTenantId(tenantUuid).setName("123").setUuid(networkUuid).build();
109 networkAware.onCreated(network, neutron);
111 assertNetworkExists(network);
115 public void testOnDeleted() {
117 new NetworkBuilder().setTenantId(tenantUuid).setName("networkName").setUuid(networkUuid).build();
119 assertNetworkNotExists(network);
121 networkAware.onCreated(network, neutron);
123 assertNetworkExists(network);
125 networkAware.onDeleted(network, neutron, neutron);
127 assertNetworkNotExists(network);
131 public void testOnUpdated() {
133 new NetworkBuilder().setTenantId(tenantUuid).setName("networkName").setUuid(networkUuid).build();
135 networkAware.onUpdated(network, network, neutron, neutron);
139 private void assertNetworkExists(Network network) {
140 Optional<L3Context> opt = getL3ContextOptional(network);
141 if (opt.isPresent()) {
142 assertEquals(network.getUuid().getValue(), opt.get().getId().getValue());
144 fail("no network in DS, Uuid:" + network.getUuid());
148 private void assertNetworkNotExists(Network network) {
149 Optional<L3Context> opt = getL3ContextOptional(network);
150 if (opt.isPresent()) {
151 assertNotEquals(network.getUuid().getValue(), opt.get().getId().getValue());
155 private Optional<L3Context> getL3ContextOptional(Network network) {
156 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
157 TenantId tenantId = new TenantId(network.getTenantId().getValue());
158 ContextId l3CtxId = new ContextId(network.getUuid().getValue());
159 L3ContextId l3ContextId = new L3ContextId(l3CtxId);
160 InstanceIdentifier<L3Context> l3ContextIid = IidFactory.l3ContextIid(tenantId, l3ContextId);
161 return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, l3ContextIid, readTx);