Skip to content

Commit f105245

Browse files
chrisburrchaen
authored andcommitted
test: Add future client tests
1 parent 36dcd20 commit f105245

File tree

5 files changed

+300
-0
lines changed

5 files changed

+300
-0
lines changed
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
from functools import partial
2+
3+
import pytest
4+
5+
import DIRAC
6+
7+
DIRAC.initialize()
8+
from DIRAC.WorkloadManagementSystem.Client.JobMonitoringClient import JobMonitoringClient
9+
from ..utils import compare_results
10+
11+
TEST_JOBS = [7470, 7471, 7469]
12+
TEST_JOB_IDS = [TEST_JOBS] + TEST_JOBS + [str(x) for x in TEST_JOBS]
13+
14+
15+
def test_getApplicationStates():
16+
# JobMonitoringClient().getApplicationStates(condDict = None, older = None, newer = None)
17+
method = JobMonitoringClient().getApplicationStates
18+
pytest.skip()
19+
20+
21+
def test_getAtticJobParameters():
22+
# JobMonitoringClient().getAtticJobParameters(jobID: int, parameters = None, rescheduleCycle = -1)
23+
method = JobMonitoringClient().getAtticJobParameters
24+
pytest.skip()
25+
26+
27+
def test_getCounters():
28+
# JobMonitoringClient().getCounters(attrList: list, attrDict = None, cutDate = )
29+
method = JobMonitoringClient().getCounters
30+
pytest.skip()
31+
32+
33+
def test_getInputData():
34+
# JobMonitoringClient().getInputData(jobID: int)
35+
method = JobMonitoringClient().getInputData
36+
pytest.skip()
37+
38+
39+
def test_getJobAttribute():
40+
# JobMonitoringClient().getJobAttribute(jobID: int, attribute: str)
41+
method = JobMonitoringClient().getJobAttribute
42+
pytest.skip()
43+
44+
45+
def test_getJobAttributes():
46+
# JobMonitoringClient().getJobAttributes(jobID: int, attrList = None)
47+
method = JobMonitoringClient().getJobAttributes
48+
pytest.skip()
49+
50+
51+
def test_getJobGroups():
52+
# JobMonitoringClient().getJobGroups(condDict = None, older = None, cutDate = None)
53+
method = JobMonitoringClient().getJobGroups
54+
pytest.skip()
55+
56+
57+
def test_getJobHeartBeatData():
58+
# JobMonitoringClient().getJobHeartBeatData(jobID: int)
59+
method = JobMonitoringClient().getJobHeartBeatData
60+
pytest.skip()
61+
62+
63+
def test_getJobJDL():
64+
# JobMonitoringClient().getJobJDL(jobID: int, original: bool)
65+
method = JobMonitoringClient().getJobJDL
66+
pytest.skip()
67+
68+
69+
def test_getJobLoggingInfo():
70+
# JobMonitoringClient().getJobLoggingInfo(jobID: int)
71+
method = JobMonitoringClient().getJobLoggingInfo
72+
pytest.skip()
73+
74+
75+
def test_getJobOptParameters():
76+
# JobMonitoringClient().getJobOptParameters(jobID: int)
77+
method = JobMonitoringClient().getJobOptParameters
78+
pytest.skip()
79+
80+
81+
def test_getJobOwner():
82+
# JobMonitoringClient().getJobOwner(jobID: int)
83+
method = JobMonitoringClient().getJobOwner
84+
pytest.skip()
85+
86+
87+
def test_getJobPageSummaryWeb():
88+
# JobMonitoringClient().getJobPageSummaryWeb(self: dict, selectDict: list, sortList: int, startItem: int, maxItems, selectJobs = True)
89+
method = JobMonitoringClient().getJobPageSummaryWeb
90+
pytest.skip()
91+
92+
93+
def test_getJobParameter():
94+
# JobMonitoringClient().getJobParameter(jobID: str | int, parName: str)
95+
method = JobMonitoringClient().getJobParameter
96+
pytest.skip()
97+
98+
99+
def test_getJobParameters():
100+
# JobMonitoringClient().getJobParameters(jobIDs: str | int | list, parName = None)
101+
method = JobMonitoringClient().getJobParameters
102+
pytest.skip()
103+
104+
105+
def test_getJobSite():
106+
# JobMonitoringClient().getJobSite(jobID: int)
107+
method = JobMonitoringClient().getJobSite
108+
pytest.skip()
109+
110+
111+
def test_getJobStats():
112+
# JobMonitoringClient().getJobStats(attribute: str, selectDict: dict)
113+
method = JobMonitoringClient().getJobStats
114+
pytest.skip()
115+
116+
117+
def test_getJobSummary():
118+
# JobMonitoringClient().getJobSummary(jobID: int)
119+
method = JobMonitoringClient().getJobSummary
120+
pytest.skip()
121+
122+
123+
def test_getJobTypes():
124+
# JobMonitoringClient().getJobTypes(condDict = None, older = None, newer = None)
125+
method = JobMonitoringClient().getJobTypes
126+
pytest.skip()
127+
128+
129+
def test_getJobs():
130+
# JobMonitoringClient().getJobs(attrDict = None, cutDate = None)
131+
method = JobMonitoringClient().getJobs
132+
pytest.skip()
133+
134+
135+
@pytest.mark.parametrize("jobIDs", TEST_JOB_IDS)
136+
def test_getJobsApplicationStatus(jobIDs):
137+
# JobMonitoringClient().getJobsApplicationStatus(jobIDs: str | int | list)
138+
method = JobMonitoringClient().getJobsApplicationStatus
139+
compare_results(partial(method, jobIDs))
140+
141+
142+
@pytest.mark.parametrize("jobIDs", TEST_JOB_IDS)
143+
def test_getJobsMinorStatus(jobIDs):
144+
# JobMonitoringClient().getJobsMinorStatus(jobIDs: str | int | list)
145+
method = JobMonitoringClient().getJobsMinorStatus
146+
compare_results(partial(method, jobIDs))
147+
148+
149+
def test_getJobsParameters():
150+
# JobMonitoringClient().getJobsParameters(jobIDs: str | int | list, parameters: list)
151+
method = JobMonitoringClient().getJobsParameters
152+
pytest.skip()
153+
154+
155+
@pytest.mark.parametrize("jobIDs", TEST_JOB_IDS)
156+
def test_getJobsSites(jobIDs):
157+
# JobMonitoringClient().getJobsSites(jobIDs: str | int | list)
158+
method = JobMonitoringClient().getJobsSites
159+
compare_results(partial(method, jobIDs))
160+
161+
162+
@pytest.mark.parametrize("jobIDs", TEST_JOB_IDS)
163+
def test_getJobsStates(jobIDs):
164+
# JobMonitoringClient().getJobsStates(jobIDs: str | int | list)
165+
method = JobMonitoringClient().getJobsStates
166+
compare_results(partial(method, jobIDs))
167+
168+
169+
@pytest.mark.parametrize("jobIDs", TEST_JOB_IDS)
170+
def test_getJobsStatus(jobIDs):
171+
# JobMonitoringClient().getJobsStatus(jobIDs: str | int | list)
172+
method = JobMonitoringClient().getJobsStatus
173+
compare_results(partial(method, jobIDs))
174+
175+
176+
def test_getJobsSummary():
177+
# JobMonitoringClient().getJobsSummary(jobIDs: list)
178+
method = JobMonitoringClient().getJobsSummary
179+
pytest.skip()
180+
181+
182+
def test_getMinorStates():
183+
# JobMonitoringClient().getMinorStates(condDict = None, older = None, newer = None)
184+
method = JobMonitoringClient().getMinorStates
185+
pytest.skip()
186+
187+
188+
def test_getOwnerGroup():
189+
# JobMonitoringClient().getOwnerGroup()
190+
method = JobMonitoringClient().getOwnerGroup
191+
pytest.skip()
192+
193+
194+
def test_getOwners():
195+
# JobMonitoringClient().getOwners(condDict = None, older = None, newer = None)
196+
method = JobMonitoringClient().getOwners
197+
pytest.skip()
198+
199+
200+
def test_getSiteSummary():
201+
# JobMonitoringClient().getSiteSummary()
202+
method = JobMonitoringClient().getSiteSummary
203+
pytest.skip()
204+
205+
206+
def test_getSites():
207+
# JobMonitoringClient().getSites(condDict = None, older = None, newer = None)
208+
method = JobMonitoringClient().getSites
209+
pytest.skip()
210+
211+
212+
def test_getStates():
213+
# JobMonitoringClient().getStates(condDict = None, older = None, newer = None)
214+
method = JobMonitoringClient().getStates
215+
pytest.skip()

