main.lua

Thu, 23 Mar 2023 18:28:20 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 23 Mar 2023 18:28:20 +0000
changeset 181
3a9b9c98304a
parent 174
662bd8c5ae28
permissions
-rwxr-xr-x

Add support for component connections

54
09a754d5fcc1 main: Change shebang to LuaJIT
Kim Alvefur <zash@zash.se>
parents: 46
diff changeset
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;
174
662bd8c5ae28 Serialize XML in a consistent order by default
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
18 local ordered = true;
131
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
19 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
20 local serve_mode = false;
157
b35dc87ebff0 Make --serve and --serve-port take an origin argument, in order to disallow random websites from accessing the local port
Waqas Hussain <waqas20@gmail.com>
parents: 155
diff changeset
21 local serve_origin = nil;
150
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
22 local only_tags, skip_tags;
67
a2a9dd606200 main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents: 65
diff changeset
23
181
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
24 local property_rules = {
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
25 -- Components connect to localhost by default, regardless of their hostname
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
26 { class = "component", properties = { connect_host = "localhost" } };
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
27 };
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
28
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 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
30 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
31 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
32 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
33 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
34 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
35 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
36 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
37 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
38 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
39
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
40 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
41 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
42 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
43 end
127
df5aa6a12561 main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
44
df5aa6a12561 main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
45 local files = {};
df5aa6a12561 main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
46
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
47 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
48 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
49 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
50 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
51 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
52 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
53 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
54 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
55 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
56 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
57 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
58 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
59 table.insert(property_rules, { class = "client", properties = { connect_host = host } });
181
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
60 elseif opt == "--component-port" then
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
61 local port = assert(tonumber(get_value()), "port number must be a number");
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
62 table.insert(property_rules, { class = "component", properties = { connect_port = port } });
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
63 elseif opt == "--component-host" then
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
64 local host = get_value();
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
65 table.insert(property_rules, { class = "component", 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
66 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
67 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
68 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
69 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
70 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
71 local new_lines = {};
67
a2a9dd606200 main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents: 65
diff changeset
72 local last_line_time = time();
a2a9dd606200 main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents: 65
diff changeset
73 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
74 sleep(0.05);
a2a9dd606200 main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents: 65
diff changeset
75 for line in server_log:lines() do
a2a9dd606200 main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents: 65
diff changeset
76 table.insert(new_lines, line);
a2a9dd606200 main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents: 65
diff changeset
77 last_line_time = time();
a2a9dd606200 main: Add delay when reading server logs
Matthew Wild <mwild1@gmail.com>
parents: 65
diff changeset
78 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
79 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
80 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
81 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
82 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
83 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
84 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
85 action_timeout = assert(tonumber(get_value()), "number expected for --step-timeout");
150
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
86 elseif opt == "--meta" then
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
87 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
88 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
89 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
90 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
91 else
150
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
92 error("Unable to parse metadata: "..tag);
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
93 end
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
94 elseif opt == "--with-tag" then
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
95 if not only_tags then
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
96 only_tags = {};
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
97 end
150
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
98 local tag = get_value();
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
99 local key, value = tag:match("^([^=]+):(.+)$");
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
100 table.insert(only_tags, { key or tag, value });
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
101 elseif opt == "--skip-tag" then
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
102 if not skip_tags then
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
103 skip_tags = {};
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
104 end
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
105 local tag = get_value();
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
106 local key, value = tag:match("^([^=]+):(.+)$");
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
107 table.insert(skip_tags, { key or tag, value });
107
65791ba388b9 scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents: 89
diff changeset
108 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
109 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
110 quiet = false;
65791ba388b9 scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents: 89
diff changeset
111 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
112 verse_log_levels = { "error" };
65791ba388b9 scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents: 89
diff changeset
113 quiet = true;
132
e6df4368029d main: Add long form of -d: --script-dir
Matthew Wild <mwild1@gmail.com>
parents: 131
diff changeset
114 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
115 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
116 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
117 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
118 end
df5aa6a12561 main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
119 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
120 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
121 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
122 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
123 end
df5aa6a12561 main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
124 end
131
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
125 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
126 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
127 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
128 serve_mode = 8007;
157
b35dc87ebff0 Make --serve and --serve-port take an origin argument, in order to disallow random websites from accessing the local port
Waqas Hussain <waqas20@gmail.com>
parents: 155
diff changeset
129 serve_origin = assert(get_value(), "origin expected for '--serve'");
137
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
130 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
131 serve_mode = assert(tonumber(get_value()), "expected port number");
157
b35dc87ebff0 Make --serve and --serve-port take an origin argument, in order to disallow random websites from accessing the local port
Waqas Hussain <waqas20@gmail.com>
parents: 155
diff changeset
132 serve_origin = assert(get_value(), "origin expected for '--serve-port'");
174
662bd8c5ae28 Serialize XML in a consistent order by default
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
133 elseif opt == "--unordered" then
662bd8c5ae28 Serialize XML in a consistent order by default
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
134 ordered = false;
58
8fa0a464c727 main.lua: Error on unknown command-line options
Matthew Wild <mwild1@gmail.com>
parents: 57
diff changeset
135 else
8fa0a464c727 main.lua: Error on unknown command-line options
Matthew Wild <mwild1@gmail.com>
parents: 57
diff changeset
136 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
137 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
138 end
127
df5aa6a12561 main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
139 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
140 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
141 end
df5aa6a12561 main: Add support for passing one or more script directories with '-d'
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
142 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
143 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
144
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
145 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
146 io.input(script_name);
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
147 return io.read("*a");
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
148 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
149
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
150 local function parse_script(data)
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
151 local parser = require "scansion.parser";
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
152 return assert(parser.parse(data));
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
153 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
154
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
155 local function initialize_script(script, context)
173
14ed4cb241f4 scansion: Support for per-script captures
Matthew Wild <mwild1@gmail.com>
parents: 162
diff changeset
156 script.captures = {};
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
157 local c = 0;
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
158 for name, object in pairs(script.objects) do --luacheck: ignore name
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
159 context.line = object.defined_line
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
160 local o = require("scansion.objects."..object.type);
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
161 object.handler = o;
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
162 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
163 apply_object_properties(object.type, object.name, object);
181
3a9b9c98304a Add support for component connections
Matthew Wild <mwild1@gmail.com>
parents: 174
diff changeset
164 if (object.type == "client" or object.type == "component") and not object.stanza_timeout then
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
165 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
166 end
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
167 o._validate(object);
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
168 c = c + 1;
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
169 end
123
96b81f84809a main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents: 117
diff changeset
170 end
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
171
123
96b81f84809a main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents: 117
diff changeset
172 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
173 script.finished = true;
149
b2e397594cbd main: Add more luacheck annotations
Matthew Wild <mwild1@gmail.com>
parents: 146
diff changeset
174 for name, obj in pairs(script.objects) do --luacheck: ignore name
123
96b81f84809a main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents: 117
diff changeset
175 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
176 obj.handler._finish(obj);
96b81f84809a main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents: 117
diff changeset
177 end
96b81f84809a main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents: 117
diff changeset
178 end
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
179 end
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
180
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
181 local function initialize_verse(errcb)
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
182 local verse = require "verse";
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
183
107
65791ba388b9 scansion: Add -q and -v for controlling log output
Matthew Wild <mwild1@gmail.com>
parents: 89
diff changeset
184 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
185
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
186 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
187 -- 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
188 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
189 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
190 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
191 end
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
192 errcb(err);
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
193 end
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
194 verse.set_error_handler(error_handler);
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
195 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
196 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
197
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
198 local function main(log_data, script, context)
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
199
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
200 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
201
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
202 initialize_script(script, context);
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
203
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
204 context.line = nil;
71
f7dbb46b5770 main.lua: Log script title and summary
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
205
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
206 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
207 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
208 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
209 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
210 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
211 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
212 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
213
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
214 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
215 local async = require "scansion.async";
7
ecac723bb6e1 main: Run actions in async runner
Matthew Wild <mwild1@gmail.com>
parents: 3
diff changeset
216
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
217 local runner = async.runner(function ()
80
6676218cc481 main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
218 for i, action in ipairs(script.actions) do
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
219 context.line = action.line_start;
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
220
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
221 local object = script.objects[action.object_name];
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
222 local handler = object.handler;
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
223
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
224 log_data("action", {
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
225 action = action.action;
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
226 object = object.name;
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
227 object_type = object.type;
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
228 extra = action.extra;
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
229 annotation = action.annotation;
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
230 line_start = action.line_start;
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
231 line_end = action.line_end;
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
232 });
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
233
161
fadae5511044 main: Make undefined actions throw a proper scansion error
Matthew Wild <mwild1@gmail.com>
parents: 160
diff changeset
234 if not handler[action.action] then
fadae5511044 main: Make undefined actions throw a proper scansion error
Matthew Wild <mwild1@gmail.com>
parents: 160
diff changeset
235 local e = new_error("unsupported-action", {
fadae5511044 main: Make undefined actions throw a proper scansion error
Matthew Wild <mwild1@gmail.com>
parents: 160
diff changeset
236 text = "Objects of type '"..object.type.."' do not support action '"..action.action.."'";
fadae5511044 main: Make undefined actions throw a proper scansion error
Matthew Wild <mwild1@gmail.com>
parents: 160
diff changeset
237 });
fadae5511044 main: Make undefined actions throw a proper scansion error
Matthew Wild <mwild1@gmail.com>
parents: 160
diff changeset
238 error(e);
fadae5511044 main: Make undefined actions throw a proper scansion error
Matthew Wild <mwild1@gmail.com>
parents: 160
diff changeset
239 end
68
cd63f764d1bf main.lua: Restructure server log reading
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
240 if server_log_reader then
cd63f764d1bf main.lua: Restructure server log reading
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
241 log_data("server", { lines = server_log_reader() });
cd63f764d1bf main.lua: Restructure server log reading
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
242 end
131
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
243
80
6676218cc481 main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
244 if action_timeout and action_timeout > 0 then
6676218cc481 main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
245 local action_number = i;
6676218cc481 main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
246 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
247 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
248 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
249 error(e);
80
6676218cc481 main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
250 end
6676218cc481 main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
251 end);
6676218cc481 main.lua: Add per-action timeout
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
252 end
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
253 do
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
254 --luacheck: ignore ok err
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
255 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
256 if server_log_reader then
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
257 log_data("server", { lines = server_log_reader() });
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
258 end
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
259 if not ok then
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
260 log_data("error", { message = err, line = context.line });
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
261 error(err);
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
262 end
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
263 end
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
264 end
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
265 context.line = nil;
89
f353cd50c075 main.lua: Add flag for when script has finished
Matthew Wild <mwild1@gmail.com>
parents: 82
diff changeset
266 script.finished = true;
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
267 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
268 verse.quit();
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
269 end, {
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
270 error = function (runner, _err) --luacheck: ignore runner
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
271 verse.log("error", "Runner caught error: %s", _err);
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
272 ok, err = false, _err;
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
273 verse.quit();
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
274 end;
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
275 });
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
276
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
277 runner:run(true);
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
278 verse.log("debug", "runner paused")
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
279
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
280 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
281
0ee626030acb main.lua: Read any remaining server logs after script completes (error or otherwise)
Matthew Wild <mwild1@gmail.com>
parents: 80
diff changeset
282 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
283 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
284 end
0ee626030acb main.lua: Read any remaining server logs after script completes (error or otherwise)
Matthew Wild <mwild1@gmail.com>
parents: 80
diff changeset
285
123
96b81f84809a main: Factor out script uninitialization into a function for consistency
Matthew Wild <mwild1@gmail.com>
parents: 117
diff changeset
286 uninitialize_script(script);
117
fd4025e54f4d main: Add _finish handler so objects can clean up
Matthew Wild <mwild1@gmail.com>
parents: 115
diff changeset
287
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
288 return ok, err;
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
289 end
7
ecac723bb6e1 main: Run actions in async runner
Matthew Wild <mwild1@gmail.com>
parents: 3
diff changeset
290
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
291 -- 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
292 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
293
131
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
294 local console_handlers = require "scansion.console".new({
174
662bd8c5ae28 Serialize XML in a consistent order by default
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
295 ordered = ordered;
131
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
296 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
297 quiet = quiet;
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
298 });
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
299
174
662bd8c5ae28 Serialize XML in a consistent order by default
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
300 if ordered then
662bd8c5ae28 Serialize XML in a consistent order by default
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
301 require "scansion.ordered_serializer".enable();
662bd8c5ae28 Serialize XML in a consistent order by default
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
302 end
662bd8c5ae28 Serialize XML in a consistent order by default
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
303
115
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
diff changeset
304 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
305 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
306 if h then
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
307 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
308 end
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
diff changeset
309 end
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
diff changeset
310
3
3cc860a893d2 main: verse.loop()
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
311
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
312 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
313 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
314 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
315 result_log:write("[\n");
115
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
diff changeset
316 end
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
diff changeset
317
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
diff changeset
318 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
319 console_logger(type, data);
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
diff changeset
320
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
diff changeset
321 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
322 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
323 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
324 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
325 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
326 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
327 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
328 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
329 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
330 end
115
0f8d0906af6e Revamp console output to be driven by log_data()
Matthew Wild <mwild1@gmail.com>
parents: 114
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
155
84aa28dda508 main: Pass logging function to run_test_script
Matthew Wild <mwild1@gmail.com>
parents: 154
diff changeset
333 local function run_test_script(script_name, script_text, log_data)
136
2df38fd36b2b main: Modify run_test_script() to take the actual script data
Matthew Wild <mwild1@gmail.com>
parents: 135
diff changeset
334 local script = parse_script(script_text)
146
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
335 local script_data = { title = script.title, summary = script.summary, tags = script.tags, filename = script_name };
150
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
336
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
337 local tags = script.tags or {};
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
338 if skip_tags then
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
339 for _, skip in ipairs(skip_tags) do
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
340 local k, v = skip[1], skip[2];
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
341 if tags[k] and (not(v) or tags[k] == v) then
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
342 return { name = script.title or script.name, status = "skipped", reason = "skipping tag "..k };
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
343 end
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
344 end
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
345 end
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
346 if only_tags then
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
347 for _, only in ipairs(only_tags) do
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
348 local k, v = only[1], only[2];
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
349 if not tags[k] or (v and tags[k] ~= v) then
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
350 return { name = script.title or script.name, status = "skipped", reason = "not tagged "..k };
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
351 end
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
352 end
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
353 end
cf2b2fcd0bc1 main: Add support for including/excluding tests based on tag
Matthew Wild <mwild1@gmail.com>
parents: 149
diff changeset
354
146
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
355 log_data("script", script_data);
109
f7609d1a5bdf main.lua: Some fixes for [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 108
diff changeset
356
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
357 local context = { line = nil };
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
358 local ok, result, err = pcall(main, log_data, script, context);
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
359
146
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
360 local event, status, reason;
108
cd58c64c67c0 scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents: 107
diff changeset
361 if not ok then
146
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
362 event, status, reason = "test-error", "error", result;
108
cd58c64c67c0 scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents: 107
diff changeset
363 elseif not result then
146
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
364 event, status, reason = "test-failed", "fail", err;
131
2d19fdddb9ee main, console: Allow force-printing --summary even if -q is passed
Matthew Wild <mwild1@gmail.com>
parents: 129
diff changeset
365 else
146
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
366 event, status, reason = "test-passed", "ok", nil;
108
cd58c64c67c0 scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents: 107
diff changeset
367 end
146
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
368
162
f888f236321f Make current line number available in all error events
Waqas Hussain <waqas20@gmail.com>
parents: 161
diff changeset
369 local result_data = { name = script.title or script_name, status = status, reason = reason, line = context.line };
146
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
370
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
371 log_data(event, result_data);
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
372
885fa9f5929d main, scansion.console: Refactor (changes event data format) so that test results include test name
Matthew Wild <mwild1@gmail.com>
parents: 144
diff changeset
373 return result_data;
108
cd58c64c67c0 scansion: Add support for passing multiple scripts on the command-line
Matthew Wild <mwild1@gmail.com>
parents: 107
diff changeset
374 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
375
137
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
376
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
377 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
378 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
379
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
380 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
381 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
382 end
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
383
149
b2e397594cbd main: Add more luacheck annotations
Matthew Wild <mwild1@gmail.com>
parents: 146
diff changeset
384 initialize_verse(function (e) --luacheck: ignore e
137
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
385 -- 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
386 -- 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
387 end);
157
b35dc87ebff0 Make --serve and --serve-port take an origin argument, in order to disallow random websites from accessing the local port
Waqas Hussain <waqas20@gmail.com>
parents: 155
diff changeset
388 serve.run({ port = serve_mode, origin = serve_origin }, run_test_script);
137
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
389 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
390 end
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
391
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
392 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
393
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
394 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
395
135
0c1887ee2059 main: Move check for whether any files have been provided
Matthew Wild <mwild1@gmail.com>
parents: 134
diff changeset
396 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
397 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
398 local script_text = read_script(files[i]);
155
84aa28dda508 main: Pass logging function to run_test_script
Matthew Wild <mwild1@gmail.com>
parents: 154
diff changeset
399 local ret = run_test_script(files[i], script_text, log_data);
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
400 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
401 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
402 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
403 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
404 table.insert(result_tally.all, ret);
21
8ac80da35408 main: Refactor into functions
Matthew Wild <mwild1@gmail.com>
parents: 14
diff changeset
405 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
406
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
407 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
408
137
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
409
129
ff11f32d2499 main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents: 128
diff changeset
410 local exit_code = 0;
ff11f32d2499 main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents: 128
diff changeset
411 if result_tally.error then
ff11f32d2499 main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents: 128
diff changeset
412 exit_code = 2;
ff11f32d2499 main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents: 128
diff changeset
413 elseif result_tally.fail then
ff11f32d2499 main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents: 128
diff changeset
414 exit_code = 1;
ff11f32d2499 main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents: 128
diff changeset
415 end
ff11f32d2499 main: Fix to restore correct exit code
Matthew Wild <mwild1@gmail.com>
parents: 128
diff changeset
416
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
417 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
418
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents: 136
diff changeset
419

mercurial