2 * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.cluster.datastore;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
14 import java.lang.reflect.Field;
15 import java.util.HashMap;
17 import org.junit.Test;
18 import org.opendaylight.controller.cluster.datastore.DatastoreContextPropertiesUpdater.Listener;
20 public class DatastoreContextContextPropertiesUpdaterTest {
22 @SuppressWarnings("unchecked")
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();
29 final DatastoreContextIntrospector introspector = new DatastoreContextIntrospector(datastoreContext);
31 final DatastoreContextPropertiesUpdater updater = new DatastoreContextPropertiesUpdater(introspector,
33 assertNotNull(updater);
35 final Map<String, Object> props = (Map<String, Object>) resolveField("currentProperties", introspector);
37 assertEquals(props.get("shardTransactionIdleTimeoutInMinutes"), 10);
40 @SuppressWarnings("unchecked")
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,
51 assertNotNull(updater);
53 Map<String, Object> props = (Map<String, Object>) resolveField("currentProperties", introspector);
54 assertTrue(!props.isEmpty());
56 properties.put("shardTransactionIdleTimeoutInMinutes", 20);
57 updater.update(properties);
59 props = (Map<String, Object>) resolveField("currentProperties", introspector);
60 assertEquals(props.get("shardTransactionIdleTimeoutInMinutes"), 20);
63 @SuppressWarnings("resource")
65 public void listenerTest() {
66 final Map<String, Object> properties = new HashMap<>();
67 properties.put("shardTransactionIdleTimeoutInMinutes", 10);
69 final DatastoreContext datastoreContext = DatastoreContext.newBuilder().build();
70 final DatastoreContextIntrospector introspector = new DatastoreContextIntrospector(datastoreContext);
71 final DatastoreContextPropertiesUpdater updater = new DatastoreContextPropertiesUpdater(introspector,
73 final DummyListenerImpl dummyListener = new DummyListenerImpl();
74 updater.setListener(dummyListener);
76 assertTrue(dummyListener.getContextFactory() == null);
77 updater.setListener(dummyListener);
78 properties.put("shardTransactionIdleTimeoutInMinutes", 20);
79 updater.update(properties);
81 final DatastoreContextFactory contextFactory = dummyListener.getContextFactory();
82 assertNotNull(contextFactory);
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);
92 private class DummyListenerImpl implements Listener {
94 private DatastoreContextFactory contextFactory;
97 @SuppressWarnings("checkstyle:hiddenField")
98 public void onDatastoreContextUpdated(final DatastoreContextFactory contextFactory) {
99 this.contextFactory = contextFactory;
102 public DatastoreContextFactory getContextFactory() {
103 return contextFactory;