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