Skip to content

Commit b3387b1

Browse files
committed
test: check if mountinfo files yeld correct CID
1 parent 1d0e791 commit b3387b1

File tree

1 file changed

+49
-12
lines changed

1 file changed

+49
-12
lines changed

context_test.go

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,20 @@ import (
88
"testing"
99
)
1010

11-
func TestGetCurrentContainerID(t *testing.T) {
12-
hostname := os.Getenv("HOSTNAME")
13-
defer os.Setenv("HOSTNAME", hostname)
14-
15-
ids := []string{
11+
var (
12+
ids = []string{
1613
"0fa939e22e6938e7517f663de83e79a5087a18b1b997a36e0c933a917cddb295",
1714
"e881f8c51a72db7da515e9d5cab8ed105b869579eb9923fdcf4ee80933160802",
1815
"eede6bd9e72f5d783a4bfb845bd71f310e974cb26987328a5d15704e23a8d6cb",
1916
}
2017

21-
contents := map[string]string{
18+
fileKeys = []string{
19+
"cpuset",
20+
"cgroup",
21+
"mountinfo",
22+
}
23+
24+
contents = map[string]string{
2225
"cpuset": fmt.Sprintf("/docker/%v", ids[0]),
2326
"cgroup": fmt.Sprintf(`13:name=systemd:/docker-ce/docker/%[1]v
2427
12:pids:/docker-ce/docker/%[1]v
@@ -61,16 +64,15 @@ func TestGetCurrentContainerID(t *testing.T) {
6164
674 706 0:111 / /proc/scsi ro,relatime - tmpfs tmpfs ro,inode64
6265
675 709 0:112 / /sys/firmware ro,relatime - tmpfs tmpfs ro,inode64`, ids[2]),
6366
}
67+
)
6468

65-
keys := []string{
66-
"cpuset",
67-
"cgroup",
68-
"mountinfo",
69-
}
69+
func TestGetCurrentContainerID(t *testing.T) {
70+
hostname := os.Getenv("HOSTNAME")
71+
defer os.Setenv("HOSTNAME", hostname)
7072

7173
var filepaths []string
7274
// Create temporary files with test content
73-
for _, key := range keys {
75+
for _, key := range fileKeys {
7476
file, err := ioutil.TempFile("", key)
7577
if err != nil {
7678
log.Fatal(err)
@@ -96,3 +98,38 @@ func TestGetCurrentContainerID(t *testing.T) {
9698
t.Fatalf("id mismatch with custom HOSTNAME: got %v, exp %v", got, exp)
9799
}
98100
}
101+
102+
func TestGetCurrentContainerIDMountInfo(t *testing.T) {
103+
// Test specific to cases like https://github.com/nginx-proxy/docker-gen/issues/355
104+
// where only the /proc/<pid>/mountinfo file contains information
105+
hostname := os.Getenv("HOSTNAME")
106+
defer os.Setenv("HOSTNAME", hostname)
107+
os.Setenv("HOSTNAME", "customhostname")
108+
109+
id := ids[2]
110+
111+
content := map[string]string{
112+
"cpuset": "/",
113+
"cgroup": "0::/",
114+
"mountinfo": contents["mountinfo"],
115+
}
116+
117+
var filepaths []string
118+
// Create temporary files with test content
119+
for _, key := range fileKeys {
120+
file, err := ioutil.TempFile("", key)
121+
if err != nil {
122+
log.Fatal(err)
123+
}
124+
defer os.Remove(file.Name())
125+
if _, err = file.WriteString(content[key]); err != nil {
126+
log.Fatal(err)
127+
}
128+
filepaths = append(filepaths, file.Name())
129+
}
130+
131+
// We should match the correct 64 characters long ID in mountinfo, not the first encountered
132+
if got, exp := GetCurrentContainerID(filepaths...), id; got != exp {
133+
t.Fatalf("id mismatch on mountinfo: got %v, exp %v", got, exp)
134+
}
135+
}

0 commit comments

Comments
 (0)