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