1{
2 system ? builtins.currentSystem,
3 config ? { },
4 pkgs ? import ../.. { inherit system config; },
5 lib ? pkgs.lib,
6}:
7
8with import ../lib/testing-python.nix { inherit system pkgs; };
9
10let
11 packages = with pkgs; {
12 "16" = teleport_16;
13 "17" = teleport_17;
14 };
15
16 minimal = package: {
17 services.teleport = {
18 enable = true;
19 inherit package;
20 };
21 };
22
23 client = package: {
24 services.teleport = {
25 enable = true;
26 inherit package;
27 settings = {
28 teleport = {
29 nodename = "client";
30 advertise_ip = "192.168.1.20";
31 auth_token = "8d1957b2-2ded-40e6-8297-d48156a898a9";
32 auth_servers = [ "192.168.1.10:3025" ];
33 log.severity = "DEBUG";
34 };
35 ssh_service = {
36 enabled = true;
37 labels = {
38 role = "client";
39 };
40 };
41 proxy_service.enabled = false;
42 auth_service.enabled = false;
43 };
44 };
45 networking.interfaces.eth1.ipv4.addresses = [
46 {
47 address = "192.168.1.20";
48 prefixLength = 24;
49 }
50 ];
51 };
52
53 server = package: {
54 services.teleport = {
55 enable = true;
56 inherit package;
57 settings = {
58 teleport = {
59 nodename = "server";
60 advertise_ip = "192.168.1.10";
61 };
62 ssh_service.enabled = true;
63 proxy_service.enabled = true;
64 auth_service = {
65 enabled = true;
66 tokens = [ "node:8d1957b2-2ded-40e6-8297-d48156a898a9" ];
67 };
68 };
69 diag.enable = true;
70 insecure.enable = true;
71 };
72 networking = {
73 firewall.allowedTCPPorts = [ 3025 ];
74 interfaces.eth1.ipv4.addresses = [
75 {
76 address = "192.168.1.10";
77 prefixLength = 24;
78 }
79 ];
80 };
81 };
82in
83lib.concatMapAttrs (name: package: {
84 "minimal_${name}" = makeTest {
85 # minimal setup should always work
86 name = "teleport-minimal-setup";
87 meta.maintainers = with pkgs.lib.maintainers; [ justinas ];
88 nodes.minimal = minimal package;
89
90 testScript = ''
91 minimal.wait_for_open_port(3025)
92 minimal.wait_for_open_port(3080)
93 minimal.wait_for_open_port(3022)
94 '';
95 };
96
97 "basic_${name}" = makeTest {
98 # basic server and client test
99 name = "teleport-server-client";
100 meta.maintainers = with pkgs.lib.maintainers; [ justinas ];
101 nodes = {
102 server = server package;
103 client = client package;
104 };
105
106 testScript = ''
107 with subtest("teleport ready"):
108 server.wait_for_open_port(3025)
109 client.wait_for_open_port(3022)
110
111 with subtest("check applied configuration"):
112 server.wait_until_succeeds("tctl get nodes --format=json | ${pkgs.jq}/bin/jq -e '.[] | select(.spec.hostname==\"client\") | .metadata.labels.role==\"client\"'")
113 server.wait_for_open_port(3000)
114 client.succeed("journalctl -u teleport.service --grep='DEBU'")
115 server.succeed("journalctl -u teleport.service --grep='Starting teleport in insecure mode.'")
116 '';
117 };
118}) packages