Skip to content

Commit e44864e

Browse files
committed
fix(test): fix GetCurrentContainerID() tests
Perform the tests with real file reads instead of just testing the matching functions
1 parent c6f3145 commit e44864e

File tree

1 file changed

+83
-37
lines changed

1 file changed

+83
-37
lines changed

context_test.go

Lines changed: 83 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,98 @@
11
package dockergen
22

33
import (
4+
"fmt"
5+
"io/ioutil"
6+
"log"
7+
"os"
48
"testing"
59
)
610

711
func TestGetCurrentContainerID(t *testing.T) {
8-
currentContainerID := GetCurrentContainerID()
12+
hostname := os.Getenv("HOSTNAME")
13+
defer os.Setenv("HOSTNAME", hostname)
914

10-
if len(currentContainerID) != 0 && len(currentContainerID) != 64 {
11-
t.Fail()
15+
ids := []string{
16+
"0fa939e22e6938e7517f663de83e79a5087a18b1b997a36e0c933a917cddb295",
17+
"e881f8c51a72db7da515e9d5cab8ed105b869579eb9923fdcf4ee80933160802",
18+
"eede6bd9e72f5d783a4bfb845bd71f310e974cb26987328a5d15704e23a8d6cb",
1219
}
13-
}
1420

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",
2969
}
30-
}
3170

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())
5083
}
5184

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+
}
5298
}

0 commit comments

Comments
 (0)