Minor changes to config-persister to allow for karaf
[controller.git] / opendaylight / netconf / config-persister-impl / src / test / java / org / opendaylight / controller / netconf / persist / impl / osgi / MockedBundleContext.java
1 /*
2  * Copyright (c) 2013 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.controller.netconf.persist.impl.osgi;
9
10 import static org.mockito.Matchers.any;
11 import static org.mockito.Matchers.anyString;
12 import static org.mockito.Matchers.eq;
13 import static org.mockito.Mockito.doNothing;
14 import static org.mockito.Mockito.doReturn;
15
16 import java.io.Closeable;
17 import java.io.IOException;
18 import java.util.Collections;
19 import java.util.Dictionary;
20 import java.util.List;
21 import java.util.SortedSet;
22 import java.util.TreeSet;
23
24 import org.mockito.Mock;
25 import org.mockito.MockitoAnnotations;
26 import org.opendaylight.controller.config.persist.api.ConfigPusher;
27 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
28 import org.opendaylight.controller.config.persist.api.Persister;
29 import org.opendaylight.controller.config.persist.api.PropertiesProvider;
30 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider;
31 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
32 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
33 import org.opendaylight.controller.netconf.persist.impl.DummyAdapter;
34 import org.osgi.framework.Bundle;
35 import org.osgi.framework.BundleContext;
36 import org.osgi.framework.Filter;
37 import org.osgi.framework.ServiceListener;
38 import org.osgi.framework.ServiceReference;
39 import org.osgi.framework.ServiceRegistration;
40
41 import com.google.common.collect.Lists;
42 import com.google.common.collect.Sets;
43
44 final class MockedBundleContext {
45     @Mock
46     private BundleContext context;
47     @Mock
48     private Filter outerFilter, innerFilter;
49     @Mock
50     private ServiceReference<?> serviceReference;
51     @Mock
52     private Bundle bundle;
53     @Mock
54     NetconfOperationServiceFactory serviceFactory;
55     @Mock
56     private NetconfOperationService service;
57     @Mock
58     private ServiceRegistration<?> registration;
59
60     MockedBundleContext(long maxWaitForCapabilitiesMillis, long conflictingVersionTimeoutMillis) throws Exception {
61         MockitoAnnotations.initMocks(this);
62         doReturn(null).when(context).getProperty(anyString());
63         initContext(maxWaitForCapabilitiesMillis, conflictingVersionTimeoutMillis);
64
65         String outerFilterString = "(objectClass=org.opendaylight.controller.netconf.mapping.api.NetconfOperationProvider)";
66         doReturn(outerFilter).when(context).createFilter(outerFilterString);
67         doNothing().when(context).addServiceListener(any(ServiceListener.class), eq(outerFilterString));
68         ServiceReference<?>[] toBeReturned = {serviceReference};
69         doReturn(toBeReturned).when(context).getServiceReferences(NetconfOperationProvider.class.getName(), null);
70
71         String innerFilterString = "innerfilter";
72         doReturn(innerFilterString).when(outerFilter).toString();
73
74         doReturn(innerFilter).when(context).createFilter(ConfigPersisterActivator.getFilterString());
75         doReturn(innerFilterString).when(innerFilter).toString();
76         doNothing().when(context).addServiceListener(any(ServiceListener.class), eq(innerFilterString));
77
78         doReturn(toBeReturned).when(context).getServiceReferences((String) null, innerFilterString);
79         doReturn(bundle).when(serviceReference).getBundle();
80         doReturn(context).when(bundle).getBundleContext();
81         doReturn("").when(serviceReference).toString();
82         doReturn(serviceFactory).when(context).getService(any(ServiceReference.class));
83         doReturn(service).when(serviceFactory).createService(anyString());
84         doReturn(Collections.emptySet()).when(service).getCapabilities();
85         doNothing().when(service).close();
86         doReturn("serviceFactoryMock").when(serviceFactory).toString();
87
88         doNothing().when(registration).unregister();
89         doReturn(registration).when(context).registerService(
90                 eq(ConfigPusher.class.getName()), any(Closeable.class),
91                 any(Dictionary.class));
92     }
93
94     public BundleContext getBundleContext() {
95         return context;
96     }
97
98     private void initContext(long maxWaitForCapabilitiesMillis, long conflictingVersionTimeoutMillis) {
99         initProp(context, "active", "1");
100         initProp(context, "1." + ConfigPersisterActivator.STORAGE_ADAPTER_CLASS_PROP_SUFFIX, DummyAdapterWithInitialSnapshot.class.getName());
101         initProp(context, "1." + "readonly", "false");
102         initProp(context, "1." + ".properties.fileStorage", "target/configuration-persister-test/initial/");
103         initProp(context, ConfigPersisterActivator.MAX_WAIT_FOR_CAPABILITIES_MILLIS_PROPERTY, String.valueOf(maxWaitForCapabilitiesMillis));
104         initProp(context, ConfigPersisterActivator.CONFLICTING_VERSION_TIMEOUT_MILLIS_PROPERTY, String.valueOf(conflictingVersionTimeoutMillis));
105     }
106
107     private void initProp(BundleContext context, String key, String value) {
108         initPropNoPrefix(context, ConfigPersisterActivator.NETCONF_CONFIG_PERSISTER + "." + key, value);
109     }
110
111     private void initPropNoPrefix(BundleContext context, String key, String value) {
112         doReturn(value).when(context).getProperty(key);
113     }
114
115     public static class DummyAdapterWithInitialSnapshot extends DummyAdapter {
116
117         public static final String CONFIG_SNAPSHOT = "config-snapshot";
118         public static String expectedCapability = "cap2";
119
120         @Override
121         public List<ConfigSnapshotHolder> loadLastConfigs() throws IOException {
122             return Lists.newArrayList(getConfigSnapshot());
123         }
124
125         @Override
126         public Persister instantiate(PropertiesProvider propertiesProvider) {
127             return this;
128         }
129
130         public ConfigSnapshotHolder getConfigSnapshot() {
131             return new ConfigSnapshotHolder() {
132                 @Override
133                 public String getConfigSnapshot() {
134                     return "<data><" + CONFIG_SNAPSHOT + "/></data>";
135                 }
136
137                 @Override
138                 public SortedSet<String> getCapabilities() {
139                     TreeSet<String> strings = Sets.newTreeSet();
140                     strings.add(expectedCapability);
141                     return strings;
142                 }
143
144                 @Override
145                 public String toString() {
146                     return getConfigSnapshot();
147                 }
148             };
149         }
150     }
151 }