|
1 | 1 | package dockergen
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "fmt" |
| 5 | + "io/ioutil" |
| 6 | + "log" |
| 7 | + "os" |
4 | 8 | "testing"
|
5 | 9 | )
|
6 | 10 |
|
7 | 11 | func TestGetCurrentContainerID(t *testing.T) {
|
8 |
| - currentContainerID := GetCurrentContainerID() |
| 12 | + hostname := os.Getenv("HOSTNAME") |
| 13 | + defer os.Setenv("HOSTNAME", hostname) |
9 | 14 |
|
10 |
| - if len(currentContainerID) != 0 && len(currentContainerID) != 64 { |
11 |
| - t.Fail() |
| 15 | + ids := []string{ |
| 16 | + "0fa939e22e6938e7517f663de83e79a5087a18b1b997a36e0c933a917cddb295", |
| 17 | + "e881f8c51a72db7da515e9d5cab8ed105b869579eb9923fdcf4ee80933160802", |
| 18 | + "eede6bd9e72f5d783a4bfb845bd71f310e974cb26987328a5d15704e23a8d6cb", |
12 | 19 | }
|
13 |
| -} |
14 | 20 |
|
15 |
| -func TestGetCurrentContainerID_ECS(t *testing.T) { |
16 |
| - cgroup := |
17 |
| - `9:perf_event:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f |
18 |
| -8:memory:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f |
19 |
| -7:hugetlb:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f |
20 |
| -6:freezer:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f |
21 |
| -5:devices:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f |
22 |
| -4:cpuset:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f |
23 |
| -3:cpuacct:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f |
24 |
| -2:cpu:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f |
25 |
| -1:blkio:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f` |
26 |
| - |
27 |
| - if got, exp := matchECSCurrentContainerID(cgroup), "3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f"; got != exp { |
28 |
| - t.Fatalf("id mismatch: got %v, exp %v", got, exp) |
| 21 | + contents := map[string]string{ |
| 22 | + "cpuset": fmt.Sprintf("/docker/%v", ids[0]), |
| 23 | + "cgroup": fmt.Sprintf(`13:name=systemd:/docker-ce/docker/%[1]v |
| 24 | +12:pids:/docker-ce/docker/%[1]v |
| 25 | +11:hugetlb:/docker-ce/docker/%[1]v |
| 26 | +10:net_prio:/docker-ce/docker/%[1]v |
| 27 | +9:perf_event:/docker-ce/docker/%[1]v |
| 28 | +8:net_cls:/docker-ce/docker/%[1]v |
| 29 | +7:freezer:/docker-ce/docker/%[1]v |
| 30 | +6:devices:/docker-ce/docker/%[1]v |
| 31 | +5:memory:/docker-ce/docker/%[1]v |
| 32 | +4:blkio:/docker-ce/docker/%[1]v |
| 33 | +3:cpuacct:/docker-ce/docker/%[1]v |
| 34 | +2:cpu:/docker-ce/docker/%[1]v |
| 35 | +1:cpuset:/docker-ce/docker/%[1]v`, ids[1]), |
| 36 | + "mountinfo": fmt.Sprintf(`705 661 0:96 / / rw,relatime master:192 - overlay overlay rw,lowerdir=/var/lib/docker/overlay2/l/CVAK3VWZFQCUGTLHRJHPEKJ4UL:/var/lib/docker/overlay2/l/XMJZ73SKVWVECU7TJCOY62F3H2:/var/lib/docker/overlay2/l/AVNBXO52GHDY3MZU3R4RCSNMCE:/var/lib/docker/overlay2/l/L4IJZ33E6NAMXJ5W3SKJSVX5TS:/var/lib/docker/overlay2/l/JXAUAD5TDJCXA34FGS6NYGUZKT:/var/lib/docker/overlay2/l/TBQDSAFKBSTFMUS3QCFWN5NRLB:/var/lib/docker/overlay2/l/MXIUXRGB7MU4Y4NUNZE2VXTXIN:/var/lib/docker/overlay2/l/HN7E4YWJG7TMG7BXLZTGICTBOA:/var/lib/docker/overlay2/l/65XQPC72Z5VRY4THGASZIQXS57:/var/lib/docker/overlay2/l/BVQKC7LU6D7MOSLBDKFHY7YSO3:/var/lib/docker/overlay2/l/R4GGX3SFPMLXTNM3WKMVOKDTOY:/var/lib/docker/overlay2/l/VHGYTU73JLTRCGX45ZF2VGW4FK,upperdir=/var/lib/docker/overlay2/e1fab975d5ffd51474b11a964c82c3bfda1c0e82aec6845a1f12c8150bf61419/diff,workdir=/var/lib/docker/overlay2/e1fab975d5ffd51474b11a964c82c3bfda1c0e82aec6845a1f12c8150bf61419/work,index=off |
| 37 | +706 705 0:105 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw |
| 38 | +707 705 0:106 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 |
| 39 | +708 707 0:107 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 |
| 40 | +709 705 0:108 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro |
| 41 | +710 709 0:25 / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup rw,nsdelegate,memory_recursiveprot |
| 42 | +711 707 0:104 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw |
| 43 | +712 707 0:109 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k,inode64 |
| 44 | +713 705 8:3 /var/lib/docker/containers/%[1]v/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/sda3 rw |
| 45 | +714 705 8:3 /var/lib/docker/containers/%[1]v/hostname /etc/hostname rw,relatime - ext4 /dev/sda3 rw |
| 46 | +715 705 8:3 /var/lib/docker/containers/%[1]v/hosts /etc/hosts rw,relatime - ext4 /dev/sda3 rw |
| 47 | +716 705 8:3 /var/lib/docker/volumes/ca8074e1a2eb12edc86c59c5108bb48c31bb7ace4b90beb0da8137a9baa45812/_data /etc/nginx/certs rw,relatime master:1 - ext4 /dev/sda3 rw |
| 48 | +717 705 8:3 /var/lib/docker/volumes/2cf8a52c907469a56f6e2cc7d1959d74a4dd04131e7edcd53eaf909db28f770f/_data /etc/nginx/dhparam rw,relatime master:1 - ext4 /dev/sda3 rw |
| 49 | +662 707 0:107 /0 /dev/console rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 |
| 50 | +663 706 0:105 /bus /proc/bus ro,relatime - proc proc rw |
| 51 | +664 706 0:105 /fs /proc/fs ro,relatime - proc proc rw |
| 52 | +665 706 0:105 /irq /proc/irq ro,relatime - proc proc rw |
| 53 | +666 706 0:105 /sys /proc/sys ro,relatime - proc proc rw |
| 54 | +667 706 0:105 /sysrq-trigger /proc/sysrq-trigger ro,relatime - proc proc rw |
| 55 | +668 706 0:110 / /proc/acpi ro,relatime - tmpfs tmpfs ro,inode64 |
| 56 | +669 706 0:106 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 |
| 57 | +670 706 0:106 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 |
| 58 | +671 706 0:106 /null /proc/latency_stats rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 |
| 59 | +672 706 0:106 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 |
| 60 | +673 706 0:106 /null /proc/sched_debug rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755,inode64 |
| 61 | +674 706 0:111 / /proc/scsi ro,relatime - tmpfs tmpfs ro,inode64 |
| 62 | +675 709 0:112 / /sys/firmware ro,relatime - tmpfs tmpfs ro,inode64`, ids[2]), |
| 63 | + } |
| 64 | + |
| 65 | + keys := []string{ |
| 66 | + "cpuset", |
| 67 | + "cgroup", |
| 68 | + "mountinfo", |
29 | 69 | }
|
30 |
| -} |
31 | 70 |
|
32 |
| -func TestGetCurrentContainerID_DockerCE(t *testing.T) { |
33 |
| - cgroup := |
34 |
| - `13:name=systemd:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
35 |
| -12:pids:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
36 |
| -11:hugetlb:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
37 |
| -10:net_prio:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
38 |
| -9:perf_event:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
39 |
| -8:net_cls:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
40 |
| -7:freezer:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
41 |
| -6:devices:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
42 |
| -5:memory:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
43 |
| -4:blkio:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
44 |
| -3:cpuacct:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
45 |
| -2:cpu:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb |
46 |
| -1:cpuset:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb` |
47 |
| - |
48 |
| - if got, exp := matchDockerCurrentContainerID(cgroup), "18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb"; got != exp { |
49 |
| - t.Fatalf("id mismatch: got %v, exp %v", got, exp) |
| 71 | + var filepaths []string |
| 72 | + // Create temporary files with test content |
| 73 | + for _, key := range keys { |
| 74 | + file, err := ioutil.TempFile("", key) |
| 75 | + if err != nil { |
| 76 | + log.Fatal(err) |
| 77 | + } |
| 78 | + defer os.Remove(file.Name()) |
| 79 | + if _, err = file.WriteString(contents[key]); err != nil { |
| 80 | + log.Fatal(err) |
| 81 | + } |
| 82 | + filepaths = append(filepaths, file.Name()) |
50 | 83 | }
|
51 | 84 |
|
| 85 | + // Each time the HOSTNAME is set to a short form ID, GetCurrentContainerID() should match and return the corresponding full ID |
| 86 | + for _, id := range ids { |
| 87 | + os.Setenv("HOSTNAME", id[0:12]) |
| 88 | + if got, exp := GetCurrentContainerID(filepaths...), id; got != exp { |
| 89 | + t.Fatalf("id mismatch with HOSTNAME %v: got %v, exp %v", id[0:12], got, exp) |
| 90 | + } |
| 91 | + } |
| 92 | + |
| 93 | + // If the Hostname isn't a short form ID, we should match the first valid ID (64 character hex string) instead |
| 94 | + os.Setenv("HOSTNAME", "customhostname") |
| 95 | + if got, exp := GetCurrentContainerID(filepaths...), ids[0]; got != exp { |
| 96 | + t.Fatalf("id mismatch with custom HOSTNAME: got %v, exp %v", got, exp) |
| 97 | + } |
52 | 98 | }
|
0 commit comments