Skip to content

Commit e88bb43

Browse files
authored
test: add regression test for null volume declaration (#113)
Fixes #112. Signed-off-by: majiayu000 <1835304752@qq.com>
1 parent 58d4b46 commit e88bb43

4 files changed

Lines changed: 226 additions & 0 deletions

File tree

nix_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,3 +526,12 @@ func TestInit(t *testing.T) {
526526
}
527527
runSubtestsWithGenerator(t, g)
528528
}
529+
530+
func TestNullVolumeDeclaration(t *testing.T) {
531+
composePath, _ := getPaths(t, false)
532+
g := &Generator{
533+
Inputs: []string{composePath},
534+
Project: NewProject("test"),
535+
}
536+
runSubtestsWithGenerator(t, g)
537+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
services:
2+
jellyfin:
3+
image: lscr.io/linuxserver/jellyfin:latest
4+
volumes:
5+
- type: bind
6+
source: /media/raid/books
7+
target: /media/books
8+
- type: bind
9+
source: /media/raid/music
10+
target: /media/music
11+
- type: volume
12+
source: jellyfin-config
13+
target: /config
14+
- type: volume
15+
source: jellyfin-cache
16+
target: /cache
17+
18+
volumes:
19+
jellyfin-config: null
20+
jellyfin-cache: null
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Auto-generated by compose2nix.
2+
3+
{ pkgs, lib, ... }:
4+
5+
{
6+
# Runtime
7+
virtualisation.docker = {
8+
enable = true;
9+
autoPrune.enable = true;
10+
};
11+
virtualisation.oci-containers.backend = "docker";
12+
13+
# Containers
14+
virtualisation.oci-containers.containers."test-jellyfin" = {
15+
image = "lscr.io/linuxserver/jellyfin:latest";
16+
volumes = [
17+
"/media/raid/books:/media/books:rw"
18+
"/media/raid/music:/media/music:rw"
19+
"test_jellyfin-cache:/cache:rw"
20+
"test_jellyfin-config:/config:rw"
21+
];
22+
log-driver = "journald";
23+
autoStart = false;
24+
extraOptions = [
25+
"--network-alias=jellyfin"
26+
"--network=test_default"
27+
];
28+
};
29+
systemd.services."docker-test-jellyfin" = {
30+
serviceConfig = {
31+
Restart = lib.mkOverride 90 "no";
32+
};
33+
after = [
34+
"docker-network-test_default.service"
35+
"docker-volume-test_jellyfin-cache.service"
36+
"docker-volume-test_jellyfin-config.service"
37+
];
38+
requires = [
39+
"docker-network-test_default.service"
40+
"docker-volume-test_jellyfin-cache.service"
41+
"docker-volume-test_jellyfin-config.service"
42+
];
43+
};
44+
45+
# Networks
46+
systemd.services."docker-network-test_default" = {
47+
path = [ pkgs.docker ];
48+
serviceConfig = {
49+
Type = "oneshot";
50+
RemainAfterExit = true;
51+
ExecStop = "docker network rm -f test_default";
52+
};
53+
script = ''
54+
docker network inspect test_default || docker network create test_default
55+
'';
56+
partOf = [ "docker-compose-test-root.target" ];
57+
wantedBy = [ "docker-compose-test-root.target" ];
58+
};
59+
60+
# Volumes
61+
systemd.services."docker-volume-test_jellyfin-cache" = {
62+
path = [ pkgs.docker ];
63+
serviceConfig = {
64+
Type = "oneshot";
65+
RemainAfterExit = true;
66+
};
67+
script = ''
68+
docker volume inspect test_jellyfin-cache || docker volume create test_jellyfin-cache
69+
'';
70+
partOf = [ "docker-compose-test-root.target" ];
71+
wantedBy = [ "docker-compose-test-root.target" ];
72+
};
73+
systemd.services."docker-volume-test_jellyfin-config" = {
74+
path = [ pkgs.docker ];
75+
serviceConfig = {
76+
Type = "oneshot";
77+
RemainAfterExit = true;
78+
};
79+
script = ''
80+
docker volume inspect test_jellyfin-config || docker volume create test_jellyfin-config
81+
'';
82+
partOf = [ "docker-compose-test-root.target" ];
83+
wantedBy = [ "docker-compose-test-root.target" ];
84+
};
85+
86+
# Root service
87+
# When started, this will automatically create all resources and start
88+
# the containers. When stopped, this will teardown all resources.
89+
systemd.targets."docker-compose-test-root" = {
90+
unitConfig = {
91+
Description = "Root target generated by compose2nix.";
92+
};
93+
};
94+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# Auto-generated by compose2nix.
2+
3+
{ pkgs, lib, config, ... }:
4+
5+
{
6+
# Runtime
7+
virtualisation.podman = {
8+
enable = true;
9+
autoPrune.enable = true;
10+
dockerCompat = true;
11+
};
12+
13+
# Enable container name DNS for all Podman networks.
14+
networking.firewall.interfaces = let
15+
matchAll = if !config.networking.nftables.enable then "podman+" else "podman*";
16+
in {
17+
"${matchAll}".allowedUDPPorts = [ 53 ];
18+
};
19+
20+
virtualisation.oci-containers.backend = "podman";
21+
22+
# Containers
23+
virtualisation.oci-containers.containers."test-jellyfin" = {
24+
image = "lscr.io/linuxserver/jellyfin:latest";
25+
volumes = [
26+
"/media/raid/books:/media/books:rw"
27+
"/media/raid/music:/media/music:rw"
28+
"test_jellyfin-cache:/cache:rw"
29+
"test_jellyfin-config:/config:rw"
30+
];
31+
log-driver = "journald";
32+
autoStart = false;
33+
extraOptions = [
34+
"--network-alias=jellyfin"
35+
"--network=test_default"
36+
];
37+
};
38+
systemd.services."podman-test-jellyfin" = {
39+
serviceConfig = {
40+
Restart = lib.mkOverride 90 "no";
41+
};
42+
after = [
43+
"podman-network-test_default.service"
44+
"podman-volume-test_jellyfin-cache.service"
45+
"podman-volume-test_jellyfin-config.service"
46+
];
47+
requires = [
48+
"podman-network-test_default.service"
49+
"podman-volume-test_jellyfin-cache.service"
50+
"podman-volume-test_jellyfin-config.service"
51+
];
52+
};
53+
54+
# Networks
55+
systemd.services."podman-network-test_default" = {
56+
path = [ pkgs.podman ];
57+
serviceConfig = {
58+
Type = "oneshot";
59+
RemainAfterExit = true;
60+
ExecStop = "podman network rm -f test_default";
61+
};
62+
script = ''
63+
podman network inspect test_default || podman network create test_default
64+
'';
65+
partOf = [ "podman-compose-test-root.target" ];
66+
wantedBy = [ "podman-compose-test-root.target" ];
67+
};
68+
69+
# Volumes
70+
systemd.services."podman-volume-test_jellyfin-cache" = {
71+
path = [ pkgs.podman ];
72+
serviceConfig = {
73+
Type = "oneshot";
74+
RemainAfterExit = true;
75+
};
76+
script = ''
77+
podman volume inspect test_jellyfin-cache || podman volume create test_jellyfin-cache
78+
'';
79+
partOf = [ "podman-compose-test-root.target" ];
80+
wantedBy = [ "podman-compose-test-root.target" ];
81+
};
82+
systemd.services."podman-volume-test_jellyfin-config" = {
83+
path = [ pkgs.podman ];
84+
serviceConfig = {
85+
Type = "oneshot";
86+
RemainAfterExit = true;
87+
};
88+
script = ''
89+
podman volume inspect test_jellyfin-config || podman volume create test_jellyfin-config
90+
'';
91+
partOf = [ "podman-compose-test-root.target" ];
92+
wantedBy = [ "podman-compose-test-root.target" ];
93+
};
94+
95+
# Root service
96+
# When started, this will automatically create all resources and start
97+
# the containers. When stopped, this will teardown all resources.
98+
systemd.targets."podman-compose-test-root" = {
99+
unitConfig = {
100+
Description = "Root target generated by compose2nix.";
101+
};
102+
};
103+
}

0 commit comments

Comments
 (0)