1import ./make-test-python.nix (
2 { pkgs, lib, ... }:
3 {
4 name = "gns3-server";
5 meta.maintainers = [ lib.maintainers.anthonyroussel ];
6
7 nodes.machine =
8 { ... }:
9 let
10 tls-cert = pkgs.runCommand "selfSignedCerts" { buildInputs = [ pkgs.openssl ]; } ''
11 openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -days 365 \
12 -subj '/CN=localhost'
13 install -D -t $out key.pem cert.pem
14 '';
15 in
16 {
17 services.gns3-server = {
18 enable = true;
19 auth = {
20 enable = true;
21 user = "user";
22 passwordFile = pkgs.writeText "gns3-auth-password-file" "password";
23 };
24 ssl = {
25 enable = true;
26 certFile = "${tls-cert}/cert.pem";
27 keyFile = "${tls-cert}/key.pem";
28 };
29 dynamips.enable = true;
30 ubridge.enable = true;
31 vpcs.enable = true;
32 };
33
34 security.pki.certificateFiles = [ "${tls-cert}/cert.pem" ];
35 };
36
37 testScript =
38 let
39 createProject = pkgs.writeText "createProject.json" (
40 builtins.toJSON {
41 name = "test_project";
42 }
43 );
44 in
45 ''
46 start_all()
47
48 machine.wait_for_unit("gns3-server.service")
49 machine.wait_for_open_port(3080)
50
51 with subtest("server is listening"):
52 machine.succeed("curl -sSfL -u user:password https://localhost:3080/v2/version")
53
54 with subtest("create dummy project"):
55 machine.succeed("curl -sSfL -u user:password https://localhost:3080/v2/projects -d @${createProject}")
56
57 with subtest("logging works"):
58 log_path = "/var/log/gns3/server.log"
59 machine.wait_for_file(log_path)
60 '';
61 }
62)