test_opts.c 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /*****************************************************************************
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 3 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. *
  16. * $Id: test_ini.c 1951 2008-03-16 18:10:47Z dermoth $
  17. *
  18. *****************************************************************************/
  19. #include "common.h"
  20. #include "utils_base.h"
  21. #include "extra_opts.h"
  22. #include "tap.h"
  23. void my_free(int *argc, char **argv) {
  24. int i;
  25. printf (" Arg(%i): ", *argc);
  26. for (i=1; i<*argc; i++) printf ("'%s' ", argv[i]);
  27. printf ("\n");
  28. free(argv);
  29. *argc=0;
  30. }
  31. int array_diff(int i1, char **a1, int i2, char **a2) {
  32. int i;
  33. if (i1 != i2) {
  34. printf(" Argument count doesn't match!\n");
  35. return 0;
  36. }
  37. for (i=0; i<=i1; i++) {
  38. if (a1[i]==NULL && a2[i]==NULL) continue;
  39. if (a1[i]==NULL || a2[i]==NULL) {
  40. printf(" Argument # %i null in one array!\n", i);
  41. return 0;
  42. }
  43. if (strcmp(a1[i], a2[i])) {
  44. printf(" Argument # %i doesn't match!\n", i);
  45. return 0;
  46. }
  47. }
  48. return 1;
  49. }
  50. int
  51. main (int argc, char **argv)
  52. {
  53. char **argv_test=NULL, **argv_known=NULL;
  54. int i, argc_test;
  55. plan_tests(9);
  56. argv_test=(char **)malloc(2*sizeof(char **));
  57. argv_test[0] = "prog_name";
  58. argv_test[1] = NULL;
  59. argc_test=1;
  60. argv_known=(char **)realloc(argv_known, 2*sizeof(char **));
  61. argv_known[0] = "prog_name";
  62. argv_known[1] = NULL;
  63. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  64. ok(array_diff(argc_test, argv_test, 1, argv_known), "No opts, returns correct argv/argc");
  65. my_free(&argc_test, argv_test);
  66. argv_test=(char **)malloc(6*sizeof(char **));
  67. argv_test[0] = "prog_name";
  68. argv_test[1] = "arg1";
  69. argv_test[2] = "--arg2=val1";
  70. argv_test[3] = "--arg3";
  71. argv_test[4] = "val2";
  72. argv_test[5] = NULL;
  73. argc_test=5;
  74. argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
  75. argv_known[0] = "prog_name";
  76. argv_known[1] = "arg1";
  77. argv_known[2] = "--arg2=val1";
  78. argv_known[3] = "--arg3";
  79. argv_known[4] = "val2";
  80. argv_known[5] = NULL;
  81. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  82. ok(array_diff(argc_test, argv_test, 5, argv_known), "No extra opts, verbatim copy of argv");
  83. my_free(&argc_test,argv_test);
  84. argv_test=(char **)malloc(3*sizeof(char **));
  85. argv_test[0] = "prog_name";
  86. argv_test[1] = "--extra-opts=@./config-opts.ini";
  87. argv_test[2] = NULL;
  88. argc_test=2;
  89. argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
  90. argv_known[0] = "prog_name";
  91. argv_known[1] = "--foo=Bar";
  92. argv_known[2] = "--this=Your Mother!";
  93. argv_known[3] = "--blank";
  94. argv_known[4] = NULL;
  95. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  96. ok(array_diff(argc_test, argv_test, 4, argv_known), "Only extra opts using default section");
  97. my_free(&argc_test,argv_test);
  98. argv_test=(char **)malloc(5*sizeof(char **));
  99. argv_test[0] = "prog_name";
  100. argv_test[1] = "--extra-opts=sect1@./config-opts.ini";
  101. argv_test[2] = "--extra-opts";
  102. argv_test[3] = "sect2@./config-opts.ini";
  103. argv_test[4] = NULL;
  104. argc_test=4;
  105. argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
  106. argv_known[0] = "prog_name";
  107. argv_known[1] = "--one=two";
  108. argv_known[2] = "--something else=oops";
  109. argv_known[3] = "--this=that";
  110. argv_known[4] = NULL;
  111. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  112. ok(array_diff(argc_test, argv_test, 4, argv_known), "Only extra opts specified twice");
  113. my_free(&argc_test,argv_test);
  114. argv_test=(char **)malloc(7*sizeof(char **));
  115. argv_test[0] = "prog_name";
  116. argv_test[1] = "--arg1=val1";
  117. argv_test[2] = "--extra-opts=@./config-opts.ini";
  118. argv_test[3] = "--extra-opts";
  119. argv_test[4] = "sect1@./config-opts.ini";
  120. argv_test[5] = "--arg2";
  121. argv_test[6] = NULL;
  122. argc_test=6;
  123. argv_known=(char **)realloc(argv_known, 8*sizeof(char **));
  124. argv_known[0] = "prog_name";
  125. argv_known[1] = "--foo=Bar";
  126. argv_known[2] = "--this=Your Mother!";
  127. argv_known[3] = "--blank";
  128. argv_known[4] = "--one=two";
  129. argv_known[5] = "--arg1=val1";
  130. argv_known[6] = "--arg2";
  131. argv_known[7] = NULL;
  132. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  133. ok(array_diff(argc_test, argv_test, 7, argv_known), "twice extra opts using two sections");
  134. my_free(&argc_test,argv_test);
  135. /* Next three checks dre expected to die. They are commented out as they
  136. * could possibly go in a sepatare test checked for return value.
  137. */
  138. /* argv_test=(char **)malloc(6*sizeof(char **));
  139. argv_test[0] = "prog_name";
  140. argv_test[1] = "arg1";
  141. argv_test[2] = "--extra-opts=missing@./config-opts.ini";
  142. argv_test[3] = "--arg3";
  143. argv_test[4] = "val2";
  144. argv_test[5] = NULL;
  145. argc_test=5;
  146. argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
  147. argv_known[0] = "prog_name";
  148. argv_known[1] = "arg1";
  149. argv_known[2] = "--arg3";
  150. argv_known[3] = "val2";
  151. argv_known[4] = NULL;
  152. argv_test=np_extra_opts(&argc_test, argv_test, "check_missing");
  153. ok(array_diff(argc_test, argv_test, 4, argv_known), "Missing section 1");
  154. my_free(&argc_test,argv_test); */
  155. /* argv_test=(char **)malloc(7*sizeof(char **));
  156. argv_test[0] = "prog_name";
  157. argv_test[1] = "arg1";
  158. argv_test[2] = "--extra-opts";
  159. argv_test[3] = "missing@./config-opts.ini";
  160. argv_test[4] = "--arg3";
  161. argv_test[5] = "val2";
  162. argv_test[6] = NULL;
  163. argc_test=6;
  164. argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
  165. argv_known[0] = "prog_name";
  166. argv_known[1] = "arg1";
  167. argv_known[2] = "--arg3";
  168. argv_known[3] = "val2";
  169. argv_known[4] = NULL;
  170. argv_test=np_extra_opts(&argc_test, argv_test, "check_missing");
  171. ok(array_diff(argc_test, argv_test, 4, argv_known), "Missing section 2");
  172. my_free(&argc_test,argv_test); */
  173. /* argv_test=(char **)malloc(6*sizeof(char **));
  174. argv_test[0] = "prog_name";
  175. argv_test[1] = "arg1";
  176. argv_test[2] = "--extra-opts";
  177. argv_test[3] = "--arg3";
  178. argv_test[4] = "val2";
  179. argv_test[5] = NULL;
  180. argc_test=5;
  181. argv_known=(char **)realloc(argv_known, 5*sizeof(char **));
  182. argv_known[0] = "prog_name";
  183. argv_known[1] = "arg1";
  184. argv_known[2] = "--arg3";
  185. argv_known[3] = "val2";
  186. argv_known[4] = NULL;
  187. argv_test=np_extra_opts(&argc_test, argv_test, "check_missing");
  188. ok(array_diff(argc_test, argv_test, 4, argv_known), "Missing section 3");
  189. my_free(&argc_test,argv_test); */
  190. setenv("NAGIOS_CONFIG_PATH", ".", 1);
  191. argv_test=(char **)malloc(6*sizeof(char **));
  192. argv_test[0] = "prog_name";
  193. argv_test[1] = "arg1";
  194. argv_test[2] = "--extra-opts";
  195. argv_test[3] = "--arg3";
  196. argv_test[4] = "val2";
  197. argv_test[5] = NULL;
  198. argc_test=5;
  199. argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
  200. argv_known[0] = "prog_name";
  201. argv_known[1] = "--foo=bar";
  202. argv_known[2] = "arg1";
  203. argv_known[3] = "--arg3";
  204. argv_known[4] = "val2";
  205. argv_known[5] = NULL;
  206. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  207. ok(array_diff(argc_test, argv_test, 5, argv_known), "Default section 1");
  208. argv_test=(char **)malloc(3*sizeof(char **));
  209. argv_test[0] = "prog_name";
  210. argv_test[1] = "--extra-opts";
  211. argv_test[2] = NULL;
  212. argc_test=2;
  213. argv_known=(char **)realloc(argv_known, 3*sizeof(char **));
  214. argv_known[0] = "prog_name";
  215. argv_known[1] = "--foo=bar";
  216. argv_known[2] = NULL;
  217. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  218. ok(array_diff(argc_test, argv_test, 2, argv_known), "Default section 2");
  219. my_free(&argc_test,argv_test);
  220. argv_test=(char **)malloc(6*sizeof(char **));
  221. argv_test[0] = "prog_name";
  222. argv_test[1] = "arg1";
  223. argv_test[2] = "--extra-opts=section1";
  224. argv_test[3] = "--arg3";
  225. argv_test[4] = "val2";
  226. argv_test[5] = NULL;
  227. argc_test=5;
  228. argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
  229. argv_known[0] = "prog_name";
  230. argv_known[1] = "--foobar=baz";
  231. argv_known[2] = "arg1";
  232. argv_known[3] = "--arg3";
  233. argv_known[4] = "val2";
  234. argv_known[5] = NULL;
  235. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  236. ok(array_diff(argc_test, argv_test, 5, argv_known), "Default section 3");
  237. my_free(&argc_test,argv_test);
  238. argv_test=(char **)malloc(6*sizeof(char **));
  239. argv_test[0] = "prog_name";
  240. argv_test[1] = "arg1";
  241. argv_test[2] = "--extra-opts";
  242. argv_test[3] = "-arg3";
  243. argv_test[4] = "val2";
  244. argv_test[5] = NULL;
  245. argc_test=5;
  246. argv_known=(char **)realloc(argv_known, 6*sizeof(char **));
  247. argv_known[0] = "prog_name";
  248. argv_known[1] = "--foo=bar";
  249. argv_known[2] = "arg1";
  250. argv_known[3] = "-arg3";
  251. argv_known[4] = "val2";
  252. argv_known[5] = NULL;
  253. argv_test=np_extra_opts(&argc_test, argv_test, "check_disk");
  254. ok(array_diff(argc_test, argv_test, 5, argv_known), "Default section 4");
  255. my_free(&argc_test,argv_test);
  256. return exit_status();
  257. }