Ctrl K
ComunidadGuías…

examples/test_owned_pod_stream.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env python3
import importlib.util
import pathlib
import socket
import tempfile
import time
import unittest


HERE = pathlib.Path(__file__).resolve().parent
SPEC = importlib.util.spec_from_file_location("owned_pod_stream", HERE / "owned-pod-stream.py")
STREAM = importlib.util.module_from_spec(SPEC); SPEC.loader.exec_module(STREAM)


def target():
    return {"kubeconfig":"/tmp/kubeconfig","context":"k3d-hakopod-dev","namespace":"managed-platform-a",
            "namespace_uid":"11111111-1111-1111-1111-111111111111","pod":"gateway-abc","pod_uid":"22222222-2222-2222-2222-222222222222",
            "owner_kind":"ReplicaSet","owner_name":"gateway-abc","owner_uid":"33333333-3333-3333-3333-333333333333",
            "workload_kind":"Deployment","workload_name":"supabase-api-gateway","workload_uid":"44444444-4444-4444-4444-444444444444",
            "container":"envoy","image":"example.invalid/envoy@sha256:"+"a"*64,"port":8443}


class OwnedPodStreamTest(unittest.TestCase):
    def test_binary_stream_and_fixed_exec_command(self):
        with tempfile.TemporaryDirectory() as directory:
            fake=pathlib.Path(directory)/"kubectl"
            fake.write_text("#!/usr/bin/env python3\nimport sys\ndata=sys.stdin.buffer.read()\nsys.stdout.buffer.write(data)\nsys.stdout.buffer.flush()\n")
            fake.chmod(0o700)
            relay=STREAM.OwnedPodForward(0,target,2,lifetime=10,idle_timeout=3,stream_timeout=5,kubectl=str(fake)).start()
            try:
                payload=b"\x00\x00\x00\x08\x04\xd2\x16/\x16\x03\x01\x00\x07raw\x00tls"
                client=socket.create_connection(("127.0.0.1",relay.listen_port),timeout=2)
                client.sendall(payload); client.shutdown(socket.SHUT_WR)
                received=b""
                while len(received)<len(payload): received += client.recv(4096)
                self.assertEqual(received,payload)
                client.close()
                deadline=time.monotonic()+3
                while relay.workers and time.monotonic()<deadline: time.sleep(.01)
                self.assertEqual(relay.workers,set())
            finally:
                relay.close()

    def test_rejects_unbounded_connection_count(self):
        with self.assertRaises(RuntimeError): STREAM.OwnedPodForward(0,target,137)

    def test_close_terminates_active_exec_with_one_deadline(self):
        with tempfile.TemporaryDirectory() as directory:
            fake=pathlib.Path(directory)/"kubectl"
            fake.write_text("#!/usr/bin/env python3\nimport time\ntime.sleep(60)\n")
            fake.chmod(0o700)
            relay=STREAM.OwnedPodForward(0,target,2,lifetime=10,kubectl=str(fake)).start()
            client=socket.create_connection(("127.0.0.1",relay.listen_port),timeout=2)
            deadline=time.monotonic()+2
            while not relay.processes and time.monotonic()<deadline: time.sleep(.01)
            started=time.monotonic(); relay.close(); client.close()
            self.assertLess(time.monotonic()-started,7)
            self.assertFalse(relay.processes)

    def test_identity_change_closes_stream(self):
        current=target(); calls=[]
        with tempfile.TemporaryDirectory() as directory:
            fake=pathlib.Path(directory)/"kubectl"
            fake.write_text("#!/usr/bin/env python3\nimport sys\nsys.stdout.buffer.write(sys.stdin.buffer.read())\n")
            fake.chmod(0o700)
            calls=[]
            def callback():
                calls.append(1)
                if len(calls)==2: current["pod_uid"]="55555555-5555-5555-5555-555555555555"
                return dict(current)
            relay=STREAM.OwnedPodForward(0,callback,1,lifetime=10,kubectl=str(fake)).start()
            try:
                client=socket.create_connection(("127.0.0.1",relay.listen_port),timeout=2)
                client.settimeout(3); client.sendall(b"secret")
                try: received=client.recv(1)
                except ConnectionResetError: received=b""
                self.assertEqual(received,b"")
                client.close()
                relay.check_healthy()
                deadline=time.monotonic()+3
                while relay.workers and time.monotonic()<deadline: time.sleep(.01)
                calls.clear()
                second=socket.create_connection(("127.0.0.1",relay.listen_port),timeout=2)
                second.sendall(b"next"); second.shutdown(socket.SHUT_WR)
                try: second_received=second.recv(4)
                except ConnectionResetError: second_received=b""
                relay.check_healthy()
                self.assertEqual(second_received,b"next")
                second.close(); relay.check_healthy()
            finally:
                relay.close()


if __name__ == "__main__": unittest.main()