Added tests for bgp-rib-impl-config modules, fixed validations and RIBImplModule. 10/2910/1
authorMilos Fabian <milfabia@cisco.com>
Thu, 14 Nov 2013 12:51:38 +0000 (13:51 +0100)
committerMilos Fabian <milfabia@cisco.com>
Wed, 20 Nov 2013 13:01:25 +0000 (14:01 +0100)
Change-Id: I8aa1e5eb2e67726d8131dbf95c280816145b3fca
Signed-off-by: Milos Fabian <milfabia@cisco.com>
16 files changed:
bgp/rib-impl-config/pom.xml
bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPDispatcherImplModule.java
bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPSessionProposalImplModule.java
bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModule.java
bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleFactory.java
bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/reconnectstrategy/TimedReconnectStrategyModule.java
bgp/rib-impl-config/src/main/yang/bgp-rib-impl.yang
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/reconnectstrategy/GlobalEventExecutorUtil.java
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/reconnectstrategy/NeverReconnectStrategyModuleTest.java
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/reconnectstrategy/ReconnectImmediatelyStrategyModuleTest.java
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/reconnectstrategy/TimedReconnectStrategyModuleTest.java
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPDispatcherImplModuleTest.java [new file with mode: 0644]
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPImplModuleTest.java [new file with mode: 0644]
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPMessageFactoryImplModuleTest.java [new file with mode: 0644]
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPSessionProposalImplModuleTest.java [new file with mode: 0644]
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleTest.java [new file with mode: 0644]

index e8eb1d358e1e1e2b9c5e70429c5199f792ddda70..0518ed40b35a2e0bcf3f0073116712bf9e2fc46f 100644 (file)
          <version>${controller.config.version}</version>
          <scope>test</scope>
       </dependency>
-      
+      <dependency>
+         <groupId>org.opendaylight.controller</groupId>
+         <artifactId>netty-threadgroup-config</artifactId>
+         <version>${controller.config.version}</version>
+         <scope>test</scope>
+      </dependency>
+      <dependency>
+         <groupId>org.opendaylight.controller</groupId>
+         <artifactId>sal-binding-broker-impl</artifactId>
+         <version>1.0-SNAPSHOT</version>
+         <scope>test</scope>
+      </dependency>     
    </dependencies>
 
    <build>
index 0d61dcc35808f44b8150cc368fe5a8f67090d3e6..7b8ad263cf052c4eb42ace162025d1101e6eaac8 100644 (file)
@@ -36,7 +36,6 @@ public final class BGPDispatcherImplModule
        @Override
        public void validate() {
                super.validate();
-               // Add custom validation for module attributes here.
        }
 
        @Override
index 0b1cec3e3992849b21b188d298739247a72bcd83..64b79605440eb17122b8c766a7abfa8f8f7df830 100644 (file)
@@ -50,6 +50,13 @@ public final class BGPSessionProposalImplModule
 
                JmxAttributeValidationException.checkNotNull(getAsNumber(),
                                "value is not set.", asNumberJmxAttribute);
+               JmxAttributeValidationException.checkCondition(getAsNumber() >= 0,
+                               "value must be greather than 0", asNumberJmxAttribute);
+               
+               JmxAttributeValidationException.checkNotNull(getHoldtimer(),
+                               "value is not set.", holdtimerJmxAttribute);
+               JmxAttributeValidationException.checkCondition((getHoldtimer() == 0) || (getHoldtimer() >= 3),
+                               "value must be 0 or 3 and more", holdtimerJmxAttribute);
        }
 
        @Override
index 6b4ecda088f62dc6e4bbcdcfc5e5d80d660e5812..1ad0f130b2ea71f33d032e09e124a646b4b40b66 100644 (file)
@@ -9,17 +9,16 @@
  */
 package org.opendaylight.controller.config.yang.bgp.rib.impl;
 
-import io.netty.util.concurrent.GlobalEventExecutor;
-
 import org.opendaylight.controller.config.api.JmxAttributeValidationException;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
 import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
 import org.opendaylight.protocol.bgp.rib.impl.BGP;
 import org.opendaylight.protocol.bgp.rib.impl.BGPPeer;
 import org.opendaylight.protocol.bgp.rib.impl.RIBImpl;
+import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
 import org.opendaylight.protocol.concepts.ListenerRegistration;
 import org.opendaylight.protocol.framework.ReconnectStrategy;
 import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
