Merge "write /nodes/node/table/0 with ensure parents when node first appears"
[controller.git] / opendaylight / config / config-manager / src / test / java / org / opendaylight / controller / config / manager / impl / osgi / BlankTransactionServiceTrackerTest.java
1 package org.opendaylight.controller.config.manager.impl.osgi;
2
3 import static junit.framework.Assert.assertNotNull;
4 import static junit.framework.Assert.assertSame;
5 import static junit.framework.Assert.fail;
6 import static org.mockito.Mockito.doReturn;
7 import static org.mockito.Mockito.doThrow;
8 import static org.mockito.Mockito.mock;
9 import static org.mockito.Mockito.times;
10 import static org.mockito.Mockito.verify;
11
12 import java.util.Collections;
13 import javax.management.ObjectName;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.mockito.Mock;
17 import org.mockito.MockitoAnnotations;
18 import org.opendaylight.controller.config.api.ConflictingVersionException;
19 import org.opendaylight.controller.config.api.ModuleIdentifier;
20 import org.opendaylight.controller.config.api.ValidationException;
21 import org.opendaylight.controller.config.api.jmx.CommitStatus;
22 import org.opendaylight.controller.config.spi.ModuleFactory;
23 import org.osgi.framework.ServiceReference;
24
25 public class BlankTransactionServiceTrackerTest {
26
27     @Mock
28     private BlankTransactionServiceTracker.BlankTransaction blankTx;
29     private BlankTransactionServiceTracker tracker;
30
31     @Before
32     public void setUp() throws Exception {
33         MockitoAnnotations.initMocks(this);
34         doReturn(new CommitStatus(Collections.<ObjectName>emptyList(), Collections.<ObjectName>emptyList(), Collections.<ObjectName>emptyList())).when(blankTx).hit();
35         tracker = new BlankTransactionServiceTracker(blankTx);
36     }
37
38     @Test
39     public void testBlankTransaction() throws Exception {
40         tracker.addingService(getMockServiceReference());
41         tracker.modifiedService(getMockServiceReference(), null);
42         tracker.removedService(getMockServiceReference(), null);
43         verify(blankTx, times(3)).hit();
44     }
45
46     @Test
47     public void testValidationException() throws Exception {
48         IllegalArgumentException argumentException = new IllegalArgumentException();
49         ValidationException validationException = ValidationException.createForSingleException(new ModuleIdentifier("m", "i"), argumentException);
50         doThrow(validationException).when(blankTx).hit();
51         try {
52             tracker.addingService(getMockServiceReference());
53         } catch (Exception e) {
54             verify(blankTx, times(1)).hit();
55             assertNotNull(e.getCause());
56             assertSame(validationException, e.getCause());
57             return;
58         }
59
60         fail("Exception should have occurred for validation exception");
61     }
62
63     @Test
64     public void testConflictingException() throws Exception {
65         int maxAttempts = 2;
66         tracker = new BlankTransactionServiceTracker(blankTx, maxAttempts);
67
68         final ConflictingVersionException ex = new ConflictingVersionException();
69         doThrow(ex).when(blankTx).hit();
70         try {
71             tracker.addingService(getMockServiceReference());
72         } catch (Exception e) {
73             verify(blankTx, times(maxAttempts)).hit();
74             return;
75         }
76
77         fail("Exception should have occurred for conflicting exception");
78     }
79
80     private ServiceReference<ModuleFactory> getMockServiceReference() {
81         return mock(ServiceReference.class);
82     }
83 }