Merge "Reformat sdnr devicemanager-gran to ONAP code style"
[ccsdk/features.git] / sdnr / wt / common / src / test / java / org / onap / ccsdk / features / sdnr / wt / common / test / TestConfig.java
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  *
21  */
22 package org.onap.ccsdk.features.sdnr.wt.common.test;
23
24 import static org.junit.Assert.*;
25
26 import java.io.File;
27 import java.io.IOException;
28 import java.lang.reflect.Field;
29 import java.net.MalformedURLException;
30 import java.net.URL;
31 import java.nio.file.Files;
32 import java.util.Collections;
33 import java.util.Map;
34
35 import org.junit.After;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
39 import org.onap.ccsdk.features.sdnr.wt.common.configuration.exception.ConversionException;
40 import org.onap.ccsdk.features.sdnr.wt.common.configuration.filechange.IConfigChangedListener;
41 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section;
42 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo;
43 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo.Protocol;
44
45 public class TestConfig {
46
47     private static final String TESTFILENAME = "test.properties";
48     private static final String TESTKEY1 = "abc";
49     private static final String TESTKEY2 = "def";
50     private static final String TESTKEY3 = "hhh";
51     private static final String TESTKEY4 = "hhv";
52
53     private static final int TESTVALUE1 = 123;
54     private static final int TESTVALUE1_2 = 1234;
55     private static final boolean TESTVALUE2 = true;
56     private static final String TESTVALUE3 = "http://localhost:2223";
57     private static final String TESTVALUE4 = "httasdasdas";
58     private static final String TESTCONTENT1 = "        [test]\n" + TESTKEY1 + "=" + TESTVALUE1 + "\n" + "#her a comment\n"
59             + TESTKEY2 + "=" + TESTVALUE2 + "\n" + TESTKEY3 + "=" + TESTVALUE3;
60
61
62
63     @After
64     @Before
65     public void init() {
66         File f = new File(TESTFILENAME);
67         if (f.exists()) {
68             f.delete();
69         }
70     }
71
72     public void write(String filename, String lines) {
73
74         try {
75             Files.write(new File(filename).toPath(), lines.getBytes());
76         } catch (IOException e) {
77             fail("problem writing file " + filename);
78         }
79     }
80
81     @Test
82     public void testRead() {
83         this.write(TESTFILENAME, TESTCONTENT1);
84         ConfigurationFileRepresentation confiuration = new ConfigurationFileRepresentation(TESTFILENAME);
85         Section section = confiuration.getSection("test").get();
86         assertNotNull(section);
87         try {
88             assertEquals(TESTVALUE1, section.getInt(TESTKEY1, 0));
89             assertEquals(TESTVALUE2, section.getBoolean(TESTKEY2, !TESTVALUE2));
90             assertEquals(TESTVALUE3, section.getString(TESTKEY3, ""));
91         } catch (ConversionException e) {
92             fail(e.getMessage());
93         }
94         this.init();
95     }
96
97     @Test
98     public void testWrite() {
99         final String SECTIONNAME = "test";
100         //write values
101         ConfigurationFileRepresentation confiuration = new ConfigurationFileRepresentation(TESTFILENAME);
102         Section section = confiuration.addSection(SECTIONNAME);
103
104         section.setProperty(TESTKEY1, String.valueOf(TESTVALUE1));
105         section.setProperty(TESTKEY2, String.valueOf(TESTVALUE2));
106         section.setProperty(TESTKEY3, String.valueOf(TESTVALUE3));
107         confiuration.save();
108
109         //verify written
110         ConfigurationFileRepresentation confiuration2 = new ConfigurationFileRepresentation(TESTFILENAME);
111
112         section = confiuration2.getSection(SECTIONNAME).get();
113         assertNotNull(section);
114         try {
115             assertEquals(TESTVALUE1, section.getInt(TESTKEY1, 0));
116             assertEquals(TESTVALUE2, section.getBoolean(TESTKEY2, !TESTVALUE2));
117             assertEquals(TESTVALUE3, section.getString(TESTKEY3, ""));
118         } catch (ConversionException e) {
119             fail(e.getMessage());
120         }
121         this.init();
122
123         //write directly into base
124         confiuration = new ConfigurationFileRepresentation(TESTFILENAME);
125         section = confiuration.addSection(SECTIONNAME);
126         confiuration.setProperty(SECTIONNAME, TESTKEY1, TESTVALUE1);
127         confiuration.setProperty(SECTIONNAME, TESTKEY2, TESTVALUE2);
128         confiuration.setProperty(SECTIONNAME, TESTKEY3, TESTVALUE3);
129         confiuration.save();
130
131         //verify
132         confiuration2 = new ConfigurationFileRepresentation(TESTFILENAME);
133         section = confiuration2.getSection(SECTIONNAME).get();
134         assertNotNull(section);
135         assertEquals(TESTVALUE1, confiuration.getPropertyLong(SECTIONNAME, TESTKEY1).get().intValue());
136         assertEquals(TESTVALUE2, confiuration.getPropertyBoolean(SECTIONNAME, TESTKEY2));
137         assertEquals(TESTVALUE3, confiuration.getProperty(SECTIONNAME, TESTKEY3));
138         this.init();
139
140
141     }
142
143     @Test
144     public void testOverwrite() {
145         final String SECTIONNAME = "test";
146         //write values
147         ConfigurationFileRepresentation confiuration = new ConfigurationFileRepresentation(TESTFILENAME);
148         Section section = confiuration.addSection(SECTIONNAME);
149
150         section.setProperty(TESTKEY1, String.valueOf(TESTVALUE1));
151         section.setProperty(TESTKEY2, String.valueOf(TESTVALUE2));
152         section.setProperty(TESTKEY3, String.valueOf(TESTVALUE3));
153         confiuration.save();
154
155         //verify written
156         ConfigurationFileRepresentation confiuration2 = new ConfigurationFileRepresentation(TESTFILENAME);
157
158         section = confiuration2.getSection(SECTIONNAME).get();
159
160         assertNotNull(section);
161         try {
162             assertEquals(TESTVALUE1, section.getInt(TESTKEY1, 0));
163             assertEquals(TESTVALUE2, section.getBoolean(TESTKEY2, !TESTVALUE2));
164             assertEquals(TESTVALUE3, section.getString(TESTKEY3, ""));
165         } catch (ConversionException e) {
166             fail(e.getMessage());
167         }
168
169         //write directly into base
170         confiuration = new ConfigurationFileRepresentation(TESTFILENAME);
171         section = confiuration.addSection(SECTIONNAME);
172         confiuration.setPropertyIfNotAvailable(SECTIONNAME, TESTKEY1, TESTVALUE1_2);
173         confiuration.setPropertyIfNotAvailable(SECTIONNAME, TESTKEY4, TESTVALUE4);
174
175         confiuration.save();
176
177         //verify
178         confiuration2 = new ConfigurationFileRepresentation(TESTFILENAME);
179         section = confiuration2.getSection(SECTIONNAME).get();
180         assertNotNull(section);
181         assertEquals(TESTVALUE1, confiuration.getPropertyLong(SECTIONNAME, TESTKEY1).get().intValue());
182         assertEquals(TESTVALUE2, confiuration.getPropertyBoolean(SECTIONNAME, TESTKEY2));
183         assertEquals(TESTVALUE3, confiuration.getProperty(SECTIONNAME, TESTKEY3));
184         assertEquals(TESTVALUE4, confiuration.getProperty(SECTIONNAME, TESTKEY4));
185         this.init();
186
187
188     }
189
190     static boolean changeFlag = false;
191
192     @Test
193     public void testChangeListener() {
194
195         changeFlag = false;
196         this.init();
197         ConfigurationFileRepresentation confiuration = new ConfigurationFileRepresentation(TESTFILENAME);
198         IConfigChangedListener listener = new IConfigChangedListener() {
199
200             @Override
201             public void onConfigChanged() {
202                 changeFlag = true;
203             }
204         };
205         confiuration.registerConfigChangedListener(listener);
206         try {
207             Thread.sleep(2000);
208         } catch (InterruptedException e) {
209             Thread.currentThread().interrupt();
210         }
211         this.write(TESTFILENAME, TESTCONTENT1);
212         int i = 10;
213         while (i-- > 0) {
214             try {
215                 Thread.sleep(1000);
216             } catch (InterruptedException e) {
217                 Thread.currentThread().interrupt();
218             }
219             if (changeFlag) {
220                 break;
221             }
222         }
223         confiuration.unregisterConfigChangedListener(listener);
224         assertTrue("changelistener not called", changeFlag);
225     }
226
227     @Test
228     public void testHostInfo() {
229         HostInfo hi = HostInfo.getDefault();
230         try {
231             new URL(hi.toUrl());
232         } catch (MalformedURLException e) {
233             fail("url conversion failed: " + e.getMessage());
234         }
235         hi = new HostInfo("localhost", 44444, Protocol.getValueOf("https"));
236         try {
237             new URL(hi.toUrl());
238         } catch (MalformedURLException e) {
239             fail("url conversion failed: " + e.getMessage());
240         }
241
242     }
243
244     @Test
245     public void testEnvPropert() {
246         final String KEY = "basada";
247         Section section = new Section("test");
248         section.addLine(KEY + "=${USER} in ${HOME}");
249         section.parseLines();
250         assertTrue(section.getProperty(KEY).length() > " in ".length());
251     }
252
253     public static void setEnv(String key, String value) {
254         try {
255             Map<String, String> env = System.getenv();
256             Class<?> cl = env.getClass();
257             Field field = cl.getDeclaredField("m");
258             field.setAccessible(true);
259             Map<String, String> writableEnv = (Map<String, String>) field.get(env);
260             writableEnv.put(key, value);
261         } catch (Exception e) {
262             throw new IllegalStateException("Failed to set environment variable", e);
263         }
264     }
265 }