Skip to content

Commit cb9ecde

Browse files
tests/conftest: turn exporter fixture into class
This allows stopping and starting the exporter during a test. More functionality will be moved into the class in future commits. Signed-off-by: Bastian Krause <[email protected]>
1 parent 606af35 commit cb9ecde

File tree

2 files changed

+61
-45
lines changed

2 files changed

+61
-45
lines changed

tests/conftest.py

Lines changed: 57 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,54 @@ def __getattr__(self, name):
6060
return getattr(self.__wrapped, name)
6161

6262

63+
class Exporter:
64+
def __init__(self, config, cwd):
65+
self.cwd = str(cwd)
66+
self.config = config
67+
self.spawn = None
68+
self.reader = None
69+
70+
def start(self):
71+
assert self.spawn is None
72+
assert self.reader is None
73+
74+
self.spawn = pexpect.spawn(
75+
f'{sys.executable} -m labgrid.remote.exporter --name testhost {self.config}',
76+
logfile=Prefixer(sys.stdout.buffer, 'exporter'),
77+
cwd=self.cwd)
78+
try:
79+
self.spawn.expect('exporter name: testhost')
80+
self.spawn.expect('connected to exporter')
81+
except Exception as e:
82+
raise Exception(f"exporter startup failed with {self.spawn.before}") from e
83+
84+
self.reader = threading.Thread(
85+
target=keep_reading,
86+
name=f'exporter-reader-{self.pid}',
87+
args=(self.spawn,), daemon=True)
88+
self.reader.start()
89+
90+
def stop(self):
91+
logging.info("stopping exporter pid=%s", self.spawn.pid)
92+
self.spawn.close(force=True)
93+
assert not self.spawn.isalive()
94+
self.reader.join()
95+
96+
self.spawn = None
97+
self.reader = None
98+
99+
def isalive(self):
100+
return self.spawn.isalive()
101+
102+
@property
103+
def exitstatus(self):
104+
return self.spawn.exitstatus
105+
106+
@property
107+
def pid(self):
108+
return self.spawn.pid
109+
110+
63111
@pytest.fixture(scope='function')
64112
def target():
65113
return Target('Test')
@@ -123,16 +171,9 @@ def coordinator(tmpdir):
123171
reader.join()
124172

125173
@pytest.fixture(scope='function')
126-
def exporter(tmpdir, coordinator, start_exporter):
127-
yield start_exporter()
128-
129-
130-
@pytest.fixture(scope='function')
131-
def start_exporter(tmpdir, coordinator):
132-
spawns = []
133-
readers = []
134-
135-
p = tmpdir.join("exports.yaml")
174+
def exporter(tmpdir, coordinator):
175+
config = "exports.yaml"
176+
p = tmpdir.join(config)
136177
p.write(
137178
"""
138179
Testport:
@@ -152,32 +193,12 @@ def start_exporter(tmpdir, coordinator):
152193
"""
153194
)
154195

155-
def _start_exporter():
156-
spawn = pexpect.spawn(
157-
f'{sys.executable} -m labgrid.remote.exporter --name testhost exports.yaml',
158-
logfile=Prefixer(sys.stdout.buffer, 'exporter'),
159-
cwd=str(tmpdir))
160-
try:
161-
spawn.expect('exporter name: testhost')
162-
spawn.expect('connected to exporter')
163-
except:
164-
print(f"exporter startup failed with {spawn.before}")
165-
raise
166-
reader = threading.Thread(target=keep_reading, name=f'exporter-reader-{spawn.pid}', args=(spawn,), daemon=True)
167-
reader.start()
168-
169-
spawns.append(spawn)
170-
readers.append(reader)
171-
172-
return spawn
173-
174-
yield _start_exporter
175-
176-
for spawn, reader in zip(spawns, readers):
177-
print(f"stopping exporter pid={spawn.pid}")
178-
spawn.close(force=True)
179-
assert not spawn.isalive()
180-
reader.join()
196+
exporter = Exporter(config, tmpdir)
197+
exporter.start()
198+
199+
yield exporter
200+
201+
exporter.stop()
181202

182203
def pytest_addoption(parser):
183204
parser.addoption("--sigrok-usb", action="store_true",

tests/test_client.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -393,14 +393,12 @@ def test_reservation(place_acquire, tmpdir):
393393
spawn.close()
394394
assert spawn.exitstatus == 0, spawn.before.strip()
395395

396-
def test_resource_acquired_state_on_exporter_restart(monkeypatch, place,start_exporter):
396+
def test_resource_acquired_state_on_exporter_restart(monkeypatch, place, exporter):
397397
user = "test-user"
398398
host = "test-host"
399399
monkeypatch.setenv("LG_USERNAME", user)
400400
monkeypatch.setenv("LG_HOSTNAME", host)
401401

402-
exporter = start_exporter()
403-
404402
# add resource match
405403
with pexpect.spawn('python -m labgrid.remote.client -p test add-match testhost/Testport/NetworkSerialPort') as spawn:
406404
spawn.expect(pexpect.EOF)
@@ -433,12 +431,9 @@ def test_resource_acquired_state_on_exporter_restart(monkeypatch, place,start_ex
433431
assert spawn.exitstatus == 0, spawn.before.strip()
434432
assert b"Resource 'NetworkSerialPort' (testhost/Testport/NetworkSerialPort[/NetworkSerialPort]):\r\n {'acquired': 'test'," in spawn.before
435433

436-
# stop exporter
437-
exporter.close()
438-
assert not exporter.isalive()
439-
440-
# start exporter again
441-
exporter = start_exporter()
434+
# restart exporter
435+
exporter.stop()
436+
exporter.start()
442437

443438
# make sure matching resource is still found
444439
with pexpect.spawn('python -m labgrid.remote.client -p test show') as spawn:

0 commit comments

Comments
 (0)