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