-import org.opendaylight.protocol.framework.TimedReconnectStrategy;
 
 /**
  *
@@ -44,51 +43,42 @@ org.opendaylight.controller.config.yang.bgp.rib.impl.AbstractRIBImplModule {
        @Override
        public void validate() {
                super.validate();
-               JmxAttributeValidationException.checkNotNull(getRibName(),
-                               "value is not set.", ribNameJmxAttribute);
-               JmxAttributeValidationException.checkCondition(!getRibName().isEmpty(),
-                               "should not be empty string.", ribNameJmxAttribute);
                JmxAttributeValidationException.checkNotNull(getExtensions(),
                                "is not set.", extensionsJmxAttribute);
        }
 
        @Override
        public java.lang.AutoCloseable createInstance() {
-               RIBImpl rib = new RIBImpl(getExtensionsDependency(), getDataProviderDependency());
+               RibImplCloseable rib = new RibImplCloseable(getExtensionsDependency(), getDataProviderDependency());
                BGP bgp = getBgpDependency();
                final BGPPeer peer = new BGPPeer(rib, "peer-" + bgp.toString());
 
-               final long reconnects = getReconnectAttempts();
                ListenerRegistration<BGPSessionListener> reg = bgp
                                .registerUpdateListener(peer,
                                                new ReconnectStrategyFactory() {
                                        @Override
                                        public ReconnectStrategy createReconnectStrategy() {
-                                               return new TimedReconnectStrategy(
-                                                               GlobalEventExecutor.INSTANCE,
-                                                               getConnectionTimeout(), 5000, 1.0, null,
-                                                               reconnects, null);
+                                               return getTcpReconnectStrategyDependency();
                                        }
-                               }, new TimedReconnectStrategy(
-                                               GlobalEventExecutor.INSTANCE,
-                                               getConnectionTimeout(), 5000, 1.0, null,
-                                               reconnects, null));
-               return new RibImplCloseable(reg, rib);
+                               }, getSessionReconnectStrategyDependency());
+               rib.setListenerRegistration(reg);
+               return rib;
        }
 
-       private static final class RibImplCloseable implements AutoCloseable {
-               private final ListenerRegistration<BGPSessionListener> reg;
-               private final RIBImpl innerRib;
+       private static final class RibImplCloseable extends RIBImpl implements AutoCloseable {
+               private ListenerRegistration<BGPSessionListener> reg;
 
-               private RibImplCloseable(final ListenerRegistration<BGPSessionListener> reg,
-                               final RIBImpl innerRib) {
-                       this.reg = reg;
-                       this.innerRib = innerRib;
+               private RibImplCloseable(final RIBExtensionConsumerContext extensions, final DataProviderService dps) {
+                       super(extensions, dps);
                }
 
                @Override
                public void close() throws Exception {
                        reg.close();
                }
+               
+               public void setListenerRegistration(ListenerRegistration<BGPSessionListener> reg) {
+                       this.reg = reg;
+               }
        }
 }
index 58bb01e48077770a83d73b551a88c1339ae48ceb..a46b4c86f399b9e65b802dd4ecd0d03771d53406 100644 (file)
@@ -9,11 +9,12 @@
  */
 package org.opendaylight.controller.config.yang.bgp.rib.impl;
 
+
 /**
 *
 */
 public class RIBImplModuleFactory
                extends
                org.opendaylight.controller.config.yang.bgp.rib.impl.AbstractRIBImplModuleFactory {
-
+       
 }
index feee4a690fbcccc0e371237cfccb0442181b1b16..fd400619cd1c212e46c1c1dfc292480da45ff8d0 100644 (file)
@@ -44,7 +44,7 @@ public final class TimedReconnectStrategyModule extends org.opendaylight.control
                                "value " + getConnectTime() + " is less than 0",
                                connectTimeJmxAttribute);
 
-               JmxAttributeValidationException.checkNotNull(getMaxSleep(),
+               JmxAttributeValidationException.checkNotNull(getMinSleep(),
                "value is not set.", minSleepJmxAttribute);
                JmxAttributeValidationException.checkCondition(
                                getMaxSleep() == null || getMinSleep() <= getMaxSleep(),
index 247765b1b76d6d27149b4eb7f9931fe7f3037591..cf896feb4a07ebb2775c1bd1a3948e779a9b581e 100644 (file)
@@ -10,6 +10,7 @@ module bgp-rib-impl {
     import config-bgp-rib-spi { prefix ribspi; revision-date 2013-11-15; }
     import opendaylight-md-sal-binding {prefix mdsb; revision-date 2013-10-28; }
     import threadpool { prefix th; revision-date 2013-04-09; }
+    import reconnect-strategy { prefix rs; revision-date 2013-11-09; }
     import config { prefix config; revision-date 2013-04-05; }
 
     organization "Cisco Systems, Inc.";
@@ -244,20 +245,23 @@ module bgp-rib-impl {
                     }
                 }
             }
-
-            leaf rib-name {
-                 mandatory true;
-                 type string;
-            }
-
-            leaf connection-timeout {
-                 mandatory true;
-                 type int32;
-            }
-
-            leaf reconnect-attempts {
-                 mandatory true;
-                 type int64;
+                       
+            container session-reconnect-strategy {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity rs:reconnect-strategy;
+                    }
+                }
+            }                  
+            
+            container tcp-reconnect-strategy {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity rs:reconnect-strategy;
+                    }
+                }
             }
                        
             container data-provider {
index a59abcd6f6c6461e808fb9d57ec523eb72da3a1c..2f101f565b7389e39529d94dcabb1abe0660f0f5 100644 (file)
@@ -3,45 +3,21 @@ package org.opendaylight.controller.config.yang.bgp.reconnectstrategy;
 import javax.management.InstanceAlreadyExistsException;
 import javax.management.ObjectName;
 
-import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
-import org.opendaylight.controller.config.util.ConfigRegistryJMXClient;
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
-import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleFactory;
 import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleMXBean;
 
-public class GlobalEventExecutorUtil extends AbstractConfigTest {
+public class GlobalEventExecutorUtil {
 
-       private final String instanceName = "global-executor";
-
-       private ObjectName createInstance(
+       public static ObjectName createInstance(
                        final ConfigTransactionJMXClient transaction,
-                       final String instanceName, GlobalEventExecutorModuleFactory factory)
+                       final String moduleName,
+                       final String instanceName)
                        throws InstanceAlreadyExistsException {
                ObjectName nameCreated = transaction.createModule(
-                               factory.getImplementationName(), instanceName);
+                               moduleName, instanceName);
                transaction.newMBeanProxy(nameCreated,
                                GlobalEventExecutorModuleMXBean.class);
                return nameCreated;
        }
 
-       private ObjectName createBean(GlobalEventExecutorModuleFactory factory,
-                       ConfigRegistryJMXClient configRegistryClient)
-                       throws InstanceAlreadyExistsException {
-               ConfigTransactionJMXClient transaction = configRegistryClient
-                               .createTransaction();
-               ObjectName objectName = createInstance(transaction, instanceName,
-                               factory);
-               transaction.validateConfig();
-               transaction.commit();
-               return objectName;
-       }
-
-       public static ObjectName createGlobalEventExecutorBean(
-                       GlobalEventExecutorModuleFactory factory,
-                       ConfigRegistryJMXClient configRegistryClient)
-                       throws InstanceAlreadyExistsException {
-               GlobalEventExecutorUtil util = new GlobalEventExecutorUtil();
-               return util.createBean(factory, configRegistryClient);
-       }
-
 }
index 5fba544f2c86ef50e623fee633e09c15f356cc86..90f4a5ee85b4cf43bab39a497665aaa198fbfaa9 100644 (file)
@@ -25,40 +25,38 @@ public class NeverReconnectStrategyModuleTest extends AbstractConfigTest {
        private final String instanceName = "never";
 
        private NeverReconnectStrategyModuleFactory factory;
-
-       private ObjectName executor;
+       
+       private GlobalEventExecutorModuleFactory executorFactory;
 
        @Before
        public void setUp() throws Exception {
                this.factory = new NeverReconnectStrategyModuleFactory();
-               GlobalEventExecutorModuleFactory executorFactory = new GlobalEventExecutorModuleFactory();
+               this.executorFactory = new GlobalEventExecutorModuleFactory();
                super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
                                factory, executorFactory));
-               this.executor = GlobalEventExecutorUtil.createGlobalEventExecutorBean(
-                               executorFactory, configRegistryClient);
        }
 
        @Test
