fix: make led panel controls write to sysfs reliably
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
import tempfile
|
||||
import threading
|
||||
import urllib.request
|
||||
from pathlib import Path
|
||||
from led_panel import Handler, ThreadingHTTPServer
|
||||
import led_panel
|
||||
|
||||
|
||||
def req(port, path, body=None):
|
||||
data = None
|
||||
headers = {}
|
||||
if body is not None:
|
||||
data = json.dumps(body).encode()
|
||||
headers['Content-Type'] = 'application/json'
|
||||
r = urllib.request.Request(f'http://127.0.0.1:{port}{path}', data=data, headers=headers)
|
||||
with urllib.request.urlopen(r, timeout=5) as resp:
|
||||
return json.loads(resp.read().decode())
|
||||
|
||||
|
||||
def main():
|
||||
with tempfile.TemporaryDirectory() as td:
|
||||
root = Path(td)
|
||||
d = root / 'blue:wan'
|
||||
d.mkdir()
|
||||
(d / 'brightness').write_text('0')
|
||||
(d / 'max_brightness').write_text('1')
|
||||
(d / 'trigger').write_text('[none] timer')
|
||||
(d / 'delay_on').write_text('500')
|
||||
(d / 'delay_off').write_text('500')
|
||||
led_panel.LED_ROOT = root
|
||||
httpd = ThreadingHTTPServer(('127.0.0.1', 0), Handler)
|
||||
port = httpd.server_address[1]
|
||||
t = threading.Thread(target=httpd.serve_forever, daemon=True)
|
||||
t.start()
|
||||
try:
|
||||
leds = req(port, '/api/leds')
|
||||
assert leds['ok'] and leds['leds'][0]['name'] == 'blue:wan'
|
||||
b = req(port, '/api/brightness', {'name':'blue:wan','value':1})
|
||||
assert b['ok'] and (d / 'brightness').read_text() == '1'
|
||||
tr = req(port, '/api/trigger', {'name':'blue:wan','trigger':'timer'})
|
||||
assert tr['ok']
|
||||
assert (d / 'trigger').read_text() == 'timer'
|
||||
delay = req(port, '/api/delay', {'name':'blue:wan','field':'delay_on','value':123})
|
||||
assert delay['ok'] and (d / 'delay_on').read_text() == '123'
|
||||
print('OK: API write regression passed')
|
||||
finally:
|
||||
httpd.shutdown()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user