-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathtesting.py
More file actions
77 lines (60 loc) · 2.18 KB
/
Copy pathtesting.py
File metadata and controls
77 lines (60 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from dataclasses import asdict, dataclass
import requests
from .client import Client
from .network import Network
@dataclass(kw_only=True)
class HiveTestSuite:
url: str
name: str
description: str
id: int
@classmethod
def start(cls, url: str, name: str, description: str) -> "HiveTestSuite":
req = {"Name": name, "Description": description}
response = requests.post(url, json=req)
response.raise_for_status()
id = response.json()
return cls(url=f"{url}/{id}", name=name, description=description, id=id)
def end(self):
response = requests.delete(self.url)
response.raise_for_status()
def start_test(self, name: str, description: str) -> "HiveTest":
url = f"{self.url}/test"
return HiveTest.start(url=url, name=name, description=description)
def create_network(self, name): # -> Network:
url = f"{self.url}/network"
return Network.create(url=url, name=name)
@dataclass(kw_only=True)
class HiveTestResult:
test_pass: bool
details: str
def to_dict(self):
d = asdict(self)
d["pass"] = d.pop("test_pass")
return d
@dataclass(kw_only=True)
class HiveTest:
url: str
name: str
description: str
id: int
@classmethod
def start(cls, *, url: str, name: str, description: str) -> "HiveTest":
req = {"Name": name, "Description": description}
response = requests.post(url, json=req)
response.raise_for_status()
id = response.json()
return cls(url=f"{url}/{id}", name=name, description=description, id=id)
def end(self, *, result: HiveTestResult):
response = requests.post(self.url, json=result.to_dict())
response.raise_for_status()
def start_client(self, **kwargs) -> Client | None:
kwargs["url"] = f"{self.url}/node"
return Client.start(**kwargs)
def register_multi_test_client(self, client: Client):
"""Register a test for execution against a multi-test client."""
if not client.multi_test:
return
url = f"{client.url}/{client.id}/register/{self.id}"
response = requests.post(url)
response.raise_for_status()