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.xml;
11 import static junit.framework.Assert.assertFalse;
12 import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
13 import static org.hamcrest.CoreMatchers.is;
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.assertThat;
18 import java.io.FileNotFoundException;
19 import java.io.IOException;
20 import java.nio.file.Files;
21 import java.util.List;
22 import java.util.SortedSet;
23 import java.util.TreeSet;
25 import junit.framework.Assert;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.mockito.Mockito;
30 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
31 import org.opendaylight.controller.config.persist.test.PropertiesProviderTest;
33 import com.google.common.base.Charsets;
35 public class FileStorageAdapterTest {
39 private static final String NON_EXISTENT_DIRECTORY = "./nonExistentDir/";
40 private static final String NON_EXISTENT_FILE = "nonExistent.txt";
43 public void setUp() throws Exception {
44 file = Files.createTempFile("testFilePersist", ".txt").toFile();
47 com.google.common.io.Files.write("", file, Charsets.UTF_8);
52 public void testNewFile() throws Exception {
53 XmlFileStorageAdapter storage = new XmlFileStorageAdapter();
54 PropertiesProviderTest pp = new PropertiesProviderTest();
55 pp.addProperty("fileStorage",NON_EXISTENT_DIRECTORY+NON_EXISTENT_FILE);
56 pp.addProperty("numberOfBackups",Integer.toString(Integer.MAX_VALUE));
57 storage.instantiate(pp);
59 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
61 public String getConfigSnapshot() {
62 return createConfig();
66 public SortedSet<String> getCapabilities() {
70 storage.persistConfig(holder);
72 storage.persistConfig(holder);
74 Assert.assertEquals(storage.toString().replace("\\","/"),"XmlFileStorageAdapter [storage="+NON_EXISTENT_DIRECTORY+NON_EXISTENT_FILE+"]");
75 delete(new File(NON_EXISTENT_DIRECTORY));
78 public void testFileAdapter() throws Exception {
79 XmlFileStorageAdapter storage = new XmlFileStorageAdapter();
80 PropertiesProviderTest pp = new PropertiesProviderTest();
81 pp.addProperty("fileStorage",file.getPath());
82 pp.addProperty("numberOfBackups",Integer.toString(Integer.MAX_VALUE));
83 storage.instantiate(pp);
85 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
87 public String getConfigSnapshot() {
88 return createConfig();
92 public SortedSet<String> getCapabilities() {
96 storage.persistConfig(holder);
98 storage.persistConfig(holder);
100 assertEquals(27, com.google.common.io.Files.readLines(file, Charsets.UTF_8).size());
101 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
102 assertEquals(1, lastConf.size());
103 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
104 assertXMLEqual("<config>2</config>", configSnapshotHolder.getConfigSnapshot());
105 assertEquals(createCaps(), configSnapshotHolder.getCapabilities());
107 storage = new XmlFileStorageAdapter();
108 storage.setFileStorage(file);
109 storage.setNumberOfBackups(Integer.MAX_VALUE);
111 List<ConfigSnapshotHolder> last = storage.loadLastConfigs();
112 Assert.assertEquals(createCaps(), last.get(0).getCapabilities());
115 private SortedSet<String> createCaps() {
116 SortedSet<String> caps = new TreeSet<>();
118 caps.add("cap1" + i);
119 caps.add("cap2" + i);
120 caps.add("urn:opendaylight:params:xml:ns:yang:controller:netty?module=netty&revision=2013-11-19" + i);
121 caps.add("capaaaa as dasfasdf s2" + i);
126 public void testFileAdapterOneBackup() throws Exception {
127 XmlFileStorageAdapter storage = new XmlFileStorageAdapter();
129 PropertiesProviderTest pp = new PropertiesProviderTest();
130 pp.addProperty("fileStorage",file.getPath());
131 pp.addProperty("numberOfBackups",Integer.toString(Integer.MAX_VALUE));
132 storage.instantiate(pp);
134 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
136 public String getConfigSnapshot() {
137 return createConfig();
141 public SortedSet<String> getCapabilities() {
145 storage.persistConfig(holder);
147 storage.persistConfig(holder);
149 assertEquals(27, com.google.common.io.Files.readLines(file, Charsets.UTF_8).size());
151 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
152 assertEquals(1, lastConf.size());
153 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
154 assertXMLEqual("<config>2</config>", configSnapshotHolder.getConfigSnapshot());
158 public void testFileAdapterOnlyTwoBackups() throws Exception {
159 XmlFileStorageAdapter storage = new XmlFileStorageAdapter();
160 storage.setFileStorage(file);
161 storage.setNumberOfBackups(2);
162 final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
164 public String getConfigSnapshot() {
165 return createConfig();
169 public SortedSet<String> getCapabilities() {
173 storage.persistConfig(holder);
175 storage.persistConfig(holder);
176 storage.persistConfig(holder);
178 List<String> readLines = com.google.common.io.Files.readLines(file, Charsets.UTF_8);
179 assertEquals(27, readLines.size());
181 List<ConfigSnapshotHolder> lastConf = storage.loadLastConfigs();
182 assertEquals(1, lastConf.size());
183 ConfigSnapshotHolder configSnapshotHolder = lastConf.get(0);
184 assertXMLEqual("<config>3</config>", configSnapshotHolder.getConfigSnapshot());
185 assertFalse(readLines.contains(holder.getConfigSnapshot()));
189 public void testNoLastConfig() throws Exception {
190 File file = Files.createTempFile("testFilePersist", ".txt").toFile();
193 XmlFileStorageAdapter storage = new XmlFileStorageAdapter();
194 storage.setFileStorage(file);
196 List<ConfigSnapshotHolder> elementOptional = storage.loadLastConfigs();
197 assertThat(elementOptional.size(), is(0));
200 @Test(expected = NullPointerException.class)
201 public void testNoProperties() throws Exception {
202 XmlFileStorageAdapter storage = new XmlFileStorageAdapter();
203 storage.loadLastConfigs();
206 @Test(expected = NullPointerException.class)
207 public void testNoProperties2() throws Exception {
208 XmlFileStorageAdapter storage = new XmlFileStorageAdapter();
209 storage.persistConfig(new ConfigSnapshotHolder() {
211 public String getConfigSnapshot() {
212 return Mockito.mock(String.class);
216 public SortedSet<String> getCapabilities() {
217 return new TreeSet<>();
222 static String createConfig() {
223 return "<config>" + i++ + "</config>";
226 private void delete(File f) throws IOException {
227 if (f.isDirectory()) {
228 for (File c : f.listFiles())
232 throw new FileNotFoundException("Failed to delete file: " + f);