Merge "Initial code drop of Netty.io integration"
[bgpcep.git] / pcep / ietf-stateful07 / src / test / java / org / opendaylight / protocol / pcep / ietf / Stateful07SessionProposalFactoryModuleTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.protocol.pcep.ietf;
9
10 import static org.junit.Assert.assertTrue;
11 import static org.junit.Assert.fail;
12
13 import javax.management.InstanceAlreadyExistsException;
14 import javax.management.InstanceNotFoundException;
15 import javax.management.ObjectName;
16
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.pcep.stateful07.cfg.AbstractStateful07PCEPSessionProposalFactoryModuleFactory;
26 import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.Stateful07PCEPSessionProposalFactoryModuleFactory;
27 import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.Stateful07PCEPSessionProposalFactoryModuleMXBean;
28
29 public class Stateful07SessionProposalFactoryModuleTest extends AbstractConfigTest {
30
31         private final String instanceName = "pcep-proposal";
32
33         private Stateful07PCEPSessionProposalFactoryModuleFactory factory;
34
35         @Before
36         public void setUp() throws Exception {
37                 this.factory = new Stateful07PCEPSessionProposalFactoryModuleFactory();
38                 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory));
39         }
40
41         @Test
42         public void testValidationExceptionDeadTimerValueNotSet() throws InstanceAlreadyExistsException {
43                 try {
44                         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
45                         createInstance(transaction, this.factory.getImplementationName(), this.instanceName, null, 100, true, true, true);
46                         transaction.validateConfig();
47                         fail();
48                 } catch (final ValidationException e) {
49                         assertTrue(e.getMessage().contains("DeadTimerValue value is not set"));
50                 }
51         }
52
53         @Test
54         public void testValidationExceptionKeepAliveTimerNotSet() throws InstanceAlreadyExistsException {
55                 try {
56                         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
57                         createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 400, null, true, true, true);
58                         transaction.validateConfig();
59                         fail();
60                 } catch (final ValidationException e) {
61                         assertTrue(e.getMessage().contains("KeepAliveTimerValue value is not set"));
62                 }
63         }
64
65         @Test
66         public void testValidationExceptionStatefulNotSet() throws InstanceAlreadyExistsException {
67                 try {
68                         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
69                         createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 400, 100, null, false, false);
70                         transaction.validateConfig();
71                         fail();
72                 } catch (final ValidationException e) {
73                         assertTrue(e.getMessage().contains("Stateful value is not set"));
74                 }
75         }
76
77         @Test
78         public void testValidationExceptionActiveNotSet() throws InstanceAlreadyExistsException {
79                 try {
80                         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
81                         createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 400, 100, true, null, true);
82                         transaction.validateConfig();
83                         fail();
84                 } catch (final ValidationException e) {
85                         assertTrue(e.getMessage().contains("Active value is not set"));
86                 }
87         }
88
89         @Test
90         public void testValidationExceptionInstantiatedNotSet() throws InstanceAlreadyExistsException {
91                 try {
92                         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
93                         createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 400, 100, true, true, null);
94                         transaction.validateConfig();
95                         fail();
96                 } catch (final ValidationException e) {
97                         assertTrue(e.getMessage().contains("Initiated value is not set"));
98                 }
99         }
100
101         @Test
102         public void testValidationExceptionKeepAliveTimerMinValue() throws InstanceAlreadyExistsException {
103                 try {
104                         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
105                         createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 400, -10, true, true, true);
106                         transaction.validateConfig();
107                         fail();
108                 } catch (final ValidationException e) {
109                         assertTrue(e.getMessage().contains("minimum value is 1."));
110                 }
111         }
112
113         @Test
114         public void testStatefulAfterCommitted() throws InstanceAlreadyExistsException, InstanceNotFoundException, ValidationException, ConflictingVersionException {
115                 ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
116                 createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 400, 100, false, true, true);
117                 transaction.validateConfig();
118                 transaction.commit();
119                 transaction = this.configRegistryClient.createTransaction();
120                 final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMBeanProxy(
121                                 transaction.lookupConfigBean(AbstractStateful07PCEPSessionProposalFactoryModuleFactory.NAME, this.instanceName),
122                                 Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
123                 assertTrue(mxBean.getStateful());
124         }
125
126         @Test
127         public void testCreateBean() throws Exception {
128                 final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
129                 createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 1, 0, true, true, true);
130                 transaction.validateConfig();
131                 final CommitStatus status = transaction.commit();
132                 assertBeanCount(1, this.factory.getImplementationName());
133                 assertStatus(status, 1, 0, 0);
134         }
135
136         @Test
137         public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException, ValidationException {
138                 ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
139                 createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 400, 100, true, true, true);
140                 transaction.commit();
141                 transaction = this.configRegistryClient.createTransaction();
142                 assertBeanCount(1, this.factory.getImplementationName());
143                 final CommitStatus status = transaction.commit();
144                 assertBeanCount(1, this.factory.getImplementationName());
145                 assertStatus(status, 0, 0, 1);
146         }
147
148         @Test
149         public void testReconfigure() throws InstanceAlreadyExistsException, ConflictingVersionException, ValidationException,
150         InstanceNotFoundException {
151                 ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
152                 createInstance(transaction, this.factory.getImplementationName(), this.instanceName, 400, 100, true, true, true);
153                 transaction.commit();
154                 transaction = this.configRegistryClient.createTransaction();
155                 assertBeanCount(1, this.factory.getImplementationName());
156                 final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMBeanProxy(
157                                 transaction.lookupConfigBean(AbstractStateful07PCEPSessionProposalFactoryModuleFactory.NAME, this.instanceName),
158                                 Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
159                 final CommitStatus status = transaction.commit();
160                 assertBeanCount(1, this.factory.getImplementationName());
161                 assertStatus(status, 0, 0, 1);
162         }
163
164         public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
165                         final String instanceName, final Integer deadTimer, final Integer keepAlive, final Boolean stateful, final Boolean active,
166                         final Boolean instant) throws InstanceAlreadyExistsException {
167                 final ObjectName nameCreated = transaction.createModule(moduleName, instanceName);
168                 final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,
169                                 Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
170                 mxBean.setActive(active);
171                 mxBean.setDeadTimerValue(deadTimer);
172                 mxBean.setInitiated(instant);
173                 mxBean.setKeepAliveTimerValue(keepAlive);
174                 mxBean.setStateful(stateful);
175                 return nameCreated;
176         }
177
178 }
179