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.Optional;
13 import com.google.common.base.Predicate;
14 import com.google.common.collect.Collections2;
15 import com.google.common.collect.Sets;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.mockito.Mockito;
19 import org.opendaylight.controller.config.persist.api.Persister;
22 import java.nio.file.Files;
23 import java.util.Collection;
24 import java.util.Collections;
27 import static org.hamcrest.CoreMatchers.is;
28 import static org.junit.Assert.*;
30 public class FileStorageAdapterTest {
36 public void setUp() throws Exception {
37 file = Files.createTempFile("testFilePersist", ".txt").toFile();
40 com.google.common.io.Files.write("", file, Charsets.UTF_8);
45 public void testFileAdapter() throws Exception {
46 FileStorageAdapter storage = new FileStorageAdapter();
47 storage.setFileStorage(file);
48 storage.setNumberOfBackups(Integer.MAX_VALUE);
49 final Persister.ConfigSnapshotHolder holder = new Persister.ConfigSnapshotHolder() {
51 public String getConfigSnapshot() {
52 return createConfig();
56 public Set<String> getCapabilities() {
60 storage.persistConfig(holder);
62 storage.persistConfig(holder);
64 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
65 new Predicate<String>() {
68 public boolean apply(String input) {
74 assertEquals(14, readLines.size());
76 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
77 assertTrue(lastConf.isPresent());
78 assertEquals("<config>2</config>",
79 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
80 assertEquals(createCaps(), lastConf.get().getCapabilities());
83 private Set<String> createCaps() {
84 Set<String> caps = Sets.newHashSet();
88 caps.add("capaaaa as dasfasdf s2");
93 public void testFileAdapterOneBackup() throws Exception {
94 FileStorageAdapter storage = new FileStorageAdapter();
95 storage.setFileStorage(file);
96 storage.setNumberOfBackups(1);
97 final Persister.ConfigSnapshotHolder holder = new Persister.ConfigSnapshotHolder() {
99 public String getConfigSnapshot() {
100 return createConfig();
104 public Set<String> getCapabilities() {
108 storage.persistConfig(holder);
110 storage.persistConfig(holder);
112 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
113 new Predicate<String>() {
116 public boolean apply(String input) {
117 if (input.equals(""))
122 assertEquals(7, readLines.size());
124 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
125 assertTrue(lastConf.isPresent());
126 assertEquals("<config>2</config>",
127 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
131 public void testFileAdapterOnlyTwoBackups() throws Exception {
132 FileStorageAdapter storage = new FileStorageAdapter();
133 storage.setFileStorage(file);
134 storage.setNumberOfBackups(2);
135 final Persister.ConfigSnapshotHolder holder = new Persister.ConfigSnapshotHolder() {
137 public String getConfigSnapshot() {
138 return createConfig();
142 public Set<String> getCapabilities() {
146 storage.persistConfig(holder);
148 storage.persistConfig(holder);
149 storage.persistConfig(holder);
151 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
152 new Predicate<String>() {
155 public boolean apply(String input) {
156 if (input.equals(""))
162 assertEquals(14, readLines.size());
164 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
165 assertTrue(lastConf.isPresent());
166 assertEquals("<config>3</config>",
167 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
168 assertFalse(readLines.contains(holder.getConfigSnapshot()));
172 public void testNoLastConfig() throws Exception {
173 File file = Files.createTempFile("testFilePersist", ".txt").toFile();
176 FileStorageAdapter storage = new FileStorageAdapter();
177 storage.setFileStorage(file);
179 Optional<Persister.ConfigSnapshotHolder> elementOptional = storage.loadLastConfig();
180 assertThat(elementOptional.isPresent(), is(false));
183 @Test(expected = NullPointerException.class)
184 public void testNoProperties() throws Exception {
185 FileStorageAdapter storage = new FileStorageAdapter();
186 storage.loadLastConfig();
189 @Test(expected = NullPointerException.class)
190 public void testNoProperties2() throws Exception {
191 FileStorageAdapter storage = new FileStorageAdapter();
192 storage.persistConfig(new Persister.ConfigSnapshotHolder() {
194 public String getConfigSnapshot() {
195 return Mockito.mock(String.class);
199 public Set<String> getCapabilities() {
200 return Collections.<String> emptySet();
205 static String createConfig() {
206 return "<config>" + i++ + "</config>";