Files

39 lines
1.6 KiB
Python

"""Tests for lab startup failure handling. No SDK or network required."""
import contextlib
import io
import unittest
from unittest.mock import patch, Mock
import lab
class RunnerTests(unittest.TestCase):
def test_missing_sdk_fails_before_starting(self):
with patch.object(lab.shutil, "which", return_value=None), \
patch.object(lab.subprocess, "Popen") as spawn, \
patch.object(lab.sys, "argv", ["lab.py", "start"]), \
contextlib.redirect_stdout(io.StringIO()):
self.assertEqual(lab.main(), 1)
spawn.assert_not_called()
def test_cleanup_when_cabinet_launch_fails(self):
broker = Mock()
broker.poll.return_value = None
with patch.object(lab.socket, "socket"), \
patch.object(lab.socket, "create_connection"), \
patch.object(lab.Path, "exists", return_value=True), \
patch.object(lab.shutil, "which", return_value="nats-server"), \
patch.object(lab.subprocess, "Popen", side_effect=[broker, OSError("launch failed")]):
with self.assertRaises(OSError):
lab.start()
broker.terminate.assert_called_once()
broker.wait.assert_called_once()
def test_command_identity_and_expiry(self):
first = lab.command("scan", "session")
second = lab.command("scan", "session")
self.assertNotEqual(first["id"], second["id"])
self.assertEqual(first["session"], "session")
self.assertGreater(first["expires_ms"], int(lab.time.time() * 1000))
if __name__ == "__main__":
unittest.main()