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 org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.Mockito;
18 import org.opendaylight.controller.config.persist.api.Persister;
21 import java.nio.file.Files;
22 import java.util.Collection;
23 import java.util.SortedSet;
24 import java.util.TreeSet;
26 import static junit.framework.Assert.assertFalse;
27 import static junit.framework.Assert.assertTrue;
28 import static org.hamcrest.CoreMatchers.is;
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertThat;
32 public class FileStorageAdapterTest {
38 public void setUp() throws Exception {
39 file = Files.createTempFile("testFilePersist", ".txt").toFile();
42 com.google.common.io.Files.write("", file, Charsets.UTF_8);
47 public void testFileAdapter() throws Exception {
48 FileStorageAdapter storage = new FileStorageAdapter();
49 storage.setFileStorage(file);
50 storage.setNumberOfBackups(Integer.MAX_VALUE);
51 final Persister.ConfigSnapshotHolder holder = new Persister.ConfigSnapshotHolder() {
53 public String getConfigSnapshot() {
54 return createConfig();
58 public SortedSet<String> getCapabilities() {
62 storage.persistConfig(holder);
64 storage.persistConfig(holder);
66 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
67 new Predicate<String>() {
70 public boolean apply(String input) {
76 assertEquals(14, readLines.size());
78 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
79 assertTrue(lastConf.isPresent());
80 assertEquals("<config>2</config>",
81 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
82 assertEquals(createCaps(), lastConf.get().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 Persister.ConfigSnapshotHolder holder = new Persister.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 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
127 assertTrue(lastConf.isPresent());
128 assertEquals("<config>2</config>",
129 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
133 public void testFileAdapterOnlyTwoBackups() throws Exception {
134 FileStorageAdapter storage = new FileStorageAdapter();
135 storage.setFileStorage(file);
136 storage.setNumberOfBackups(2);
137 final Persister.ConfigSnapshotHolder holder = new Persister.ConfigSnapshotHolder() {
139 public String getConfigSnapshot() {
140 return createConfig();
144 public SortedSet<String> getCapabilities() {
148 storage.persistConfig(holder);
150 storage.persistConfig(holder);
151 storage.persistConfig(holder);
153 Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
154 new Predicate<String>() {
157 public boolean apply(String input) {
158 if (input.equals(""))
164 assertEquals(14, readLines.size());
166 Optional<Persister.ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
167 assertTrue(lastConf.isPresent());
168 assertEquals("<config>3</config>",
169 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
170 assertFalse(readLines.contains(holder.getConfigSnapshot()));
174 public void testNoLastConfig() throws Exception {
175 File file = Files.createTempFile("testFilePersist", ".txt").toFile();
178 FileStorageAdapter storage = new FileStorageAdapter();
179 storage.setFileStorage(file);
181 Optional<Persister.ConfigSnapshotHolder> elementOptional = storage.loadLastConfig();
182 assertThat(elementOptional.isPresent(), is(false));
185 @Test(expected = NullPointerException.class)
186 public void testNoProperties() throws Exception {
187 FileStorageAdapter storage = new FileStorageAdapter();
188 storage.loadLastConfig();
191 @Test(expected = NullPointerException.class)
192 public void testNoProperties2() throws Exception {
193 FileStorageAdapter storage = new FileStorageAdapter();
194 storage.persistConfig(new Persister.ConfigSnapshotHolder() {
196 public String getConfigSnapshot() {
197 return Mockito.mock(String.class);
201 public SortedSet<String> getCapabilities() {
202 return new TreeSet<>();
207 static String createConfig() {
208 return "<config>" + i++ + "</config>";