Add blueprint XML for bgp-evpn
[bgpcep.git] / bgp / linkstate / src / test / java / org / opendaylight / controller / config / yang / bgp / linkstate / LinkstateModuleTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.config.yang.bgp.linkstate;
10
11 import static org.junit.Assert.assertTrue;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Matchers.anyString;
14 import static org.mockito.Matchers.contains;
15 import static org.mockito.Mockito.doAnswer;
16 import static org.mockito.Mockito.doReturn;
17 import static org.mockito.Mockito.mock;
18 import com.google.common.base.Optional;
19 import com.google.common.collect.Lists;
20 import javax.management.InstanceAlreadyExistsException;
21 import javax.management.ObjectName;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.mockito.Mockito;
25 import org.mockito.invocation.InvocationOnMock;
26 import org.mockito.stubbing.Answer;
27 import org.opendaylight.controller.config.api.jmx.CommitStatus;
28 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
29 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
30 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
31 import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleFactory;
32 import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleTest;
33 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleFactory;
34 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleTest;
35 import org.opendaylight.controller.config.yang.rsvp.spi.SimpleRSVPExtensionProviderContextModuleFactory;
36 import org.opendaylight.controller.config.yang.rsvp.spi.SimpleRSVPExtensionProviderContextModuleMXBean;
37 import org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderContext;
38 import org.opendaylight.protocol.rsvp.parser.spi.pojo.SimpleRSVPExtensionProviderContext;
39 import org.osgi.framework.Filter;
40 import org.osgi.framework.ServiceListener;
41 import org.osgi.framework.ServiceReference;
42
43 public class LinkstateModuleTest extends AbstractConfigTest {
44
45     private static final String FACTORY_NAME = LinkstateModuleFactory.NAME;
46     private static final String INSTANCE_NAME = "bgp-linkstate-impl";
47     private static final String RSVP_EXTENSION_INSTANCE_NAME = "extension-impl-rsvp";
48     private ObjectName rspvInstance;
49
50     @Before
51     public void setUp() throws Exception {
52         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, new
53             LinkstateModuleFactory(), new SimpleBGPExtensionProviderContextModuleFactory(), new
54             RIBExtensionsImplModuleFactory(), new SimpleRSVPExtensionProviderContextModuleFactory()));
55
56         doAnswer(new Answer<Filter>() {
57             @Override
58             public Filter answer(final InvocationOnMock invocation) {
59                 final String str = invocation.getArgumentAt(0, String.class);
60                 final Filter mockFilter = mock(Filter.class);
61                 doReturn(str).when(mockFilter).toString();
62                 return mockFilter;
63             }
64         }).when(mockedContext).createFilter(anyString());
65
66         Mockito.doNothing().when(this.mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
67         Mockito.doNothing().when(this.mockedContext).removeServiceListener(any(ServiceListener.class));
68
69         setupMockService(RSVPExtensionProviderContext.class, new SimpleRSVPExtensionProviderContext());
70     }
71
72     private void setupMockService(final Class<?> serviceInterface, final Object instance) throws Exception {
73         final ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
74         doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
75                 getServiceReferences(anyString(), contains(serviceInterface.getName()));
76         doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
77                 getServiceReferences(serviceInterface.getName(), null);
78         doReturn(instance).when(mockedContext).getService(mockServiceRef);
79     }
80
81     @Test
82     public void testLSTypeDefaultValue() throws Exception {
83         final CommitStatus status = createLinkstateModuleInstance(Optional.<Boolean>absent());
84         assertBeanCount(1, FACTORY_NAME);
85         assertStatus(status, 4, 0, 0);
86         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
87         final LinkstateModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), LinkstateModuleMXBean.class);
88         assertTrue(mxBean.getIanaLinkstateAttributeType());
89     }
90
91     @Test
92     public void testCreateBean() throws Exception {
93         final CommitStatus status = createLinkstateModuleInstance(Optional.of(false));
94         assertBeanCount(1, FACTORY_NAME);
95         assertStatus(status, 4, 0, 0);
96     }
97
98     @Test
99     public void testReusingOldInstance() throws Exception {
100         createLinkstateModuleInstance(Optional.of(false));
101         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
102         assertBeanCount(1, FACTORY_NAME);
103         final CommitStatus status = transaction.commit();
104         assertBeanCount(1, FACTORY_NAME);
105         assertStatus(status, 0, 0, 4);
106     }
107
108     @Test
109     public void testReconfigureInstance() throws Exception {
110         createLinkstateModuleInstance(Optional.of(false));
111         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
112         assertBeanCount(1, FACTORY_NAME);
113         final LinkstateModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), LinkstateModuleMXBean.class);
114         mxBean.setIanaLinkstateAttributeType(true);
115         mxBean.setRsvpExtensions(rspvInstance);
116         CommitStatus status = transaction.commit();
117         assertBeanCount(1, FACTORY_NAME);
118         assertStatus(status, 0, 3, 1);
119     }
120
121     private CommitStatus createLinkstateModuleInstance(final Optional<Boolean> ianaLSAttributeType) throws Exception {
122         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
123         final ObjectName linkstateON = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
124         final LinkstateModuleMXBean mxBean = transaction.newMXBeanProxy(linkstateON, LinkstateModuleMXBean.class);
125         if(ianaLSAttributeType.isPresent()) {
126             mxBean.setIanaLinkstateAttributeType(ianaLSAttributeType.get());
127         }
128         rspvInstance = createRsvpExtensionsInstance(transaction);
129         mxBean.setRsvpExtensions(rspvInstance);
130         SimpleBGPExtensionProviderContextModuleTest.createBGPExtensionsModuleInstance(transaction, Lists.newArrayList(linkstateON));
131         RIBExtensionsImplModuleTest.createRIBExtensionsModuleInstance(transaction, Lists.newArrayList(linkstateON));
132         return transaction.commit();
133     }
134
135     private ObjectName createRsvpExtensionsInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
136         final ObjectName nameCreated = transaction.createModule(SimpleRSVPExtensionProviderContextModuleFactory.NAME,
137             RSVP_EXTENSION_INSTANCE_NAME);
138         transaction.newMXBeanProxy(nameCreated, SimpleRSVPExtensionProviderContextModuleMXBean.class);
139         return nameCreated;
140     }
141 }