Merge changes Ia268965a,Iefa79f99
[controller.git] / opendaylight / config / config-persister-file-adapter / src / test / java / org / opendaylight / controller / config / persist / storage / file / FileStorageAdapterTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.controller.config.persist.storage.file;
10
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.ConfigSnapshotHolder;
19
20 import java.io.File;
21 import java.nio.file.Files;
22 import java.util.Collection;
23 import java.util.SortedSet;
24 import java.util.TreeSet;
25
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;
31
32 public class FileStorageAdapterTest {
33
34     private static int i;
35     private File file;
36
37     @Before
38     public void setUp() throws Exception {
39         file = Files.createTempFile("testFilePersist", ".txt").toFile();
40         if (!file.exists())
41             return;
42         com.google.common.io.Files.write("", file, Charsets.UTF_8);
43         i = 1;
44     }
45
46     @Test
47     public void testFileAdapter() throws Exception {
48         FileStorageAdapter storage = new FileStorageAdapter();
49         storage.setFileStorage(file);
50         storage.setNumberOfBackups(Integer.MAX_VALUE);
51         final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
52             @Override
53             public String getConfigSnapshot() {
54                 return createConfig();
55             }
56
57             @Override
58             public SortedSet<String> getCapabilities() {
59                 return createCaps();
60             }
61         };
62         storage.persistConfig(holder);
63
64         storage.persistConfig(holder);
65
66         Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
67                 new Predicate<String>() {
68
69                     @Override
70                     public boolean apply(String input) {
71                         if (input.equals(""))
72                             return false;
73                         return true;
74                     }
75                 });
76         assertEquals(14, readLines.size());
77
78         Optional<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());
83     }
84
85     private SortedSet<String> createCaps() {
86         SortedSet<String> caps = new TreeSet<>();
87
88         caps.add("cap1");
89         caps.add("cap2");
90         caps.add("capaaaa as dasfasdf s2");
91         return caps;
92     }
93
94     @Test
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() {
100             @Override
101             public String getConfigSnapshot() {
102                 return createConfig();
103             }
104
105             @Override
106             public SortedSet<String> getCapabilities() {
107                 return createCaps();
108             }
109         };
110         storage.persistConfig(holder);
111
112         storage.persistConfig(holder);
113
114         Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
115                 new Predicate<String>() {
116
117                     @Override
118                     public boolean apply(String input) {
119                         if (input.equals(""))
120                             return false;
121                         return true;
122                     }
123                 });
124         assertEquals(7, readLines.size());
125
126         Optional<ConfigSnapshotHolder> lastConf = storage.loadLastConfig();
127         assertTrue(lastConf.isPresent());
128         assertEquals("<config>2</config>",
129                 lastConf.get().getConfigSnapshot().replaceAll("\\s", ""));
130     }
131
132     @Test
133     public void testFileAdapterOnlyTwoBackups() throws Exception {
134         FileStorageAdapter storage = new FileStorageAdapter();
135         storage.setFileStorage(file);
136         storage.setNumberOfBackups(2);
137         final ConfigSnapshotHolder holder = new ConfigSnapshotHolder() {
138             @Override
139             public String getConfigSnapshot() {
140                 return createConfig();
141             }
142
143             @Override
144             public SortedSet<String> getCapabilities() {
145                 return createCaps();
146             }
147         };
148         storage.persistConfig(holder);
149
150         storage.persistConfig(holder);
151         storage.persistConfig(holder);
152
153         Collection<String> readLines = Collections2.filter(com.google.common.io.Files.readLines(file, Charsets.UTF_8),
154                 new Predicate<String>() {
155
156                     @Override
157                     public boolean apply(String input) {
158                         if (input.equals(""))
159                             return false;
160                         return true;
161                     }
162                 });
163
164         assertEquals(14, readLines.size());
165
166         Optional<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()));
171     }
172
173     @Test
174     public void testNoLastConfig() throws Exception {
175         File file = Files.createTempFile("testFilePersist", ".txt").toFile();
176         if (!file.exists())
177             return;
178         FileStorageAdapter storage = new FileStorageAdapter();
179         storage.setFileStorage(file);
180
181         Optional<ConfigSnapshotHolder> elementOptional = storage.loadLastConfig();
182         assertThat(elementOptional.isPresent(), is(false));
183     }
184
185     @Test(expected = NullPointerException.class)
186     public void testNoProperties() throws Exception {
187         FileStorageAdapter storage = new FileStorageAdapter();
188         storage.loadLastConfig();
189     }
190
191     @Test(expected = NullPointerException.class)
192     public void testNoProperties2() throws Exception {
193         FileStorageAdapter storage = new FileStorageAdapter();
194         storage.persistConfig(new ConfigSnapshotHolder() {
195             @Override
196             public String getConfigSnapshot() {
197                 return Mockito.mock(String.class);
198             }
199
200             @Override
201             public SortedSet<String> getCapabilities() {
202                 return new TreeSet<>();
203             }
204         } );
205     }
206
207     static String createConfig() {
208         return "<config>" + i++ + "</config>";
209     }
210
211 }