tests/Integration/FutureClient/WorkloadManagement/__init__.py

Whitespace-only changes.

tests/Integration/FutureClient/__init__.py

Whitespace-only changes.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/usr/bin/env python
2+
import argparse
3+
import inspect
4+
import importlib
5+
from itertools import zip_longest
6+
7+
BASE_EXPORTS = {"export_whoami", "export_refreshConfiguration", "export_ping", "export_echo"}
8+
9+
10+
def parse_args():
11+
parser = argparse.ArgumentParser(
12+
description="Generate pytest stubs for testing the future client of a DIRAC system component"
13+
)
14+
parser.add_argument("system", help="DIRAC system name")
15+
parser.add_argument("component", help="DIRAC component name")
16+
args = parser.parse_args()
17+
main(args.system, args.component)
18+
19+
20+
def main(system, component):
21+
client_name = f"{component}Client"
22+
handler = getattr(
23+
importlib.import_module(f"DIRAC.{system}System.Service.{component}Handler"), f"{component}Handler"
24+
)
25+
26+
print("from functools import partial")
27+
print()
28+
print("import pytest")
29+
print()
30+
print("import DIRAC")
31+
print("DIRAC.initialize()")
32+
print(f"from DIRAC.{system}System.Client.{client_name} import {client_name}")
33+
print("from ..utils import compare_results")
34+
print()
35+
print()
36+
37+
for export in dir(handler):
38+
if not export.startswith("export_") or export in BASE_EXPORTS:
39+
continue
40+
method_name = export[len("export_") :]
41+
types = getattr(handler, f"types_{method_name}")
42+
signature = inspect.signature(getattr(handler, export))
43+
type_infos = []
44+
for parameter, dtype in zip_longest(signature.parameters.values(), types):
45+
if dtype is None:
46+
dtype = ""
47+
elif isinstance(dtype, (list, tuple)):
48+
dtype = f": {' | '.join([d.__name__ for d in dtype])}"
49+
else:
50+
dtype = f": {dtype.__name__}"
51+
if parameter.default == inspect._empty:
52+
default = ""
53+
else:
54+
default = f" = {parameter.default}"
55+
type_infos += [f"{parameter.name}{dtype}{default}"]
56+
print(f"def test_{method_name}(monkeypatch):")
57+
print(f" # {client_name}().{method_name}({', '.join(type_infos)})")
58+
print(f" method = {client_name}().{method_name}")
59+
print(f" pytest.skip()")
60+
print()
61+
print()
62+
63+
64+
if __name__ == "__main__":
65+
parse_args()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
def compare_results(test_func):
2+
"""Compare the results from DIRAC and DiracX based services for a reentrant function."""
3+
ClientClass = test_func.func.__self__
4+
assert ClientClass.diracxClient, "FutureClient is not set up!"
5+
6+
# Get the result from the diracx-based handler
7+
future_result = test_func()
8+
9+
# Get the result from the DIRAC-based handler
10+
diracxClient = ClientClass.diracxClient
11+
ClientClass.diracxClient = None
12+
try:
13+
old_result = test_func()
14+
finally:
15+
ClientClass.diracxClient = diracxClient
16+
# We don't care about the rpcStub
17+
old_result.pop("rpcStub")
18+
19+
# Ensure the results match
20+
assert old_result == future_result

0 commit comments

Comments
 (0)