Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.

Commit a059944

Browse files
committed
More cleanup
1 parent db16129 commit a059944

5 files changed

Lines changed: 7 additions & 105 deletions

File tree

packages/jumpstarter-driver-corellium/jumpstarter_driver_corellium/corellium/api.py

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,22 @@
11
from typing import Optional
22

33
import corellium_api
4-
import requests
5-
6-
from .exceptions import CorelliumApiException
7-
from .types import Device, Instance, Project, Session
4+
from corellium_api import Instance, Model, Project
85

96

107
class ApiClient:
118
"""
129
Corellium ReST API client used by the Corellium driver.
1310
"""
1411

15-
session: Session
16-
req: requests.Session
17-
1812
def __init__(self, host: str, token: str) -> None:
1913
"""
2014
Initializes a new client, containing a
2115
"""
2216
self.host = host
23-
self.token = token
24-
self.session = None
25-
self.req = requests.Session()
2617

2718
configuration = corellium_api.Configuration(host=self.baseurl)
28-
configuration.access_token = self.token
19+
configuration.access_token = token
2920
self.api = corellium_api.CorelliumApi(corellium_api.ApiClient(configuration))
3021

3122
@property
@@ -35,27 +26,6 @@ def baseurl(self) -> str:
3526
"""
3627
return f"https://{self.host}/api"
3728

38-
def login(self) -> None:
39-
"""
40-
Login against Corellium's ReST API.
41-
42-
Set an internal Session object instance to be used
43-
in other API calls that require authentication.
44-
45-
It uses the global requests objects so a new session can be generated.
46-
"""
47-
data = {"apiToken": self.token}
48-
49-
try:
50-
res = requests.post(f"{self.baseurl}/v1/auth/login", json=data)
51-
data = res.json()
52-
res.raise_for_status()
53-
except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e:
54-
raise CorelliumApiException(data.get("error", str(e))) from e
55-
56-
self.session = Session(**data)
57-
self.req.headers.update(self.session.as_header())
58-
5929
async def get_project(self, project_ref: str = "Default Project") -> Optional[Project]:
6030
"""
6131
Retrieve a project based on project_ref, which is either its id or name.
@@ -68,7 +38,7 @@ async def get_project(self, project_ref: str = "Default Project") -> Optional[Pr
6838

6939
return None
7040

71-
async def get_device(self, model: str) -> Optional[Device]:
41+
async def get_device(self, model: str) -> Optional[Model]:
7242
"""
7343
Get a device spec from Corellium's list based on the model name.
7444
@@ -83,7 +53,7 @@ async def get_device(self, model: str) -> Optional[Device]:
8353
return None
8454

8555
async def create_instance(
86-
self, name: str, project: Project, device: Device, os_version: str, os_build: str
56+
self, name: str, project: Project, device: Model, os_version: str, os_build: str
8757
) -> Instance:
8858
"""
8959
Create a new virtual instance from a device spec.

packages/jumpstarter-driver-corellium/jumpstarter_driver_corellium/corellium/exceptions.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

packages/jumpstarter-driver-corellium/jumpstarter_driver_corellium/corellium/types.py

Lines changed: 0 additions & 28 deletions
This file was deleted.

packages/jumpstarter-driver-corellium/jumpstarter_driver_corellium/driver.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@
55
import os
66
from collections.abc import AsyncGenerator
77
from dataclasses import dataclass, field
8-
from datetime import datetime, timedelta
98
from typing import Dict, Optional
109

1110
from anyio import sleep
11+
from corellium_api import Instance
1212
from jumpstarter_driver_power.driver import PowerReading, VirtualPowerInterface
1313

1414
from .corellium.api import ApiClient
15-
from .corellium.types import Instance
1615
from jumpstarter.common import exceptions as jmp_exceptions
1716
from jumpstarter.driver import Driver, export
1817

@@ -87,18 +86,6 @@ def api(self):
8786
It will also be responsible for creating/refreshing the session token used
8887
across different API methods that require authentication.
8988
"""
90-
# session does not exist, just login and return
91-
if self._api.session is None:
92-
self._api.login()
93-
94-
return self._api
95-
96-
# check if session is about to expire
97-
# currently depends on the magic number of 60 seconds
98-
now = datetime.utcnow()
99-
diff = datetime.strptime(self._api.session.expiration, "%Y-%m-%dT%H:%M:%S.%fZ") - now
100-
if diff > timedelta(seconds=1):
101-
self._api.login()
10289

10390
return self._api
10491

packages/jumpstarter-driver-corellium/jumpstarter_driver_corellium/driver_test.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from unittest.mock import patch
22

33
import pytest
4+
from corellium_api import Instance, Model, Project
45

5-
from .corellium.types import Device, Instance, Project, Session
66
from .driver import Corellium, CorelliumPower
77
from jumpstarter.common import exceptions as jmp_exceptions
88

@@ -24,8 +24,6 @@ async def test_driver_corellium_init_ok(monkeypatch):
2424
assert "jmp" == c.device_name
2525
assert "kronos" == c.device_flavor
2626
assert "1.0" == c.device_os
27-
assert "api-host" == c._api.host
28-
assert "api-token" == c._api.token
2927

3028

3129
@pytest.mark.parametrize(
@@ -59,24 +57,12 @@ async def test_driver_corellium_init_error(monkeypatch, env, err):
5957
assert str(err) == str(e.value)
6058

6159

62-
async def test_driver_api_client_ok(monkeypatch, requests_mock):
63-
requests_mock.post(
64-
"https://api-host/api/v1/auth/login", text='{"token": "token", "expiration": "2022-03-20T01:50:10.000Z"}'
65-
)
66-
monkeypatch.setenv("CORELLIUM_API_HOST", "api-host")
67-
monkeypatch.setenv("CORELLIUM_API_TOKEN", "api-token")
68-
69-
c = Corellium(project_id="1", device_name="jmp", device_flavor="kronos", device_os="1.0")
70-
71-
assert Session("token", "2022-03-20T01:50:10.000Z") == c.api.session
72-
73-
7460
async def test_driver_power_on_ok(monkeypatch):
7561
monkeypatch.setenv("CORELLIUM_API_HOST", "api-host")
7662
monkeypatch.setenv("CORELLIUM_API_TOKEN", "api-token")
7763

7864
project = Project("1", "Default Project")
79-
device = Device(
65+
device = Model(
8066
name="rd1ae",
8167
type="automotive",
8268
flavor="kronos",
@@ -89,7 +75,6 @@ async def test_driver_power_on_ok(monkeypatch):
8975
power = CorelliumPower(parent=root)
9076

9177
with (
92-
patch.object(root._api, "login", return_value=None),
9378
patch.object(root._api, "get_project", return_value=project),
9479
patch.object(root._api, "get_device", return_value=device),
9580
patch.object(root._api, "get_instance", side_effect=[None, instance]),
@@ -108,7 +93,6 @@ async def test_driver_power_off_ok(monkeypatch):
10893
power = CorelliumPower(parent=root)
10994

11095
with (
111-
patch.object(root._api, "login", return_value=None),
11296
patch.object(root._api, "get_project", return_value=project),
11397
patch.object(root._api, "set_instance_state", return_value=None),
11498
patch.object(root._api, "get_instance", side_effect=[instance, Instance(id=instance.id, state="off")]),

0 commit comments

Comments
 (0)