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