Files
StarPilot/openpilot/starpilot/connect/test_ui.py
T
firestar5683 28b8974301 Drive History
Expose drive history summaries and plot data through Galaxy.

Co-authored-by: Danny <dannyirwin31@yahoo.com>
Co-authored-by: firestarsdog <229254897+firestarsdog@users.noreply.github.com>
2026-10-14 20:02:39 -05:00

63 lines
3.3 KiB
Python

"""Cloud tools never share credentials or OAuth across providers."""
import tempfile
import unittest
from unittest.mock import MagicMock, patch
from openpilot.starpilot.connect.provider import PROVIDERS, OFFLINE
from openpilot.tools.lib import api, auth, auth_config
from openpilot.starpilot.galaxy.drive_history import recording_details
class TestCloudToolsIsolation(unittest.TestCase):
def test_credentials_are_separate(self):
with tempfile.TemporaryDirectory() as root, patch.object(auth_config.Paths, 'config_root', return_value=root):
with patch.object(auth_config, 'active_provider', return_value=PROVIDERS['comma']):
auth_config.set_token('comma-token')
with patch.object(auth_config, 'active_provider', return_value=PROVIDERS['konik']):
self.assertIsNone(auth_config.get_token())
auth_config.set_token('konik-token')
self.assertEqual(auth_config.get_token(), 'konik-token')
auth_config.clear_token()
with patch.object(auth_config, 'active_provider', return_value=PROVIDERS['comma']):
self.assertEqual(auth_config.get_token(), 'comma-token')
def test_offline_and_oauth_denied_before_network(self):
with patch.object(api, 'active_provider', return_value=OFFLINE), patch.object(api.requests, 'Session') as session:
with self.assertRaises(api.APIError):
api.CommaApi('secret')
session.assert_not_called()
with patch.object(auth, 'active_provider', return_value=PROVIDERS['konik']):
with self.assertRaises(ValueError):
auth.auth_redirect_link('github', 1234)
self.assertIn('api.konik.ai/v2/user/token', auth.login('github')['error'])
def test_pinned_host_and_http_rejection(self):
with patch.object(api, 'active_provider', return_value=PROVIDERS['konik']):
client = api.CommaApi('konik-token')
self.assertEqual(client.api_host, 'https://api.konik.ai')
response = MagicMock(status_code=401)
response.__enter__.return_value = response
client.session.request = MagicMock(return_value=response)
with self.assertRaises(api.UnauthorizedError):
client.get('v1/me')
response.json.assert_not_called()
with patch.object(api, 'active_provider', return_value=PROVIDERS['comma']):
with self.assertRaises(api.APIError):
client.get('v1/me')
client.session.request.assert_called_once()
class TestRecordingCloudLinks(unittest.TestCase):
def test_recording_provider_not_active_provider(self):
routes = {'routes': [{'routeId': '2026-10-01--12-00-00', 'provider': name} for name in ('comma', 'konik', None)]}
result = recording_details(routes, {}, None, device_ids={'comma': '0123456789abcdef', 'konik': 'fedcba9876543210'})
self.assertTrue(result['routes'][0]['connectUrl'].startswith('https://connect.comma.ai/'))
self.assertTrue(result['routes'][1]['connectUrl'].startswith('https://stable.konik.ai/'))
self.assertIsNone(result['routes'][2]['connectUrl'])
def test_legacy_is_comma_and_unknown_identity_has_no_link(self):
result = recording_details({'routes': [{'routeId': '2026-10-01--12-00-00'}]}, {}, '0123456789abcdef')
self.assertTrue(result['routes'][0]['connectUrl'].startswith('https://connect.comma.ai/'))
result = recording_details({'routes': [{'routeId': '2026-10-01--12-00-00', 'provider': 'konik'}]}, {}, '0123456789abcdef')
self.assertIsNone(result['routes'][0]['connectUrl'])