#!/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()