add pronto and tests
This commit is contained in:
137
tests/pronto.cm
Normal file
137
tests/pronto.cm
Normal file
@@ -0,0 +1,137 @@
|
||||
// Test pronto functions
|
||||
// Tests for fallback, parallel, race, sequence, time_limit, requestorize, objectify
|
||||
|
||||
var test_count = 0
|
||||
|
||||
function make_requestor(name, delay_seconds, should_succeed) {
|
||||
return function(callback, value) {
|
||||
log.console(`Starting ${name} with value: ${value}`)
|
||||
if (delay_seconds > 0) {
|
||||
$_.delay(function() {
|
||||
if (should_succeed) {
|
||||
log.console(`${name} succeeded with: ${value + 1}`)
|
||||
callback(value + 1)
|
||||
} else {
|
||||
log.console(`${name} failed`)
|
||||
callback(null, `${name} error`)
|
||||
}
|
||||
}, delay_seconds)
|
||||
} else {
|
||||
if (should_succeed) {
|
||||
log.console(`${name} succeeded immediately with: ${value + 1}`)
|
||||
callback(value + 1)
|
||||
} else {
|
||||
log.console(`${name} failed immediately`)
|
||||
callback(null, `${name} error`)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
test_fallback: function() {
|
||||
log.console("Testing fallback...")
|
||||
var req1 = make_requestor("fallback_req1", 0.1, false) // fails
|
||||
var req2 = make_requestor("fallback_req2", 0.1, true) // succeeds
|
||||
var req3 = make_requestor("fallback_req3", 0.1, true) // should not run
|
||||
|
||||
fallback([req1, req2, req3])(function(result, reason) {
|
||||
if (result != null) {
|
||||
log.console(`Fallback succeeded: ${result}`)
|
||||
} else {
|
||||
log.console(`Fallback failed: ${reason}`)
|
||||
}
|
||||
}, 10)
|
||||
},
|
||||
|
||||
test_parallel: function() {
|
||||
log.console("Testing parallel...")
|
||||
var req1 = make_requestor("parallel_req1", 0.2, true)
|
||||
var req2 = make_requestor("parallel_req2", 0.1, true)
|
||||
var req3 = make_requestor("parallel_req3", 0.3, true)
|
||||
|
||||
parallel([req1, req2, req3])(function(results, reason) {
|
||||
if (results != null) {
|
||||
log.console(`Parallel results: ${results}`)
|
||||
} else {
|
||||
log.console(`Parallel failed: ${reason}`)
|
||||
}
|
||||
}, 100)
|
||||
},
|
||||
|
||||
test_race: function() {
|
||||
log.console("Testing race...")
|
||||
var req1 = make_requestor("race_req1", 0.3, true) // slow
|
||||
var req2 = make_requestor("race_req2", 0.1, true) // fast winner
|
||||
var req3 = make_requestor("race_req3", 0.2, true) // medium
|
||||
|
||||
race([req1, req2, req3])(function(result, reason) {
|
||||
if (result != null) {
|
||||
log.console(`Race winner: ${result}`)
|
||||
} else {
|
||||
log.console(`Race failed: ${reason}`)
|
||||
}
|
||||
}, 200)
|
||||
},
|
||||
|
||||
test_sequence: function() {
|
||||
log.console("Testing sequence...")
|
||||
var req1 = make_requestor("seq_req1", 0.1, true)
|
||||
var req2 = make_requestor("seq_req2", 0.1, true)
|
||||
var req3 = make_requestor("seq_req3", 0.1, true)
|
||||
|
||||
sequence([req1, req2, req3])(function(result, reason) {
|
||||
if (result != null) {
|
||||
log.console(`Sequence result: ${result}`)
|
||||
} else {
|
||||
log.console(`Sequence failed: ${reason}`)
|
||||
}
|
||||
}, 1000)
|
||||
},
|
||||
|
||||
test_time_limit: function() {
|
||||
log.console("Testing time_limit...")
|
||||
var slow_req = make_requestor("slow_req", 0.5, true) // takes 0.5s
|
||||
var timed_req = time_limit(slow_req, 0.2) // 0.2s limit
|
||||
|
||||
timed_req(function(result, reason) {
|
||||
if (result != null) {
|
||||
log.console(`Time limit succeeded: ${result}`)
|
||||
} else {
|
||||
log.console(`Time limit failed: ${reason}`)
|
||||
}
|
||||
}, 100)
|
||||
},
|
||||
|
||||
test_requestorize: function() {
|
||||
log.console("Testing requestorize...")
|
||||
var add_one = function(x) { return x + 1 }
|
||||
var req = requestorize(add_one)
|
||||
|
||||
req(function(result, reason) {
|
||||
if (result != null) {
|
||||
log.console(`Requestorize result: ${result}`)
|
||||
} else {
|
||||
log.console(`Requestorize failed: ${reason}`)
|
||||
}
|
||||
}, 42)
|
||||
},
|
||||
|
||||
test_objectify: function() {
|
||||
log.console("Testing objectify...")
|
||||
var req_a = make_requestor("obj_req_a", 0.1, true)
|
||||
var req_b = make_requestor("obj_req_b", 0.1, true)
|
||||
var req_c = make_requestor("obj_req_c", 0.1, true)
|
||||
|
||||
var parallel_obj = objectify(parallel)
|
||||
var req = parallel_obj({a: req_a, b: req_b, c: req_c})
|
||||
|
||||
req(function(result, reason) {
|
||||
if (result != null) {
|
||||
log.console(`Objectify result: ${json.encode(result)}`)
|
||||
} else {
|
||||
log.console(`Objectify failed: ${reason}`)
|
||||
}
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user