4659b1603539cd6f29fbded47c02e2d34eaf5a28
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / DatastoreContextContextPropertiesUpdaterTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.controller.cluster.datastore;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13
14 import java.lang.reflect.Field;
15 import java.util.HashMap;
16 import java.util.Map;
17 import org.junit.Test;
18 import org.opendaylight.controller.cluster.datastore.DatastoreContextPropertiesUpdater.Listener;
19
20 public class DatastoreContextContextPropertiesUpdaterTest {
21
22     @SuppressWarnings("unchecked")
23     @Test
24     public void updateOnConstructionTest() throws Exception {
25         final Map<String, Object> properties = new HashMap<>();
26         properties.put("shardTransactionIdleTimeoutInMinutes", 10);
27         final DatastoreContext datastoreContext = DatastoreContext.newBuilder().build();
28
29         final DatastoreContextIntrospector introspector = new DatastoreContextIntrospector(datastoreContext);
30
31         final DatastoreContextPropertiesUpdater updater = new DatastoreContextPropertiesUpdater(introspector,
32                 properties);
33         assertNotNull(updater);
34
35         final Map<String, Object> props = (Map<String, Object>) resolveField("currentProperties", introspector);
36
37         assertEquals(props.get("shardTransactionIdleTimeoutInMinutes"), 10);
38     }
39
40     @SuppressWarnings("unchecked")
41     @Test
42     public void onUpdateTest() throws Exception {
43         final Map<String, Object> properties = new HashMap<>();
44         properties.put("shardTransactionIdleTimeoutInMinutes", 10);
45         final DatastoreContext datastoreContext = DatastoreContext.newBuilder().build();
46         assertNotNull(datastoreContext);
47         final DatastoreContextIntrospector introspector = new DatastoreContextIntrospector(datastoreContext);
48         assertNotNull(introspector);
49         final DatastoreContextPropertiesUpdater updater = new DatastoreContextPropertiesUpdater(introspector,
50                 properties);
51         assertNotNull(updater);
52
53         Map<String, Object> props = (Map<String, Object>) resolveField("currentProperties", introspector);
54         assertTrue(!props.isEmpty());
55
56         properties.put("shardTransactionIdleTimeoutInMinutes", 20);
57         updater.update(properties);
58
59         props = (Map<String, Object>) resolveField("currentProperties", introspector);
60         assertEquals(props.get("shardTransactionIdleTimeoutInMinutes"), 20);
61     }
62
63     @SuppressWarnings("resource")
64     @Test
65     public void listenerTest() {
66         final Map<String, Object> properties = new HashMap<>();
67         properties.put("shardTransactionIdleTimeoutInMinutes", 10);
68
69         final DatastoreContext datastoreContext = DatastoreContext.newBuilder().build();
70         final DatastoreContextIntrospector introspector = new DatastoreContextIntrospector(datastoreContext);
71         final DatastoreContextPropertiesUpdater updater = new DatastoreContextPropertiesUpdater(introspector,
72                 properties);
73         final DummyListenerImpl dummyListener = new DummyListenerImpl();
74         updater.setListener(dummyListener);
75
76         assertTrue(dummyListener.getContextFactory() == null);
77         updater.setListener(dummyListener);
78         properties.put("shardTransactionIdleTimeoutInMinutes", 20);
79         updater.update(properties);
80
81         final DatastoreContextFactory contextFactory = dummyListener.getContextFactory();
82         assertNotNull(contextFactory);
83         updater.close();
84     }
85
86     private Object resolveField(final String name, final Object obj) throws Exception {
87         final Field currProps = obj.getClass().getDeclaredField(name);
88         currProps.setAccessible(true);
89         return currProps.get(obj);
90     }
91
92     private class DummyListenerImpl implements Listener {
93
94         private DatastoreContextFactory contextFactory;
95
96         @Override
97         @SuppressWarnings("checkstyle:hiddenField")
98         public void onDatastoreContextUpdated(final DatastoreContextFactory contextFactory) {
99             this.contextFactory = contextFactory;
100         }
101
102         public DatastoreContextFactory getContextFactory() {
103             return contextFactory;
104         }
105     }
106 }