1 /* Copyright (C) 2012 Red Hat
2
3 This file is part of IcedTea.
4
5 IcedTea is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
8 any later version.
9
10 IcedTea is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with IcedTea; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 02110-1301 USA.
19
20 Linking this library statically or dynamically with other modules is
21 making a combined work based on this library. Thus, the terms and
22 conditions of the GNU General Public License cover the whole
23 combination.
24
25 As a special exception, the copyright holders of this library give you
26 permission to link this library with independent modules to produce an
27 executable, regardless of the license terms of these independent
28 modules, and to copy and distribute the resulting executable under
29 terms of your choice, provided that you also meet, for each linked
30 independent module, the terms and conditions of the license of that
31 module. An independent module is a module which is not derived from
32 or based on this library. If you modify this library, you may extend
33 this exception to your version of the library, but you are not
34 obligated to do so. If you do not wish to do so, delete this
35 exception statement from your version. */
36
37 #include <UnitTest++.h>
38 #include <unistd.h>
39 #include <sys/types.h>
40 #include <pwd.h>
41 #include <cstdio>
42 #include <cstdlib>
43 #include <string>
44 #include <functional>
45 #include <cctype>
46 #include <locale>
47 #include <iostream>
48 #include <fstream>
49 #include "IcedTeaParseProperties.h"
50
51 using namespace std;
52
53 //not exposed via IcedTeaParseProperties but needed
54 extern void remove_all_spaces(string& str);
55 extern bool get_property_value(string c, string& dest);
56 extern bool starts_with(string c1, string c2);
57 extern string user_properties_file();
58 extern string main_properties_file();
59 extern string default_java_properties_file();
60 //for passing three dummy files
61 bool find_system_config_file(string main_file, string custom_jre_file, bool usecustom_jre, string default_java_file, string& dest);
62 bool find_property(string filename, string property, string& dest);
63 //for passing two dummy files
64 bool read_deploy_property_value(string user_file, string system_file, bool usesystem_file, string property, string& dest);
65 //for passing two dummy files
66 bool find_custom_jre(string user_file, string main_file,string& dest);
67 //end of non-public IcedTeaParseProperties api
68
69 /* Creates a temporary file with the specified contents */
temporary_file(const string & contents)70 static string temporary_file(const string& contents) {
71 string path = tmpnam(NULL); /* POSIX function, fine for test suite */
72 ofstream myfile;
73 myfile.open (path.c_str());
74 myfile << contents;
75 myfile.close();
76 return path;
77 }
78
79
80
81 /*private api fundamental tests*/
TEST(RemoveAllSpaces)82 TEST(RemoveAllSpaces) {
83 string toBeTrimmed = string(" te st X ");
84 remove_all_spaces (toBeTrimmed);
85 CHECK_EQUAL("testX", toBeTrimmed);
86
87 string toBeTrimmed1 = string(" te st X ");
88 remove_all_spaces (toBeTrimmed1);
89 CHECK_EQUAL("testX", toBeTrimmed1);
90
91 string toBeTrimmed2 = string(" \t t e\nst\tX\n");
92 remove_all_spaces (toBeTrimmed2);
93 CHECK_EQUAL("testX", toBeTrimmed2);
94
95 string toBeTrimmed3 = string(" \t \n te \n stX\n");
96 remove_all_spaces (toBeTrimmed3);
97 CHECK_EQUAL("testX", toBeTrimmed3);
98
99 }
100
101
TEST(get_property_value)102 TEST(get_property_value) {
103 string dest = string("");
104 bool a = get_property_value("key.key=value+eulav ",dest);
105 CHECK_EQUAL("value+eulav", dest);
106 CHECK_EQUAL(a, true);
107
108 dest = string("");
109 a = get_property_value("horrible key = value/value",dest);
110 CHECK_EQUAL("value/value", dest);
111 CHECK_EQUAL(a, true);
112
113 dest = string("");
114 a = get_property_value("better.key = but very horrible value ",dest);
115 CHECK_EQUAL("but very horrible value", dest);
116 CHECK_EQUAL(a, true);
117
118 dest = string("");
119 a = get_property_value("better.key but errornous value ",dest);
120 CHECK_EQUAL("", dest);
121 CHECK_EQUAL(a, false);
122
123 dest = string("");
124 a = get_property_value("key=nice\\=value=\\\\=with\\tescapes",dest);
125 CHECK_EQUAL("nice=value=\\=with\tescapes", dest);
126 CHECK_EQUAL(a, true);
127 }
128
TEST(starts_with)129 TEST(starts_with) {
130 bool a = starts_with("aa bb cc","aa b");
131 CHECK_EQUAL(a, true);
132
133 a = starts_with("aa bb cc","aab");
134 CHECK_EQUAL(a, false);
135 }
136
137
TEST(user_properties_file)138 TEST(user_properties_file) {
139 string f = user_properties_file();
140 CHECK_EQUAL(f.find(".icedtea") >= 0, true);
141 CHECK_EQUAL(f.find(default_file_ITW_deploy_props_name) >= 0, true);
142 }
143
TEST(main_properties_file)144 TEST(main_properties_file) {
145 string f = main_properties_file();
146 CHECK_EQUAL(f.find(default_file_ITW_deploy_props_name) >= 0, true);
147 CHECK_EQUAL(f.find(".java") >= 0, true);
148 }
149
TEST(default_java_properties_file)150 TEST(default_java_properties_file) {
151 string f = default_java_properties_file();
152 CHECK_EQUAL(f.find(default_file_ITW_deploy_props_name) >= 0, true);
153 CHECK_EQUAL(f.find("lib") >= 0, true);
154 }
155
156
TEST(find_system_config_file)157 TEST(find_system_config_file) {
158 string f1 = temporary_file("key1=value1");
159 string f2 = temporary_file("key2=value2");
160 string f3 = temporary_file("key3=value3");
161 string dest=string("");
162 find_system_config_file(f1, f2, true, f3, dest);
163 CHECK_EQUAL(f1, dest);
164 dest=string("");
165 find_system_config_file(f1, f2, false, f3, dest);
166 CHECK_EQUAL(f1, dest);
167
168 remove(f1.c_str());
169 dest=string("");
170 find_system_config_file(f1, f2, true, f3, dest);
171 CHECK_EQUAL(f2, dest);
172 dest=string("");
173 find_system_config_file(f1, f2, false, f3, dest);
174 CHECK_EQUAL(f3, dest);
175
176 remove(f2.c_str());
177 dest=string("");
178 find_system_config_file(f1, f2, true, f3, dest);
179 CHECK_EQUAL("", dest); //forcing not existing f2
180 dest=string("");
181 find_system_config_file(f1, f2, false, f3, dest);
182 CHECK_EQUAL(f3, dest);
183
184 remove(f3.c_str());
185 dest=string("");
186 find_system_config_file(f1, f2, true, f3, dest);
187 CHECK_EQUAL("", dest);
188 dest=string("");
189 find_system_config_file(f1, f2, true, f3, dest);
190 CHECK_EQUAL("", dest);
191 }
192
TEST(find_property)193 TEST(find_property) {
194 string f1 = temporary_file("key1=value1");
195 string dest=string("");
196 find_property(f1, "key1", dest);
197 CHECK_EQUAL("value1", dest);
198 dest=string("");
199 find_property(f1, "key2", dest);
200 CHECK_EQUAL("", dest);
201 dest=string("");
202 find_property(f1, "value1", dest);
203 CHECK_EQUAL("", dest);
204 remove(f1.c_str());
205
206 string f2 = temporary_file("key2 =value2 key3=value3\n key5 = value5");
207 dest=string("");
208 find_property(f2, "key2", dest);
209 CHECK_EQUAL("value2 key3=value3", dest);
210 dest=string("");
211 find_property(f2, "key1", dest);
212 CHECK_EQUAL("", dest);
213 dest=string("");
214 find_property(f2, "key3", dest);
215 CHECK_EQUAL("", dest);
216 dest=string("");
217 find_property(f2, "key5", dest);
218 CHECK_EQUAL("value5", dest);
219 remove(f2.c_str());
220
221 string f3 = temporary_file("ke.y3= value3\nkey4=value4");
222 dest=string("");
223 find_property(f3, "ke.y3", dest);
224 CHECK_EQUAL("value3", dest);
225 dest=string("");
226 find_property(f3, "key4", dest);
227 CHECK_EQUAL("value4", dest);
228 remove(f3.c_str());
229 }
230
TEST(read_deploy_property_value1)231 TEST(read_deploy_property_value1) {
232 string f1 = temporary_file("key1=value11");
233 string f2 = temporary_file("key1=value12");
234 string f3 = temporary_file("key2=value23");
235 string dest=string("");
236 read_deploy_property_value(f1,f2,true, "key1", dest);
237 CHECK_EQUAL("value11", dest);
238 dest=string("");
239 read_deploy_property_value(f2,f1,true, "key1", dest);
240 CHECK_EQUAL("value12", dest);
241 dest=string("");
242 read_deploy_property_value(f1,f3,true, "key1", dest);
243 CHECK_EQUAL("value11", dest);
244 dest=string("");
245 read_deploy_property_value(f3,f1,true, "key1", dest);
246 CHECK_EQUAL("value11", dest);
247 read_deploy_property_value(f3,f2,true, "key1", dest);
248 CHECK_EQUAL("value12", dest);
249 dest=string("");
250 read_deploy_property_value(f2,f3,true, "key1", dest);
251 CHECK_EQUAL("value12", dest);
252
253 dest=string("");
254 read_deploy_property_value(f1,f2,true, "key2", dest);
255 CHECK_EQUAL("", dest);
256 dest=string("");
257 read_deploy_property_value(f2,f1,true, "key2", dest);
258 CHECK_EQUAL("", dest);
259 dest=string("");
260 read_deploy_property_value(f1,f3,true, "key2", dest);
261 CHECK_EQUAL("value23", dest);
262 dest=string("");
263 read_deploy_property_value(f3,f1,true, "key2", dest);
264 CHECK_EQUAL("value23", dest);
265 read_deploy_property_value(f3,f2,true, "key2", dest);
266 CHECK_EQUAL("value23", dest);
267 dest=string("");
268 read_deploy_property_value(f2,f3,true, "key2", dest);
269 CHECK_EQUAL("value23", dest);
270
271 remove(f1.c_str());/////////////////////////////////
272 dest=string("");
273 read_deploy_property_value(f1,f2,true, "key1", dest);
274 CHECK_EQUAL("value12", dest);
275 dest=string("");
276 read_deploy_property_value(f2,f1,true, "key1", dest);
277 CHECK_EQUAL("value12", dest);
278 dest=string("");
279 read_deploy_property_value(f1,f3,true, "key1", dest);
280 CHECK_EQUAL("", dest);
281 dest=string("");
282 read_deploy_property_value(f3,f1,true, "key1", dest);
283 CHECK_EQUAL("", dest);
284 read_deploy_property_value(f3,f2,true, "key1", dest);
285 CHECK_EQUAL("value12", dest);
286 dest=string("");
287 read_deploy_property_value(f2,f3,true, "key1", dest);
288 CHECK_EQUAL("value12", dest);
289
290 dest=string("");
291 read_deploy_property_value(f1,f2,true, "key2", dest);
292 CHECK_EQUAL("", dest);
293 dest=string("");
294 read_deploy_property_value(f2,f1,true, "key2", dest);
295 CHECK_EQUAL("", dest);
296 dest=string("");
297 read_deploy_property_value(f1,f3,true, "key2", dest);
298 CHECK_EQUAL("value23", dest);
299 dest=string("");
300 read_deploy_property_value(f3,f1,true, "key2", dest);
301 CHECK_EQUAL("value23", dest);
302 read_deploy_property_value(f3,f2,true, "key2", dest);
303 CHECK_EQUAL("value23", dest);
304 dest=string("");
305 read_deploy_property_value(f2,f3,true, "key2", dest);
306 CHECK_EQUAL("value23", dest);
307
308 remove(f3.c_str());/////////////////////////////////
309 dest=string("");
310 read_deploy_property_value(f1,f2,true, "key1", dest);
311 CHECK_EQUAL("value12", dest);
312 dest=string("");
313 read_deploy_property_value(f2,f1,true, "key1", dest);
314 CHECK_EQUAL("value12", dest);
315 dest=string("");
316 read_deploy_property_value(f1,f3,true, "key1", dest);
317 CHECK_EQUAL("", dest);
318 dest=string("");
319 read_deploy_property_value(f3,f1,true, "key1", dest);
320 CHECK_EQUAL("", dest);
321 read_deploy_property_value(f3,f2,true, "key1", dest);
322 CHECK_EQUAL("value12", dest);
323 dest=string("");
324 read_deploy_property_value(f2,f3,true, "key1", dest);
325 CHECK_EQUAL("value12", dest);
326
327 dest=string("");
328 read_deploy_property_value(f1,f2,true, "key2", dest);
329 CHECK_EQUAL("", dest);
330 dest=string("");
331 read_deploy_property_value(f2,f1,true, "key2", dest);
332 CHECK_EQUAL("", dest);
333 dest=string("");
334 read_deploy_property_value(f1,f3,true, "key2", dest);
335 CHECK_EQUAL("", dest);
336 dest=string("");
337 read_deploy_property_value(f3,f1,true, "key2", dest);
338 CHECK_EQUAL("", dest);
339 read_deploy_property_value(f3,f2,true, "key2", dest);
340 CHECK_EQUAL("", dest);
341 dest=string("");
342 read_deploy_property_value(f2,f3,true, "key2", dest);
343 CHECK_EQUAL("", dest);
344
345 remove(f2.c_str());/////////////////////////////////
346
347 }
348
349
350
TEST(read_deploy_property_value2)351 TEST(read_deploy_property_value2) {
352 string f1 = temporary_file("key1=value11");
353 string f2 = temporary_file("key1=value12");
354 string f3 = temporary_file("key2=value23");
355 string dest=string("");
356 read_deploy_property_value(f1,f2,false, "key1", dest);
357 CHECK_EQUAL("value11", dest);
358 dest=string("");
359 read_deploy_property_value(f2,f1,false, "key1", dest);
360 CHECK_EQUAL("value12", dest);
361 dest=string("");
362 read_deploy_property_value(f1,f3,false, "key1", dest);
363 CHECK_EQUAL("value11", dest);
364 dest=string("");
365 read_deploy_property_value(f3,f1,false, "key1", dest);
366 CHECK_EQUAL("", dest);
367 read_deploy_property_value(f3,f2,false, "key1", dest);
368 CHECK_EQUAL("", dest);
369 dest=string("");
370 read_deploy_property_value(f2,f3,false, "key1", dest);
371 CHECK_EQUAL("value12", dest);
372
373 dest=string("");
374 read_deploy_property_value(f1,f2,false, "key2", dest);
375 CHECK_EQUAL("", dest);
376 dest=string("");
377 read_deploy_property_value(f2,f1,false, "key2", dest);
378 CHECK_EQUAL("", dest);
379 dest=string("");
380 read_deploy_property_value(f1,f3,false, "key2", dest);
381 CHECK_EQUAL("", dest);
382 dest=string("");
383 read_deploy_property_value(f3,f1,false, "key2", dest);
384 CHECK_EQUAL("value23", dest);
385 read_deploy_property_value(f3,f2,false, "key2", dest);
386 CHECK_EQUAL("value23", dest);
387 dest=string("");
388 read_deploy_property_value(f2,f3,false, "key2", dest);
389 CHECK_EQUAL("", dest);
390
391 remove(f1.c_str());/////////////////////////////////
392 dest=string("");
393 read_deploy_property_value(f1,f2,false, "key1", dest);
394 CHECK_EQUAL("", dest);
395 dest=string("");
396 read_deploy_property_value(f2,f1,false, "key1", dest);
397 CHECK_EQUAL("value12", dest);
398 dest=string("");
399 read_deploy_property_value(f1,f3,false, "key1", dest);
400 CHECK_EQUAL("", dest);
401 dest=string("");
402 read_deploy_property_value(f3,f1,false, "key1", dest);
403 CHECK_EQUAL("", dest);
404 read_deploy_property_value(f3,f2,false, "key1", dest);
405 CHECK_EQUAL("", dest);
406 dest=string("");
407 read_deploy_property_value(f2,f3,false, "key1", dest);
408 CHECK_EQUAL("value12", dest);
409
410 dest=string("");
411 read_deploy_property_value(f1,f2,false, "key2", dest);
412 CHECK_EQUAL("", dest);
413 dest=string("");
414 read_deploy_property_value(f2,f1,false, "key2", dest);
415 CHECK_EQUAL("", dest);
416 dest=string("");
417 read_deploy_property_value(f1,f3,false, "key2", dest);
418 CHECK_EQUAL("", dest);
419 dest=string("");
420 read_deploy_property_value(f3,f1,false, "key2", dest);
421 CHECK_EQUAL("value23", dest);
422 read_deploy_property_value(f3,f2,false, "key2", dest);
423 CHECK_EQUAL("value23", dest);
424 dest=string("");
425 read_deploy_property_value(f2,f3,false, "key2", dest);
426 CHECK_EQUAL("", dest);
427
428 remove(f3.c_str());/////////////////////////////////
429 dest=string("");
430 read_deploy_property_value(f1,f2,false, "key1", dest);
431 CHECK_EQUAL("", dest);
432 dest=string("");
433 read_deploy_property_value(f2,f1,false, "key1", dest);
434 CHECK_EQUAL("value12", dest);
435 dest=string("");
436 read_deploy_property_value(f1,f3,false, "key1", dest);
437 CHECK_EQUAL("", dest);
438 dest=string("");
439 read_deploy_property_value(f3,f1,false, "key1", dest);
440 CHECK_EQUAL("", dest);
441 read_deploy_property_value(f3,f2,false, "key1", dest);
442 CHECK_EQUAL("", dest);
443 dest=string("");
444 read_deploy_property_value(f2,f3,false, "key1", dest);
445 CHECK_EQUAL("value12", dest);
446
447 dest=string("");
448 read_deploy_property_value(f1,f2,false, "key2", dest);
449 CHECK_EQUAL("", dest);
450 dest=string("");
451 read_deploy_property_value(f2,f1,false, "key2", dest);
452 CHECK_EQUAL("", dest);
453 dest=string("");
454 read_deploy_property_value(f1,f3,false, "key2", dest);
455 CHECK_EQUAL("", dest);
456 dest=string("");
457 read_deploy_property_value(f3,f1,false, "key2", dest);
458 CHECK_EQUAL("", dest);
459 read_deploy_property_value(f3,f2,false, "key2", dest);
460 CHECK_EQUAL("", dest);
461 dest=string("");
462 read_deploy_property_value(f2,f3,false, "key2", dest);
463 CHECK_EQUAL("", dest);
464
465 remove(f2.c_str());/////////////////////////////////
466 }
467
468
TEST(find_custom_jre)469 TEST(find_custom_jre) {
470 string f1 = temporary_file(custom_jre_key+"=value11");
471 string f2 = temporary_file(custom_jre_key+"=value12");
472 string f3 = temporary_file("key2=value23");
473 string f4 = temporary_file("key2=value24");
474 string dest=string("");
475 find_custom_jre(f1,f2, dest);
476 CHECK_EQUAL("value11", dest);
477 dest=string("");
478 find_custom_jre(f2,f1, dest);
479 CHECK_EQUAL("value12", dest);
480 dest=string("");
481 find_custom_jre(f1,f3, dest);
482 CHECK_EQUAL("value11", dest);
483 dest=string("");
484 find_custom_jre(f3,f1, dest);
485 CHECK_EQUAL("value11", dest);
486 dest=string("");
487 find_custom_jre(f3,f4, dest);
488 CHECK_EQUAL("", dest);
489 remove(f1.c_str());/////////////////////////////////
490 dest=string("");
491 find_custom_jre(f1,f2, dest);
492 CHECK_EQUAL("value12", dest);
493 dest=string("");
494 find_custom_jre(f2,f1, dest);
495 CHECK_EQUAL("value12", dest);
496 dest=string("");
497 find_custom_jre(f1,f3, dest);
498 CHECK_EQUAL("", dest);
499 dest=string("");
500 find_custom_jre(f3,f1, dest);
501 CHECK_EQUAL("", dest);
502 remove(f3.c_str());/////////////////////////////////
503 dest=string("");
504 find_custom_jre(f1,f2, dest);
505 CHECK_EQUAL("value12", dest);
506 dest=string("");
507 find_custom_jre(f2,f1, dest);
508 CHECK_EQUAL("value12", dest);
509 dest=string("");
510 find_custom_jre(f1,f3, dest);
511 CHECK_EQUAL("", dest);
512 dest=string("");
513 find_custom_jre(f3,f1, dest);
514 CHECK_EQUAL("", dest);
515 remove(f2.c_str());/////////////////////////////////
516 dest=string("");
517 find_custom_jre(f1,f2, dest);
518 CHECK_EQUAL("", dest);
519 dest=string("");
520 find_custom_jre(f2,f1, dest);
521 CHECK_EQUAL("", dest);
522 dest=string("");
523 find_custom_jre(f1,f3, dest);
524 CHECK_EQUAL("", dest);
525 dest=string("");
526 find_custom_jre(f3,f1, dest);
527 CHECK_EQUAL("", dest);
528 remove(f4.c_str());/////////////////////////////////
529
530 }
531