diff --git a/forgetest/cool-fanwrite-test/run/cooling.state b/forgetest/cool-fanwrite-test/run/cooling.state new file mode 100644 index 0000000..77d9bc1 --- /dev/null +++ b/forgetest/cool-fanwrite-test/run/cooling.state @@ -0,0 +1 @@ +{"seq":268,"ts_mono":1268.000,"fire_ok":true,"verdict":"OK","hold":false,"resume_ok":true,"armed":true,"reason":"","down_c":22.30,"up_c":22.30} diff --git a/forgetest/cool-fanwrite-test/sys/cnc/faults b/forgetest/cool-fanwrite-test/sys/cnc/faults new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/cnc/faults @@ -0,0 +1 @@ +0 diff --git a/forgetest/cool-fanwrite-test/sys/cnc/laser_on_sampled b/forgetest/cool-fanwrite-test/sys/cnc/laser_on_sampled new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/cnc/laser_on_sampled @@ -0,0 +1 @@ +0 diff --git a/forgetest/cool-fanwrite-test/sys/cnc/laser_pgood_sampled b/forgetest/cool-fanwrite-test/sys/cnc/laser_pgood_sampled new file mode 100644 index 0000000..ace9d03 --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/cnc/laser_pgood_sampled @@ -0,0 +1 @@ +255 diff --git a/forgetest/cool-fanwrite-test/sys/cnc/state b/forgetest/cool-fanwrite-test/sys/cnc/state new file mode 100644 index 0000000..5a5e41c --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/cnc/state @@ -0,0 +1 @@ +idle diff --git a/forgetest/cool-fanwrite-test/sys/head/air_assist_pwm b/forgetest/cool-fanwrite-test/sys/head/air_assist_pwm new file mode 100644 index 0000000..7e68ad7 --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/head/air_assist_pwm @@ -0,0 +1 @@ +1023 \ No newline at end of file diff --git a/forgetest/cool-fanwrite-test/sys/head/air_assist_tach b/forgetest/cool-fanwrite-test/sys/head/air_assist_tach new file mode 100644 index 0000000..697cb3a --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/head/air_assist_tach @@ -0,0 +1 @@ +300 diff --git a/forgetest/cool-fanwrite-test/sys/head/purge_air_current b/forgetest/cool-fanwrite-test/sys/head/purge_air_current new file mode 100644 index 0000000..f075110 --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/head/purge_air_current @@ -0,0 +1 @@ +629 diff --git a/forgetest/cool-fanwrite-test/sys/pic/hv_current b/forgetest/cool-fanwrite-test/sys/pic/hv_current new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/pic/hv_current @@ -0,0 +1 @@ +0 diff --git a/forgetest/cool-fanwrite-test/sys/pic/water_temp_1 b/forgetest/cool-fanwrite-test/sys/pic/water_temp_1 new file mode 100644 index 0000000..a4890ce --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/pic/water_temp_1 @@ -0,0 +1 @@ +700 diff --git a/forgetest/cool-fanwrite-test/sys/pic/water_temp_2 b/forgetest/cool-fanwrite-test/sys/pic/water_temp_2 new file mode 100644 index 0000000..a4890ce --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/pic/water_temp_2 @@ -0,0 +1 @@ +700 diff --git a/forgetest/cool-fanwrite-test/sys/thermal/exhaust_pwm b/forgetest/cool-fanwrite-test/sys/thermal/exhaust_pwm new file mode 100644 index 0000000..35ff949 --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/thermal/exhaust_pwm @@ -0,0 +1 @@ +65535 \ No newline at end of file diff --git a/forgetest/cool-fanwrite-test/sys/thermal/heater_pwm b/forgetest/cool-fanwrite-test/sys/thermal/heater_pwm new file mode 100644 index 0000000..022f7e7 --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/thermal/heater_pwm @@ -0,0 +1 @@ +26214 \ No newline at end of file diff --git a/forgetest/cool-fanwrite-test/sys/thermal/intake_pwm b/forgetest/cool-fanwrite-test/sys/thermal/intake_pwm new file mode 100644 index 0000000..e6e4f56 --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/thermal/intake_pwm @@ -0,0 +1 @@ +43278 \ No newline at end of file diff --git a/forgetest/cool-fanwrite-test/sys/thermal/tach_exhaust b/forgetest/cool-fanwrite-test/sys/thermal/tach_exhaust new file mode 100644 index 0000000..697cb3a --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/thermal/tach_exhaust @@ -0,0 +1 @@ +300 diff --git a/forgetest/cool-fanwrite-test/sys/thermal/tach_intake_1 b/forgetest/cool-fanwrite-test/sys/thermal/tach_intake_1 new file mode 100644 index 0000000..697cb3a --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/thermal/tach_intake_1 @@ -0,0 +1 @@ +300 diff --git a/forgetest/cool-fanwrite-test/sys/thermal/tach_intake_2 b/forgetest/cool-fanwrite-test/sys/thermal/tach_intake_2 new file mode 100644 index 0000000..697cb3a --- /dev/null +++ b/forgetest/cool-fanwrite-test/sys/thermal/tach_intake_2 @@ -0,0 +1 @@ +300 diff --git a/forgetest/cool-flow-test/run/cooling.state b/forgetest/cool-flow-test/run/cooling.state new file mode 100644 index 0000000..5f1028f --- /dev/null +++ b/forgetest/cool-flow-test/run/cooling.state @@ -0,0 +1 @@ +{"seq":1517,"ts_mono":3127.000,"fire_ok":true,"verdict":"OK","hold":false,"resume_ok":true,"armed":false,"reason":"HEAD CRASH SIGNAL (axes x) - motion stopped, laser locked","down_c":22.30,"up_c":22.30} diff --git a/forgetest/cool-flow-test/sys/cnc/faults b/forgetest/cool-flow-test/sys/cnc/faults new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/cool-flow-test/sys/cnc/faults @@ -0,0 +1 @@ +0 diff --git a/forgetest/cool-flow-test/sys/cnc/laser_latch b/forgetest/cool-flow-test/sys/cnc/laser_latch new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/forgetest/cool-flow-test/sys/cnc/laser_latch @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/forgetest/cool-flow-test/sys/cnc/laser_on_sampled b/forgetest/cool-flow-test/sys/cnc/laser_on_sampled new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/cool-flow-test/sys/cnc/laser_on_sampled @@ -0,0 +1 @@ +0 diff --git a/forgetest/cool-flow-test/sys/cnc/laser_pgood_sampled b/forgetest/cool-flow-test/sys/cnc/laser_pgood_sampled new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/cool-flow-test/sys/cnc/laser_pgood_sampled @@ -0,0 +1 @@ +0 diff --git a/forgetest/cool-flow-test/sys/cnc/state b/forgetest/cool-flow-test/sys/cnc/state new file mode 100644 index 0000000..5a5e41c --- /dev/null +++ b/forgetest/cool-flow-test/sys/cnc/state @@ -0,0 +1 @@ +idle diff --git a/forgetest/cool-flow-test/sys/cnc/stop b/forgetest/cool-flow-test/sys/cnc/stop new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/forgetest/cool-flow-test/sys/cnc/stop @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/forgetest/cool-flow-test/sys/head/air_assist_pwm b/forgetest/cool-flow-test/sys/head/air_assist_pwm new file mode 100644 index 0000000..cbd6012 --- /dev/null +++ b/forgetest/cool-flow-test/sys/head/air_assist_pwm @@ -0,0 +1 @@ +204 \ No newline at end of file diff --git a/forgetest/cool-flow-test/sys/head/air_assist_tach b/forgetest/cool-flow-test/sys/head/air_assist_tach new file mode 100644 index 0000000..697cb3a --- /dev/null +++ b/forgetest/cool-flow-test/sys/head/air_assist_tach @@ -0,0 +1 @@ +300 diff --git a/forgetest/cool-flow-test/sys/head/purge_air_current b/forgetest/cool-flow-test/sys/head/purge_air_current new file mode 100644 index 0000000..f075110 --- /dev/null +++ b/forgetest/cool-flow-test/sys/head/purge_air_current @@ -0,0 +1 @@ +629 diff --git a/forgetest/cool-flow-test/sys/pic/hv_current b/forgetest/cool-flow-test/sys/pic/hv_current new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/cool-flow-test/sys/pic/hv_current @@ -0,0 +1 @@ +0 diff --git a/forgetest/cool-flow-test/sys/pic/lid_ir_1 b/forgetest/cool-flow-test/sys/pic/lid_ir_1 new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/forgetest/cool-flow-test/sys/pic/lid_ir_1 @@ -0,0 +1 @@ +100 diff --git a/forgetest/cool-flow-test/sys/pic/lid_ir_2 b/forgetest/cool-flow-test/sys/pic/lid_ir_2 new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/forgetest/cool-flow-test/sys/pic/lid_ir_2 @@ -0,0 +1 @@ +100 diff --git a/forgetest/cool-flow-test/sys/pic/lid_ir_3 b/forgetest/cool-flow-test/sys/pic/lid_ir_3 new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/forgetest/cool-flow-test/sys/pic/lid_ir_3 @@ -0,0 +1 @@ +100 diff --git a/forgetest/cool-flow-test/sys/pic/lid_ir_4 b/forgetest/cool-flow-test/sys/pic/lid_ir_4 new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/forgetest/cool-flow-test/sys/pic/lid_ir_4 @@ -0,0 +1 @@ +100 diff --git a/forgetest/cool-flow-test/sys/pic/water_temp_1 b/forgetest/cool-flow-test/sys/pic/water_temp_1 new file mode 100644 index 0000000..a4890ce --- /dev/null +++ b/forgetest/cool-flow-test/sys/pic/water_temp_1 @@ -0,0 +1 @@ +700 diff --git a/forgetest/cool-flow-test/sys/pic/water_temp_2 b/forgetest/cool-flow-test/sys/pic/water_temp_2 new file mode 100644 index 0000000..a4890ce --- /dev/null +++ b/forgetest/cool-flow-test/sys/pic/water_temp_2 @@ -0,0 +1 @@ +700 diff --git a/forgetest/cool-flow-test/sys/thermal/exhaust_pwm b/forgetest/cool-flow-test/sys/thermal/exhaust_pwm new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/forgetest/cool-flow-test/sys/thermal/exhaust_pwm @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/forgetest/cool-flow-test/sys/thermal/heater_pwm b/forgetest/cool-flow-test/sys/thermal/heater_pwm new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/forgetest/cool-flow-test/sys/thermal/heater_pwm @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/forgetest/cool-flow-test/sys/thermal/intake_pwm b/forgetest/cool-flow-test/sys/thermal/intake_pwm new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/forgetest/cool-flow-test/sys/thermal/intake_pwm @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/forgetest/cool-flow-test/sys/thermal/tach_exhaust b/forgetest/cool-flow-test/sys/thermal/tach_exhaust new file mode 100644 index 0000000..697cb3a --- /dev/null +++ b/forgetest/cool-flow-test/sys/thermal/tach_exhaust @@ -0,0 +1 @@ +300 diff --git a/forgetest/cool-flow-test/sys/thermal/tach_intake_1 b/forgetest/cool-flow-test/sys/thermal/tach_intake_1 new file mode 100644 index 0000000..697cb3a --- /dev/null +++ b/forgetest/cool-flow-test/sys/thermal/tach_intake_1 @@ -0,0 +1 @@ +300 diff --git a/forgetest/cool-flow-test/sys/thermal/tach_intake_2 b/forgetest/cool-flow-test/sys/thermal/tach_intake_2 new file mode 100644 index 0000000..697cb3a --- /dev/null +++ b/forgetest/cool-flow-test/sys/thermal/tach_intake_2 @@ -0,0 +1 @@ +300 diff --git a/forgetest/forgetest/suite/exthost.py b/forgetest/forgetest/suite/exthost.py index 2b0b70f..b953774 100644 --- a/forgetest/forgetest/suite/exthost.py +++ b/forgetest/forgetest/suite/exthost.py @@ -581,6 +581,10 @@ report = { "loopback_undeclared_port": dial("127.0.0.1", 80), "netlink_socket": family(16), "unix_socket": family(1), + "api_settings": api("GET", "/v0/settings"), + "api_settings_set": api("POST", "/v0/settings", {"threshold": 70, "note": "set from inside"}), + "api_settings_undeclared": api("POST", "/v0/settings", {"nothere": 1}), + "api_settings_out_of_bounds": api("POST", "/v0/settings", {"threshold": 9000}), "api_self": api("GET", "/v0/self"), "api_mode": api("GET", "/v0/machine/mode"), "api_hold": api("GET", "/v0/hold"), @@ -739,7 +743,12 @@ def _pack_reference(work, lan, more_caps=()): manifest = {"manifest": 1, "id": REF_ID, "name": "forgetest reference", "version": "1.0.0", "author": "forgetest", "license": "MIT", "api": "0.1", "runtime": "python", "service": {"exec": "bin/reference.py", "args": [lan or "-"]}, - "capabilities": ["net.outbound:%s:443" % REF_DEST, "storage:1", "machine.read"] + list(more_caps)} + "settings": {"threshold": {"type": "number", "default": 40, "min": 0, "max": 100}, + "note": {"type": "string", "default": "", "max": 32, "label": "A note"}, + "when": {"type": "choice", "default": "end", + "choices": ["start", "end", "never"]}}, + "capabilities": ["net.outbound:%s:443" % REF_DEST, "storage:1", "machine.read", + "settings.own"] + list(more_caps)} payload = os.path.join(work, "payload.tar.gz") with tarfile.open(payload, "w:gz") as t: for name, text, mode in (("manifest.json", json.dumps(manifest), 0o644), @@ -933,8 +942,34 @@ def service(ctx): me = rep.get("api_self") or [0, {}] ev["api"] = {k: rep.get(k) for k in ("api_self", "api_mode", "api_hold", "api_nowhere", "api_traversal")} ctx.check(me[0] == 200 and me[1].get("id") == REF_ID and me[1].get("version") == "1.0.0" - and sorted(me[1].get("capabilities") or []) == sorted(["net.outbound:%s:443" % REF_DEST, "storage:1", "machine.read"]), + and sorted(me[1].get("capabilities") or []) == sorted(["net.outbound:%s:443" % REF_DEST, "storage:1", + "machine.read", "settings.own"]), "GET /v0/self from the inside: %s", me) + + # its own settings: read, set, and what the schema will not take + got = rep.get("api_settings") or [0, {}] + ev["api_settings"] = got + ctx.check(got[0] == 200 and (got[1] or {}).get("settings", {}).get("threshold") == 40 + and (got[1] or {}).get("settings", {}).get("when") == "end" + and len((got[1] or {}).get("schema") or []) == 3, + "GET /v0/settings before anything is set, with its schema: %s", got) + set_ = rep.get("api_settings_set") or [0, {}] + ev["api_settings_set"] = set_ + ctx.check(set_[0] == 200 and (set_[1] or {}).get("settings", {}).get("threshold") == 70 + and (set_[1] or {}).get("settings", {}).get("note") == "set from inside" + and (set_[1] or {}).get("settings", {}).get("when") == "end", + "POST /v0/settings sets what it names and leaves the rest: %s", set_) + for key, why in (("api_settings_undeclared", "a setting the package does not declare"), + ("api_settings_out_of_bounds", "a value outside its bounds")): + bad_ = rep.get(key) or [0, {}] + ev[key] = bad_ + ctx.check(bad_[0] == 400 and (bad_[1] or {}).get("error"), "%s -> %s", why, bad_) + store = "%s/settings/%s.json" % (EXT_ROOT, REF_ID) + ev["settings_store"] = {"mode": "%04o" % (os.stat(store).st_mode & 0o7777) if os.path.exists(store) else None} + ctx.check(os.path.exists(store) and os.stat(store).st_mode & 0o7777 == 0o600, + "the settings store is not root's alone: %s", ev["settings_store"]) + ctx.check(os.path.exists(store) and json.loads(_read(store)).get("threshold") == 70, + "the store does not hold what the package set") mode_ = rep.get("api_mode") or [0, {}] ctx.check(mode_[0] == 200 and mode_[1].get("mode") in ("grbl", "cloud") and "controller" in mode_[1], "GET /v0/machine/mode from the inside is not forgectrl's answer: %s", mode_) diff --git a/forgetest/super-test/dev/glowforge b/forgetest/super-test/dev/glowforge new file mode 100644 index 0000000..e69de29 diff --git a/forgetest/super-test/sys/cnc/disable b/forgetest/super-test/sys/cnc/disable new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/super-test/sys/cnc/disable @@ -0,0 +1 @@ +0 diff --git a/forgetest/super-test/sys/cnc/enable b/forgetest/super-test/sys/cnc/enable new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/forgetest/super-test/sys/cnc/enable @@ -0,0 +1 @@ +1 diff --git a/forgetest/super-test/sys/cnc/halt b/forgetest/super-test/sys/cnc/halt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/forgetest/super-test/sys/cnc/halt @@ -0,0 +1 @@ +0 diff --git a/forgetest/super-test/sys/cnc/laser_latch b/forgetest/super-test/sys/cnc/laser_latch new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/forgetest/super-test/sys/cnc/laser_latch @@ -0,0 +1 @@ +1 diff --git a/forgetest/super-test/sys/cnc/stop b/forgetest/super-test/sys/cnc/stop new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/forgetest/super-test/sys/cnc/stop @@ -0,0 +1 @@ +1