github.com/cilium/cilium@v1.16.2/pkg/mountinfo/mountinfo_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 //go:build linux 5 6 package mountinfo 7 8 import ( 9 "bytes" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 "golang.org/x/sys/unix" 14 ) 15 16 const ( 17 mountInfoContent = `21 68 0:20 / /sys rw,nosuid,nodev,noexec,relatime shared:2 - sysfs sysfs rw 18 22 68 0:4 / /proc rw,nosuid,nodev,noexec,relatime shared:23 - proc proc rw 19 23 68 0:6 / /dev rw,nosuid shared:19 - devtmpfs devtmpfs rw,size=8023924k,nr_inodes=2005981,mode=755 20 24 21 0:7 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime shared:3 - securityfs securityfs rw 21 25 23 0:21 / /dev/shm rw,nosuid,nodev shared:20 - tmpfs tmpfs rw 22 26 23 0:22 / /dev/pts rw,nosuid,noexec,relatime shared:21 - devpts devpts rw,gid=5,mode=620,ptmxmode=000 23 27 68 0:23 / /run rw,nosuid,nodev shared:22 - tmpfs tmpfs rw,mode=755 24 28 21 0:24 / /sys/fs/cgroup ro,nosuid,nodev,noexec shared:4 - tmpfs tmpfs ro,mode=755 25 29 28 0:25 / /sys/fs/cgroup/unified rw,nosuid,nodev,noexec,relatime shared:5 - cgroup2 cgroup rw,nsdelegate 26 30 28 0:26 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime shared:6 - cgroup cgroup rw,xattr,name=systemd 27 31 21 0:27 / /sys/fs/pstore rw,nosuid,nodev,noexec,relatime shared:18 - pstore pstore rw 28 32 28 0:28 / /sys/fs/cgroup/blkio rw,nosuid,nodev,noexec,relatime shared:7 - cgroup cgroup rw,blkio 29 33 28 0:29 / /sys/fs/cgroup/pids rw,nosuid,nodev,noexec,relatime shared:8 - cgroup cgroup rw,pids 30 34 28 0:30 / /sys/fs/cgroup/net_cls,net_prio rw,nosuid,nodev,noexec,relatime shared:9 - cgroup cgroup rw,net_cls,net_prio 31 35 28 0:31 / /sys/fs/cgroup/freezer rw,nosuid,nodev,noexec,relatime shared:10 - cgroup cgroup rw,freezer 32 36 28 0:32 / /sys/fs/cgroup/rdma rw,nosuid,nodev,noexec,relatime shared:11 - cgroup cgroup rw,rdma 33 37 28 0:33 / /sys/fs/cgroup/cpu,cpuacct rw,nosuid,nodev,noexec,relatime shared:12 - cgroup cgroup rw,cpu,cpuacct 34 38 28 0:34 / /sys/fs/cgroup/cpuset rw,nosuid,nodev,noexec,relatime shared:13 - cgroup cgroup rw,cpuset 35 39 28 0:35 / /sys/fs/cgroup/hugetlb rw,nosuid,nodev,noexec,relatime shared:14 - cgroup cgroup rw,hugetlb 36 40 28 0:36 / /sys/fs/cgroup/devices rw,nosuid,nodev,noexec,relatime shared:15 - cgroup cgroup rw,devices 37 41 28 0:37 / /sys/fs/cgroup/perf_event rw,nosuid,nodev,noexec,relatime shared:16 - cgroup cgroup rw,perf_event 38 42 28 0:38 / /sys/fs/cgroup/memory rw,nosuid,nodev,noexec,relatime shared:17 - cgroup cgroup rw,memory 39 68 0 254:1 / / rw,relatime shared:1 - xfs /dev/mapper/system-root rw,attr2,inode64,noquota 40 43 22 0:41 / /proc/sys/fs/binfmt_misc rw,relatime shared:24 - autofs systemd-1 rw,fd=35,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=16155 41 44 23 0:42 / /dev/hugepages rw,relatime shared:25 - hugetlbfs hugetlbfs rw,pagesize=2M 42 45 23 0:19 / /dev/mqueue rw,relatime shared:26 - mqueue mqueue rw 43 46 21 0:8 / /sys/kernel/debug rw,relatime shared:27 - debugfs debugfs rw 44 78 68 8:1 / /boot rw,relatime shared:28 - ext4 /dev/sda1 rw,stripe=4 45 80 68 254:3 / /home rw,relatime shared:29 - xfs /dev/mapper/system-home rw,attr2,inode64,noquota 46 382 27 0:47 / /run/user/463 rw,nosuid,nodev,relatime shared:294 - tmpfs tmpfs rw,size=1606744k,mode=700,uid=463,gid=463 47 472 27 0:48 / /run/user/1000 rw,nosuid,nodev,relatime shared:380 - tmpfs tmpfs rw,size=1606744k,mode=700,uid=1000,gid=100 48 485 21 0:49 / /sys/fs/fuse/connections rw,relatime shared:391 - fusectl fusectl rw 49 497 472 0:50 / /run/user/1000/gvfs rw,nosuid,nodev,relatime shared:401 - fuse.gvfsd-fuse gvfsd-fuse rw,user_id=1000,group_id=100 50 510 46 0:11 / /sys/kernel/debug/tracing rw,relatime shared:412 - tracefs tracefs rw 51 225 472 0:45 / /run/user/1000/doc rw,nosuid,nodev,relatime shared:141 - fuse /dev/fuse rw,user_id=1000,group_id=100 52 655 68 0:100 / /var/lib/docker/overlay2/209d7aafdafc7ebde84cb9f993c1e34cf0376f4f15dae4ddd2dd260b8d987d4d/merged rw,relatime shared:150 - overlay overlay rw,lowerdir=/var/lib/docker/overlay2/l/MX2FFSUOIXOBNUCHC33QEQNNX2:/var/lib/docker/overlay2/l/Q3SPWQ6QMC22TK7SPQOLSVHLUQ:/var/lib/docker/overlay2/l/SPVXNCJEV3EQJGMHEOQGTLNDRT:/var/lib/docker/overlay2/l/EFMD4SE3UNOSVMNMD7EOGIIL5I:/var/lib/docker/overlay2/l/SFK3LVVM7XUXJWRS6I75TSS2DI:/var/lib/docker/overlay2/l/GL3CZA4OB3YI7A6JKWOLVNESSL:/var/lib/docker/overlay2/l/L6OAE4YY2C6BKHH55W42V7T6Y7,upperdir=/var/lib/docker/overlay2/209d7aafdafc7ebde84cb9f993c1e34cf0376f4f15dae4ddd2dd260b8d987d4d/diff,workdir=/var/lib/docker/overlay2/209d7aafdafc7ebde84cb9f993c1e34cf0376f4f15dae4ddd2dd260b8d987d4d/work 53 810 68 0:107 / /var/lib/docker/containers/178dc073e1eb58e137d562d28928a187bdc05905ff889b7658dd7a9b3488e494/mounts/shm rw,nosuid,nodev,noexec,relatime shared:159 - tmpfs shm rw,size=65536k 54 1017 27 0:3 net:[4026532775] /run/docker/netns/85c40bc29e30 rw shared:168 - nsfs nsfs rw 55 969 68 0:117 / /var/lib/docker/overlay2/e35eafd51f5f1e5a1f055de47bfccae6bb47c57317628507bb00b0981d33d717/merged rw,relatime shared:177 - overlay overlay rw,lowerdir=/var/lib/docker/overlay2/l/SRXSWY4NGUH5ZX5EHGZ3R72ZZZ:/var/lib/docker/overlay2/l/4MKSUFUR2WVKNR47LRVGQUHDIX:/var/lib/docker/overlay2/l/CGHCSEQRDDOB7LDRMW6DNKGYKF:/var/lib/docker/overlay2/l/KXCYX6NI6XSXSW3R6YRYOJIXJY:/var/lib/docker/overlay2/l/5SWRNPTBRYPDDHKFPKXBQJ3AGN:/var/lib/docker/overlay2/l/L6OAE4YY2C6BKHH55W42V7T6Y7,upperdir=/var/lib/docker/overlay2/e35eafd51f5f1e5a1f055de47bfccae6bb47c57317628507bb00b0981d33d717/diff,workdir=/var/lib/docker/overlay2/e35eafd51f5f1e5a1f055de47bfccae6bb47c57317628507bb00b0981d33d717/work 56 990 68 0:118 / /var/lib/docker/containers/eb56406256443e41d885581f36a790155bfa7eab49753a3cbeef6c12226fb7eb/mounts/shm rw,nosuid,nodev,noexec,relatime shared:249 - tmpfs shm rw,size=65536k 57 1110 27 0:3 net:[4026532846] /run/docker/netns/35b7f0885825 rw shared:258 - nsfs nsfs rw 58 657 21 0:98 / /sys/fs/bpf rw,relatime shared:267 - bpf bpffs rw` 59 ) 60 61 func TestParseMountInfoFile(t *testing.T) { 62 expectedLength := 42 63 expectedMountInfos := []*MountInfo{ 64 { 65 MountID: 21, 66 ParentID: 68, 67 StDev: "0:20", 68 Root: "/", 69 MountPoint: "/sys", 70 MountOptions: "rw,nosuid,nodev,noexec,relatime", 71 OptionalFields: []string{"shared:2"}, 72 FilesystemType: "sysfs", 73 MountSource: "sysfs", 74 SuperOptions: "rw", 75 }, 76 { 77 MountID: 22, 78 ParentID: 68, 79 StDev: "0:4", 80 Root: "/", 81 MountPoint: "/proc", 82 MountOptions: "rw,nosuid,nodev,noexec,relatime", 83 OptionalFields: []string{"shared:23"}, 84 FilesystemType: "proc", 85 MountSource: "proc", 86 SuperOptions: "rw", 87 }, 88 { 89 MountID: 23, 90 ParentID: 68, 91 StDev: "0:6", 92 Root: "/", 93 MountPoint: "/dev", 94 MountOptions: "rw,nosuid", 95 OptionalFields: []string{"shared:19"}, 96 FilesystemType: "devtmpfs", 97 MountSource: "devtmpfs", 98 SuperOptions: "rw,size=8023924k,nr_inodes=2005981,mode=755", 99 }, 100 { 101 MountID: 24, 102 ParentID: 21, 103 StDev: "0:7", 104 Root: "/", 105 MountPoint: "/sys/kernel/security", 106 MountOptions: "rw,nosuid,nodev,noexec,relatime", 107 OptionalFields: []string{"shared:3"}, 108 FilesystemType: "securityfs", 109 MountSource: "securityfs", 110 SuperOptions: "rw", 111 }, 112 { 113 MountID: 25, 114 ParentID: 23, 115 StDev: "0:21", 116 Root: "/", 117 MountPoint: "/dev/shm", 118 MountOptions: "rw,nosuid,nodev", 119 OptionalFields: []string{"shared:20"}, 120 FilesystemType: "tmpfs", 121 MountSource: "tmpfs", 122 SuperOptions: "rw", 123 }, 124 { 125 MountID: 26, 126 ParentID: 23, 127 StDev: "0:22", 128 Root: "/", 129 MountPoint: "/dev/pts", 130 MountOptions: "rw,nosuid,noexec,relatime", 131 OptionalFields: []string{"shared:21"}, 132 FilesystemType: "devpts", 133 MountSource: "devpts", 134 SuperOptions: "rw,gid=5,mode=620,ptmxmode=000", 135 }, 136 { 137 MountID: 27, 138 ParentID: 68, 139 StDev: "0:23", 140 Root: "/", 141 MountPoint: "/run", 142 MountOptions: "rw,nosuid,nodev", 143 OptionalFields: []string{"shared:22"}, 144 FilesystemType: "tmpfs", 145 MountSource: "tmpfs", 146 SuperOptions: "rw,mode=755", 147 }, 148 { 149 MountID: 28, 150 ParentID: 21, 151 StDev: "0:24", 152 Root: "/", 153 MountPoint: "/sys/fs/cgroup", 154 MountOptions: "ro,nosuid,nodev,noexec", 155 OptionalFields: []string{"shared:4"}, 156 FilesystemType: "tmpfs", 157 MountSource: "tmpfs", 158 SuperOptions: "ro,mode=755", 159 }, 160 { 161 MountID: 29, 162 ParentID: 28, 163 StDev: "0:25", 164 Root: "/", 165 MountPoint: "/sys/fs/cgroup/unified", 166 MountOptions: "rw,nosuid,nodev,noexec,relatime", 167 OptionalFields: []string{"shared:5"}, 168 FilesystemType: "cgroup2", 169 MountSource: "cgroup", 170 SuperOptions: "rw,nsdelegate", 171 }, 172 { 173 MountID: 30, 174 ParentID: 28, 175 StDev: "0:26", 176 Root: "/", 177 MountPoint: "/sys/fs/cgroup/systemd", 178 MountOptions: "rw,nosuid,nodev,noexec,relatime", 179 OptionalFields: []string{"shared:6"}, 180 FilesystemType: "cgroup", 181 MountSource: "cgroup", 182 SuperOptions: "rw,xattr,name=systemd", 183 }, 184 { 185 MountID: 31, 186 ParentID: 21, 187 StDev: "0:27", 188 Root: "/", 189 MountPoint: "/sys/fs/pstore", 190 MountOptions: "rw,nosuid,nodev,noexec,relatime", 191 OptionalFields: []string{"shared:18"}, 192 FilesystemType: "pstore", 193 MountSource: "pstore", 194 SuperOptions: "rw", 195 }, 196 { 197 MountID: 32, 198 ParentID: 28, 199 StDev: "0:28", 200 Root: "/", 201 MountPoint: "/sys/fs/cgroup/blkio", 202 MountOptions: "rw,nosuid,nodev,noexec,relatime", 203 OptionalFields: []string{"shared:7"}, 204 FilesystemType: "cgroup", 205 MountSource: "cgroup", 206 SuperOptions: "rw,blkio", 207 }, 208 { 209 MountID: 33, 210 ParentID: 28, 211 StDev: "0:29", 212 Root: "/", 213 MountPoint: "/sys/fs/cgroup/pids", 214 MountOptions: "rw,nosuid,nodev,noexec,relatime", 215 OptionalFields: []string{"shared:8"}, 216 FilesystemType: "cgroup", 217 MountSource: "cgroup", 218 SuperOptions: "rw,pids", 219 }, 220 { 221 MountID: 34, 222 ParentID: 28, 223 StDev: "0:30", 224 Root: "/", 225 MountPoint: "/sys/fs/cgroup/net_cls,net_prio", 226 MountOptions: "rw,nosuid,nodev,noexec,relatime", 227 OptionalFields: []string{"shared:9"}, 228 FilesystemType: "cgroup", 229 MountSource: "cgroup", 230 SuperOptions: "rw,net_cls,net_prio", 231 }, 232 { 233 MountID: 35, 234 ParentID: 28, 235 StDev: "0:31", 236 Root: "/", 237 MountPoint: "/sys/fs/cgroup/freezer", 238 MountOptions: "rw,nosuid,nodev,noexec,relatime", 239 OptionalFields: []string{"shared:10"}, 240 FilesystemType: "cgroup", 241 MountSource: "cgroup", 242 SuperOptions: "rw,freezer", 243 }, 244 { 245 MountID: 36, 246 ParentID: 28, 247 StDev: "0:32", 248 Root: "/", 249 MountPoint: "/sys/fs/cgroup/rdma", 250 MountOptions: "rw,nosuid,nodev,noexec,relatime", 251 OptionalFields: []string{"shared:11"}, 252 FilesystemType: "cgroup", 253 MountSource: "cgroup", 254 SuperOptions: "rw,rdma", 255 }, 256 { 257 MountID: 37, 258 ParentID: 28, 259 StDev: "0:33", 260 Root: "/", 261 MountPoint: "/sys/fs/cgroup/cpu,cpuacct", 262 MountOptions: "rw,nosuid,nodev,noexec,relatime", 263 OptionalFields: []string{"shared:12"}, 264 FilesystemType: "cgroup", 265 MountSource: "cgroup", 266 SuperOptions: "rw,cpu,cpuacct", 267 }, 268 { 269 MountID: 38, 270 ParentID: 28, 271 StDev: "0:34", 272 Root: "/", 273 MountPoint: "/sys/fs/cgroup/cpuset", 274 MountOptions: "rw,nosuid,nodev,noexec,relatime", 275 OptionalFields: []string{"shared:13"}, 276 FilesystemType: "cgroup", 277 MountSource: "cgroup", 278 SuperOptions: "rw,cpuset", 279 }, 280 { 281 MountID: 39, 282 ParentID: 28, 283 StDev: "0:35", 284 Root: "/", 285 MountPoint: "/sys/fs/cgroup/hugetlb", 286 MountOptions: "rw,nosuid,nodev,noexec,relatime", 287 OptionalFields: []string{"shared:14"}, 288 FilesystemType: "cgroup", 289 MountSource: "cgroup", 290 SuperOptions: "rw,hugetlb", 291 }, 292 { 293 MountID: 40, 294 ParentID: 28, 295 StDev: "0:36", 296 Root: "/", 297 MountPoint: "/sys/fs/cgroup/devices", 298 MountOptions: "rw,nosuid,nodev,noexec,relatime", 299 OptionalFields: []string{"shared:15"}, 300 FilesystemType: "cgroup", 301 MountSource: "cgroup", 302 SuperOptions: "rw,devices", 303 }, 304 { 305 MountID: 41, 306 ParentID: 28, 307 StDev: "0:37", 308 Root: "/", 309 MountPoint: "/sys/fs/cgroup/perf_event", 310 MountOptions: "rw,nosuid,nodev,noexec,relatime", 311 OptionalFields: []string{"shared:16"}, 312 FilesystemType: "cgroup", 313 MountSource: "cgroup", 314 SuperOptions: "rw,perf_event", 315 }, 316 { 317 MountID: 42, 318 ParentID: 28, 319 StDev: "0:38", 320 Root: "/", 321 MountPoint: "/sys/fs/cgroup/memory", 322 MountOptions: "rw,nosuid,nodev,noexec,relatime", 323 OptionalFields: []string{"shared:17"}, 324 FilesystemType: "cgroup", 325 MountSource: "cgroup", 326 SuperOptions: "rw,memory", 327 }, 328 { 329 MountID: 68, 330 ParentID: 0, 331 StDev: "254:1", 332 Root: "/", 333 MountPoint: "/", 334 MountOptions: "rw,relatime", 335 OptionalFields: []string{"shared:1"}, 336 FilesystemType: "xfs", 337 MountSource: "/dev/mapper/system-root", 338 SuperOptions: "rw,attr2,inode64,noquota", 339 }, 340 { 341 MountID: 43, 342 ParentID: 22, 343 StDev: "0:41", 344 Root: "/", 345 MountPoint: "/proc/sys/fs/binfmt_misc", 346 MountOptions: "rw,relatime", 347 OptionalFields: []string{"shared:24"}, 348 FilesystemType: "autofs", 349 MountSource: "systemd-1", 350 SuperOptions: "rw,fd=35,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=16155", 351 }, 352 { 353 MountID: 44, 354 ParentID: 23, 355 StDev: "0:42", 356 Root: "/", 357 MountPoint: "/dev/hugepages", 358 MountOptions: "rw,relatime", 359 OptionalFields: []string{"shared:25"}, 360 FilesystemType: "hugetlbfs", 361 MountSource: "hugetlbfs", 362 SuperOptions: "rw,pagesize=2M", 363 }, 364 { 365 MountID: 45, 366 ParentID: 23, 367 StDev: "0:19", 368 Root: "/", 369 MountPoint: "/dev/mqueue", 370 MountOptions: "rw,relatime", 371 OptionalFields: []string{"shared:26"}, 372 FilesystemType: "mqueue", 373 MountSource: "mqueue", 374 SuperOptions: "rw", 375 }, 376 { 377 MountID: 46, 378 ParentID: 21, 379 StDev: "0:8", 380 Root: "/", 381 MountPoint: "/sys/kernel/debug", 382 MountOptions: "rw,relatime", 383 OptionalFields: []string{"shared:27"}, 384 FilesystemType: "debugfs", 385 MountSource: "debugfs", 386 SuperOptions: "rw", 387 }, 388 { 389 MountID: 78, 390 ParentID: 68, 391 StDev: "8:1", 392 Root: "/", 393 MountPoint: "/boot", 394 MountOptions: "rw,relatime", 395 OptionalFields: []string{"shared:28"}, 396 FilesystemType: "ext4", 397 MountSource: "/dev/sda1", 398 SuperOptions: "rw,stripe=4", 399 }, 400 { 401 MountID: 80, 402 ParentID: 68, 403 StDev: "254:3", 404 Root: "/", 405 MountPoint: "/home", 406 MountOptions: "rw,relatime", 407 OptionalFields: []string{"shared:29"}, 408 FilesystemType: "xfs", 409 MountSource: "/dev/mapper/system-home", 410 SuperOptions: "rw,attr2,inode64,noquota", 411 }, 412 { 413 MountID: 382, 414 ParentID: 27, 415 StDev: "0:47", 416 Root: "/", 417 MountPoint: "/run/user/463", 418 MountOptions: "rw,nosuid,nodev,relatime", 419 OptionalFields: []string{"shared:294"}, 420 FilesystemType: "tmpfs", 421 MountSource: "tmpfs", 422 SuperOptions: "rw,size=1606744k,mode=700,uid=463,gid=463", 423 }, 424 { 425 MountID: 472, 426 ParentID: 27, 427 StDev: "0:48", 428 Root: "/", 429 MountPoint: "/run/user/1000", 430 MountOptions: "rw,nosuid,nodev,relatime", 431 OptionalFields: []string{"shared:380"}, 432 FilesystemType: "tmpfs", 433 MountSource: "tmpfs", 434 SuperOptions: "rw,size=1606744k,mode=700,uid=1000,gid=100", 435 }, 436 { 437 MountID: 485, 438 ParentID: 21, 439 StDev: "0:49", 440 Root: "/", 441 MountPoint: "/sys/fs/fuse/connections", 442 MountOptions: "rw,relatime", 443 OptionalFields: []string{"shared:391"}, 444 FilesystemType: "fusectl", 445 MountSource: "fusectl", 446 SuperOptions: "rw", 447 }, 448 { 449 MountID: 497, 450 ParentID: 472, 451 StDev: "0:50", 452 Root: "/", 453 MountPoint: "/run/user/1000/gvfs", 454 MountOptions: "rw,nosuid,nodev,relatime", 455 OptionalFields: []string{"shared:401"}, 456 FilesystemType: "fuse.gvfsd-fuse", 457 MountSource: "gvfsd-fuse", 458 SuperOptions: "rw,user_id=1000,group_id=100", 459 }, 460 { 461 MountID: 510, 462 ParentID: 46, 463 StDev: "0:11", 464 Root: "/", 465 MountPoint: "/sys/kernel/debug/tracing", 466 MountOptions: "rw,relatime", 467 OptionalFields: []string{"shared:412"}, 468 FilesystemType: "tracefs", 469 MountSource: "tracefs", 470 SuperOptions: "rw", 471 }, 472 { 473 MountID: 225, 474 ParentID: 472, 475 StDev: "0:45", 476 Root: "/", 477 MountPoint: "/run/user/1000/doc", 478 MountOptions: "rw,nosuid,nodev,relatime", 479 OptionalFields: []string{"shared:141"}, 480 FilesystemType: "fuse", 481 MountSource: "/dev/fuse", 482 SuperOptions: "rw,user_id=1000,group_id=100", 483 }, 484 { 485 MountID: 655, 486 ParentID: 68, 487 StDev: "0:100", 488 Root: "/", 489 MountPoint: "/var/lib/docker/overlay2/209d7aafdafc7ebde84cb9f993c1e34cf0376f4f15dae4ddd2dd260b8d987d4d/merged", 490 MountOptions: "rw,relatime", 491 OptionalFields: []string{"shared:150"}, 492 FilesystemType: "overlay", 493 MountSource: "overlay", 494 SuperOptions: "rw,lowerdir=/var/lib/docker/overlay2/l/MX2FFSUOIXOBNUCHC33QEQNNX2:/var/lib/docker/overlay2/l/Q3SPWQ6QMC22TK7SPQOLSVHLUQ:/var/lib/docker/overlay2/l/SPVXNCJEV3EQJGMHEOQGTLNDRT:/var/lib/docker/overlay2/l/EFMD4SE3UNOSVMNMD7EOGIIL5I:/var/lib/docker/overlay2/l/SFK3LVVM7XUXJWRS6I75TSS2DI:/var/lib/docker/overlay2/l/GL3CZA4OB3YI7A6JKWOLVNESSL:/var/lib/docker/overlay2/l/L6OAE4YY2C6BKHH55W42V7T6Y7,upperdir=/var/lib/docker/overlay2/209d7aafdafc7ebde84cb9f993c1e34cf0376f4f15dae4ddd2dd260b8d987d4d/diff,workdir=/var/lib/docker/overlay2/209d7aafdafc7ebde84cb9f993c1e34cf0376f4f15dae4ddd2dd260b8d987d4d/work", 495 }, 496 { 497 MountID: 810, 498 ParentID: 68, 499 StDev: "0:107", 500 Root: "/", 501 MountPoint: "/var/lib/docker/containers/178dc073e1eb58e137d562d28928a187bdc05905ff889b7658dd7a9b3488e494/mounts/shm", 502 MountOptions: "rw,nosuid,nodev,noexec,relatime", 503 OptionalFields: []string{"shared:159"}, 504 FilesystemType: "tmpfs", 505 MountSource: "shm", 506 SuperOptions: "rw,size=65536k", 507 }, 508 { 509 MountID: 1017, 510 ParentID: 27, 511 StDev: "0:3", 512 Root: "net:[4026532775]", 513 MountPoint: "/run/docker/netns/85c40bc29e30", 514 MountOptions: "rw", 515 OptionalFields: []string{"shared:168"}, 516 FilesystemType: "nsfs", 517 MountSource: "nsfs", 518 SuperOptions: "rw", 519 }, 520 { 521 MountID: 969, 522 ParentID: 68, 523 StDev: "0:117", 524 Root: "/", 525 MountPoint: "/var/lib/docker/overlay2/e35eafd51f5f1e5a1f055de47bfccae6bb47c57317628507bb00b0981d33d717/merged", 526 MountOptions: "rw,relatime", 527 OptionalFields: []string{"shared:177"}, 528 FilesystemType: "overlay", 529 MountSource: "overlay", 530 SuperOptions: "rw,lowerdir=/var/lib/docker/overlay2/l/SRXSWY4NGUH5ZX5EHGZ3R72ZZZ:/var/lib/docker/overlay2/l/4MKSUFUR2WVKNR47LRVGQUHDIX:/var/lib/docker/overlay2/l/CGHCSEQRDDOB7LDRMW6DNKGYKF:/var/lib/docker/overlay2/l/KXCYX6NI6XSXSW3R6YRYOJIXJY:/var/lib/docker/overlay2/l/5SWRNPTBRYPDDHKFPKXBQJ3AGN:/var/lib/docker/overlay2/l/L6OAE4YY2C6BKHH55W42V7T6Y7,upperdir=/var/lib/docker/overlay2/e35eafd51f5f1e5a1f055de47bfccae6bb47c57317628507bb00b0981d33d717/diff,workdir=/var/lib/docker/overlay2/e35eafd51f5f1e5a1f055de47bfccae6bb47c57317628507bb00b0981d33d717/work", 531 }, 532 { 533 MountID: 990, 534 ParentID: 68, 535 StDev: "0:118", 536 Root: "/", 537 MountPoint: "/var/lib/docker/containers/eb56406256443e41d885581f36a790155bfa7eab49753a3cbeef6c12226fb7eb/mounts/shm", 538 MountOptions: "rw,nosuid,nodev,noexec,relatime", 539 OptionalFields: []string{"shared:249"}, 540 FilesystemType: "tmpfs", 541 MountSource: "shm", 542 SuperOptions: "rw,size=65536k", 543 }, 544 { 545 MountID: 1110, 546 ParentID: 27, 547 StDev: "0:3", 548 Root: "net:[4026532846]", 549 MountPoint: "/run/docker/netns/35b7f0885825", 550 MountOptions: "rw", 551 OptionalFields: []string{"shared:258"}, 552 FilesystemType: "nsfs", 553 MountSource: "nsfs", 554 SuperOptions: "rw", 555 }, 556 { 557 MountID: 657, 558 ParentID: 21, 559 StDev: "0:98", 560 Root: "/", 561 MountPoint: "/sys/fs/bpf", 562 MountOptions: "rw,relatime", 563 OptionalFields: []string{"shared:267"}, 564 FilesystemType: "bpf", 565 MountSource: "bpffs", 566 SuperOptions: "rw", 567 }, 568 } 569 570 r := bytes.NewBuffer([]byte(mountInfoContent)) 571 mountInfos, err := parseMountInfoFile(r) 572 require.Nil(t, err) 573 require.Len(t, mountInfos, expectedLength) 574 require.EqualValues(t, expectedMountInfos, mountInfos) 575 } 576 577 func TestGetMountInfo(t *testing.T) { 578 _, err := GetMountInfo() 579 require.Nil(t, err) 580 } 581 582 // TestIsMountFS tests the public function IsMountFS. We cannot expect every 583 // system and machine to have any predictable mounts, but let's try a couple 584 // of very well known paths. 585 func TestIsMountFS(t *testing.T) { 586 mounted, matched, err := IsMountFS(unix.PROC_SUPER_MAGIC, "/proc") 587 require.Nil(t, err) 588 require.Equal(t, true, mounted) 589 require.Equal(t, true, matched) 590 591 mounted, matched, err = IsMountFS(FilesystemTypeBPFFS, "/sys/fs/bpf") 592 require.Nil(t, err) 593 // We can't expect /sys/fs/bpf is mounted, so only check fstype 594 // if it is mounted. IOW, if /sys/fs/bpf is a mount point, 595 // we expect it to be bpffs. 596 if mounted { 597 require.Equal(t, true, matched) 598 } 599 }