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;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.mockito.Mockito;
17 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
20 import java.nio.file.Files;
21 import java.util.Collection;
22 import java.util.List;
23 import java.util.SortedSet;
24 import java.util.TreeSet;
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);
46 public void testFileAdapter() throws Exception {
47 FileStorageAdapter storage = new FileStorageAdapter();
48 storage.setFileStorage(file);
49 storage.setNumberOfBackups(Integer.MAX_VALUE);
50 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
52 public String getConfigSnapshot() {
53 return createConfig();
57 public SortedSet<String> getCapabilities() {
61 storage.persistConfig(holder);
63 storage.persistConfig(holder);
65 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
66 new Predicate<String>() {
69 public boolean apply(String input) {
75 assertEquals(14, readLines.size());
77 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
78 assertEquals(1, lastConf.size());
79 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
80 assertEquals("<config>2</config>",
81 configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
82 assertEquals(createCaps(), configSnapshotHolder.getCapabilities());
85 private SortedSet<String> createCaps() {
86 SortedSet<String> caps = new TreeSet<>();
90 caps.add("capaaaa as dasfasdf s2");
95 public void testFileAdapterOneBackup() throws Exception {
96 FileStorageAdapter storage = new FileStorageAdapter();
97 storage.setFileStorage(file);
98 storage.setNumberOfBackups(1);
99 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
101 public String getConfigSnapshot() {
102 return createConfig();
106 public SortedSet<String> getCapabilities() {
110 storage.persistConfig(holder);
112 storage.persistConfig(holder);
114 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
115 new Predicate<String>() {
118 public boolean apply(String input) {
119 if (input.equals(""))
124 assertEquals(7, readLines.size());
126 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
127 assertEquals(1, lastConf.size());
128 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
129 assertEquals("<config>2</config>",
130 configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
134 public void testFileAdapterOnlyTwoBackups() throws Exception {
135 FileStorageAdapter storage = new FileStorageAdapter();
136 storage.setFileStorage(file);
137 storage.setNumberOfBackups(2);
138 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
140 public String getConfigSnapshot() {
141 return createConfig();
145 public SortedSet<String> getCapabilities() {
149 storage.persistConfig(holder);
151 storage.persistConfig(holder);
152 storage.persistConfig(holder);
154 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
155 new Predicate<String>() {
158 public boolean apply(String input) {
159 if (input.equals(""))
165 assertEquals(14, readLines.size());
167 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
168 assertEquals(1, lastConf.size());
169 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
170 assertEquals("<config>3</config>",
171 configSnapshotHolder.getConfigSnapshot().replaceAll("\\s", ""));
172 assertFalse(readLines.contains(holder.getConfigSnapshot()));
176 public void testNoLastConfig() throws Exception {
177 File file = Files.createTempFile("testFilePersist", ".txt").toFile();
180 FileStorageAdapter storage = new FileStorageAdapter();
181 storage.setFileStorage(file);
183 List<ConfigSnapshotHolder> elementOptional = storage.loadLastConfigs();
184 assertThat(elementOptional.size(), is(0));
187 @Test(expected = NullPointerException.class)
188 public void testNoProperties() throws Exception {
189 FileStorageAdapter storage = new FileStorageAdapter();
190 storage.loadLastConfigs();
193 @Test(expected = NullPointerException.class)
194 public void testNoProperties2() throws Exception {
195 FileStorageAdapter storage = new FileStorageAdapter();
196 storage.persistConfig(new ConfigSnapshotHolder() {
198 public String getConfigSnapshot() {
199 return Mockito.mock(String.class);
203 public SortedSet<String> getCapabilities() {
204 return new TreeSet<>();
209 static String createConfig() {
210 return "<config>" + i++ + "</config>";