2 * Copyright (c) 2013 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
8 package org.opendaylight.controller.config.yang.bgp.rib.impl;
10 import static org.junit.Assert.assertTrue;
11 import static org.junit.Assert.fail;
13 import javax.management.InstanceAlreadyExistsException;
14 import javax.management.InstanceNotFoundException;
15 import javax.management.ObjectName;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.controller.config.api.ConflictingVersionException;
20 import org.opendaylight.controller.config.api.ValidationException;
21 import org.opendaylight.controller.config.api.jmx.CommitStatus;
22 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
23 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
24 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
25 import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleFactory;
26 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleFactory;
27 import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
29 public class BGPImplModuleTest extends AbstractConfigTest {
31 private final String instanceName = "bgp-impl1";
33 private BGPImplModuleFactory factory;
35 private BGPSessionProposalImplModuleFactory sessionFacotry;
37 private BGPDispatcherImplModuleFactory dispactherFactory;
39 private NettyThreadgroupModuleFactory threadgropFactory;
41 private RIBExtensionsImplModuleFactory messageFactory;
43 private SimpleBGPExtensionProviderContextModuleFactory extensionFactory;
46 public void setUp() throws Exception {
47 this.factory = new BGPImplModuleFactory();
48 this.dispactherFactory = new BGPDispatcherImplModuleFactory();
49 this.sessionFacotry = new BGPSessionProposalImplModuleFactory();
50 this.threadgropFactory = new NettyThreadgroupModuleFactory();
51 this.messageFactory = new RIBExtensionsImplModuleFactory();
52 this.extensionFactory = new SimpleBGPExtensionProviderContextModuleFactory();
53 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, this.dispactherFactory,
54 this.sessionFacotry, this.messageFactory, this.threadgropFactory, this.extensionFactory));
58 public void testValidationExceptionPortNotSet()
59 throws InstanceAlreadyExistsException {
61 ConfigTransactionJMXClient transaction = configRegistryClient
63 createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", null, sessionFacotry.getImplementationName(),
64 dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(),
65 messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
66 transaction.validateConfig();
68 } catch (ValidationException e) {
69 assertTrue(e.getMessage().contains("Port value is not set."));
74 public void testValidationExceptionPortOutOfRange()
75 throws InstanceAlreadyExistsException {
77 ConfigTransactionJMXClient transaction = configRegistryClient
79 createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", -1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
80 transaction.validateConfig();
82 } catch (ValidationException e) {
83 assertTrue(e.getMessage().contains("is out of range (0-65535)."));
88 public void testValidationExceptionHostNotSet()
89 throws InstanceAlreadyExistsException {
91 ConfigTransactionJMXClient transaction = configRegistryClient
93 createInstance(transaction, this.factory.getImplementationName(), instanceName, null, 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
94 transaction.validateConfig();
96 } catch (ValidationException e) {
97 assertTrue(e.getMessage().contains("Host value is not set."));
102 public void testCreateBean() throws Exception {
103 ConfigTransactionJMXClient transaction = configRegistryClient
104 .createTransaction();
105 createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
106 transaction.validateConfig();
107 CommitStatus status = transaction.commit();
108 assertBeanCount(1, factory.getImplementationName());
109 assertStatus(status, 6, 0, 0);
113 public void testReusingOldInstance() throws InstanceAlreadyExistsException,
114 ConflictingVersionException, ValidationException {
115 ConfigTransactionJMXClient transaction = configRegistryClient
116 .createTransaction();
117 createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
118 transaction.commit();
119 transaction = configRegistryClient.createTransaction();
120 assertBeanCount(1, factory.getImplementationName());
121 CommitStatus status = transaction.commit();
122 assertBeanCount(1, factory.getImplementationName());
123 assertStatus(status, 0, 0, 6);
127 public void testReconfigure() throws InstanceAlreadyExistsException,
128 ConflictingVersionException, ValidationException,
129 InstanceNotFoundException {
130 ConfigTransactionJMXClient transaction = configRegistryClient
131 .createTransaction();
132 createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
133 transaction.commit();
134 transaction = configRegistryClient.createTransaction();
135 assertBeanCount(1, factory.getImplementationName());
136 BGPImplModuleMXBean mxBean = transaction
137 .newMBeanProxy(transaction.lookupConfigBean(
138 factory.getImplementationName(),
139 instanceName), BGPImplModuleMXBean.class);
141 CommitStatus status = transaction.commit();
142 assertBeanCount(1, factory.getImplementationName());
143 assertStatus(status, 0, 1, 5);
146 public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
147 final String instanceName, final String host, final Integer port, final String sessionModuleName, final String dispatcherModuleName, final String threadgroupModuleName, final String messageFactoryModuleName, final String extensionModuleName) throws InstanceAlreadyExistsException {
148 ObjectName nameCreated = transaction.createModule(
149 moduleName, instanceName);
150 BGPImplModuleMXBean mxBean = transaction.newMBeanProxy(
151 nameCreated, BGPImplModuleMXBean.class);
152 mxBean.setHost(host);
153 mxBean.setPort(port);
154 mxBean.setBgpProposal(BGPSessionProposalImplModuleTest.createInstance(transaction, sessionModuleName, "bgp-session1", 1, (short)30, "128.0.0.1"));
155 mxBean.setBgpDispatcher(BGPDispatcherImplModuleTest.createInstance(transaction, dispatcherModuleName, "bgp-dispatcher1", threadgroupModuleName, messageFactoryModuleName, extensionModuleName));