46 lines
2.3 KiB
Python
46 lines
2.3 KiB
Python
import json
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / 'screen_manager/app'))
|
|
from firmware import Firmware
|
|
|
|
class WifiReuse(unittest.TestCase):
|
|
def test_existing_wifi_reused_without_browser_values(self):
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
f = Firmware(tmp, tmp)
|
|
path = Path(tmp) / 'secrets.yaml'
|
|
original = '# keep comments\nwifi_ssid: example-private-network\nwifi_password: example-private-password\nother_secret: leave-me\n'
|
|
path.write_text(original)
|
|
self.assertEqual(f.wifi_status()['state'], 'ready')
|
|
self.assertNotIn('example-private', json.dumps(f.status()))
|
|
f.create({'board': 'guition', 'name': 'second-screen', 'friendly_name': 'Second'})
|
|
self.assertEqual(path.read_text(), original)
|
|
profile = f.profile('second-screen.yaml').read_text()
|
|
self.assertIn('ssid: !secret wifi_ssid', profile)
|
|
self.assertIn('password: !secret wifi_password', profile)
|
|
self.assertNotIn('example-private', profile)
|
|
|
|
def test_missing_keys_do_not_overwrite_existing_secrets(self):
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
f = Firmware(tmp, tmp)
|
|
path = Path(tmp) / 'secrets.yaml'
|
|
path.write_text('other: keep\n')
|
|
self.assertEqual(f.wifi_status()['state'], 'missing')
|
|
with self.assertRaises(ValueError):
|
|
f.create({'board': 'cyd', 'name': 'screen', 'friendly_name': 'Screen',
|
|
'wifi_ssid': 'replacement', 'wifi_password': 'replacement'})
|
|
self.assertEqual(path.read_text(), 'other: keep\n')
|
|
self.assertFalse((Path(tmp) / 'screen.yaml').exists())
|
|
|
|
def test_first_install_and_invalid_file(self):
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
f = Firmware(tmp, tmp)
|
|
self.assertEqual(f.wifi_status()['state'], 'new')
|
|
f.create({'board': 'cyd', 'name': 'screen', 'friendly_name': 'Screen',
|
|
'wifi_ssid': 'network', 'wifi_password': ''})
|
|
self.assertEqual(f.wifi_status()['state'], 'ready')
|
|
(Path(tmp) / 'secrets.yaml').write_text('wifi_ssid: [invalid')
|
|
self.assertEqual(f.wifi_status(), {'state': 'invalid'})
|