fix actor working
This commit is contained in:
104
test.ce
104
test.ce
@@ -318,7 +318,7 @@ function collect_actor_tests(package_name, specific_test) {
|
||||
|
||||
// Spawn an actor test and track it
|
||||
function spawn_actor_test(test_info) {
|
||||
var test_name = text(test_info.file, 6, -3) // remove "tests/" and ".ce"
|
||||
var test_name = text(test_info.file, 6, -3)
|
||||
log.console(` [ACTOR] ${test_info.file}`)
|
||||
|
||||
var entry = {
|
||||
@@ -331,16 +331,41 @@ function spawn_actor_test(test_info) {
|
||||
}
|
||||
|
||||
var _spawn = function() {
|
||||
var actor_path = text(test_info.path, 0, -3) // remove .ce
|
||||
entry.actor = $start(actor_path)
|
||||
var actor_path = text(test_info.path, 0, -3)
|
||||
$start(function(event) {
|
||||
var end_time = time.number()
|
||||
var duration_ns = round((end_time - entry.start_time) * 1000000000)
|
||||
if (event.type == 'greet') {
|
||||
entry.actor = event.actor
|
||||
return
|
||||
}
|
||||
var idx = find(pending_actor_tests, e => e == entry)
|
||||
if (idx != null) {
|
||||
pending_actor_tests = array(
|
||||
array(pending_actor_tests, 0, idx),
|
||||
array(pending_actor_tests, idx + 1)
|
||||
)
|
||||
}
|
||||
entry.duration_ns = duration_ns
|
||||
if (event.type == 'stop') {
|
||||
entry.status = "passed"
|
||||
log.console(` PASS ${test_name}`)
|
||||
} else {
|
||||
entry.status = "failed"
|
||||
entry.error = { message: event.reason || "Actor disrupted" }
|
||||
log.console(` FAIL ${test_name}: ${entry.error.message}`)
|
||||
}
|
||||
push(actor_test_results, entry)
|
||||
if (gc_after_each_test) dbg.gc()
|
||||
check_completion()
|
||||
}, actor_path)
|
||||
push(pending_actor_tests, entry)
|
||||
} disruption {
|
||||
entry.status = "failed"
|
||||
entry.error = { message: `Failed to spawn actor` }
|
||||
entry.error = { message: "Failed to spawn actor" }
|
||||
entry.duration_ns = 0
|
||||
push(actor_test_results, entry)
|
||||
log.console(` FAIL ${test_name}: `)
|
||||
log.error()
|
||||
log.console(` FAIL ${test_name}: Failed to spawn`)
|
||||
}
|
||||
_spawn()
|
||||
}
|
||||
@@ -582,69 +607,6 @@ if (length(all_actor_tests) > 0) {
|
||||
}
|
||||
}
|
||||
|
||||
// Handle messages from actor tests
|
||||
function handle_actor_message(msg) {
|
||||
var sender = msg.$sender
|
||||
var found_idx = -1
|
||||
var i = 0
|
||||
var res = null
|
||||
var entry = null
|
||||
for (i = 0; i < length(pending_actor_tests); i++) {
|
||||
if (pending_actor_tests[i].actor == sender) {
|
||||
found_idx = i
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (found_idx == -1) return
|
||||
|
||||
var base_entry = pending_actor_tests[found_idx]
|
||||
pending_actor_tests = array(array(pending_actor_tests, 0, found_idx), array(pending_actor_tests, found_idx + 1))
|
||||
|
||||
var end_time = time.number()
|
||||
var duration_ns = round((end_time - base_entry.start_time) * 1000000000)
|
||||
|
||||
var results = []
|
||||
if (is_array(msg)) {
|
||||
results = msg
|
||||
} else if (msg && is_array(msg.results)) {
|
||||
results = msg.results
|
||||
} else {
|
||||
results = [msg]
|
||||
}
|
||||
|
||||
for (i = 0; i < length(results); i++) {
|
||||
res = results[i] || {}
|
||||
entry = {
|
||||
package: base_entry.package,
|
||||
file: base_entry.file,
|
||||
test: res.test || base_entry.test + (length(results) > 1 ? `#${i+1}` : ""),
|
||||
status: "failed",
|
||||
duration_ns: duration_ns
|
||||
}
|
||||
|
||||
if (res.type && res.type != "test_result") {
|
||||
entry.error = { message: `Unexpected message type: ${res.type}` }
|
||||
log.console(` FAIL ${entry.test}: unexpected message`)
|
||||
} else if (res.passed) {
|
||||
entry.status = "passed"
|
||||
log.console(` PASS ${entry.test}`)
|
||||
} else {
|
||||
entry.error = { message: res.error || "Test failed" }
|
||||
if (res.stack) entry.error.stack = res.stack
|
||||
log.console(` FAIL ${entry.test}: ${entry.error.message}`)
|
||||
}
|
||||
|
||||
push(actor_test_results, entry)
|
||||
}
|
||||
|
||||
if (gc_after_each_test) {
|
||||
dbg.gc()
|
||||
}
|
||||
|
||||
check_completion()
|
||||
}
|
||||
|
||||
// Check for timed out actor tests
|
||||
function check_timeouts() {
|
||||
var now = time.number()
|
||||
@@ -870,8 +832,4 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
|
||||
if (length(all_actor_tests) == 0) {
|
||||
generate_reports(totals)
|
||||
$stop()
|
||||
} else {
|
||||
$portal(function(msg) {
|
||||
handle_actor_message(msg)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user