"""Tests for M12 Tier 2 share server: token gating + endpoints.""" import json import threading import unittest import urllib.error import urllib.request from rigdoctor.core import share class ShareServerTests(unittest.TestCase): def setUp(self): self.srv, self.token = share.make_server("127.0.0.1", 0) self.port = self.srv.server_address[1] self.thread = threading.Thread(target=self.srv.serve_forever, daemon=True) self.thread.start() def tearDown(self): self.srv.shutdown() def _url(self, path, token=None): q = f"?t={token}" if token else "" return f"http://127.0.0.1:{self.port}{path}{q}" def test_requires_token(self): with self.assertRaises(urllib.error.HTTPError) as cm: urllib.request.urlopen(self._url("/api/snapshot"), timeout=10) self.assertEqual(cm.exception.code, 403) def test_bad_token_rejected(self): with self.assertRaises(urllib.error.HTTPError) as cm: urllib.request.urlopen(self._url("/api/snapshot", "wrong"), timeout=10) self.assertEqual(cm.exception.code, 403) def test_snapshot_with_token(self): data = json.load(urllib.request.urlopen(self._url("/api/snapshot", self.token), timeout=10)) self.assertIn("groups", data) def test_page_served(self): body = urllib.request.urlopen(self._url("/", self.token), timeout=10).read() self.assertIn(b"read-only share", body) if __name__ == "__main__": unittest.main()