mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 05:23:41 +08:00
28b8974301
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>
63 lines
3.3 KiB
Python
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'])
|