-       public void testValidationException1()
+       public void testValidationExceptionTimeoutNotSet()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, null, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, null, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
-                       assertTrue(e.getMessage().contains("value is not set."));
+                       assertTrue(e.getMessage().contains("Timeout value is not set."));
                }
        }
 
        @Test
-       public void testValidationException2()
+       public void testValidationExceptionTimeoutMinValue()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, -1, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, -1, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
@@ -66,30 +64,15 @@ public class NeverReconnectStrategyModuleTest extends AbstractConfigTest {
                }
        }
 
-       @Test
-       public void testValidationException3()
-                       throws InstanceAlreadyExistsException {
-               try {
-                       ConfigTransactionJMXClient transaction = configRegistryClient
-                                       .createTransaction();
-                       createInstance(transaction, instanceName, 100, null);
-                       transaction.validateConfig();
-                       fail();
-               } catch (ValidationException e) {
-                       assertTrue(e.getMessage().contains(
-                                       "expected dependency implementing interface"));
-               }
-       }
-
        @Test
        public void testCreateBean() throws Exception {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 500, this.executor);
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, this.executorFactory.getImplementationName());
                transaction.validateConfig();
                CommitStatus status = transaction.commit();
                assertBeanCount(1, factory.getImplementationName());
-               assertStatus(status, 1, 0, 1);
+               assertStatus(status, 2, 0, 0);
        }
 
        @Test
@@ -97,7 +80,7 @@ public class NeverReconnectStrategyModuleTest extends AbstractConfigTest {
                        ConflictingVersionException, ValidationException {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 100, this.executor);
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, this.executorFactory.getImplementationName());
                transaction.commit();
                transaction = configRegistryClient.createTransaction();
                assertBeanCount(1, factory.getImplementationName());
@@ -112,7 +95,7 @@ public class NeverReconnectStrategyModuleTest extends AbstractConfigTest {
                        InstanceNotFoundException {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 500, this.executor);
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, this.executorFactory.getImplementationName());
                transaction.commit();
                transaction = configRegistryClient.createTransaction();
                assertBeanCount(1, factory.getImplementationName());
@@ -126,16 +109,16 @@ public class NeverReconnectStrategyModuleTest extends AbstractConfigTest {
                assertStatus(status, 0, 1, 1);
        }
 
-       private ObjectName createInstance(
-                       final ConfigTransactionJMXClient transaction,
+       public static ObjectName createInstance(
+                       final ConfigTransactionJMXClient transaction, final String moduleName,
                        final String instanceName, final Integer timeout,
-                       final ObjectName executor) throws InstanceAlreadyExistsException {
+                       final String eventexecutorModuleName) throws InstanceAlreadyExistsException {
                ObjectName nameCreated = transaction.createModule(
-                               factory.getImplementationName(), instanceName);
+                               moduleName, instanceName);
                NeverReconnectStrategyModuleMXBean mxBean = transaction.newMBeanProxy(
                                nameCreated, NeverReconnectStrategyModuleMXBean.class);
                mxBean.setTimeout(timeout);
-               mxBean.setExecutor(executor);
+               mxBean.setExecutor(GlobalEventExecutorUtil.createInstance(transaction, eventexecutorModuleName, "global-event-executor1"));
                return nameCreated;
        }
 
index 1f9283a78645c8d4c823894036afc1c26c294565..10b1cfcbc764e73264c57266e42cf7cb8e5b6252 100644 (file)
@@ -26,39 +26,37 @@ public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest {
 
        private ReconnectImmediatelyStrategyModuleFactory factory;
 
-       private ObjectName executor;
+       private GlobalEventExecutorModuleFactory executorFactory;
 
        @Before
        public void setUp() throws Exception {
                this.factory = new ReconnectImmediatelyStrategyModuleFactory();
-               GlobalEventExecutorModuleFactory executorFactory = new GlobalEventExecutorModuleFactory();
+               this.executorFactory = new GlobalEventExecutorModuleFactory();
                super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
                                factory, executorFactory));
