1# This test runs docker-registry and check if it works
2{ pkgs, ... }:
3{
4 name = "docker-registry";
5 meta = with pkgs.lib.maintainers; {
6 maintainers = [
7 globin
8 ironpinguin
9 cafkafk
10 ];
11 };
12
13 nodes = {
14 registry =
15 { ... }:
16 {
17 services.dockerRegistry.enable = true;
18 services.dockerRegistry.enableDelete = true;
19 services.dockerRegistry.port = 8080;
20 services.dockerRegistry.listenAddress = "0.0.0.0";
21 services.dockerRegistry.enableGarbageCollect = true;
22 services.dockerRegistry.openFirewall = true;
23 };
24
25 client1 =
26 { ... }:
27 {
28 virtualisation.docker.enable = true;
29 virtualisation.docker.extraOptions = "--insecure-registry registry:8080";
30 };
31
32 client2 =
33 { ... }:
34 {
35 virtualisation.docker.enable = true;
36 virtualisation.docker.extraOptions = "--insecure-registry registry:8080";
37 };
38 };
39
40 testScript = ''
41 client1.start()
42 client1.wait_for_unit("docker.service")
43 client1.succeed("tar cv --files-from /dev/null | docker import - scratch")
44 client1.succeed("docker tag scratch registry:8080/scratch")
45
46 registry.start()
47 registry.wait_for_unit("docker-registry.service")
48 registry.wait_for_open_port(8080)
49 client1.succeed("docker push registry:8080/scratch")
50
51 client2.start()
52 client2.wait_for_unit("docker.service")
53 client2.succeed("docker pull registry:8080/scratch")
54 client2.succeed("docker images | grep scratch")
55
56 client2.succeed(
57 "curl -fsS -X DELETE registry:8080/v2/scratch/manifests/$(curl -fsS -I -H\"Accept: application/vnd.docker.distribution.manifest.v2+json\" registry:8080/v2/scratch/manifests/latest | grep Docker-Content-Digest | sed -e 's/Docker-Content-Digest: //' | tr -d '\\r')"
58 )
59
60 registry.systemctl("start docker-registry-garbage-collect.service")
61 registry.wait_until_fails("systemctl status docker-registry-garbage-collect.service")
62 registry.wait_for_unit("docker-registry.service")
63
64 registry.fail("ls -l /var/lib/docker-registry/docker/registry/v2/blobs/sha256/*/*/data")
65
66 client1.succeed("docker push registry:8080/scratch")
67 registry.succeed(
68 "ls -l /var/lib/docker-registry/docker/registry/v2/blobs/sha256/*/*/data"
69 )
70 '';
71}