f387e08a0813c5d56c3f6bba13f0bd63f8aab486
[controller.git] / opendaylight / netconf / config-persister-impl / src / test / java / org / opendaylight / controller / netconf / persist / impl / PersisterAggregatorTest.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
9 package org.opendaylight.controller.netconf.persist.impl;
10
11 import com.google.common.base.Optional;
12 import org.junit.Before;
13 import org.junit.Ignore;
14 import org.junit.Test;
15 import org.mockito.Mock;
16 import org.mockito.MockitoAnnotations;
17 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
18 import org.opendaylight.controller.config.persist.api.Persister;
19 import org.opendaylight.controller.config.persist.api.PropertiesProvider;
20 import org.opendaylight.controller.config.persist.api.StorageAdapter;
21 import org.opendaylight.controller.config.persist.storage.file.FileStorageAdapter;
22 import org.opendaylight.controller.netconf.persist.impl.osgi.ConfigPersisterActivator;
23 import org.opendaylight.controller.netconf.persist.impl.osgi.PropertiesProviderBaseImpl;
24
25 import java.io.File;
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertThat;
32 import static org.junit.Assert.assertTrue;
33 import static org.junit.Assert.fail;
34 import static org.junit.matchers.JUnitMatchers.containsString;
35 import static org.mockito.Matchers.anyString;
36 import static org.mockito.Mockito.doCallRealMethod;
37 import static org.mockito.Mockito.doReturn;
38 import static org.mockito.Mockito.mock;
39
40 public class PersisterAggregatorTest {
41     @Mock
42     TestingPropertiesProvider propertiesProvider;
43
44     class TestingPropertiesProvider extends PropertiesProviderBaseImpl {
45
46         TestingPropertiesProvider() {
47             super(null);
48         }
49
50         @Override
51         public String getFullKeyForReporting(String key) {
52             return "prefix." + key;
53         }
54
55         @Override
56         public String getProperty(String key) {
57             throw new UnsupportedOperationException("should be mocked");
58         }
59     }
60
61     @Before
62     public void setUpMocks() {
63         MockitoAnnotations.initMocks(this);
64         doCallRealMethod().when(propertiesProvider).getFullKeyForReporting(anyString());
65     }
66
67     @Ignore
68     @Test
69     public void testFromProperties() throws Exception {
70         doReturn("").when(propertiesProvider).getProperty(ConfigPersisterActivator.NETCONF_CONFIG_PERSISTER);
71         doReturn(MockAdapter.class.getName()).when(propertiesProvider).getProperty(
72                 ConfigPersisterActivator.STORAGE_ADAPTER_CLASS_PROP_SUFFIX);
73         doReturn("false").when(propertiesProvider).getProperty("readOnly");
74
75         PersisterAggregator persisterAggregator = PersisterAggregator.createFromProperties(propertiesProvider);
76         persisterAggregator.persistConfig(null);
77         persisterAggregator.loadLastConfig();
78         persisterAggregator.persistConfig(null);
79         persisterAggregator.loadLastConfig();
80
81         assertEquals(2, MockAdapter.persist);
82         assertEquals(2, MockAdapter.load);
83         assertEquals(1, MockAdapter.props);
84     }
85
86
87     @Ignore
88     @Test
89     public void testFromProperties2() throws Exception {
90         String prefix = "";
91         doReturn(prefix).when(propertiesProvider).getProperty(ConfigPersisterActivator.NETCONF_CONFIG_PERSISTER);
92         doReturn(FileStorageAdapter.class.getName()).when(propertiesProvider).getProperty(
93                 ConfigPersisterActivator.STORAGE_ADAPTER_CLASS_PROP_SUFFIX);
94
95         doReturn("target" + File.separator + "generated-test-sources" + File.separator + "testFile").when(
96                 propertiesProvider).getProperty("prefix.properties.fileStorage");
97         doReturn("propertiesProvider").when(propertiesProvider).toString();
98         doReturn(null).when(propertiesProvider).getProperty("prefix.properties.numberOfBackups");
99
100         PersisterAggregator persisterAggregator = PersisterAggregator.createFromProperties(propertiesProvider);
101     }
102
103     @Ignore
104     @Test
105     public void testFromProperties3() throws Exception {
106         doReturn("").when(propertiesProvider).getProperty(ConfigPersisterActivator.NETCONF_CONFIG_PERSISTER);
107         doReturn(FileStorageAdapter.class.getName()).when(propertiesProvider).getProperty(
108                 ConfigPersisterActivator.STORAGE_ADAPTER_CLASS_PROP_SUFFIX);
109         doReturn("target" + File.separator + "generated-test-sources" + File.separator + "testFile").when(
110                 propertiesProvider).getProperty("prefix.properties.fileStorage");
111         doReturn("false").when(propertiesProvider).getProperty("readOnly");
112         doReturn("propertiesProvider").when(propertiesProvider).toString();
113         doReturn("0").when(propertiesProvider).getProperty("prefix.properties.numberOfBackups");
114         try {
115             PersisterAggregator.createFromProperties(propertiesProvider);
116             fail();
117         } catch (RuntimeException e) {
118             assertThat(
119                     e.getMessage(),
120                     containsString("numberOfBackups property should be either set to positive value, or ommited. Can not be set to 0."));
121         }
122     }
123
124     @Test
125     public void loadLastConfig() throws Exception {
126         List<PersisterAggregator.PersisterWithConfiguration> persisterWithConfigurations = new ArrayList<>();
127         PersisterAggregator.PersisterWithConfiguration first = new PersisterAggregator.PersisterWithConfiguration(mock(Persister.class), false);
128
129         ConfigSnapshotHolder ignored = mock(ConfigSnapshotHolder.class);
130         doReturn(Optional.of(ignored)).when(first.storage).loadLastConfig(); // should be ignored
131
132         ConfigSnapshotHolder used = mock(ConfigSnapshotHolder.class);
133         PersisterAggregator.PersisterWithConfiguration second = new PersisterAggregator.PersisterWithConfiguration(mock(Persister.class), false);
134         doReturn(Optional.of(used)).when(second.storage).loadLastConfig(); // should be used
135
136         PersisterAggregator.PersisterWithConfiguration third = new PersisterAggregator.PersisterWithConfiguration(mock(Persister.class), false);
137         doReturn(Optional.absent()).when(third.storage).loadLastConfig();
138
139         persisterWithConfigurations.add(first);
140         persisterWithConfigurations.add(second);
141         persisterWithConfigurations.add(third);
142
143         PersisterAggregator persisterAggregator = new PersisterAggregator(persisterWithConfigurations);
144         Optional<ConfigSnapshotHolder> configSnapshotHolderOptional = persisterAggregator.loadLastConfig();
145         assertTrue(configSnapshotHolderOptional.isPresent());
146         assertEquals(used, configSnapshotHolderOptional.get());
147     }
148
149     @Ignore
150     @Test
151     public void test() throws Exception {
152 //        Persister storage = mock(Persister.class);
153 //        doReturn(null).when(storage).loadLastConfig();
154 //        doNothing().when(storage).persistConfig(any(ConfigSnapshotHolder.class));
155 //
156 //        PersisterAggregator persister = new PersisterAggregator(storage);
157 //        persister.loadLastConfig();
158 //        persister.persistConfig(null);
159 //
160 //        verify(storage).loadLastConfig();
161 //        verify(storage).persistConfig(any(ConfigSnapshotHolder.class));
162     }
163
164     public static class MockAdapter implements StorageAdapter, Persister {
165
166         static int persist = 0;
167
168         @Override
169         public void persistConfig(ConfigSnapshotHolder holder) throws IOException {
170             persist++;
171         }
172
173         static int load = 0;
174
175         @Override
176         public Optional<ConfigSnapshotHolder> loadLastConfig() throws IOException {
177             load++;
178             return Optional.absent();
179         }
180
181         static int props = 0;
182
183         @Override
184         public Persister instantiate(PropertiesProvider propertiesProvider) {
185             props++;
186             return this;
187         }
188
189         @Override
190         public void close() {
191         }
192
193     }
194
195 }