-               this.executor = GlobalEventExecutorUtil.createGlobalEventExecutorBean(
-                               executorFactory, configRegistryClient);
        }
 
        @Test
-       public void testValidationException1()
+       public void testValidationExceptionTimeoutNotSet()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, null, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, null, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
-                       assertTrue(e.getMessage().contains("value is not set."));
+                       assertTrue(e.getMessage().contains("Timeout value is not set."));
                }
        }
 
        @Test
-       public void testValidationException2()
+       public void testValidationExceptionTimeoutMinValue()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, -1, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, -1, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
@@ -66,30 +64,15 @@ public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest {
                }
        }
 
-       @Test
-       public void testValidationException3()
-                       throws InstanceAlreadyExistsException {
-               try {
-                       ConfigTransactionJMXClient transaction = configRegistryClient
-                                       .createTransaction();
-                       createInstance(transaction, instanceName, 100, null);
-                       transaction.validateConfig();
-                       fail();
-               } catch (ValidationException e) {
-                       assertTrue(e.getMessage().contains(
-                                       "expected dependency implementing interface"));
-               }
-       }
-
        @Test
        public void testCreateBean() throws Exception {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 500, this.executor);
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, this.executorFactory.getImplementationName());
                transaction.validateConfig();
                CommitStatus status = transaction.commit();
                assertBeanCount(1, factory.getImplementationName());
-               assertStatus(status, 1, 0, 1);
+               assertStatus(status, 2, 0, 0);
        }
 
        @Test
@@ -97,7 +80,7 @@ public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest {
                        ConflictingVersionException, ValidationException {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 100, this.executor);
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 100, this.executorFactory.getImplementationName());
                transaction.commit();
                transaction = configRegistryClient.createTransaction();
                assertBeanCount(1, factory.getImplementationName());
@@ -112,7 +95,7 @@ public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest {
                        InstanceNotFoundException {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 500, this.executor);
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, this.executorFactory.getImplementationName());
                transaction.commit();
                transaction = configRegistryClient.createTransaction();
                assertBeanCount(1, factory.getImplementationName());
@@ -127,17 +110,18 @@ public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest {
                assertStatus(status, 0, 1, 1);
        }
 
-       private ObjectName createInstance(
+       public static ObjectName createInstance(
                        final ConfigTransactionJMXClient transaction,
+                       final String moduleName,
                        final String instanceName, final Integer timeout,
-                       final ObjectName executor) throws InstanceAlreadyExistsException {
+                       final String executorModuleName) throws InstanceAlreadyExistsException {
                ObjectName nameCreated = transaction.createModule(
-                               factory.getImplementationName(), instanceName);
+                               moduleName, instanceName);
                ReconnectImmediatelyStrategyModuleMXBean mxBean = transaction
                                .newMBeanProxy(nameCreated,
                                                ReconnectImmediatelyStrategyModuleMXBean.class);
                mxBean.setTimeout(timeout);
-               mxBean.setExecutor(executor);
+               mxBean.setExecutor(GlobalEventExecutorUtil.createInstance(transaction, executorModuleName, "global-event-executor"));
                return nameCreated;
        }
 
index 0a49a53e4e2768fe75992c6d61c008d62f97343e..658275d7085a41b0c244adf5ce0bc815b063cd09 100644 (file)
@@ -29,26 +29,24 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
 
        private TimedReconnectStrategyModuleFactory factory;
 
-       private ObjectName executor;
+       private GlobalEventExecutorModuleFactory executorFactory;
 
        @Before
        public void setUp() throws Exception {
                this.factory = new TimedReconnectStrategyModuleFactory();
-               GlobalEventExecutorModuleFactory executorFactory = new GlobalEventExecutorModuleFactory();
+               this.executorFactory = new GlobalEventExecutorModuleFactory();
                super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
                                factory, executorFactory));
-               this.executor = GlobalEventExecutorUtil.createGlobalEventExecutorBean(
-                               executorFactory, configRegistryClient);
        }
 
        @Test
-       public void testValidationException1()
+       public void testValidationExceptionSleepFactorNotSet()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, 500, 100L, null, 500L,
-                                       10L, 10000L, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, 100L, null, 500L,
+                                       10L, 10000L, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
@@ -57,28 +55,28 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
        }
 
        @Test
-       public void testValidationException2()
+       public void testValidationExceptionSleepFactorMinValue()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, 500, 100L,
-                                       new BigDecimal(0.5), 500L, 10L, 10000L, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, 100L,
+                                       new BigDecimal(0.5), 500L, 10L, 10000L, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
-                       assertTrue(e.getMessage().contains("value 0.5 is less than 1"));
+                       assertTrue(e.getMessage().contains("is less than 1"));
                }
        }
 
        @Test
-       public void testValidationException3()
+       public void testValidationExceptionConnectTimeNotSet()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, null, 100L,
-                                       new BigDecimal(1.0), 500L, 10L, 10000L, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, null, 100L,
+                                       new BigDecimal(1.0), 500L, 10L, 10000L, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
@@ -87,28 +85,28 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
        }
 
        @Test
