1 | [[tags: egg salmonella]] |
---|
2 | |
---|
3 | == salmonella |
---|
4 | |
---|
5 | [[toc:]] |
---|
6 | |
---|
7 | === Introduction |
---|
8 | |
---|
9 | Salmonella is a set of tools to test CHICKEN eggs. Here's a brief |
---|
10 | summary of features: |
---|
11 | |
---|
12 | * very light on dependencies (none at the moment) |
---|
13 | * parallelizable ({{salmonella-epidemy}}) |
---|
14 | * can be run with or without Internet access |
---|
15 | |
---|
16 | Note: starting on version 2.0, salmonella is a rewrite of the |
---|
17 | salmonella 1.x series, which was available since CHICKEN 2.x. The |
---|
18 | documentation for the 1.x series is still available at |
---|
19 | [[/egg/salmonella-1.x|http://wiki.call-cc.org/egg/salmonella-1.x]]. |
---|
20 | |
---|
21 | |
---|
22 | === Author |
---|
23 | |
---|
24 | [[/users/mario-domenech-goulart|Mario Domenech Goulart]] |
---|
25 | |
---|
26 | |
---|
27 | === Repository |
---|
28 | |
---|
29 | salmonella is hosted on [[http://github.com|github]]: |
---|
30 | [[https://github.com/mario-goulart/salmonella|https://github.com/mario-goulart/salmonella]] |
---|
31 | |
---|
32 | |
---|
33 | === Tools |
---|
34 | |
---|
35 | This egg provides some command line tools. The next sections describe |
---|
36 | each of them. |
---|
37 | |
---|
38 | |
---|
39 | |
---|
40 | ==== salmonella |
---|
41 | |
---|
42 | This is the core tool for testing eggs. {{salmonella}} can perform |
---|
43 | the following tests: |
---|
44 | |
---|
45 | * installation of eggs |
---|
46 | * dependencies verification |
---|
47 | * {{.meta}} file consistency check |
---|
48 | * egg tests execution |
---|
49 | * general egg consistency (i.e., can be used as an ''egg lint'' to |
---|
50 | avoid common mistakes when publishing a new egg or a new egg |
---|
51 | version) |
---|
52 | |
---|
53 | {{salmonella}} generates a sexpr-based log file as output. That file |
---|
54 | can be used by tools like |
---|
55 | [[/egg/salmonella-html-report|salmonella-html-report]] to generate a |
---|
56 | pretty output in HTML. |
---|
57 | |
---|
58 | When executing, salmonella prints some basic information on the |
---|
59 | standard output. Detailed information can be viewed with the |
---|
60 | aforementioned [[/egg/salmonella-html-report|salmonella-html-report]] |
---|
61 | or with {{salmonella-log-viewer}}, a tool which is provided by this |
---|
62 | egg. {{salmonella-log-viewer}} parses the log file generated by |
---|
63 | salmonella and formats the data on the standard output. |
---|
64 | |
---|
65 | ===== Command line options |
---|
66 | |
---|
67 | Here's the output of {{salmonella -h}} with an explanation for each |
---|
68 | command line option: |
---|
69 | |
---|
70 | salmonella [ -h | --help ] |
---|
71 | salmonella --version |
---|
72 | salmonella [ [ <options> ] eggs ] |
---|
73 | |
---|
74 | When called without eggs in the command line, salmonella will try to |
---|
75 | find a .egg file in the current directory and process it (just like |
---|
76 | chicken-install). |
---|
77 | |
---|
78 | <options>: |
---|
79 | --log-file=<logfile> |
---|
80 | The name for the log file to be generated by salmonella |
---|
81 | (default=salmonella.log). |
---|
82 | |
---|
83 | --chicken-installation-prefix=<prefix dir> |
---|
84 | If you want to test eggs using a chicken installed on a certain directory, |
---|
85 | you can use this option (it should point to the same directory as given to |
---|
86 | `PREFIX' when installing CHICKEN). If omitted, salmonella uses CHICKEN |
---|
87 | tools from the current runtime's installation prefix. |
---|
88 | |
---|
89 | --chicken-install-args=<install args> |
---|
90 | This option can be used customize chicken-install's arguments. You can |
---|
91 | use <repo> to indicate where you want the actual repository directory |
---|
92 | to be replaced by salmonella. |
---|
93 | |
---|
94 | --eggs-source-dir=<eggs dir> |
---|
95 | By default, salmonella fetches eggs from the egg server. If you have a |
---|
96 | local copy of eggs code, you can use this option to point to the directory |
---|
97 | where they are located. |
---|
98 | |
---|
99 | --eggs-doc-dir=<doc dir> |
---|
100 | By default, salmonella checks if documentation for eggs exist by accessing |
---|
101 | the CHICKEN wiki. If you have a local copy of the wiki documentation for |
---|
102 | eggs, you can use this option to point to the directory where they can be |
---|
103 | found. |
---|
104 | |
---|
105 | --keep-repo |
---|
106 | For each egg that salmonella tests, it sets the egg installation repository |
---|
107 | empty and removes it at the end of its execution. This option makes |
---|
108 | salmonella keep the egg installation repository after testing each egg and |
---|
109 | after finishing its execution. This option can save a lot of time when |
---|
110 | testing several eggs, at the cost of potentially making salmonella unable |
---|
111 | to catch dependencies problems. |
---|
112 | |
---|
113 | --skip-eggs=<comma-separated list of eggs to skip> |
---|
114 | A comma-separated list of eggs to be skipped. |
---|
115 | |
---|
116 | --repo-dir=<path to repo dir to be used> |
---|
117 | Alternative location for the egg installation directory used by salmonella. |
---|
118 | By default, salmonella generates a `salmonella-tmp-xxxxx' directory in the |
---|
119 | current directory. This option can be useful when used with `--keep-repo' |
---|
120 | to reuse egg installation repositories for several salmonella executions. |
---|
121 | |
---|
122 | --clear-chicken-home |
---|
123 | Remove Scheme files from <chicken-installation-prefix>/share/chicken. |
---|
124 | WARNING: use this option with care. If you don't understand the |
---|
125 | consequences of this option, DON'T USE IT. Extra care when you don't |
---|
126 | use --chicken-installation-prefix -- in this case --clear-chicken-home |
---|
127 | will remove Scheme files from your "host" CHICKEN installation. |
---|
128 | This option is only effective when --keep-repo is NOT used. |
---|
129 | |
---|
130 | --verbosity=<number> |
---|
131 | A number to indicate salmonella's verbosity level. 0 means practically |
---|
132 | silent. 1 is mostly silent and 2 (default) prints some useful information |
---|
133 | while salmonella is running. |
---|
134 | |
---|
135 | |
---|
136 | ===== Some quick tips by example |
---|
137 | |
---|
138 | Simplest case: testing eggs using the remote egg server and the |
---|
139 | chicken tools ({{chicken-install}} and {{csi}}) in the system {{PATH}} |
---|
140 | |
---|
141 | $ salmonella big-chicken slice |
---|
142 | |
---|
143 | |
---|
144 | You can test all the available eggs using one of the following |
---|
145 | approaches: |
---|
146 | |
---|
147 | 1. If you have CHICKEN >= 4.7.2: |
---|
148 | |
---|
149 | $ salmonella `chicken-install -list` |
---|
150 | |
---|
151 | |
---|
152 | 2. If you don't have CHICKEN >= 4.7.2: |
---|
153 | |
---|
154 | $ salmonella `wget http://code.call-cc.org/cgi-bin/henrietta.cgi?list=1 -q -O -` |
---|
155 | |
---|
156 | |
---|
157 | If you don't want to test some specific eggs, you can skip them: |
---|
158 | |
---|
159 | $ salmonella --skip-eggs=macosx,hfs+ `chicken-install -list` |
---|
160 | |
---|
161 | |
---|
162 | You can tell salmonella to use a specific CHICKEN version: |
---|
163 | |
---|
164 | $ salmonella --chicken-installation-prefix=/usr/local/chicken-4.7.3 big-chicken slice |
---|
165 | |
---|
166 | |
---|
167 | Not cleaning the egg installation repository after installing each egg |
---|
168 | may significantly speed up the salmonella execution time (the default |
---|
169 | behavior is to set the egg installation repository empty after testing |
---|
170 | each egg): |
---|
171 | |
---|
172 | $ salmonella --keep-repo big-chicken slice |
---|
173 | |
---|
174 | warning: if you use --keep-repo, salmonella will not be able to catch |
---|
175 | dependencies problems. |
---|
176 | |
---|
177 | |
---|
178 | If you want to reuse the same egg installation repository for multiple |
---|
179 | salmonella runs, you can provide a specific directory: |
---|
180 | |
---|
181 | $ salmonella --repo-dir=my-repo --keep-repo big-chicken slice |
---|
182 | |
---|
183 | |
---|
184 | By default, salmonella generates a log file named {{salmonella.log}} in |
---|
185 | the current directory. You can change that by using the {{--log-file}} |
---|
186 | command line option: |
---|
187 | |
---|
188 | $ salmonella --log-file=my-log-file.log big-chicken slice |
---|
189 | |
---|
190 | |
---|
191 | ====== Using salmonella as an egg lint tool |
---|
192 | |
---|
193 | Suppose you are working on a new egg and you want to check if it is |
---|
194 | working ok before releasing it (or a new version). You can use |
---|
195 | salmonella to check it: |
---|
196 | |
---|
197 | $ cd my-egg # where your egg code is stored |
---|
198 | $ salmonella |
---|
199 | |
---|
200 | |
---|
201 | |
---|
202 | ==== salmonella-log-viewer |
---|
203 | |
---|
204 | This tool can be used to turn salmonella log files into something |
---|
205 | readable on the standard output. |
---|
206 | |
---|
207 | Just provide a salmonella log file as argument to |
---|
208 | {{salmonella-log-viewer}}: |
---|
209 | |
---|
210 | $ salmonella-log-viewer salmonella.log |
---|
211 | |
---|
212 | Alternatively, you can use |
---|
213 | [[/egg/salmonella-html-report|salmonella-html-report]] for a prettier |
---|
214 | and more complete format. |
---|
215 | |
---|
216 | |
---|
217 | |
---|
218 | ==== salmonella-epidemy |
---|
219 | |
---|
220 | Note: this tool is currently not supported on Windows systems. |
---|
221 | |
---|
222 | {{salmonella-epidemy}} can be used to run multiple salmonella |
---|
223 | instances in parallel. It can be handy when you have a multi-core |
---|
224 | machine and you want to make use of all cores, for example. The |
---|
225 | command line options are basically the same as for {{salmonella}}, |
---|
226 | plus a {{--instances=<number>}} to indicate how many {{salmonella}} |
---|
227 | instances you want to run in parallel. |
---|
228 | |
---|
229 | This tool can significantly speed up salmonella execution times on |
---|
230 | multi-core machines. |
---|
231 | |
---|
232 | Usage example: |
---|
233 | |
---|
234 | $ salmonella-epidemy --instances=2 big-chicken slice spiffy amb |
---|
235 | |
---|
236 | |
---|
237 | |
---|
238 | ==== salmonella-log-merger |
---|
239 | |
---|
240 | This tool simply puts more than one salmonella log into a single one, |
---|
241 | so it can be used by tools like {{salmonella-log-viewer}} and |
---|
242 | [[/egg/salmonella-html-report|salmonella-html-report]]. |
---|
243 | |
---|
244 | |
---|
245 | Usage example: |
---|
246 | |
---|
247 | $ salmonella-log-merger --log-file=full.log file1.log file2.log |
---|
248 | |
---|
249 | |
---|
250 | |
---|
251 | ==== salmonella-log-inquirer |
---|
252 | |
---|
253 | {{salmonella-log-inquirer}} can be used to query salmonella log files. |
---|
254 | Below you can see its help message and a usage example. |
---|
255 | |
---|
256 | salmonella-log-inquirer [ -h | -help | --help ] |
---|
257 | Print this message. |
---|
258 | |
---|
259 | salmonella-log-inquirer --version |
---|
260 | Show version and exit. |
---|
261 | |
---|
262 | salmonella-log-inquirer --log-info <log file> |
---|
263 | Show information about the environment where salmonella was executed |
---|
264 | to generate the given <log-file> (e.g., environment variables, C |
---|
265 | compiler, CHICKEN version, salmonella command line etc.) |
---|
266 | |
---|
267 | salmonella-log-inquirer --statistics <log file> |
---|
268 | Show simple statistics on installation, tests and documentation from |
---|
269 | the log file . |
---|
270 | |
---|
271 | salmonella-log-inquirer --list-eggs <log file> |
---|
272 | List eggs covered in <log file>. |
---|
273 | |
---|
274 | salmonella-log-inquirer --action=<action> --egg=<egg> [ --part=<part> ] <log file> |
---|
275 | Query <action> and, optionally, <part> for <egg> in <log file>. |
---|
276 | |
---|
277 | <action>s: |
---|
278 | fetch |
---|
279 | install |
---|
280 | check-version |
---|
281 | test |
---|
282 | meta-data |
---|
283 | |
---|
284 | <part>s (the default part is "message"): |
---|
285 | message |
---|
286 | status |
---|
287 | duration |
---|
288 | |
---|
289 | |
---|
290 | Usage example: |
---|
291 | |
---|
292 | $ salmonella-log-inquirer --action=fetch --egg=this salmonella.log |
---|
293 | '/home/chicken/salmonella/build/salmonella-run-publish/chicken/bin/chicken-install' -r -v -test this 2>&1 |
---|
294 | this not cached |
---|
295 | resolving alias `kitten-technologies' to: http://chicken.kitten-technologies.co.uk/henrietta.cgi |
---|
296 | resolving alias `call-cc' to: http://code.call-cc.org/cgi-bin/henrietta.cgi |
---|
297 | trying server http://chicken.kitten-technologies.co.uk/henrietta.cgi ... |
---|
298 | downloading this: http://chicken.kitten-technologies.co.uk/henrietta.cgi |
---|
299 | connecting to host "chicken.kitten-technologies.co.uk", port 80 ... |
---|
300 | requesting "/henrietta.cgi?name=this&release=5&mode=default&tests=yes" ... |
---|
301 | reading response ... |
---|
302 | HTTP/1.1 200 OK |
---|
303 | Date: Thu, 25 Jul 2019 11:47:58 GMT |
---|
304 | Server: Apache/2.2.31 (Unix) DAV/2 PHP/5.5.36 mod_fastcgi/2.4.6 |
---|
305 | Connection: close |
---|
306 | Transfer-Encoding: chunked |
---|
307 | Content-Type: text/plain |
---|
308 | reading chunks . |
---|
309 | reading files ... |
---|
310 | ./README.md |
---|
311 | ./this.egg |
---|
312 | ./this.release-info |
---|
313 | ./this.scm |
---|
314 | cp -r '/tmp/temp303b.18990'/* '/home/chicken/salmonella/build/salmonella-run-publish/salmonella-repo/repo/cache/this' |
---|
315 | this located at /home/chicken/salmonella/build/salmonella-run-publish/salmonella-repo/repo/cache/this |
---|
316 | |
---|
317 | |
---|
318 | ==== Log file format |
---|
319 | |
---|
320 | The command line tool writes a log file which contains records in the |
---|
321 | following format: |
---|
322 | |
---|
323 | (<egg> <action> <status> <message> <duration>) |
---|
324 | |
---|
325 | |
---|
326 | ===== <egg> |
---|
327 | |
---|
328 | Can be either a symbol that indicates the egg-name or {{#f}} to |
---|
329 | indicate the {{start}} and {{end}} actions (logged when salmonella is |
---|
330 | started and when it finishes testing, respectively). |
---|
331 | |
---|
332 | ===== <action> |
---|
333 | |
---|
334 | A symbol to indicate the action that was executed. Can be one of the |
---|
335 | following values: |
---|
336 | |
---|
337 | * {{start}}: starting salmonella |
---|
338 | * {{fetch}}: fetching egg |
---|
339 | * {{install}}: installing egg |
---|
340 | * {{skip}}: skipping egg |
---|
341 | * {{test}}: testing egg |
---|
342 | * {{end}}: salmonella has finished |
---|
343 | |
---|
344 | ===== <status> |
---|
345 | |
---|
346 | A numeric value indicating the exit status of the executed action. |
---|
347 | When the action is {{test}} and {{status}} is {{-1}}, it means that |
---|
348 | the egg has no tests. |
---|
349 | |
---|
350 | |
---|
351 | ===== <message> |
---|
352 | |
---|
353 | The output generated by the commands executed to perform {{<action>}}. |
---|
354 | A string. |
---|
355 | |
---|
356 | |
---|
357 | ===== <duration> |
---|
358 | |
---|
359 | The time (in seconds) that was taken to execute {{<action>}}. |
---|
360 | |
---|
361 | For the {{start}} and {{end}} actions, the value is the seconds since |
---|
362 | epoch, so the total salmonella execution time can be determined by |
---|
363 | subtracting the start time from the end time. |
---|
364 | |
---|
365 | |
---|
366 | === Modules |
---|
367 | |
---|
368 | Salmonella provides two modules: |
---|
369 | |
---|
370 | ; {{salmonella}}: the core salmonella functionality and basic data strucuture for logs ({{report}} records) |
---|
371 | |
---|
372 | ; {{salmonella-log-parser}}: provides procedures to access log files and compute simple statistics regarding log file data. |
---|
373 | |
---|
374 | |
---|
375 | ==== salmonella |
---|
376 | |
---|
377 | ===== report |
---|
378 | <record>(report egg action status message duration)</record> |
---|
379 | <procedure>make-report</procedure> |
---|
380 | <procedure>report?</procedure> |
---|
381 | <procedure>report-egg</procedure> |
---|
382 | <procedure>report-action</procedure> |
---|
383 | <procedure>report-status</procedure> |
---|
384 | <procedure>report-message</procedure> |
---|
385 | <procedure>report-duration</procedure> |
---|
386 | <procedure>report-egg-set!</procedure> |
---|
387 | <procedure>report-action-set!</procedure> |
---|
388 | <procedure>report-status-set!</procedure> |
---|
389 | <procedure>report-message-set!</procedure> |
---|
390 | <procedure>report-duration-set!</procedure> |
---|
391 | |
---|
392 | {{report}} objects. Each log file registry is represented by a |
---|
393 | {{report}} object (serialized as a list). |
---|
394 | |
---|
395 | ===== report->list |
---|
396 | <procedure>(report->list report)</procedure> |
---|
397 | |
---|
398 | Convert a {{report}} object to a list. |
---|
399 | |
---|
400 | |
---|
401 | ===== log! |
---|
402 | <procedure>(log! report log-file)</procedure> |
---|
403 | |
---|
404 | Print the {{report}} representation to {{log-file}}. |
---|
405 | |
---|
406 | |
---|
407 | ===== make-salmonella |
---|
408 | <procedure>(make-salmonella tmp-dir #!key chicken-installation-prefix chicken-install-args eggs-source-dir eggs-doc-dir this-egg?)</procedure> |
---|
409 | |
---|
410 | The salmonella maker. Returns a procedure that receives symbols |
---|
411 | (''methods'') to indicate the actions to be performed. The available |
---|
412 | methods are (example considering a {{salmonella}} object returned by |
---|
413 | {{make-salmonella}}): |
---|
414 | |
---|
415 | ====== {{(salmonella 'init-repo!)}} |
---|
416 | |
---|
417 | ====== {{(salmonella 'clear-repo!)}} |
---|
418 | |
---|
419 | ====== {{(salmonella 'fetch <egg>)}} |
---|
420 | |
---|
421 | ====== {{(salmonella 'install <egg>)}} |
---|
422 | |
---|
423 | ====== {{(salmonella 'test <egg>)}} |
---|
424 | |
---|
425 | ====== {{(salmonella 'check-version <egg>)}} |
---|
426 | |
---|
427 | ====== {{(salmonella 'env-info)}} |
---|
428 | |
---|
429 | ====== {{(salmonella 'meta-data <egg>)}} |
---|
430 | |
---|
431 | ====== {{(salmonella 'check-dependencies <egg> <meta data>)}} |
---|
432 | |
---|
433 | ====== {{(salmonella 'check-category <egg> <meta data>)}} |
---|
434 | |
---|
435 | ====== {{(salmonella 'check-license <egg> <meta data>)}} |
---|
436 | |
---|
437 | ====== {{(salmonella 'check-author <egg> <meta data>)}} |
---|
438 | |
---|
439 | ====== {{(salmonella 'check-doc <egg>)}} |
---|
440 | |
---|
441 | |
---|
442 | |
---|
443 | ==== salmonella-log-parser |
---|
444 | |
---|
445 | ===== Reading |
---|
446 | |
---|
447 | <procedure>(read-log-file filename)</procedure> |
---|
448 | |
---|
449 | Reads the log file {{filename}} and returns a list of report records. |
---|
450 | |
---|
451 | ===== {{fetch}} action |
---|
452 | |
---|
453 | ====== fetch-status |
---|
454 | <procedure>(fetch-status egg log)</procedure> |
---|
455 | |
---|
456 | ====== fetch-message |
---|
457 | <procedure>(fetch-message egg log)</procedure> |
---|
458 | |
---|
459 | ====== fetch-duration |
---|
460 | <procedure>(fetch-duration egg log)</procedure> |
---|
461 | |
---|
462 | |
---|
463 | |
---|
464 | ===== {{install}} action |
---|
465 | |
---|
466 | ====== install-status |
---|
467 | <procedure>(install-status egg log)</procedure> |
---|
468 | |
---|
469 | ====== install-message |
---|
470 | <procedure>(install-message egg log)</procedure> |
---|
471 | |
---|
472 | ====== install-duration |
---|
473 | <procedure>(install-duration egg log)</procedure> |
---|
474 | |
---|
475 | |
---|
476 | |
---|
477 | ===== {{check-version}} action |
---|
478 | |
---|
479 | ====== check-version-status |
---|
480 | <procedure>(check-version-status egg log)</procedure> |
---|
481 | |
---|
482 | ====== check-version-message |
---|
483 | <procedure>(check-version-message egg log)</procedure> |
---|
484 | |
---|
485 | ====== egg-version |
---|
486 | <procedure>(egg-version egg log)</procedure> |
---|
487 | |
---|
488 | ====== check-version-ok? |
---|
489 | <procedure>(check-version-ok? egg log)</procedure> |
---|
490 | |
---|
491 | |
---|
492 | ===== {{test}} action |
---|
493 | |
---|
494 | ====== test-status |
---|
495 | <procedure>(test-status egg log)</procedure> |
---|
496 | |
---|
497 | ====== test-message |
---|
498 | <procedure>(test-message egg log)</procedure> |
---|
499 | |
---|
500 | ====== test-duration |
---|
501 | <procedure>(test-duration egg log)</procedure> |
---|
502 | |
---|
503 | ====== has-test? |
---|
504 | <procedure>(has-test? egg log)</procedure> |
---|
505 | |
---|
506 | |
---|
507 | ===== {{meta-data}} action |
---|
508 | |
---|
509 | ====== meta-data |
---|
510 | <procedure>(meta-data egg log)</procedure> |
---|
511 | |
---|
512 | ====== egg-dependencies |
---|
513 | <procedure>(egg-dependencies egg log)</procedure> |
---|
514 | |
---|
515 | ====== egg-license |
---|
516 | <procedure>(egg-license egg log #!key with-test-dependencies? with-versions?)</procedure> |
---|
517 | |
---|
518 | |
---|
519 | |
---|
520 | ===== {{check-doc}} action |
---|
521 | |
---|
522 | ====== doc-exists? |
---|
523 | <procedure>(doc-exists? egg log)</procedure> |
---|
524 | |
---|
525 | |
---|
526 | |
---|
527 | ===== {{start}} & {{end}} actions |
---|
528 | |
---|
529 | ====== start-time |
---|
530 | <procedure>(start-time log)</procedure> |
---|
531 | |
---|
532 | ====== end-time |
---|
533 | <procedure>(end-time log)</procedure> |
---|
534 | |
---|
535 | ====== total-time |
---|
536 | <procedure>(total-time log)</procedure> |
---|
537 | |
---|
538 | ====== salmonella-info |
---|
539 | <procedure>(salmonella-info log)</procedure> |
---|
540 | |
---|
541 | |
---|
542 | |
---|
543 | ===== Statistics |
---|
544 | |
---|
545 | ====== count-install-ok |
---|
546 | <procedure>(count-install-ok log)</procedure> |
---|
547 | |
---|
548 | ====== count-install-fail |
---|
549 | <procedure>(count-install-fail log)</procedure> |
---|
550 | |
---|
551 | ====== count-test-ok |
---|
552 | <procedure>(count-test-ok log)</procedure> |
---|
553 | |
---|
554 | ====== count-test-fail |
---|
555 | <procedure>(count-test-fail log)</procedure> |
---|
556 | |
---|
557 | ====== count-no-test |
---|
558 | <procedure>(count-no-test log)</procedure> |
---|
559 | |
---|
560 | ====== count-total-eggs |
---|
561 | <procedure>(count-total-eggs log #!key with-skipped?)</procedure> |
---|
562 | |
---|
563 | ====== count-documented |
---|
564 | <procedure>(count-documented log)</procedure> |
---|
565 | |
---|
566 | ====== count-undocumented |
---|
567 | <procedure>(count-undocumented log)</procedure> |
---|
568 | |
---|
569 | |
---|
570 | ===== Miscelaneous |
---|
571 | |
---|
572 | ====== prettify-time |
---|
573 | <procedure>(prettify-time time)</procedure> |
---|
574 | |
---|
575 | ====== sort-eggs |
---|
576 | <procedure>(sort-eggs eggs)</procedure> |
---|
577 | |
---|
578 | ====== log-eggs |
---|
579 | <procedure>(log-eggs log)</procedure> |
---|
580 | |
---|
581 | ====== log-skipped-eggs |
---|
582 | <procedure>(log-skipped-eggs log)</procedure> |
---|
583 | |
---|
584 | |
---|
585 | |
---|
586 | === Environment variables |
---|
587 | |
---|
588 | When running, salmonella sets the {{SALMONELLA_RUNNING}} environment |
---|
589 | variable. If you need to check if your tests code is being run by |
---|
590 | salmonella, this variable can be used. |
---|
591 | |
---|
592 | |
---|
593 | === Caveats |
---|
594 | |
---|
595 | ==== Testing executable files installed by eggs |
---|
596 | |
---|
597 | Salmonella sets a private repository to install and test eggs, so when |
---|
598 | extensions install programs, they get installed into |
---|
599 | {{<salmonella-repo-dir>/bin}}, not into {{$CHICKEN_PREFIX/bin}}. |
---|
600 | |
---|
601 | So, how to invoke (from tests/run.scm, for example) a binary |
---|
602 | executable file your egg installs? You have the following options: |
---|
603 | |
---|
604 | * you can build up the absolute pathname for the executable, like |
---|
605 | {{(make-pathname (program-path) "the-executable")}}. That is not |
---|
606 | going to work with salmonella, since the executable file will get |
---|
607 | installed into {{<salmonella-repo-dir>/bin}}, not |
---|
608 | {{$CHICKEN_PREFIX/bin}}. Since {{program-path}} points to |
---|
609 | {{$CHICKEN_PREFIX/bin}} (or, when {{$CHICKEN_PREFIX}} is not set, it |
---|
610 | falls back to {{C_INSTALL_BIN_HOME}}, which is set during CHICKEN's |
---|
611 | build time), salmonella won't find it, as salmonella didn't install |
---|
612 | it there. Salmonella ''may'' find it, in case you have that egg |
---|
613 | installed, but in this case you'll be testing a different program. |
---|
614 | |
---|
615 | * you can rely on the executable being found in your system's {{PATH}} |
---|
616 | variable. Salmonella actually prepends |
---|
617 | {{<salmonella-repo-dir>/bin}} to your system's {{PATH}} variable |
---|
618 | when running, so, if you call the executable file installed by your |
---|
619 | egg with with {{(system "the-executable")}}, for example, salmonella |
---|
620 | will run the right file. On the other hand, you if run |
---|
621 | {{chicken-install}} with the {{-test}} option, and the CHICKEN tools |
---|
622 | are not in the system's {{PATH}} (e.g. |
---|
623 | {{/some/dir/not/in/PATH/chicken-install -test}}), the executable installed by your egg |
---|
624 | will not be found. |
---|
625 | |
---|
626 | So far the only "portable" solution is a combination of both options, |
---|
627 | which happens to be a bit ugly. Salmonella sets the |
---|
628 | {{SALMONELLA_RUNNING}} environment variable when it runs, so your test |
---|
629 | script may check that variable and assume your test executable will be |
---|
630 | found in {{PATH}} if it is set. If {{SALMONELLA_RUNNING}} is not set, |
---|
631 | just build up the absolute path to your executable using |
---|
632 | {{(program-path)}}. Here's an example: |
---|
633 | |
---|
634 | <enscript highlight=scheme> |
---|
635 | (use setup-api) |
---|
636 | |
---|
637 | (define executable |
---|
638 | (make-pathname |
---|
639 | (if (get-environment-variable "SALMONELLA_RUNNING") |
---|
640 | #f ;; salmonella adds its REPO_PREFIX/bin to PATH |
---|
641 | (program-path)) |
---|
642 | "executable-filename")) |
---|
643 | </enscript> |
---|
644 | |
---|
645 | ==== salmonella-epidemy on Windows |
---|
646 | |
---|
647 | {{salmonella-epidemy}} is currently not supported on Windows systems. |
---|
648 | |
---|
649 | |
---|
650 | === License |
---|
651 | |
---|
652 | Copyright (c) 2010-2019, Mario Domenech Goulart |
---|
653 | All rights reserved. |
---|
654 | |
---|
655 | Redistribution and use in source and binary forms, with or without |
---|
656 | modification, are permitted provided that the following conditions |
---|
657 | are met: |
---|
658 | 1. Redistributions of source code must retain the above copyright |
---|
659 | notice, this list of conditions and the following disclaimer. |
---|
660 | 2. Redistributions in binary form must reproduce the above copyright |
---|
661 | notice, this list of conditions and the following disclaimer in the |
---|
662 | documentation and/or other materials provided with the distribution. |
---|
663 | 3. The name of the authors may not be used to endorse or promote products |
---|
664 | derived from this software without specific prior written permission. |
---|
665 | |
---|
666 | THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS |
---|
667 | OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
---|
668 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
669 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY |
---|
670 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
671 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |
---|
672 | GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
---|
673 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER |
---|
674 | IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
---|
675 | OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN |
---|
676 | IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
---|
677 | |
---|
678 | |
---|
679 | === Version history |
---|
680 | |
---|
681 | ==== Version 3.0.0 |
---|
682 | |
---|
683 | * CHICKEN 5 support. Now both CHICKEN 4 and CHICKEN 5 are supported. Most of the code is shared. Where CHICKEN 4 and 5 are not compatible, {{cond-expand}} is used for version-specific implementations. |
---|
684 | |
---|
685 | * New command line tool: {{salmonella-log-inquirer}}. This tool can be used to query salmonella log files. |
---|
686 | |
---|
687 | * More strict command line parser. Now invalid command line options are detected and reported as errors. |
---|
688 | |
---|
689 | * Exit non-zero in case of errors. Salmonella now exits non-zero in case of any check failure. |
---|
690 | |
---|
691 | * Add {{--clear-chicken-home}} command line option for {{salmonella}} and {{salmonella-epidemy}}. Don't use this option unless you know exactly what you are doing. Check the documentation of this option before using it. |
---|
692 | |
---|
693 | * The {{--eggs-source-dir}} option has been removed. It is still possible to use salmonella with a local directory containing egg sources by configuring {{chicken-install}} ({{-t local -l <eggs-source-dir>}} in CHICKEN 4 and by configuring the {{location}} form in {{PREFIX/share/chicken/setup.defaults}} in CHICKEN 5). |
---|
694 | |
---|
695 | * Replace --salmonella-prefix command line option by {{--salmonella-tools-dir}}. {{salmonella-epidemy}} relies on both {{salmonella}} and {{salmonella-log-merger}}. Since portably determining the directory of {{salmonella-epidemy}} is not trivial, and we don't want to rely on {{$PATH}} to call external tools, {{--salmonella-tools-dir}} has been created. With this, {{--salmonella-prefix}} became useless. |
---|
696 | |
---|
697 | * Salmonella now copy {{csc}} and {{csi}} from {{<host-prefix>/bin}} to {{<tmp-dir>/bin}}. With that, salmonella no longer adds <host-prefix>/bin to {{$PATH}}, which would cause salmonella to overlook eggs that rely on executables installed in {{<host-prefix>/bin}} but not declared as dependencies. |
---|
698 | |
---|
699 | * Many bugs fixed |
---|
700 | |
---|
701 | |
---|
702 | ==== Version 2.7 |
---|
703 | |
---|
704 | * Command line tools handle {{--version}} (suggested by Michael Stapelberg) |
---|
705 | * salmonella: prepend {{<repo dir>/bin}} and {{<chicken-installation-prefix>/bin}} to {{PATH}} |
---|
706 | * salmonella: fix scrutinizer warnings |
---|
707 | * salmonella: set {{CHICKEN_C_INCLUDE_PATH}} |
---|
708 | * salmonella: print/log environment variables set when running |
---|
709 | * salmonella-epidemy: delete repo-dir, unless {{--keep-repo}} is provided |
---|
710 | * salmonella-epidemy: write per-instance temporary directories in repo-dir |
---|
711 | * salmonella-epidemy: show when instances are finished |
---|
712 | * salmonella-epidemy: fix verbosity handling |
---|
713 | * salmonella-epidemy: properly escape special shell characters in {{--chicken-install-args}} |
---|
714 | * salmonella-epidemy: remove {{--eggs-source-dir}} support due to concurrency issues |
---|
715 | * salmonella-epidemy: unless {{--salmonella-prefix}} is provided, salmonella-epidemy calls salmonella from the same prefix |
---|
716 | * salmonella-epidemy: add {{-h}}|{{--help}} command line options |
---|
717 | * salmonella-epidemy: correctly handle {{--skip-eggs}} |
---|
718 | |
---|
719 | |
---|
720 | ==== Version 2.6 |
---|
721 | |
---|
722 | * Handle broken .meta files |
---|
723 | * Handle version specification in {{test-depends}} (thanks to [[/users/peter-bex|Peter Bex]] for pointing that out) |
---|
724 | * Fixed filenames for {{chicken}} and {{csi}} on mingw ({{.exe}} extension). Thanks to Dan Leslie for pointing that out. |
---|
725 | * The {{--this-egg}} command line option has been deprecated |
---|
726 | |
---|
727 | |
---|
728 | ==== Version 2.5 |
---|
729 | |
---|
730 | * Log {{check-version}} actions even when fetching eggs from remote servers (i.e., no {{--eggs-source-dir}}), so version numbers can get logged |
---|
731 | |
---|
732 | |
---|
733 | ==== Version 2.4 |
---|
734 | |
---|
735 | * "Fixed" hack to remove {{-test}} from {{chicken-install}} arguments when installing eggs |
---|
736 | |
---|
737 | |
---|
738 | ==== Version 2.3 |
---|
739 | |
---|
740 | * Bug fix: reference to unbound variable {{eggs}} (thanks to Shawn Rutledge for noticing that) |
---|
741 | |
---|
742 | |
---|
743 | ==== Version 2.2 |
---|
744 | |
---|
745 | * Only create the temporary repo dir when it is necessary (i.e., not for handling {{--help}} or when there's nothing to do) |
---|
746 | |
---|
747 | |
---|
748 | ==== Version 2.1 |
---|
749 | |
---|
750 | * Hours, minutes and seconds formatted with exact numbers ({{prettify-time}}) |
---|
751 | |
---|
752 | |
---|
753 | ==== Version 2.0 |
---|
754 | |
---|
755 | * Rewrite of the 1.x version |
---|