test_jshn.t 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. set jshn for convenience:
  2. $ [ -n "$JSHN" ] && export PATH="$(dirname "$JSHN"):$PATH"
  3. $ alias jshn="valgrind --quiet --leak-check=full jshn"
  4. check usage:
  5. $ jshn
  6. Usage: jshn [-n] [-i] -r <message>|-R <file>|-o <file>|-p <prefix>|-w
  7. [2]
  8. $ jshn-san
  9. Usage: jshn-san [-n] [-i] -r <message>|-R <file>|-o <file>|-p <prefix>|-w
  10. [2]
  11. test bad json:
  12. $ jshn -r '[]'
  13. Failed to parse message data
  14. [1]
  15. $ jshn-san -r '[]'
  16. Failed to parse message data
  17. [1]
  18. test good json:
  19. $ jshn -r '{"foo": "bar", "baz": {"next": "meep"}}'
  20. json_init;
  21. json_add_string 'foo' 'bar';
  22. json_add_object 'baz';
  23. json_add_string 'next' 'meep';
  24. json_close_object;
  25. $ jshn-san -r '{"foo": "bar", "baz": {"next": "meep"}}'
  26. json_init;
  27. json_add_string 'foo' 'bar';
  28. json_add_object 'baz';
  29. json_add_string 'next' 'meep';
  30. json_close_object;
  31. test json from file:
  32. $ echo '[]' > test.json; jshn -R test.json
  33. Failed to parse message data
  34. [1]
  35. $ echo '[]' > test.json; jshn-san -R test.json
  36. Failed to parse message data
  37. [1]
  38. $ jshn -R nada.json
  39. Error opening nada.json
  40. [3]
  41. $ jshn-san -R nada.json
  42. Error opening nada.json
  43. [3]
  44. $ echo '{"foo": "bar", "baz": {"next": "meep"}}' > test.json; jshn -R test.json
  45. json_init;
  46. json_add_string 'foo' 'bar';
  47. json_add_object 'baz';
  48. json_add_string 'next' 'meep';
  49. json_close_object;
  50. $ echo '{"foo": "bar", "baz": {"next": "meep"}}' > test.json; jshn-san -R test.json
  51. json_init;
  52. json_add_string 'foo' 'bar';
  53. json_add_object 'baz';
  54. json_add_string 'next' 'meep';
  55. json_close_object;
  56. test json formatting without prepared environment:
  57. $ jshn -p procd -w
  58. { }
  59. $ jshn-san -p procd -w
  60. { }
  61. $ jshn -i -p procd -w
  62. {
  63. \t (esc)
  64. }
  65. $ jshn-san -i -p procd -w
  66. {
  67. \t (esc)
  68. }
  69. $ jshn -i -n -p procd -w
  70. {
  71. \t (esc)
  72. } (no-eol)
  73. $ jshn-san -i -n -p procd -w
  74. {
  75. \t (esc)
  76. } (no-eol)
  77. $ jshn -p procd -o test.json; cat test.json
  78. { }
  79. $ jshn-san -p procd -o test.json; cat test.json
  80. { }
  81. $ jshn -i -p procd -o test.json; cat test.json
  82. {
  83. \t (esc)
  84. }
  85. $ jshn-san -i -p procd -o test.json; cat test.json
  86. {
  87. \t (esc)
  88. }
  89. $ jshn -i -n -p procd -o test.json; cat test.json
  90. {
  91. \t (esc)
  92. } (no-eol)
  93. $ jshn-san -i -n -p procd -o test.json; cat test.json
  94. {
  95. \t (esc)
  96. } (no-eol)
  97. $ chmod oug= test.json
  98. $ jshn -i -n -p procd -o test.json
  99. Error opening test.json
  100. [3]
  101. $ jshn-san -i -n -p procd -o test.json
  102. Error opening test.json
  103. [3]
  104. $ rm -f test.json
  105. test json formatting with prepared environment:
  106. $ export procdJSON_CUR=J_V
  107. $ export procdJ_A3_1=/sbin/urngd
  108. $ export procdJ_T1_instance1=J_T2
  109. $ export procdJ_T2_command=J_A3
  110. $ export procdJ_V_data=J_T5
  111. $ export procdJ_V_instances=J_T1
  112. $ export procdJ_V_name=urngd
  113. $ export procdJ_V_script=/etc/init.d/urngd
  114. $ export procdJ_V_triggers=J_A4
  115. $ export procdK_J_A3=1
  116. $ export procdK_J_A4=
  117. $ export procdK_J_T1=instance1
  118. $ export procdK_J_T2=command
  119. $ export procdK_J_T5=
  120. $ export procdK_J_V="name script instances triggers data"
  121. $ export procdT_J_A3_1=string
  122. $ export procdT_J_T1_instance1=object
  123. $ export procdT_J_T2_command=array
  124. $ export procdT_J_V_data=object
  125. $ export procdT_J_V_instances=object
  126. $ export procdT_J_V_name=string
  127. $ export procdT_J_V_script=string
  128. $ export procdT_J_V_triggers=array
  129. $ jshn -p procd -w
  130. { "name": "urngd", "script": "\/etc\/init.d\/urngd", "instances": { "instance1": { "command": [ "\/sbin\/urngd" ] } }, "triggers": [ ], "data": { } }
  131. $ jshn-san -p procd -w
  132. { "name": "urngd", "script": "\/etc\/init.d\/urngd", "instances": { "instance1": { "command": [ "\/sbin\/urngd" ] } }, "triggers": [ ], "data": { } }
  133. $ jshn -i -p procd -w
  134. {
  135. \t"name": "urngd", (esc)
  136. \t"script": "/etc/init.d/urngd", (esc)
  137. \t"instances": { (esc)
  138. \t\t"instance1": { (esc)
  139. \t\t\t"command": [ (esc)
  140. \t\t\t\t"/sbin/urngd" (esc)
  141. \t\t\t] (esc)
  142. \t\t} (esc)
  143. \t}, (esc)
  144. \t"triggers": [ (esc)
  145. \t\t (esc)
  146. \t], (esc)
  147. \t"data": { (esc)
  148. \t\t (esc)
  149. \t} (esc)
  150. }
  151. $ jshn-san -i -p procd -w
  152. {
  153. \t"name": "urngd", (esc)
  154. \t"script": "/etc/init.d/urngd", (esc)
  155. \t"instances": { (esc)
  156. \t\t"instance1": { (esc)
  157. \t\t\t"command": [ (esc)
  158. \t\t\t\t"/sbin/urngd" (esc)
  159. \t\t\t] (esc)
  160. \t\t} (esc)
  161. \t}, (esc)
  162. \t"triggers": [ (esc)
  163. \t\t (esc)
  164. \t], (esc)
  165. \t"data": { (esc)
  166. \t\t (esc)
  167. \t} (esc)
  168. }
  169. $ jshn -n -i -p procd -w
  170. {
  171. \t"name": "urngd", (esc)
  172. \t"script": "/etc/init.d/urngd", (esc)
  173. \t"instances": { (esc)
  174. \t\t"instance1": { (esc)
  175. \t\t\t"command": [ (esc)
  176. \t\t\t\t"/sbin/urngd" (esc)
  177. \t\t\t] (esc)
  178. \t\t} (esc)
  179. \t}, (esc)
  180. \t"triggers": [ (esc)
  181. \t\t (esc)
  182. \t], (esc)
  183. \t"data": { (esc)
  184. \t\t (esc)
  185. \t} (esc)
  186. } (no-eol)
  187. $ jshn-san -n -i -p procd -w
  188. {
  189. \t"name": "urngd", (esc)
  190. \t"script": "/etc/init.d/urngd", (esc)
  191. \t"instances": { (esc)
  192. \t\t"instance1": { (esc)
  193. \t\t\t"command": [ (esc)
  194. \t\t\t\t"/sbin/urngd" (esc)
  195. \t\t\t] (esc)
  196. \t\t} (esc)
  197. \t}, (esc)
  198. \t"triggers": [ (esc)
  199. \t\t (esc)
  200. \t], (esc)
  201. \t"data": { (esc)
  202. \t\t (esc)
  203. \t} (esc)
  204. } (no-eol)
  205. $ jshn -p procd -o test.json; cat test.json
  206. { "name": "urngd", "script": "\/etc\/init.d\/urngd", "instances": { "instance1": { "command": [ "\/sbin\/urngd" ] } }, "triggers": [ ], "data": { } }
  207. $ jshn-san -p procd -o test.json; cat test.json
  208. { "name": "urngd", "script": "\/etc\/init.d\/urngd", "instances": { "instance1": { "command": [ "\/sbin\/urngd" ] } }, "triggers": [ ], "data": { } }
  209. $ jshn -i -p procd -o test.json; cat test.json
  210. {
  211. \t"name": "urngd", (esc)
  212. \t"script": "/etc/init.d/urngd", (esc)
  213. \t"instances": { (esc)
  214. \t\t"instance1": { (esc)
  215. \t\t\t"command": [ (esc)
  216. \t\t\t\t"/sbin/urngd" (esc)
  217. \t\t\t] (esc)
  218. \t\t} (esc)
  219. \t}, (esc)
  220. \t"triggers": [ (esc)
  221. \t\t (esc)
  222. \t], (esc)
  223. \t"data": { (esc)
  224. \t\t (esc)
  225. \t} (esc)
  226. }
  227. $ jshn-san -i -p procd -o test.json; cat test.json
  228. {
  229. \t"name": "urngd", (esc)
  230. \t"script": "/etc/init.d/urngd", (esc)
  231. \t"instances": { (esc)
  232. \t\t"instance1": { (esc)
  233. \t\t\t"command": [ (esc)
  234. \t\t\t\t"/sbin/urngd" (esc)
  235. \t\t\t] (esc)
  236. \t\t} (esc)
  237. \t}, (esc)
  238. \t"triggers": [ (esc)
  239. \t\t (esc)
  240. \t], (esc)
  241. \t"data": { (esc)
  242. \t\t (esc)
  243. \t} (esc)
  244. }
  245. $ jshn -n -i -p procd -o test.json; cat test.json
  246. {
  247. \t"name": "urngd", (esc)
  248. \t"script": "/etc/init.d/urngd", (esc)
  249. \t"instances": { (esc)
  250. \t\t"instance1": { (esc)
  251. \t\t\t"command": [ (esc)
  252. \t\t\t\t"/sbin/urngd" (esc)
  253. \t\t\t] (esc)
  254. \t\t} (esc)
  255. \t}, (esc)
  256. \t"triggers": [ (esc)
  257. \t\t (esc)
  258. \t], (esc)
  259. \t"data": { (esc)
  260. \t\t (esc)
  261. \t} (esc)
  262. } (no-eol)
  263. $ jshn-san -n -i -p procd -o test.json; cat test.json
  264. {
  265. \t"name": "urngd", (esc)
  266. \t"script": "/etc/init.d/urngd", (esc)
  267. \t"instances": { (esc)
  268. \t\t"instance1": { (esc)
  269. \t\t\t"command": [ (esc)
  270. \t\t\t\t"/sbin/urngd" (esc)
  271. \t\t\t] (esc)
  272. \t\t} (esc)
  273. \t}, (esc)
  274. \t"triggers": [ (esc)
  275. \t\t (esc)
  276. \t], (esc)
  277. \t"data": { (esc)
  278. \t\t (esc)
  279. \t} (esc)
  280. } (no-eol)
  281. $ chmod oug= test.json
  282. $ jshn -n -i -p procd -o test.json
  283. Error opening test.json
  284. [3]
  285. $ jshn-san -n -i -p procd -o test.json
  286. Error opening test.json
  287. [3]