-       public void testValidationException4()
+       public void testValidationExceptionConnectTimeMinValue()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, -1, 100L, new BigDecimal(
-                                       1.0), 500L, 10L, 10000L, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, -1, 100L, new BigDecimal(
+                                       1.0), 500L, 10L, 10000L, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
-                       assertTrue(e.getMessage().contains("value -1 is less than 0"));
+                       assertTrue(e.getMessage().contains("is less than 0"));
                }
        }
 
        @Test
-       public void testValidationException5()
+       public void testValidationExceptionMinSleepNotSet()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, 100, null,
-                                       new BigDecimal(1.0), null, 10L, 10000L, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, 100, null,
+                                       new BigDecimal(1.0), 100L, 10L, 10000L, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
@@ -117,34 +115,18 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
        }
 
        @Test
-       public void testValidationException6()
+       public void testValidationExceptionMaxSleep()
                        throws InstanceAlreadyExistsException {
                try {
                        ConfigTransactionJMXClient transaction = configRegistryClient
                                        .createTransaction();
-                       createInstance(transaction, instanceName, 100, 300L,
-                                       new BigDecimal(1.0), 100L, 10L, 10000L, this.executor);
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, 100, 300L,
+                                       new BigDecimal(1.0), 100L, 10L, 10000L, this.executorFactory.getImplementationName());
                        transaction.validateConfig();
                        fail();
                } catch (ValidationException e) {
                        assertTrue(e.getMessage().contains(
-                                       "value 300 is greter than MaxSleep 100"));
-               }
-       }
-
-       @Test
-       public void testValidationException7()
-                       throws InstanceAlreadyExistsException {
-               try {
-                       ConfigTransactionJMXClient transaction = configRegistryClient
-                                       .createTransaction();
-                       createInstance(transaction, instanceName, 100, 100L,
-                                       new BigDecimal(1.0), 300L, 10L, 10000L, null);
-                       transaction.validateConfig();
-                       fail();
-               } catch (ValidationException e) {
-                       assertTrue(e.getMessage().contains(
-                                       "expected dependency implementing interface"));
+                                       "is greter than MaxSleep"));
                }
        }
 
@@ -152,12 +134,12 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
        public void testCreateBean() throws Exception {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 500, 100L,
-                               new BigDecimal(1.0), 500L, 10L, 10000L, this.executor);
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, 100L,
+                               new BigDecimal(1.0), 500L, 10L, 10000L, this.executorFactory.getImplementationName());
                transaction.validateConfig();
                CommitStatus status = transaction.commit();
                assertBeanCount(1, factory.getImplementationName());
-               assertStatus(status, 1, 0, 1);
+               assertStatus(status, 2, 0, 0);
        }
 
        @Test
@@ -165,8 +147,8 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
                        ConflictingVersionException, ValidationException {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 500, 100L,
-                               new BigDecimal(1.0), 500L, 10L, 10000L, this.executor);
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, 100L,
+                               new BigDecimal(1.0), 500L, 10L, 10000L, this.executorFactory.getImplementationName());
                transaction.commit();
                transaction = configRegistryClient.createTransaction();
                assertBeanCount(1, factory.getImplementationName());
@@ -181,9 +163,9 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
                        InstanceNotFoundException {
                ConfigTransactionJMXClient transaction = configRegistryClient
                                .createTransaction();
-               createInstance(transaction, instanceName, 500, 100L,
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, 100L,
                                new BigDecimal(1.0), new Long(500), new Long(10), new Long(
-                                               10000), this.executor);
+                                               10000), this.executorFactory.getImplementationName());
                transaction.commit();
                transaction = configRegistryClient.createTransaction();
                assertBeanCount(1, factory.getImplementationName());
@@ -200,14 +182,15 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
 
        }
 
-       private ObjectName createInstance(
+       public static ObjectName createInstance(
                        final ConfigTransactionJMXClient transaction,
+                       final String moduleName,
                        final String instanceName, final Integer connectTime,
                        final Long minSleep, final BigDecimal sleepFactor,
                        final Long maxSleep, final Long maxAttempts, final Long deadline,
-                       final ObjectName executor) throws InstanceAlreadyExistsException {
+                       final String executorModuleName) throws InstanceAlreadyExistsException {
                ObjectName nameCreated = transaction.createModule(
-                               factory.getImplementationName(), instanceName);
+                               moduleName, instanceName);
                TimedReconnectStrategyModuleMXBean mxBean = transaction.newMBeanProxy(
                                nameCreated, TimedReconnectStrategyModuleMXBean.class);
                mxBean.setConnectTime(connectTime);
@@ -216,7 +199,7 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
                mxBean.setMaxSleep(maxSleep);
                mxBean.setMinSleep(minSleep);
                mxBean.setSleepFactor(sleepFactor);
-               mxBean.setExecutor(executor);
+               mxBean.setExecutor(GlobalEventExecutorUtil.createInstance(transaction, executorModuleName, "global-event-executor"));
                return nameCreated;
        }
 
