github.com/fafucoder/cilium@v1.6.11/pkg/mountinfo/mountinfo_test.go (about)

     1  // Copyright 2018 Authors of Cilium
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // +build !privileged_tests
    16  
    17  package mountinfo
    18  
    19  import (
    20  	"bytes"
    21  	"testing"
    22  
    23  	"github.com/cilium/cilium/pkg/checker"
    24  
    25  	. "gopkg.in/check.v1"
    26  )
    27  
    28  const (
    29  	mountInfoContent = `21 68 0:20 / /sys rw,nosuid,nodev,noexec,relatime shared:2 - sysfs sysfs rw
    30  22 68 0:4 / /proc rw,nosuid,nodev,noexec,relatime shared:23 - proc proc rw
    31  23 68 0:6 / /dev rw,nosuid shared:19 - devtmpfs devtmpfs rw,size=8023924k,nr_inodes=2005981,mode=755
    32  24 21 0:7 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime shared:3 - securityfs securityfs rw
    33  25 23 0:21 / /dev/shm rw,nosuid,nodev shared:20 - tmpfs tmpfs rw
    34  26 23 0:22 / /dev/pts rw,nosuid,noexec,relatime shared:21 - devpts devpts rw,gid=5,mode=620,ptmxmode=000
    35  27 68 0:23 / /run rw,nosuid,nodev shared:22 - tmpfs tmpfs rw,mode=755
    36  28 21 0:24 / /sys/fs/cgroup ro,nosuid,nodev,noexec shared:4 - tmpfs tmpfs ro,mode=755
    37  29 28 0:25 / /sys/fs/cgroup/unified rw,nosuid,nodev,noexec,relatime shared:5 - cgroup2 cgroup rw,nsdelegate
    38  30 28 0:26 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime shared:6 - cgroup cgroup rw,xattr,name=systemd
    39  31 21 0:27 / /sys/fs/pstore rw,nosuid,nodev,noexec,relatime shared:18 - pstore pstore rw
    40  32 28 0:28 / /sys/fs/cgroup/blkio rw,nosuid,nodev,noexec,relatime shared:7 - cgroup cgroup rw,blkio
    41  33 28 0:29 / /sys/fs/cgroup/pids rw,nosuid,nodev,noexec,relatime shared:8 - cgroup cgroup rw,pids
    42  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
    43  35 28 0:31 / /sys/fs/cgroup/freezer rw,nosuid,nodev,noexec,relatime shared:10 - cgroup cgroup rw,freezer
    44  36 28 0:32 / /sys/fs/cgroup/rdma rw,nosuid,nodev,noexec,relatime shared:11 - cgroup cgroup rw,rdma
    45  37 28 0:33 / /sys/fs/cgroup/cpu,cpuacct rw,nosuid,nodev,noexec,relatime shared:12 - cgroup cgroup rw,cpu,cpuacct
    46  38 28 0:34 / /sys/fs/cgroup/cpuset rw,nosuid,nodev,noexec,relatime shared:13 - cgroup cgroup rw,cpuset
    47  39 28 0:35 / /sys/fs/cgroup/hugetlb rw,nosuid,nodev,noexec,relatime shared:14 - cgroup cgroup rw,hugetlb
    48  40 28 0:36 / /sys/fs/cgroup/devices rw,nosuid,nodev,noexec,relatime shared:15 - cgroup cgroup rw,devices
    49  41 28 0:37 / /sys/fs/cgroup/perf_event rw,nosuid,nodev,noexec,relatime shared:16 - cgroup cgroup rw,perf_event
    50  42 28 0:38 / /sys/fs/cgroup/memory rw,nosuid,nodev,noexec,relatime shared:17 - cgroup cgroup rw,memory
    51  68 0 254:1 / / rw,relatime shared:1 - xfs /dev/mapper/system-root rw,attr2,inode64,noquota
    52  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
    53  44 23 0:42 / /dev/hugepages rw,relatime shared:25 - hugetlbfs hugetlbfs rw,pagesize=2M
    54  45 23 0:19 / /dev/mqueue rw,relatime shared:26 - mqueue mqueue rw
    55  46 21 0:8 / /sys/kernel/debug rw,relatime shared:27 - debugfs debugfs rw
    56  78 68 8:1 / /boot rw,relatime shared:28 - ext4 /dev/sda1 rw,stripe=4
    57  80 68 254:3 / /home rw,relatime shared:29 - xfs /dev/mapper/system-home rw,attr2,inode64,noquota
    58  382 27 0:47 / /run/user/463 rw,nosuid,nodev,relatime shared:294 - tmpfs tmpfs rw,size=1606744k,mode=700,uid=463,gid=463
    59  472 27 0:48 / /run/user/1000 rw,nosuid,nodev,relatime shared:380 - tmpfs tmpfs rw,size=1606744k,mode=700,uid=1000,gid=100
    60  485 21 0:49 / /sys/fs/fuse/connections rw,relatime shared:391 - fusectl fusectl rw
    61  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
    62  510 46 0:11 / /sys/kernel/debug/tracing rw,relatime shared:412 - tracefs tracefs rw
    63  225 472 0:45 / /run/user/1000/doc rw,nosuid,nodev,relatime shared:141 - fuse /dev/fuse rw,user_id=1000,group_id=100
    64  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
    65  810 68 0:107 / /var/lib/docker/containers/178dc073e1eb58e137d562d28928a187bdc05905ff889b7658dd7a9b3488e494/mounts/shm rw,nosuid,nodev,noexec,relatime shared:159 - tmpfs shm rw,size=65536k
    66  1017 27 0:3 net:[4026532775] /run/docker/netns/85c40bc29e30 rw shared:168 - nsfs nsfs rw
    67  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
    68  990 68 0:118 / /var/lib/docker/containers/eb56406256443e41d885581f36a790155bfa7eab49753a3cbeef6c12226fb7eb/mounts/shm rw,nosuid,nodev,noexec,relatime shared:249 - tmpfs shm rw,size=65536k
    69  1110 27 0:3 net:[4026532846] /run/docker/netns/35b7f0885825 rw shared:258 - nsfs nsfs rw
    70  657 21 0:98 / /sys/fs/bpf rw,relatime shared:267 - bpf bpffs rw`
    71  )
    72  
    73  // Hook up gocheck into the "go test" runner.
    74  func Test(t *testing.T) {
    75  	TestingT(t)
    76  }
    77  
    78  type MountInfoTestSuite struct{}
    79  
    80  var _ = Suite(&MountInfoTestSuite{})
    81  
    82  func (s *MountInfoTestSuite) TestParseMountInfoFile(c *C) {
    83  	expectedLength := 42
    84  	expectedMountInfos := []*MountInfo{
    85  		{
    86  			MountID:        21,
    87  			ParentID:       68,
    88  			StDev:          "0:20",
    89  			Root:           "/",
    90  			MountPoint:     "/sys",
    91  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
    92  			OptionalFields: []string{"shared:2"},
    93  			FilesystemType: "sysfs",
    94  			MountSource:    "sysfs",
    95  			SuperOptions:   "rw",
    96  		},
    97  		{
    98  			MountID:        22,
    99  			ParentID:       68,
   100  			StDev:          "0:4",
   101  			Root:           "/",
   102  			MountPoint:     "/proc",
   103  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   104  			OptionalFields: []string{"shared:23"},
   105  			FilesystemType: "proc",
   106  			MountSource:    "proc",
   107  			SuperOptions:   "rw",
   108  		},
   109  		{
   110  			MountID:        23,
   111  			ParentID:       68,
   112  			StDev:          "0:6",
   113  			Root:           "/",
   114  			MountPoint:     "/dev",
   115  			MountOptions:   "rw,nosuid",
   116  			OptionalFields: []string{"shared:19"},
   117  			FilesystemType: "devtmpfs",
   118  			MountSource:    "devtmpfs",
   119  			SuperOptions:   "rw,size=8023924k,nr_inodes=2005981,mode=755",
   120  		},
   121  		{
   122  			MountID:        24,
   123  			ParentID:       21,
   124  			StDev:          "0:7",
   125  			Root:           "/",
   126  			MountPoint:     "/sys/kernel/security",
   127  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   128  			OptionalFields: []string{"shared:3"},
   129  			FilesystemType: "securityfs",
   130  			MountSource:    "securityfs",
   131  			SuperOptions:   "rw",
   132  		},
   133  		{
   134  			MountID:        25,
   135  			ParentID:       23,
   136  			StDev:          "0:21",
   137  			Root:           "/",
   138  			MountPoint:     "/dev/shm",
   139  			MountOptions:   "rw,nosuid,nodev",
   140  			OptionalFields: []string{"shared:20"},
   141  			FilesystemType: "tmpfs",
   142  			MountSource:    "tmpfs",
   143  			SuperOptions:   "rw",
   144  		},
   145  		{
   146  			MountID:        26,
   147  			ParentID:       23,
   148  			StDev:          "0:22",
   149  			Root:           "/",
   150  			MountPoint:     "/dev/pts",
   151  			MountOptions:   "rw,nosuid,noexec,relatime",
   152  			OptionalFields: []string{"shared:21"},
   153  			FilesystemType: "devpts",
   154  			MountSource:    "devpts",
   155  			SuperOptions:   "rw,gid=5,mode=620,ptmxmode=000",
   156  		},
   157  		{
   158  			MountID:        27,
   159  			ParentID:       68,
   160  			StDev:          "0:23",
   161  			Root:           "/",
   162  			MountPoint:     "/run",
   163  			MountOptions:   "rw,nosuid,nodev",
   164  			OptionalFields: []string{"shared:22"},
   165  			FilesystemType: "tmpfs",
   166  			MountSource:    "tmpfs",
   167  			SuperOptions:   "rw,mode=755",
   168  		},
   169  		{
   170  			MountID:        28,
   171  			ParentID:       21,
   172  			StDev:          "0:24",
   173  			Root:           "/",
   174  			MountPoint:     "/sys/fs/cgroup",
   175  			MountOptions:   "ro,nosuid,nodev,noexec",
   176  			OptionalFields: []string{"shared:4"},
   177  			FilesystemType: "tmpfs",
   178  			MountSource:    "tmpfs",
   179  			SuperOptions:   "ro,mode=755",
   180  		},
   181  		{
   182  			MountID:        29,
   183  			ParentID:       28,
   184  			StDev:          "0:25",
   185  			Root:           "/",
   186  			MountPoint:     "/sys/fs/cgroup/unified",
   187  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   188  			OptionalFields: []string{"shared:5"},
   189  			FilesystemType: "cgroup2",
   190  			MountSource:    "cgroup",
   191  			SuperOptions:   "rw,nsdelegate",
   192  		},
   193  		{
   194  			MountID:        30,
   195  			ParentID:       28,
   196  			StDev:          "0:26",
   197  			Root:           "/",
   198  			MountPoint:     "/sys/fs/cgroup/systemd",
   199  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   200  			OptionalFields: []string{"shared:6"},
   201  			FilesystemType: "cgroup",
   202  			MountSource:    "cgroup",
   203  			SuperOptions:   "rw,xattr,name=systemd",
   204  		},
   205  		{
   206  			MountID:        31,
   207  			ParentID:       21,
   208  			StDev:          "0:27",
   209  			Root:           "/",
   210  			MountPoint:     "/sys/fs/pstore",
   211  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   212  			OptionalFields: []string{"shared:18"},
   213  			FilesystemType: "pstore",
   214  			MountSource:    "pstore",
   215  			SuperOptions:   "rw",
   216  		},
   217  		{
   218  			MountID:        32,
   219  			ParentID:       28,
   220  			StDev:          "0:28",
   221  			Root:           "/",
   222  			MountPoint:     "/sys/fs/cgroup/blkio",
   223  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   224  			OptionalFields: []string{"shared:7"},
   225  			FilesystemType: "cgroup",
   226  			MountSource:    "cgroup",
   227  			SuperOptions:   "rw,blkio",
   228  		},
   229  		{
   230  			MountID:        33,
   231  			ParentID:       28,
   232  			StDev:          "0:29",
   233  			Root:           "/",
   234  			MountPoint:     "/sys/fs/cgroup/pids",
   235  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   236  			OptionalFields: []string{"shared:8"},
   237  			FilesystemType: "cgroup",
   238  			MountSource:    "cgroup",
   239  			SuperOptions:   "rw,pids",
   240  		},
   241  		{
   242  			MountID:        34,
   243  			ParentID:       28,
   244  			StDev:          "0:30",
   245  			Root:           "/",
   246  			MountPoint:     "/sys/fs/cgroup/net_cls,net_prio",
   247  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   248  			OptionalFields: []string{"shared:9"},
   249  			FilesystemType: "cgroup",
   250  			MountSource:    "cgroup",
   251  			SuperOptions:   "rw,net_cls,net_prio",
   252  		},
   253  		{
   254  			MountID:        35,
   255  			ParentID:       28,
   256  			StDev:          "0:31",
   257  			Root:           "/",
   258  			MountPoint:     "/sys/fs/cgroup/freezer",
   259  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   260  			OptionalFields: []string{"shared:10"},
   261  			FilesystemType: "cgroup",
   262  			MountSource:    "cgroup",
   263  			SuperOptions:   "rw,freezer",
   264  		},
   265  		{
   266  			MountID:        36,
   267  			ParentID:       28,
   268  			StDev:          "0:32",
   269  			Root:           "/",
   270  			MountPoint:     "/sys/fs/cgroup/rdma",
   271  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   272  			OptionalFields: []string{"shared:11"},
   273  			FilesystemType: "cgroup",
   274  			MountSource:    "cgroup",
   275  			SuperOptions:   "rw,rdma",
   276  		},
   277  		{
   278  			MountID:        37,
   279  			ParentID:       28,
   280  			StDev:          "0:33",
   281  			Root:           "/",
   282  			MountPoint:     "/sys/fs/cgroup/cpu,cpuacct",
   283  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   284  			OptionalFields: []string{"shared:12"},
   285  			FilesystemType: "cgroup",
   286  			MountSource:    "cgroup",
   287  			SuperOptions:   "rw,cpu,cpuacct",
   288  		},
   289  		{
   290  			MountID:        38,
   291  			ParentID:       28,
   292  			StDev:          "0:34",
   293  			Root:           "/",
   294  			MountPoint:     "/sys/fs/cgroup/cpuset",
   295  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   296  			OptionalFields: []string{"shared:13"},
   297  			FilesystemType: "cgroup",
   298  			MountSource:    "cgroup",
   299  			SuperOptions:   "rw,cpuset",
   300  		},
   301  		{
   302  			MountID:        39,
   303  			ParentID:       28,
   304  			StDev:          "0:35",
   305  			Root:           "/",
   306  			MountPoint:     "/sys/fs/cgroup/hugetlb",
   307  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   308  			OptionalFields: []string{"shared:14"},
   309  			FilesystemType: "cgroup",
   310  			MountSource:    "cgroup",
   311  			SuperOptions:   "rw,hugetlb",
   312  		},
   313  		{
   314  			MountID:        40,
   315  			ParentID:       28,
   316  			StDev:          "0:36",
   317  			Root:           "/",
   318  			MountPoint:     "/sys/fs/cgroup/devices",
   319  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   320  			OptionalFields: []string{"shared:15"},
   321  			FilesystemType: "cgroup",
   322  			MountSource:    "cgroup",
   323  			SuperOptions:   "rw,devices",
   324  		},
   325  		{
   326  			MountID:        41,
   327  			ParentID:       28,
   328  			StDev:          "0:37",
   329  			Root:           "/",
   330  			MountPoint:     "/sys/fs/cgroup/perf_event",
   331  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   332  			OptionalFields: []string{"shared:16"},
   333  			FilesystemType: "cgroup",
   334  			MountSource:    "cgroup",
   335  			SuperOptions:   "rw,perf_event",
   336  		},
   337  		{
   338  			MountID:        42,
   339  			ParentID:       28,
   340  			StDev:          "0:38",
   341  			Root:           "/",
   342  			MountPoint:     "/sys/fs/cgroup/memory",
   343  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   344  			OptionalFields: []string{"shared:17"},
   345  			FilesystemType: "cgroup",
   346  			MountSource:    "cgroup",
   347  			SuperOptions:   "rw,memory",
   348  		},
   349  		{
   350  			MountID:        68,
   351  			ParentID:       0,
   352  			StDev:          "254:1",
   353  			Root:           "/",
   354  			MountPoint:     "/",
   355  			MountOptions:   "rw,relatime",
   356  			OptionalFields: []string{"shared:1"},
   357  			FilesystemType: "xfs",
   358  			MountSource:    "/dev/mapper/system-root",
   359  			SuperOptions:   "rw,attr2,inode64,noquota",
   360  		},
   361  		{
   362  			MountID:        43,
   363  			ParentID:       22,
   364  			StDev:          "0:41",
   365  			Root:           "/",
   366  			MountPoint:     "/proc/sys/fs/binfmt_misc",
   367  			MountOptions:   "rw,relatime",
   368  			OptionalFields: []string{"shared:24"},
   369  			FilesystemType: "autofs",
   370  			MountSource:    "systemd-1",
   371  			SuperOptions:   "rw,fd=35,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=16155",
   372  		},
   373  		{
   374  			MountID:        44,
   375  			ParentID:       23,
   376  			StDev:          "0:42",
   377  			Root:           "/",
   378  			MountPoint:     "/dev/hugepages",
   379  			MountOptions:   "rw,relatime",
   380  			OptionalFields: []string{"shared:25"},
   381  			FilesystemType: "hugetlbfs",
   382  			MountSource:    "hugetlbfs",
   383  			SuperOptions:   "rw,pagesize=2M",
   384  		},
   385  		{
   386  			MountID:        45,
   387  			ParentID:       23,
   388  			StDev:          "0:19",
   389  			Root:           "/",
   390  			MountPoint:     "/dev/mqueue",
   391  			MountOptions:   "rw,relatime",
   392  			OptionalFields: []string{"shared:26"},
   393  			FilesystemType: "mqueue",
   394  			MountSource:    "mqueue",
   395  			SuperOptions:   "rw",
   396  		},
   397  		{
   398  			MountID:        46,
   399  			ParentID:       21,
   400  			StDev:          "0:8",
   401  			Root:           "/",
   402  			MountPoint:     "/sys/kernel/debug",
   403  			MountOptions:   "rw,relatime",
   404  			OptionalFields: []string{"shared:27"},
   405  			FilesystemType: "debugfs",
   406  			MountSource:    "debugfs",
   407  			SuperOptions:   "rw",
   408  		},
   409  		{
   410  			MountID:        78,
   411  			ParentID:       68,
   412  			StDev:          "8:1",
   413  			Root:           "/",
   414  			MountPoint:     "/boot",
   415  			MountOptions:   "rw,relatime",
   416  			OptionalFields: []string{"shared:28"},
   417  			FilesystemType: "ext4",
   418  			MountSource:    "/dev/sda1",
   419  			SuperOptions:   "rw,stripe=4",
   420  		},
   421  		{
   422  			MountID:        80,
   423  			ParentID:       68,
   424  			StDev:          "254:3",
   425  			Root:           "/",
   426  			MountPoint:     "/home",
   427  			MountOptions:   "rw,relatime",
   428  			OptionalFields: []string{"shared:29"},
   429  			FilesystemType: "xfs",
   430  			MountSource:    "/dev/mapper/system-home",
   431  			SuperOptions:   "rw,attr2,inode64,noquota",
   432  		},
   433  		{
   434  			MountID:        382,
   435  			ParentID:       27,
   436  			StDev:          "0:47",
   437  			Root:           "/",
   438  			MountPoint:     "/run/user/463",
   439  			MountOptions:   "rw,nosuid,nodev,relatime",
   440  			OptionalFields: []string{"shared:294"},
   441  			FilesystemType: "tmpfs",
   442  			MountSource:    "tmpfs",
   443  			SuperOptions:   "rw,size=1606744k,mode=700,uid=463,gid=463",
   444  		},
   445  		{
   446  			MountID:        472,
   447  			ParentID:       27,
   448  			StDev:          "0:48",
   449  			Root:           "/",
   450  			MountPoint:     "/run/user/1000",
   451  			MountOptions:   "rw,nosuid,nodev,relatime",
   452  			OptionalFields: []string{"shared:380"},
   453  			FilesystemType: "tmpfs",
   454  			MountSource:    "tmpfs",
   455  			SuperOptions:   "rw,size=1606744k,mode=700,uid=1000,gid=100",
   456  		},
   457  		{
   458  			MountID:        485,
   459  			ParentID:       21,
   460  			StDev:          "0:49",
   461  			Root:           "/",
   462  			MountPoint:     "/sys/fs/fuse/connections",
   463  			MountOptions:   "rw,relatime",
   464  			OptionalFields: []string{"shared:391"},
   465  			FilesystemType: "fusectl",
   466  			MountSource:    "fusectl",
   467  			SuperOptions:   "rw",
   468  		},
   469  		{
   470  			MountID:        497,
   471  			ParentID:       472,
   472  			StDev:          "0:50",
   473  			Root:           "/",
   474  			MountPoint:     "/run/user/1000/gvfs",
   475  			MountOptions:   "rw,nosuid,nodev,relatime",
   476  			OptionalFields: []string{"shared:401"},
   477  			FilesystemType: "fuse.gvfsd-fuse",
   478  			MountSource:    "gvfsd-fuse",
   479  			SuperOptions:   "rw,user_id=1000,group_id=100",
   480  		},
   481  		{
   482  			MountID:        510,
   483  			ParentID:       46,
   484  			StDev:          "0:11",
   485  			Root:           "/",
   486  			MountPoint:     "/sys/kernel/debug/tracing",
   487  			MountOptions:   "rw,relatime",
   488  			OptionalFields: []string{"shared:412"},
   489  			FilesystemType: "tracefs",
   490  			MountSource:    "tracefs",
   491  			SuperOptions:   "rw",
   492  		},
   493  		{
   494  			MountID:        225,
   495  			ParentID:       472,
   496  			StDev:          "0:45",
   497  			Root:           "/",
   498  			MountPoint:     "/run/user/1000/doc",
   499  			MountOptions:   "rw,nosuid,nodev,relatime",
   500  			OptionalFields: []string{"shared:141"},
   501  			FilesystemType: "fuse",
   502  			MountSource:    "/dev/fuse",
   503  			SuperOptions:   "rw,user_id=1000,group_id=100",
   504  		},
   505  		{
   506  			MountID:        655,
   507  			ParentID:       68,
   508  			StDev:          "0:100",
   509  			Root:           "/",
   510  			MountPoint:     "/var/lib/docker/overlay2/209d7aafdafc7ebde84cb9f993c1e34cf0376f4f15dae4ddd2dd260b8d987d4d/merged",
   511  			MountOptions:   "rw,relatime",
   512  			OptionalFields: []string{"shared:150"},
   513  			FilesystemType: "overlay",
   514  			MountSource:    "overlay",
   515  			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",
   516  		},
   517  		{
   518  			MountID:        810,
   519  			ParentID:       68,
   520  			StDev:          "0:107",
   521  			Root:           "/",
   522  			MountPoint:     "/var/lib/docker/containers/178dc073e1eb58e137d562d28928a187bdc05905ff889b7658dd7a9b3488e494/mounts/shm",
   523  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   524  			OptionalFields: []string{"shared:159"},
   525  			FilesystemType: "tmpfs",
   526  			MountSource:    "shm",
   527  			SuperOptions:   "rw,size=65536k",
   528  		},
   529  		{
   530  			MountID:        1017,
   531  			ParentID:       27,
   532  			StDev:          "0:3",
   533  			Root:           "net:[4026532775]",
   534  			MountPoint:     "/run/docker/netns/85c40bc29e30",
   535  			MountOptions:   "rw",
   536  			OptionalFields: []string{"shared:168"},
   537  			FilesystemType: "nsfs",
   538  			MountSource:    "nsfs",
   539  			SuperOptions:   "rw",
   540  		},
   541  		{
   542  			MountID:        969,
   543  			ParentID:       68,
   544  			StDev:          "0:117",
   545  			Root:           "/",
   546  			MountPoint:     "/var/lib/docker/overlay2/e35eafd51f5f1e5a1f055de47bfccae6bb47c57317628507bb00b0981d33d717/merged",
   547  			MountOptions:   "rw,relatime",
   548  			OptionalFields: []string{"shared:177"},
   549  			FilesystemType: "overlay",
   550  			MountSource:    "overlay",
   551  			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",
   552  		},
   553  		{
   554  			MountID:        990,
   555  			ParentID:       68,
   556  			StDev:          "0:118",
   557  			Root:           "/",
   558  			MountPoint:     "/var/lib/docker/containers/eb56406256443e41d885581f36a790155bfa7eab49753a3cbeef6c12226fb7eb/mounts/shm",
   559  			MountOptions:   "rw,nosuid,nodev,noexec,relatime",
   560  			OptionalFields: []string{"shared:249"},
   561  			FilesystemType: "tmpfs",
   562  			MountSource:    "shm",
   563  			SuperOptions:   "rw,size=65536k",
   564  		},
   565  		{
   566  			MountID:        1110,
   567  			ParentID:       27,
   568  			StDev:          "0:3",
   569  			Root:           "net:[4026532846]",
   570  			MountPoint:     "/run/docker/netns/35b7f0885825",
   571  			MountOptions:   "rw",
   572  			OptionalFields: []string{"shared:258"},
   573  			FilesystemType: "nsfs",
   574  			MountSource:    "nsfs",
   575  			SuperOptions:   "rw",
   576  		},
   577  		{
   578  			MountID:        657,
   579  			ParentID:       21,
   580  			StDev:          "0:98",
   581  			Root:           "/",
   582  			MountPoint:     "/sys/fs/bpf",
   583  			MountOptions:   "rw,relatime",
   584  			OptionalFields: []string{"shared:267"},
   585  			FilesystemType: "bpf",
   586  			MountSource:    "bpffs",
   587  			SuperOptions:   "rw",
   588  		},
   589  	}
   590  
   591  	r := bytes.NewBuffer([]byte(mountInfoContent))
   592  	mountInfos, err := parseMountInfoFile(r)
   593  	c.Assert(err, IsNil)
   594  	c.Assert(mountInfos, HasLen, expectedLength)
   595  	c.Assert(mountInfos, checker.DeepEquals, expectedMountInfos)
   596  }
   597  
   598  func (s *MountInfoTestSuite) TestGetMountInfo(c *C) {
   599  	_, err := GetMountInfo()
   600  	c.Assert(err, IsNil)
   601  }
   602  
   603  // TestIsMountFSPrivate tests the private function isMountFS which expects
   604  // mountinfo to be provided as a slice.
   605  func (s *MountInfoTestSuite) TestIsMountFSPrivate(c *C) {
   606  	r := bytes.NewBuffer([]byte(mountInfoContent))
   607  	mountInfos, err := parseMountInfoFile(r)
   608  	c.Assert(err, IsNil)
   609  
   610  	// /sys/fs/bpffs should be recognized as a BPFFS mount.
   611  	mounted, bpffsInstance := isMountFS(mountInfos, FilesystemTypeBPFFS, "/sys/fs/bpf")
   612  	c.Assert(mounted, Equals, true)
   613  	c.Assert(bpffsInstance, Equals, true)
   614  
   615  	// /sys/fs/cgroup/unified should be recognized as a cgroup2 mount.
   616  	mounted, cgroup2Instance := isMountFS(mountInfos, FilesystemTypeCgroup2, "/sys/fs/cgroup/unified")
   617  	c.Assert(mounted, Equals, true)
   618  	c.Assert(cgroup2Instance, Equals, true)
   619  
   620  	// /run/user/463 should be recognized as a mount, but not of BPFFS type.
   621  	mounted, bpffsInstance = isMountFS(mountInfos, FilesystemTypeBPFFS, "/run/user/463")
   622  	c.Assert(mounted, Equals, true)
   623  	c.Assert(bpffsInstance, Equals, false)
   624  
   625  	// /foo/bar shouldn't be found in mountinfo.
   626  	mounted, bpffsInstance = isMountFS(mountInfos, FilesystemTypeBPFFS, "/foo/bar")
   627  	c.Assert(mounted, Equals, false)
   628  	c.Assert(bpffsInstance, Equals, false)
   629  }
   630  
   631  // TestIsMountFS tests the public funcion IsMountFS which gets mountinfo from
   632  // /proc/self/mountinfo. We cannot expect every system and machine to have any
   633  // predictable mounts. The only thing which can be checked is whether there is
   634  // no error returned by mountinfo parser.
   635  func (s *MountInfoTestSuite) TestIsMountFS(c *C) {
   636  	_, _, err := IsMountFS(FilesystemTypeBPFFS, "/sys/fs/bpf")
   637  	c.Assert(err, IsNil)
   638  }