blob: 8dd352d3a1981a28ff337ceaf5a2b306a9c1648b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
{ pkgs, lib, ... }:
{
name = "pulseaudio-tcp";
meta.maintainers =
pkgs.pulseaudio.meta.maintainers
++ (with lib.maintainers; [
aleksana
doronbehar
]);
nodes = {
server = {
virtualisation.vlans = [ 1 ];
networking.useNetworkd = true;
systemd.network.networks."01-eth1" = {
name = "eth1";
networkConfig.Address = "10.0.0.1/24";
};
services.pulseaudio = {
enable = true;
tcp = {
enable = true;
port = 4713;
openFirewall = true;
anonymousClients.allowedIpRanges = [ "10.0.0.2" ];
};
systemWide = true;
extraConfig = ''
load-module module-pipe-sink file=/tmp/audio_check sink_name=virtual_server_sink
set-default-sink virtual_server_sink
'';
};
systemd.services.pulseaudio.wantedBy = [ "multi-user.target" ];
};
client = {
virtualisation.vlans = [ 1 ];
networking.useNetworkd = true;
systemd.network.networks."01-eth1" = {
name = "eth1";
networkConfig.Address = "10.0.0.2/24";
};
services.pulseaudio = {
enable = true;
extraClientConf = ''
default-server = tcp:10.0.0.1:4713
'';
};
};
};
testScript = # python
''
start_all()
server.wait_for_unit("pulseaudio.service")
# port is open
server.wait_for_open_port(4713)
client.wait_for_open_port(4713, "10.0.0.1")
# client can see server
client.succeed('pactl info | grep "Server String" | grep -q "tcp"')
client.succeed('pactl list sinks short | grep -q "virtual_server_sink"')
# server sink pipe is in place
server.succeed('[ -e "/tmp/audio_check" ]')
# try to read something from it, it should not work as we haven't played anything
server.fail('timeout 1s head -c 1 /tmp/audio_check')
# client start to play something
client.execute("pacat -p --latency-msec=100 --channels=1 /dev/zero >/dev/null 2>&1 &")
server.sleep(1)
# server sink has received data now, in a normal setup it should be able to play
server.succeed('timeout 1s head -c 100 /tmp/audio_check')
'';
}
|