diff --git a/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPDispatcherImplModuleTest.java b/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPDispatcherImplModuleTest.java
new file mode 100644 (file)
index 0000000..e6d2e50
--- /dev/null
@@ -0,0 +1,85 @@
+package org.opendaylight.controller.config.yang.bgp.rib.impl;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
+import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleMXBean;
+
+@Ignore
+public class BGPDispatcherImplModuleTest extends AbstractConfigTest {
+
+       private final String instanceName = "bgp-message-fct";
+
+       private BGPDispatcherImplModuleFactory factory;
+       
+       private NettyThreadgroupModuleFactory threadgroupFactory;
+       
+       private BGPMessageFactoryImplModuleFactory messageFactory;
+       
+       @Before
+       public void setUp() throws Exception {
+               this.factory = new BGPDispatcherImplModuleFactory();
+               this.threadgroupFactory = new NettyThreadgroupModuleFactory();
+               this.messageFactory = new BGPMessageFactoryImplModuleFactory();
+               super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, threadgroupFactory, messageFactory));
+       }
+       
+       @Test
+       public void testCreateBean() throws Exception {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, this.threadgroupFactory.getImplementationName(), this.messageFactory.getImplementationName());
+               transaction.validateConfig();
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 4, 0, 0);
+       }
+       
+       @Test
+       public void testReusingOldInstance() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, this.threadgroupFactory.getImplementationName(), this.messageFactory.getImplementationName());
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 0, 4);
+       }
+       
+       public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
+                       final String instanceName, final String threadgropuModuleName, final String messageFactoryModuleName) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(
+                               moduleName, instanceName);
+               BGPDispatcherImplModuleMXBean mxBean = transaction.newMBeanProxy(
+                               nameCreated, BGPDispatcherImplModuleMXBean.class);
+               mxBean.setBossGroup(createThreadgroupInstance(transaction, threadgropuModuleName, "boss-threadgroup", 10));
+               mxBean.setWorkerGroup(createThreadgroupInstance(transaction, threadgropuModuleName, "worker-threadgroup", 10));
+               //mxBean.setMessageFactory(BGPMessageFactoryImplModuleTest.createInstance(transaction, messageFactoryModuleName, "bgp-msg-fct"));
+               return nameCreated;     
+       }
+       
+       public static ObjectName createThreadgroupInstance(
+                       final ConfigTransactionJMXClient transaction,
+                       final String moduleName, final String instanceName,
+                       final Integer threadCount) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(moduleName,
+                               instanceName);
+               NettyThreadgroupModuleMXBean mxBean = transaction.newMBeanProxy(
+                               nameCreated, NettyThreadgroupModuleMXBean.class);
+               mxBean.setThreadCount(threadCount);
+               return nameCreated;
+       }
+}
diff --git a/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPImplModuleTest.java b/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPImplModuleTest.java
new file mode 100644 (file)
index 0000000..040542a
--- /dev/null
@@ -0,0 +1,146 @@
+package org.opendaylight.controller.config.yang.bgp.rib.impl;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
+
+@Ignore
+public class BGPImplModuleTest extends AbstractConfigTest {
+
+       private final String instanceName = "bgp-impl1";
+       
+       private BGPImplModuleFactory factory;
+       
+       private BGPSessionProposalImplModuleFactory sessionFacotry;
+       
+       private BGPDispatcherImplModuleFactory dispactherFactory;
+       
+       private NettyThreadgroupModuleFactory threadgropFactory;
+       
+       private BGPMessageFactoryImplModuleFactory messageFactory;
+       
+       @Before
+       public void setUp() throws Exception {
+               this.factory = new BGPImplModuleFactory();
+               this.dispactherFactory = new BGPDispatcherImplModuleFactory();
+               this.sessionFacotry = new BGPSessionProposalImplModuleFactory();
+               this.threadgropFactory = new NettyThreadgroupModuleFactory();
+               this.messageFactory = new BGPMessageFactoryImplModuleFactory();
+               super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, this.dispactherFactory, this.sessionFacotry, this.messageFactory, this.threadgropFactory));
+       }
+       
+       @Test
+       public void testValidationExceptionPortNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", null, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName());
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Port value is not set."));
+               }
+       }
+       
+       @Test
+       public void testValidationExceptionPortOutOfRange()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", -1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName());
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("is out of range (0-65535)."));
+               }
+       }
+       
+       @Test
+       public void testValidationExceptionHostNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, null, 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName());
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Host value is not set."));
+               }
+       }
+       
+       @Test
+       public void testCreateBean() throws Exception {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName());
+               transaction.validateConfig();
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 6, 0, 0);
+       }
+       
+       @Test
+       public void testReusingOldInstance() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName());
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 0, 6);
+       }
+
+       @Test
+       public void testReconfigure() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException,
+                       InstanceNotFoundException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName());
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               BGPImplModuleMXBean mxBean = transaction
+                               .newMBeanProxy(transaction.lookupConfigBean(
+                                               factory.getImplementationName(),
+                                               instanceName), BGPImplModuleMXBean.class);
+               mxBean.setPort(10);
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 1, 5);
+       }
+       
+       public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
+                       final String instanceName, final String host, final Integer port, final String sessionModuleName, final String dispatcherModuleName, final String threadgroupModuleName, final String messageFactoryModuleName) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(
+                               moduleName, instanceName);
+               BGPImplModuleMXBean mxBean = transaction.newMBeanProxy(
+                               nameCreated, BGPImplModuleMXBean.class);
+               mxBean.setHost(host);
+               mxBean.setPort(port);
+               mxBean.setBgpProposal(BGPSessionProposalImplModuleTest.createInstance(transaction, sessionModuleName, "bgp-session1", 1, (short)30, "128.0.0.1"));
+               mxBean.setBgpDispatcher(BGPDispatcherImplModuleTest.createInstance(transaction, dispatcherModuleName, "bgp-dispatcher1", threadgroupModuleName, messageFactoryModuleName));
+               return nameCreated;
+       }
+       
+}
diff --git a/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPMessageFactoryImplModuleTest.java b/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPMessageFactoryImplModuleTest.java
new file mode 100644 (file)
index 0000000..46eb690
--- /dev/null
@@ -0,0 +1,78 @@
+package org.opendaylight.controller.config.yang.bgp.rib.impl;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleFactory;
+import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleMXBean;
+
+@Ignore
+public class BGPMessageFactoryImplModuleTest extends AbstractConfigTest {
+       
+       private final String instanceName = "bgp-message-fct";
+
+       private BGPMessageFactoryImplModuleFactory factory;
+       
+       private SimpleBGPExtensionProviderContextModuleFactory bgpEPCFactory;
+       
+       @Before
+       public void setUp() throws Exception {
+               this.factory = new BGPMessageFactoryImplModuleFactory();
+               this.bgpEPCFactory = new SimpleBGPExtensionProviderContextModuleFactory();
+               super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, this.bgpEPCFactory));
+       }
+       
+       @Test
+       public void testCreateBean() throws Exception {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, this.bgpEPCFactory.getImplementationName());
+               transaction.validateConfig();
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 1, 0, 0);
+       }
+       
+       @Test
+       public void testReusingOldInstance() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, this.bgpEPCFactory.getImplementationName());
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 0, 1);
+       }
+       
+       public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
+                       final String instanceName, final String extensionsModuleName) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(
+                               moduleName, instanceName);
+               BGPMessageFactoryImplModuleMXBean mxBean = transaction.newMBeanProxy(
+                               nameCreated, BGPMessageFactoryImplModuleMXBean.class);
+               //mxBean.setBgpExtensions(createBgpExtensionsInstance(transaction, extensionsModuleName, "bgp-extension"));
+               return nameCreated;     
+       }
+       
+       public static ObjectName createBgpExtensionsInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
+                       final String instanceName) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(
+                               moduleName, instanceName);
+               transaction.newMBeanProxy(
+                               nameCreated, SimpleBGPExtensionProviderContextModuleMXBean.class);
+               return nameCreated;                     
+       }
+       
+}
diff --git a/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPSessionProposalImplModuleTest.java b/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPSessionProposalImplModuleTest.java
new file mode 100644 (file)
index 0000000..60afab6
--- /dev/null
@@ -0,0 +1,174 @@
+package org.opendaylight.controller.config.yang.bgp.rib.impl;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+
+@Ignore
+public class BGPSessionProposalImplModuleTest extends AbstractConfigTest {
+
+       private final String instanceName = "bgp-session-prop";
+
+       private BGPSessionProposalImplModuleFactory factory;
+       
+       @Before
+       public void setUp() throws Exception {
+               this.factory = new BGPSessionProposalImplModuleFactory();
+               super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory));
+       }
+       
+       @Test
+       public void testValidationExceptionAsNumberNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, null, (short)180, "192.168.1.1");
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("AsNumber value is not set."));
+               }
+       }
+       
+       @Test
+       public void testValidationExceptionAsNumberMinValue()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, -1, (short)180, "192.168.1.1");
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("AsNumber value must be greather than 0"));
+               }
+       }
+       
+       @Test
+       public void testValidationExceptionHoldtimerNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, 1, null, "192.168.1.1");
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Holdtimer value is not set."));
+               }
+       }
+       
+       @Test
+       public void testValidationExceptionHoldtimerMinValue()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, 1, (short)2, "192.168.1.1");
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Holdtimer value must be"));
+               }
+       }
+       
+       @Test
+       public void testValidationExceptionBgpIdNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, 1, (short)180, null);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("BgpId value is not set."));
+               }
+       }
+       
+       @Test
+       public void testValidationExceptionBgpIdNotIpv4()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(), instanceName, 1, (short)180, "192.168.1.500");
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("is not valid IPv4 address"));
+               }
+       }
+       
+       @Test
+       public void testCreateBean() throws Exception {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 1, (short)180, "192.168.1.1");
+               transaction.validateConfig();
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 1, 0, 0);
+       }
+       
+       @Test
+       public void testReusingOldInstance() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 1, (short)180, "192.168.1.1");
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 0, 1);
+       }
+
+       @Test
+       public void testReconfigure() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException,
+                       InstanceNotFoundException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, 1, (short)180, "192.168.1.1");
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               BGPSessionProposalImplModuleMXBean mxBean = transaction
+                               .newMBeanProxy(transaction.lookupConfigBean(
+                                               factory.getImplementationName(),
+                                               instanceName), BGPSessionProposalImplModuleMXBean.class);
+               mxBean.setBgpId("192.168.10.10");
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 1, 0);
+       }
+       
+       public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
+                       final String instanceName, final Integer asNumber, final Short holdtimer, final String bgpId) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(
+                               moduleName, instanceName);
+               BGPSessionProposalImplModuleMXBean mxBean = transaction.newMBeanProxy(
+                               nameCreated, BGPSessionProposalImplModuleMXBean.class);
+               mxBean.setAsNumber(asNumber);
+               mxBean.setBgpId(bgpId);
+               mxBean.setHoldtimer(holdtimer);
+               return nameCreated;
+               
+       }
+}
diff --git a/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleTest.java b/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleTest.java
new file mode 100644 (file)
index 0000000..b01ff8e
--- /dev/null
@@ -0,0 +1,125 @@
+package org.opendaylight.controller.config.yang.bgp.rib.impl;
+
+import java.io.Closeable;
+import java.math.BigDecimal;
+import java.util.Dictionary;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.bgp.reconnectstrategy.TimedReconnectStrategyModuleTest;
+import org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingBrokerImplSingletonModuleFactory;
+import org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingBrokerImplSingletonModuleMXBean;
+import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleFactory;
+import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
+import org.opendaylight.controller.config.yang.reconnectstrategy.TimedReconnectStrategyModuleFactory;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.osgi.framework.Filter;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
+
+@Ignore
+public class RIBImplModuleTest extends AbstractConfigTest {
+       
+       private final String instanceName = "bgp-rib-impl";
+
+       private RIBImplModuleFactory factory;
+       
+       private BindingBrokerImplSingletonModuleFactory brokerFactory;
+       
+       private TimedReconnectStrategyModuleFactory reconnectFactory;
+       
+       private BGPImplModuleFactory bgpFactory;
+       
+       private BGPSessionProposalImplModuleFactory sessionFacotry;
+       
+       private BGPDispatcherImplModuleFactory dispactherFactory;
+       
+       private NettyThreadgroupModuleFactory threadgropFactory;
+       
+       private BGPMessageFactoryImplModuleFactory messageFactory;
+       
+       private GlobalEventExecutorModuleFactory executorFactory;
+       
+       @Before
+       public void setUp() throws Exception {
+               this.factory = new RIBImplModuleFactory();
+               this.brokerFactory = new BindingBrokerImplSingletonModuleFactory();
+               this.bgpFactory = new BGPImplModuleFactory();
+               this.executorFactory = new GlobalEventExecutorModuleFactory();
+               this.dispactherFactory = new BGPDispatcherImplModuleFactory();
+               this.sessionFacotry = new BGPSessionProposalImplModuleFactory();
+               this.threadgropFactory = new NettyThreadgroupModuleFactory();
+               this.messageFactory = new BGPMessageFactoryImplModuleFactory();
+               this.reconnectFactory = new TimedReconnectStrategyModuleFactory();
+               super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, 
+                               this.dispactherFactory, this.sessionFacotry, this.messageFactory, 
+                               this.threadgropFactory, this.bgpFactory, this.reconnectFactory, this.brokerFactory, this.executorFactory));
+               Mockito.doReturn(mockedServiceRegistration).when(mockedContext).registerService(
+                Matchers.any(String.class), Mockito.any(Closeable.class),
+                Mockito.any(Dictionary.class));
+               Mockito.doReturn(mockedServiceRegistration).when(mockedContext).registerService(
+                Matchers.any(Class.class), Mockito.any(Closeable.class),
+                Mockito.any(Dictionary.class));
+               Filter mockedFilter = Mockito.mock(Filter.class);
+               Mockito.doReturn(mockedFilter).when(mockedContext).createFilter(Mockito.anyString());
+               
+               Mockito.doNothing().when(mockedContext).addServiceListener(Mockito.any(ServiceListener.class), Mockito.anyString());
+               
+               Mockito.doReturn(new ServiceReference[]{}).when(mockedContext).getServiceReferences(Matchers.anyString(), Matchers.anyString());
+               
+               ServiceReference<?> mockedserviceReference = Mockito.mock(ServiceReference.class);
+               Mockito.doReturn(new String()).when(mockedserviceReference).toString();
+               Mockito.doReturn(mockedserviceReference).when(mockedContext).getServiceReference(Matchers.any(Class.class));
+               
+               DataProviderService mockedService = Mockito.mock(DataProviderService.class);
+               Mockito.doReturn(mockedService).when(mockedContext).getService(Matchers.any(ServiceReference.class));
+       }
+       
+       @Test
+       public void testCreateBean() throws Exception {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(), instanceName, new ObjectName("org.opendaylight.controller:instanceName=binding-broker-singleton,moduleFactoryName=binding-broker-impl-singleton,type=Module"),
+                               this.reconnectFactory.getImplementationName(), this.executorFactory.getImplementationName(), this.bgpFactory.getImplementationName(), this.sessionFacotry.getImplementationName(),
+                               this.dispactherFactory.getImplementationName(), this.threadgropFactory.getImplementationName(), this.messageFactory.getImplementationName());
+               transaction.validateConfig();
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 6, 0, 0);
+       }
+       
+       public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
+                       final String instanceName, final ObjectName bindingDataModule, final String reconnectModueName, final String executorModuleName, final String bgpModuleName,
+                       final String sessionModuleName, final String dispatcherModuleName, final String threadgroupModuleName, final String messageFactoryModuleName) throws InstanceAlreadyExistsException, MalformedObjectNameException {
+               ObjectName nameCreated = transaction.createModule(
+                               moduleName, instanceName);
+               RIBImplModuleMXBean mxBean = transaction.newMBeanProxy(
+                               nameCreated, RIBImplModuleMXBean.class);
+               ObjectName reconnectObjectName = TimedReconnectStrategyModuleTest.createInstance(transaction, reconnectModueName, "session-reconnect-strategy", 0, 2000L, new BigDecimal(1.0), 5000L, 2000L, null, executorModuleName);
+               mxBean.setSessionReconnectStrategy(reconnectObjectName);
+               mxBean.setDataProvider(bindingDataModule);
+               mxBean.setTcpReconnectStrategy(reconnectObjectName);
+               mxBean.setBgp(BGPImplModuleTest.createInstance(transaction, bgpModuleName, "bgp-impl1", "localhost", 1, sessionModuleName, dispatcherModuleName, threadgroupModuleName, messageFactoryModuleName));
+               return nameCreated;
+       }
+       
+       public static ObjectName createBindingBrokerInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
+                       final String instanceName) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(
+                               moduleName, instanceName);
+               transaction.newMBeanProxy(
+                               nameCreated, BindingBrokerImplSingletonModuleMXBean.class);
+               return nameCreated;
+       }
+}