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 junit.framework.Assert.assertFalse;
28 import static junit.framework.Assert.assertTrue;
29 import static org.hamcrest.CoreMatchers.is;
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertThat;
33 public class FileStorageAdapterTest {
39 public void setUp() throws Exception {
40 file = Files.createTempFile("testFilePersist", ".txt").toFile();
43 com.google.common.io.Files.write("", file, Charsets.UTF_8);
48 public void testFileAdapter() throws Exception {
49 FileStorageAdapter storage = new FileStorageAdapter();
50 storage.setFileStorage(file);
51 storage.setNumberOfBackups(Integer.MAX_VALUE);
52 final Persister.ConfigSnapshotHolder holder = new Persister.ConfigSnapshotHolder() {
54 public String getConfigSnapshot() {
55 return createConfig();
59 public Set<String> getCapabilities() {
63 storage.persistConfig(holder);
65 storage.persistConfig(holder);
67 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
68 new Predicate<String>() {
71 public boolean apply(String input) {
77 assertEquals(14, readLines.size());
79 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
80 assertTrue(lastConf.isPresent());
81 assertEquals("<config>2</config>",
82 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
83 assertEquals(createCaps(), lastConf.get().getCapabilities());
86 private Set<String> createCaps() {
87 Set<String> caps = Sets.newHashSet();
91 caps.add("capaaaa as dasfasdf s2");
96 public void testFileAdapterOneBackup() throws Exception {
97 FileStorageAdapter storage = new FileStorageAdapter();
98 storage.setFileStorage(file);
99 storage.setNumberOfBackups(1);
100 final Persister.ConfigSnapshotHolder holder = new Persister.ConfigSnapshotHolder() {
102 public String getConfigSnapshot() {
103 return createConfig();
107 public Set<String> getCapabilities() {
111 storage.persistConfig(holder);
113 storage.persistConfig(holder);
115 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
116 new Predicate<String>() {
119 public boolean apply(String input) {
120 if (input.equals(""))
125 assertEquals(7, readLines.size());
127 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
128 assertTrue(lastConf.isPresent());
129 assertEquals("<config>2</config>",
130 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
134 public void testFileAdapterOnlyTwoBackups() throws Exception {
135 FileStorageAdapter storage = new FileStorageAdapter();
136 storage.setFileStorage(file);
137 storage.setNumberOfBackups(2);
138 final Persister.ConfigSnapshotHolder holder = new Persister.ConfigSnapshotHolder() {
140 public String getConfigSnapshot() {
141 return createConfig();
145 public Set<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 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
168 assertTrue(lastConf.isPresent());
169 assertEquals("<config>3</config>",
170 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
171 assertFalse(readLines.contains(holder.getConfigSnapshot()));
175 public void testNoLastConfig() throws Exception {
176 File file = Files.createTempFile("testFilePersist", ".txt").toFile();
179 FileStorageAdapter storage = new FileStorageAdapter();
180 storage.setFileStorage(file);
182 Optional<Persister.ConfigSnapshotHolder> elementOptional = storage.loadLastConfig();
183 assertThat(elementOptional.isPresent(), is(false));
186 @Test(expected = NullPointerException.class)
187 public void testNoProperties() throws Exception {
188 FileStorageAdapter storage = new FileStorageAdapter();
189 storage.loadLastConfig();
192 @Test(expected = NullPointerException.class)
193 public void testNoProperties2() throws Exception {
194 FileStorageAdapter storage = new FileStorageAdapter();
195 storage.persistConfig(new Persister.ConfigSnapshotHolder() {
197 public String getConfigSnapshot() {
198 return Mockito.mock(String.class);
202 public Set<String> getCapabilities() {
203 return Collections.<String> emptySet();
208 static String createConfig() {
209 return "<config>" + i++ + "</config>";