fix: gate channel_band 6GHz to 181-233, reject open-6GHz, self-heal load-time 6GHz hints, harden hop/BSSID handling
This commit is contained in:
@@ -24,7 +24,7 @@ class ChannelBandTest(unittest.TestCase):
|
||||
self.assertEqual(server.channel_band(ch), server.BAND_6G)
|
||||
|
||||
def test_invalid(self):
|
||||
for ch in (0, 15, 35, 178, 234, None, 'x'):
|
||||
for ch in (0, 15, 17, 21, 33, 35, 178, 234, None, 'x'):
|
||||
self.assertIsNone(server.channel_band(ch))
|
||||
|
||||
|
||||
@@ -34,6 +34,12 @@ class ChannelBandsConsistencyTest(unittest.TestCase):
|
||||
for ch in channels:
|
||||
self.assertEqual(server.channel_band(ch), band, '%s should be %s' % (ch, band))
|
||||
|
||||
def test_no_out_of_list_channels(self):
|
||||
for ch in list(range(0, 235)):
|
||||
band = server.channel_band(ch)
|
||||
if band is not None:
|
||||
self.assertIn(ch, server.CHANNEL_BANDS[band], '%s should be listed for %s' % (ch, band))
|
||||
|
||||
def test_boundaries(self):
|
||||
self.assertEqual(server.CHANNEL_BANDS[server.BAND_2G][-1], 14)
|
||||
self.assertEqual(server.CHANNEL_BANDS[server.BAND_5G][-1], 177)
|
||||
@@ -213,6 +219,13 @@ class SetApRadio1Test(unittest.TestCase):
|
||||
'hidden': False, 'enabled': True, 'channel': 181}}))
|
||||
self.assertEqual(status, 400)
|
||||
|
||||
def test_6g_open_rejected(self):
|
||||
status, payload = server.h_pineap_wifi_set_ap(ctx({'open': {
|
||||
'ssid': 'CorpGuest', 'hidden': False, 'enabled': True,
|
||||
'channel': 181, 'country': 'US'}}))
|
||||
self.assertEqual(status, 400)
|
||||
self.assertIn('6GHz', payload['error'])
|
||||
|
||||
def test_6g_disable_removes_radio1(self):
|
||||
self.uci['pineapd.wlan1mon.hop'] = '0'
|
||||
self.uci['wlan1wpa'] = {'device': 'radio1'}
|
||||
@@ -223,6 +236,29 @@ class SetApRadio1Test(unittest.TestCase):
|
||||
self.assertEqual(self.uci['wireless.radio1.channel'], 'auto')
|
||||
self.assertEqual(self.uci['pineapd.wlan1mon.hop'], '1')
|
||||
|
||||
def test_5g_open_rejects_bad_bssid(self):
|
||||
status, payload = server.h_pineap_wifi_set_ap(ctx({'open': {
|
||||
'ssid': 'CorpGuest', 'bssid': 'not-a-mac', 'hidden': False,
|
||||
'enabled': True, 'channel': 36, 'country': 'US'}}))
|
||||
self.assertEqual(status, 400)
|
||||
|
||||
def test_hop_read_failure_still_pauses(self):
|
||||
def fake_run(args, timeout=20, input_data=None):
|
||||
self.runs.append((list(args), input_data))
|
||||
a = list(args)
|
||||
if a[:2] == ['uci', 'get']:
|
||||
return (1, '', '')
|
||||
if a[:2] == ['uci', 'set']:
|
||||
k, _, v = a[2].partition('=')
|
||||
self.uci[k] = v
|
||||
return (0, '', '')
|
||||
|
||||
server.device_run = fake_run
|
||||
server.h_pineap_wifi_set_ap(ctx({'open': {
|
||||
'ssid': 'CorpGuest', 'hidden': False, 'enabled': True,
|
||||
'channel': 36, 'country': 'US'}}))
|
||||
self.assertEqual(self.uci['pineapd.wlan1mon.hop'], '0')
|
||||
|
||||
def test_2g_still_uses_daemon_path(self):
|
||||
calls = []
|
||||
|
||||
@@ -295,6 +331,7 @@ class GetApRadioChannelFallbackTest(unittest.TestCase):
|
||||
|
||||
class GetApReconcileTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
server._last_reconcile = 0.0
|
||||
self.uci = {'wlan1wpa': {'device': 'radio1', 'mode': 'ap', 'ssid': 'Corp',
|
||||
'disabled': '0', 'encryption': 'sae', 'channel': '36'}}
|
||||
self.runs = []
|
||||
|
||||
Reference in New Issue
Block a user