2 * Copyright (c) 2013 Cisco Systems, Inc. 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
9 package org.opendaylight.controller.config.persist.storage.file;
11 import com.google.common.base.Charsets;
12 import com.google.common.base.Predicate;
13 import com.google.common.collect.Collections2;
15 import java.nio.file.Files;
16 import java.util.Collection;
17 import java.util.List;
18 import java.util.SortedSet;
19 import java.util.TreeSet;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.mockito.Mockito;
23 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
24 import org.opendaylight.controller.config.persist.api.Persister;
25 import org.opendaylight.controller.config.persist.test.PropertiesProviderTest;
26 import static junit.framework.Assert.assertFalse;
27 import static org.hamcrest.CoreMatchers.is;
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertThat;
31 public class FileStorageAdapterTest {
37 public void setUp() throws Exception {
38 file = Files.createTempFile("testFilePersist", ".txt").toFile();
41 com.google.common.io.Files.write("", file, Charsets.UTF_8);
47 public void testFileAdapterAsPersister() throws Exception {
48 FileStorageAdapter storage = new FileStorageAdapter();
49 PropertiesProviderTest pp = new PropertiesProviderTest();
50 pp.addProperty("fileStorage",file.getPath());
51 pp.addProperty("numberOfBackups",Integer.toString(Integer.MAX_VALUE));
53 Persister configPersister = storage.instantiate(pp);
54 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
56 public String getConfigSnapshot() {
57 return createConfig();
61 public SortedSet<String> getCapabilities() {
65 configPersister.persistConfig(holder);
67 configPersister.persistConfig(holder);
69 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
70 new Predicate<String>() {
73 public boolean apply(String input) {
79 assertEquals(14, readLines.size());
81 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
82 assertEquals(1, lastConf.size());
83 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
84 assertEquals("<config>2</config>",
85 configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
86 assertEquals(createCaps(), configSnapshotHolder.getCapabilities());
89 public void testFileAdapter() throws Exception {
90 FileStorageAdapter storage = new FileStorageAdapter();
91 storage.setFileStorage(file);
92 storage.setNumberOfBackups(Integer.MAX_VALUE);
93 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
95 public String getConfigSnapshot() {
96 return createConfig();
100 public SortedSet<String> getCapabilities() {
104 storage.persistConfig(holder);
106 storage.persistConfig(holder);
108 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
109 new Predicate<String>() {
112 public boolean apply(String input) {
113 if (input.equals(""))
118 assertEquals(14, readLines.size());
120 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
121 assertEquals(1, lastConf.size());
122 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
123 assertEquals("<config>2</config>",
124 configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
125 assertEquals(createCaps(), configSnapshotHolder.getCapabilities());
128 private SortedSet<String> createCaps() {
129 SortedSet<String> caps = new TreeSet<>();
133 caps.add("capaaaa as dasfasdf s2");
138 public void testFileAdapterOneBackup() throws Exception {
139 FileStorageAdapter storage = new FileStorageAdapter();
140 storage.setFileStorage(file);
141 storage.setNumberOfBackups(1);
142 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
144 public String getConfigSnapshot() {
145 return createConfig();
149 public SortedSet<String> getCapabilities() {
153 storage.persistConfig(holder);
155 storage.persistConfig(holder);
157 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
158 new Predicate<String>() {
161 public boolean apply(String input) {
162 if (input.equals(""))
167 assertEquals(7, readLines.size());
169 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
170 assertEquals(1, lastConf.size());
171 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
172 assertEquals("<config>2</config>",
173 configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
177 public void testFileAdapterOnlyTwoBackups() throws Exception {
178 FileStorageAdapter storage = new FileStorageAdapter();
179 storage.setFileStorage(file);
180 storage.setNumberOfBackups(2);
181 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
183 public String getConfigSnapshot() {
184 return createConfig();
188 public SortedSet<String> getCapabilities() {
192 storage.persistConfig(holder);
194 storage.persistConfig(holder);
195 storage.persistConfig(holder);
197 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
198 new Predicate<String>() {
201 public boolean apply(String input) {
202 if (input.equals(""))
208 assertEquals(14, readLines.size());
210 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
211 assertEquals(1, lastConf.size());
212 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
213 assertEquals("<config>3</config>",
214 configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
215 assertFalse(readLines.contains(holder.getConfigSnapshot()));
219 public void testNoLastConfig() throws Exception {
220 File file = Files.createTempFile("testFilePersist", ".txt").toFile();
223 FileStorageAdapter storage = new FileStorageAdapter();
224 storage.setFileStorage(file);
226 List<ConfigSnapshotHolder> elementOptional = storage.loadLastConfigs();
227 assertThat(elementOptional.size(), is(0));
230 @Test(expected = NullPointerException.class)
231 public void testNoProperties() throws Exception {
232 FileStorageAdapter storage = new FileStorageAdapter();
233 storage.loadLastConfigs();
236 @Test(expected = NullPointerException.class)
237 public void testNoProperties2() throws Exception {
238 FileStorageAdapter storage = new FileStorageAdapter();
239 storage.persistConfig(new ConfigSnapshotHolder() {
241 public String getConfigSnapshot() {
242 return Mockito.mock(String.class);
246 public SortedSet<String> getCapabilities() {
247 return new TreeSet<>();
252 static String createConfig() {
253 return "<config>" + i++ + "</config>";