2 * Copyright (c) 2014 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.controller.config.yang.bgp.linkstate;
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;
43 public class LinkstateModuleTest extends AbstractConfigTest {
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;
51 public void setUp() throws Exception {
52 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, new
53 LinkstateModuleFactory(), new SimpleBGPExtensionProviderContextModuleFactory(), new
54 RIBExtensionsImplModuleFactory(), new SimpleRSVPExtensionProviderContextModuleFactory()));
56 doAnswer(new Answer<Filter>() {
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();
64 }).when(mockedContext).createFilter(anyString());
66 Mockito.doNothing().when(this.mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
67 Mockito.doNothing().when(this.mockedContext).removeServiceListener(any(ServiceListener.class));
69 setupMockService(RSVPExtensionProviderContext.class, new SimpleRSVPExtensionProviderContext());
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);
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());
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);
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);
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);
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());
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();
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);