1import ./make-test-python.nix (
2 { pkgs, ... }:
3 {
4 name = "ustreamer-vmtest";
5 nodes = {
6 client =
7 { ... }:
8 {
9 environment.systemPackages = [ pkgs.curl ];
10 };
11 camera =
12 { config, ... }:
13 let
14 configFile = pkgs.writeText "akvcam-configFile" ''
15 [Cameras]
16 cameras/size = 2
17
18 cameras/1/type = output
19 cameras/1/mode = mmap, userptr, rw
20 cameras/1/description = Virtual Camera (output device)
21 cameras/1/formats = 2
22 cameras/1/videonr = 7
23
24 cameras/2/type = capture
25 cameras/2/mode = mmap, rw
26 cameras/2/description = Virtual Camera
27 cameras/2/formats = 1, 2
28 cameras/2/videonr = 9
29
30 [Connections]
31 connections/size = 1
32 connections/1/connection = 1:2
33
34 [Formats]
35 formats/size = 2
36
37 formats/1/format = YUY2
38 formats/1/width = 640
39 formats/1/height = 480
40 formats/1/fps = 30
41
42 formats/2/format = RGB24, YUY2
43 formats/2/width = 640
44 formats/2/height = 480
45 formats/2/fps = 20/1, 15/2
46 '';
47 in
48 {
49 services.ustreamer = {
50 enable = true;
51 device = "/dev/video9";
52 extraArgs = [ "--device-timeout=8" ];
53 };
54 networking.firewall.allowedTCPPorts = [ 8080 ];
55
56 boot.extraModulePackages = [ config.boot.kernelPackages.akvcam ];
57 boot.kernelModules = [ "akvcam" ];
58 boot.extraModprobeConfig = ''
59 options akvcam config_file=${configFile}
60 '';
61 };
62 };
63
64 testScript = ''
65 start_all()
66
67 camera.wait_for_unit("ustreamer.service")
68 camera.wait_for_open_port(8080)
69
70 client.wait_for_unit("multi-user.target")
71 client.succeed("curl http://camera:8080")
72 '';
73 }
74)