Wed, 12 Sep 2018 10:56:51 +0100
main: Only process .scs files in directories
54 | 1 | #!/usr/bin/env luajit |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
2 | |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
3 | local json = require "cjson"; |
61
21871fb2db99
main: Switch to socket.gettime for higher accuracy timestamps in machine-readable logs
Matthew Wild <mwild1@gmail.com>
parents:
59
diff
changeset
|
4 | local time = require "socket".gettime; |
67
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
5 | local sleep = require "socket".sleep; |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
6 | |
110
d58403c8615e
main.lua: Don't log traceback for normal scansion internal errors
Matthew Wild <mwild1@gmail.com>
parents:
109
diff
changeset
|
7 | local is_scansion_error = require "scansion.error".is; |
124
168cc5aad639
main: Throw scansion error on timeout, to avoid unnecessary traceback
Matthew Wild <mwild1@gmail.com>
parents:
123
diff
changeset
|
8 | local new_error = require "scansion.error".new_error; |
168cc5aad639
main: Throw scansion error on timeout, to avoid unnecessary traceback
Matthew Wild <mwild1@gmail.com>
parents:
123
diff
changeset
|
9 | |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
10 | local result_log_filename = nil; |
62
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
11 | local server_log_reader = nil; |
69
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
12 | local test_metadata = {}; |
67
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
13 | local server_log_wait_time = 0.2; |
76
fecc1af937be
main.lua: Add --skip-server-startup-log to discard server log output at startup
Matthew Wild <mwild1@gmail.com>
parents:
71
diff
changeset
|
14 | local skip_server_startup_log = false; |
137
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
15 | local action_timeout = 10; |
107
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
16 | local verse_log_levels = { "warn", "error" }; |
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
17 | local quiet = false; |
131
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
18 | local force_summary = false; |
137
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
19 | local serve_mode = false; |
67
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
20 | |
56
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
21 | local property_rules = {}; |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
22 | |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
23 | local function apply_object_properties(class, name, object) |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
24 | for _, rule in ipairs(property_rules) do |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
25 | if (not(rule.class) or tostring(rule.class):lower() == tostring(class):lower()) |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
26 | and (not(rule.name) or tostring(rule.name):lower() == tostring(name):lower()) then |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
27 | for prop_key, prop_value in pairs(rule.properties) do |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
28 | object[prop_key] = prop_value; |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
29 | end |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
30 | end |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
31 | end |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
32 | end |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
33 | |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
34 | local function process_options() |
56
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
35 | local function get_value() |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
36 | return (assert(table.remove(arg, 1), "unexpected end of command-line options")); |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
37 | end |
127
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
38 | |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
39 | local files = {}; |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
40 | |
56
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
41 | while arg[1] and arg[1]:sub(1,1) == "-" do |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
42 | local opt = arg[1]; |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
43 | if opt == "--" then |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
44 | table.remove(arg, 1); |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
45 | break; |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
46 | end |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
47 | table.remove(arg, 1); |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
48 | if opt == "--port" or opt == "-p" then |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
49 | local port = assert(tonumber(get_value()), "port number must be a number"); |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
50 | table.insert(property_rules, { class = "client", properties = { connect_port = port } }); |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
51 | elseif opt == "--host" or opt == "-h" then |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
52 | local host = get_value(); |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
53 | table.insert(property_rules, { class = "client", properties = { connect_host = host } }); |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
54 | elseif opt == "--out" or opt == "-o" then |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
55 | result_log_filename = get_value(); |
62
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
56 | elseif opt == "--server-log" or opt == "-s" then |
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
57 | local server_log = assert(io.open(get_value(), "r")); |
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
58 | function server_log_reader() |
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
59 | local new_lines = {}; |
67
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
60 | local last_line_time = time(); |
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
61 | while time() - last_line_time < server_log_wait_time do |
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
62 | sleep(0.05); |
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
63 | for line in server_log:lines() do |
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
64 | table.insert(new_lines, line); |
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
65 | last_line_time = time(); |
a2a9dd606200
main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents:
65
diff
changeset
|
66 | end |
62
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
67 | end |
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
68 | return new_lines; |
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
69 | end |
76
fecc1af937be
main.lua: Add --skip-server-startup-log to discard server log output at startup
Matthew Wild <mwild1@gmail.com>
parents:
71
diff
changeset
|
70 | elseif opt == "--skip-server-startup-log" then |
fecc1af937be
main.lua: Add --skip-server-startup-log to discard server log output at startup
Matthew Wild <mwild1@gmail.com>
parents:
71
diff
changeset
|
71 | skip_server_startup_log = true; |
82
f90056b8e278
main.lua, client: Make timeouts more coherent (stanza timeout was greater than action timeout), add command-line options to change them
Matthew Wild <mwild1@gmail.com>
parents:
81
diff
changeset
|
72 | elseif opt == "--step-timeout" then |
f90056b8e278
main.lua, client: Make timeouts more coherent (stanza timeout was greater than action timeout), add command-line options to change them
Matthew Wild <mwild1@gmail.com>
parents:
81
diff
changeset
|
73 | action_timeout = assert(tonumber(get_value()), "number expected for --step-timeout"); |
69
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
74 | elseif opt == "--tag" then |
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
75 | local tag = get_value(); |
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
76 | local key, value = tag:match("^([^=]+):(.+)$"); |
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
77 | if key and value then |
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
78 | test_metadata[key] = value; |
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
79 | else |
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
80 | error("Unable to parse tag: "..tag); |
1de0ebd8832f
main.lua: Support tagging metadata for test runs, and include it in JSON output
Matthew Wild <mwild1@gmail.com>
parents:
68
diff
changeset
|
81 | end |
107
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
82 | elseif opt == "--verbose" or opt == "-v" then |
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
83 | verse_log_levels = { "debug", "info", "warn", "error" }; |
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
84 | quiet = false; |
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
85 | elseif opt == "--quiet" or opt == "-q" then |
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
86 | verse_log_levels = { "error" }; |
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
87 | quiet = true; |
132
e6df4368029d
main: Add long form of -d: --script-dir
Matthew Wild <mwild1@gmail.com>
parents:
131
diff
changeset
|
88 | elseif opt == "--script-dir" or opt == "-d" then |
127
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
89 | local have_lfs, lfs = pcall(require, "lfs"); |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
90 | if not have_lfs then |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
91 | error("The '-d' parameter requires LuaFileSystem (lfs), please make sure this library is available"); |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
92 | end |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
93 | local path = assert(get_value(), "path expected for '-d'"):gsub("/*$", ""); |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
94 | for f in lfs.dir(path) do |
144
f7e8b865873f
main: Only process .scs files in directories
Matthew Wild <mwild1@gmail.com>
parents:
137
diff
changeset
|
95 | if f:sub(1,1) ~= "." and f:sub(-4) == ".scs" then |
127
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
96 | table.insert(files, path.."/"..f); |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
97 | end |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
98 | end |
131
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
99 | elseif opt == "--summary" then |
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
100 | force_summary = true; |
137
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
101 | elseif opt == "--serve" then |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
102 | serve_mode = 8007; |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
103 | elseif opt == "--serve-port" then |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
104 | serve_mode = assert(tonumber(get_value()), "expected port number"); |
58
8fa0a464c727
main.lua: Error on unknown command-line options
Matthew Wild <mwild1@gmail.com>
parents:
57
diff
changeset
|
105 | else |
8fa0a464c727
main.lua: Error on unknown command-line options
Matthew Wild <mwild1@gmail.com>
parents:
57
diff
changeset
|
106 | error("Unhandled command-line option: "..opt); |
56
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
107 | end |
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
108 | end |
127
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
109 | for _, file in ipairs(arg) do |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
110 | table.insert(files, file); |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
111 | end |
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
112 | return files; |
56
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
113 | end |
0
2e31b584f8d9
It is better to write and run incomplete tests than not to run complete tests. -- Martin Fowler
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 | |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
115 | local function read_script(script_name) |
108
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
116 | io.input(script_name); |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
117 | return io.read("*a"); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
118 | end |
0
2e31b584f8d9
It is better to write and run incomplete tests than not to run complete tests. -- Martin Fowler
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 | |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
120 | local function parse_script(data) |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
121 | local parser = require "scansion.parser"; |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
122 | return assert(parser.parse(data)); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
123 | end |
0
2e31b584f8d9
It is better to write and run incomplete tests than not to run complete tests. -- Martin Fowler
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 | |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
125 | local function initialize_script(script) |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
126 | local c = 0; |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
127 | for name, object in pairs(script.objects) do --luacheck: ignore name |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
128 | local o = require("scansion.objects."..object.type); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
129 | object.handler = o; |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
130 | object.script = script; |
56
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
131 | apply_object_properties(object.type, object.name, object); |
82
f90056b8e278
main.lua, client: Make timeouts more coherent (stanza timeout was greater than action timeout), add command-line options to change them
Matthew Wild <mwild1@gmail.com>
parents:
81
diff
changeset
|
132 | if object.type == "client" and not object.stanza_timeout then |
f90056b8e278
main.lua, client: Make timeouts more coherent (stanza timeout was greater than action timeout), add command-line options to change them
Matthew Wild <mwild1@gmail.com>
parents:
81
diff
changeset
|
133 | object.stanza_timeout = action_timeout - 1; |
f90056b8e278
main.lua, client: Make timeouts more coherent (stanza timeout was greater than action timeout), add command-line options to change them
Matthew Wild <mwild1@gmail.com>
parents:
81
diff
changeset
|
134 | end |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
135 | o._validate(object); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
136 | c = c + 1; |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
137 | end |
123
96b81f84809a
main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents:
117
diff
changeset
|
138 | end |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
139 | |
123
96b81f84809a
main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents:
117
diff
changeset
|
140 | local function uninitialize_script(script) |
134
ce945ba7a754
main: Don't let action timeout fire after a script already finished
Matthew Wild <mwild1@gmail.com>
parents:
132
diff
changeset
|
141 | script.finished = true; |
123
96b81f84809a
main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents:
117
diff
changeset
|
142 | for name, obj in pairs(script.objects) do |
96b81f84809a
main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents:
117
diff
changeset
|
143 | if obj.handler._finish then |
96b81f84809a
main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents:
117
diff
changeset
|
144 | obj.handler._finish(obj); |
96b81f84809a
main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents:
117
diff
changeset
|
145 | end |
96b81f84809a
main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents:
117
diff
changeset
|
146 | end |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
147 | end |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
148 | |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
149 | local function initialize_verse(errcb) |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
150 | local verse = require "verse"; |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
151 | |
107
65791ba388b9
scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents:
89
diff
changeset
|
152 | verse.set_log_handler(verse._default_log_handler, verse_log_levels); |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
153 | |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
154 | local function error_handler(err) |
110
d58403c8615e
main.lua: Don't log traceback for normal scansion internal errors
Matthew Wild <mwild1@gmail.com>
parents:
109
diff
changeset
|
155 | -- Only log actual errors. Those reported by Scansion will be handled gracefully higher up. |
d58403c8615e
main.lua: Don't log traceback for normal scansion internal errors
Matthew Wild <mwild1@gmail.com>
parents:
109
diff
changeset
|
156 | if not is_scansion_error(err) then |
d58403c8615e
main.lua: Don't log traceback for normal scansion internal errors
Matthew Wild <mwild1@gmail.com>
parents:
109
diff
changeset
|
157 | verse.log("error", "Error: %s", err); |
d58403c8615e
main.lua: Don't log traceback for normal scansion internal errors
Matthew Wild <mwild1@gmail.com>
parents:
109
diff
changeset
|
158 | verse.log("error", "Traceback: %s", debug.traceback()); |
d58403c8615e
main.lua: Don't log traceback for normal scansion internal errors
Matthew Wild <mwild1@gmail.com>
parents:
109
diff
changeset
|
159 | end |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
160 | errcb(err); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
161 | end |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
162 | verse.set_error_handler(error_handler); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
163 | return verse; |
0
2e31b584f8d9
It is better to write and run incomplete tests than not to run complete tests. -- Martin Fowler
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 | end |
2e31b584f8d9
It is better to write and run incomplete tests than not to run complete tests. -- Martin Fowler
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 | |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
166 | local function main(log_data, script) |
56
5eda634ea15b
main.lua: Command-line processing, and a way to set connect_host/connect_port from the command-line
Matthew Wild <mwild1@gmail.com>
parents:
55
diff
changeset
|
167 | |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
168 | local ok, err = true; |
0
2e31b584f8d9
It is better to write and run incomplete tests than not to run complete tests. -- Martin Fowler
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
169 | |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
170 | initialize_script(script); |
71
f7dbb46b5770
main.lua: Log script title and summary
Matthew Wild <mwild1@gmail.com>
parents:
69
diff
changeset
|
171 | |
62
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
172 | if server_log_reader then |
76
fecc1af937be
main.lua: Add --skip-server-startup-log to discard server log output at startup
Matthew Wild <mwild1@gmail.com>
parents:
71
diff
changeset
|
173 | if skip_server_startup_log then |
fecc1af937be
main.lua: Add --skip-server-startup-log to discard server log output at startup
Matthew Wild <mwild1@gmail.com>
parents:
71
diff
changeset
|
174 | server_log_reader(); |
fecc1af937be
main.lua: Add --skip-server-startup-log to discard server log output at startup
Matthew Wild <mwild1@gmail.com>
parents:
71
diff
changeset
|
175 | else |
fecc1af937be
main.lua: Add --skip-server-startup-log to discard server log output at startup
Matthew Wild <mwild1@gmail.com>
parents:
71
diff
changeset
|
176 | log_data("server", { lines = server_log_reader() }); |
fecc1af937be
main.lua: Add --skip-server-startup-log to discard server log output at startup
Matthew Wild <mwild1@gmail.com>
parents:
71
diff
changeset
|
177 | end |
62
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
178 | end |
52a24deb0cc3
main: Support for --server-log/-s option, which reads the server's log file during a test and includes it in the JSON log
Matthew Wild <mwild1@gmail.com>
parents:
61
diff
changeset
|
179 | |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
180 | local verse = initialize_verse(function (_err) ok, err = false, _err end); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
181 | local async = require "scansion.async"; |
7
ecac723bb6e1
main: Run actions in async runner
Matthew Wild <mwild1@gmail.com>
parents:
3
diff
changeset
|
182 | |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
183 | local runner = async.runner(function () |
80
6676218cc481
main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents:
78
diff
changeset
|
184 | for i, action in ipairs(script.actions) do |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
185 | local object = script.objects[action.object_name]; |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
186 | local handler = object.handler; |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
187 | assert(handler[action.action], "Objects of type '"..object.type.."' do not support action '"..action.action.."'"); |
131
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
188 | |
68
cd63f764d1bf
main.lua: Restructure server log reading
Matthew Wild <mwild1@gmail.com>
parents:
67
diff
changeset
|
189 | if server_log_reader then |
cd63f764d1bf
main.lua: Restructure server log reading
Matthew Wild <mwild1@gmail.com>
parents:
67
diff
changeset
|
190 | log_data("server", { lines = server_log_reader() }); |
cd63f764d1bf
main.lua: Restructure server log reading
Matthew Wild <mwild1@gmail.com>
parents:
67
diff
changeset
|
191 | end |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
192 | log_data("action", { |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
193 | action = action.action; |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
194 | object = object.name; |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
195 | object_type = object.type; |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
196 | extra = action.extra; |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
197 | annotation = action.annotation; |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
198 | }); |
131
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
199 | |
80
6676218cc481
main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents:
78
diff
changeset
|
200 | if action_timeout and action_timeout > 0 then |
6676218cc481
main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents:
78
diff
changeset
|
201 | local action_number = i; |
6676218cc481
main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents:
78
diff
changeset
|
202 | verse.add_task(action_timeout, function () |
134
ce945ba7a754
main: Don't let action timeout fire after a script already finished
Matthew Wild <mwild1@gmail.com>
parents:
132
diff
changeset
|
203 | if i == action_number and not script.finished then |
124
168cc5aad639
main: Throw scansion error on timeout, to avoid unnecessary traceback
Matthew Wild <mwild1@gmail.com>
parents:
123
diff
changeset
|
204 | local e = new_error("action-timeout", { text = "Timeout waiting for response" }); |
168cc5aad639
main: Throw scansion error on timeout, to avoid unnecessary traceback
Matthew Wild <mwild1@gmail.com>
parents:
123
diff
changeset
|
205 | error(e); |
80
6676218cc481
main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents:
78
diff
changeset
|
206 | end |
6676218cc481
main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents:
78
diff
changeset
|
207 | end); |
6676218cc481
main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents:
78
diff
changeset
|
208 | end |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
209 | do |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
210 | --luacheck: ignore ok err |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
211 | local ok, err = pcall(handler[action.action], object, action.extra); |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
212 | if server_log_reader then |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
213 | log_data("server", { lines = server_log_reader() }); |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
214 | end |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
215 | if not ok then |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
216 | log_data("error", { message = err }); |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
217 | error(err); |
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
218 | end |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
219 | end |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
220 | end |
89
f353cd50c075
main.lua: Add flag for when script has finished
Matthew Wild <mwild1@gmail.com>
parents:
82
diff
changeset
|
221 | script.finished = true; |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
222 | verse.log("info", "Completed script!"); |
30
3c2489e79074
main: Remove 5s delay on quitting (was a hack for debug purposes)
Matthew Wild <mwild1@gmail.com>
parents:
21
diff
changeset
|
223 | verse.quit(); |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
224 | end, { |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
225 | error = function (runner, _err) --luacheck: ignore runner |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
226 | verse.log("error", "Runner caught error: %s", _err); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
227 | ok, err = false, _err; |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
228 | verse.quit(); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
229 | end; |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
230 | }); |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
231 | |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
232 | runner:run(true); |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
233 | verse.log("debug", "runner paused") |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
234 | |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
235 | verse.loop(); |
81
0ee626030acb
main.lua: Read any remaining server logs after script completes (error or otherwise)
Matthew Wild <mwild1@gmail.com>
parents:
80
diff
changeset
|
236 | |
0ee626030acb
main.lua: Read any remaining server logs after script completes (error or otherwise)
Matthew Wild <mwild1@gmail.com>
parents:
80
diff
changeset
|
237 | if server_log_reader then |
0ee626030acb
main.lua: Read any remaining server logs after script completes (error or otherwise)
Matthew Wild <mwild1@gmail.com>
parents:
80
diff
changeset
|
238 | log_data("server", { lines = server_log_reader() }); |
0ee626030acb
main.lua: Read any remaining server logs after script completes (error or otherwise)
Matthew Wild <mwild1@gmail.com>
parents:
80
diff
changeset
|
239 | end |
0ee626030acb
main.lua: Read any remaining server logs after script completes (error or otherwise)
Matthew Wild <mwild1@gmail.com>
parents:
80
diff
changeset
|
240 | |
123
96b81f84809a
main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents:
117
diff
changeset
|
241 | uninitialize_script(script); |
117
fd4025e54f4d
main: Add _finish handler so objects can clean up
Matthew Wild <mwild1@gmail.com>
parents:
115
diff
changeset
|
242 | |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
243 | return ok, err; |
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
244 | end |
7
ecac723bb6e1
main: Run actions in async runner
Matthew Wild <mwild1@gmail.com>
parents:
3
diff
changeset
|
245 | |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
246 | -- Process command-line options |
127
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
247 | local files = process_options(); |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
248 | |
131
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
249 | local console_handlers = require "scansion.console".new({ |
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
250 | summary = not(quiet) or force_summary; |
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
251 | quiet = quiet; |
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
252 | }); |
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
253 | |
115
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
254 | local function console_logger(event, data) |
131
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
255 | local h = console_handlers[event]; |
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
256 | if h then |
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
257 | io.write(h(data), "\n"); |
115
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
258 | end |
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
259 | end |
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
260 | |
3 | 261 | |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
262 | local result_log; |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
263 | if result_log_filename then |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
264 | result_log = assert(io.open(result_log_filename, "w+")); |
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
265 | result_log:write("[\n"); |
115
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
266 | end |
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
267 | |
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
268 | local function log_data(type, data) |
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
269 | console_logger(type, data); |
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
270 | |
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
271 | if result_log then |
61
21871fb2db99
main: Switch to socket.gettime for higher accuracy timestamps in machine-readable logs
Matthew Wild <mwild1@gmail.com>
parents:
59
diff
changeset
|
272 | local entry = { type = type, data = data, time = time() }; |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
273 | result_log:write(" ", json.encode(entry), type ~= "end" and ",\n" or "\n"); |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
274 | result_log:flush(); |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
275 | if type == "end" then |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
276 | result_log:write("]\n"); |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
277 | result_log:close(); |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
278 | result_log = nil; |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
279 | end |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
280 | end |
115
0f8d0906af6e
Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents:
114
diff
changeset
|
281 | end; |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
282 | |
136
2df38fd36b2b
main: Modify run_test_script() to take the actual script data
Matthew Wild <mwild1@gmail.com>
parents:
135
diff
changeset
|
283 | local function run_test_script(script_name, script_text) |
2df38fd36b2b
main: Modify run_test_script() to take the actual script data
Matthew Wild <mwild1@gmail.com>
parents:
135
diff
changeset
|
284 | local script = parse_script(script_text) |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
285 | log_data("script", { title = script.title, summary = script.summary, tags = script.tags, filename = script_name }); |
109
f7609d1a5bdf
main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
108
diff
changeset
|
286 | |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
287 | local ok, result, err = pcall(main, log_data, script); |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
288 | |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
289 | local status, reason = "ok"; |
108
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
290 | if not ok then |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
291 | status, reason = "error", result; |
108
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
292 | log_data("test-error", { error = result }); |
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
293 | elseif not result then |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
294 | status, reason = "fail", err; |
108
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
295 | log_data("test-failed", { error = err }); |
131
2d19fdddb9ee
main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents:
129
diff
changeset
|
296 | else |
108
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
297 | log_data("test-passed"); |
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
298 | end |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
299 | return { name = script.title or script_name, status = status, reason = reason }; |
108
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
300 | end |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
301 | |
137
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
302 | |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
303 | if serve_mode then |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
304 | local have_serve, serve = pcall(require, "scansion.serve"); |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
305 | |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
306 | if not have_serve then |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
307 | error("This version of scansion was not built with --with-server"); |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
308 | end |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
309 | |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
310 | initialize_verse(function (e) |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
311 | -- This function handles scansion errors, |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
312 | -- but they shouldn't reach here anyway |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
313 | end); |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
314 | serve.run({ port = serve_mode }, run_test_script); |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
315 | os.exit(0); |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
316 | end |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
317 | |
114
48aab6c9e9d3
main: Move 'start' event to correct place (signals start of test run, not individual tests)
Matthew Wild <mwild1@gmail.com>
parents:
113
diff
changeset
|
318 | log_data("start", { metadata = test_metadata }); |
48aab6c9e9d3
main: Move 'start' event to correct place (signals start of test run, not individual tests)
Matthew Wild <mwild1@gmail.com>
parents:
113
diff
changeset
|
319 | |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
320 | local result_tally = { all = {} }; |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
321 | |
135
0c1887ee2059
main: Move check for whether any files have been provided
Matthew Wild <mwild1@gmail.com>
parents:
134
diff
changeset
|
322 | assert(#files > 0, "No test script provided"); |
127
df5aa6a12561
main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents:
125
diff
changeset
|
323 | for i = 1, #files do |
136
2df38fd36b2b
main: Modify run_test_script() to take the actual script data
Matthew Wild <mwild1@gmail.com>
parents:
135
diff
changeset
|
324 | local script_text = read_script(files[i]); |
2df38fd36b2b
main: Modify run_test_script() to take the actual script data
Matthew Wild <mwild1@gmail.com>
parents:
135
diff
changeset
|
325 | local ret = run_test_script(files[i], script_text); |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
326 | if not result_tally[ret.status] then |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
327 | result_tally[ret.status] = {}; |
108
cd58c64c67c0
scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents:
107
diff
changeset
|
328 | end |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
329 | table.insert(result_tally[ret.status], ret); |
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
330 | table.insert(result_tally.all, ret); |
21
8ac80da35408
main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents:
14
diff
changeset
|
331 | end |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
332 | |
125
dfff8dfe8861
main: Refactor to support a more advanced summary at the end of a test run
Matthew Wild <mwild1@gmail.com>
parents:
124
diff
changeset
|
333 | log_data("end", { time = time(), summary = result_tally }); |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
334 | |
137
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
335 | |
129
ff11f32d2499
main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents:
128
diff
changeset
|
336 | local exit_code = 0; |
ff11f32d2499
main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents:
128
diff
changeset
|
337 | if result_tally.error then |
ff11f32d2499
main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents:
128
diff
changeset
|
338 | exit_code = 2; |
ff11f32d2499
main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents:
128
diff
changeset
|
339 | elseif result_tally.fail then |
ff11f32d2499
main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents:
128
diff
changeset
|
340 | exit_code = 1; |
ff11f32d2499
main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents:
128
diff
changeset
|
341 | end |
ff11f32d2499
main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents:
128
diff
changeset
|
342 | |
57
6407a0157518
main.lua: Add support for JSON log output to a file, for a machine-readable transcript of the test results
Matthew Wild <mwild1@gmail.com>
parents:
56
diff
changeset
|
343 | os.exit(exit_code); |
137
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
344 | |
091212cef52a
main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
136
diff
changeset
|
345 |