All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 33s
				
			Test / Sandbox (push) Successful in 2m7s
				
			Test / Hakurei (push) Successful in 3m8s
				
			Test / Hpkg (push) Successful in 3m59s
				
			Test / Sandbox (race detector) (push) Successful in 4m26s
				
			Test / Hakurei (race detector) (push) Successful in 5m6s
				
			Test / Flake checks (push) Successful in 1m26s
				
			This allows tests to stub all kernel behaviour, enabling measurement of all function call arguments and error injection. Signed-off-by: Ophestra <cat@gensokyo.uk>
		
			
				
	
	
		
			166 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package container
 | |
| 
 | |
| import (
 | |
| 	"io/fs"
 | |
| 	"os"
 | |
| 	"syscall"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| func TestMountTmpfsOp(t *testing.T) {
 | |
| 	checkOpBehaviour(t, []opBehaviourTestCase{
 | |
| 		{"size oob", new(Params), &MountTmpfsOp{
 | |
| 			Size: -1,
 | |
| 		}, nil, nil, nil, msg.WrapErr(fs.ErrInvalid, "size -1 out of bounds")},
 | |
| 
 | |
| 		{"success", new(Params), &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user/1000/"),
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0700,
 | |
| 		}, nil, nil, []kexpect{
 | |
| 			{"mountTmpfs", expectArgs{
 | |
| 				"ephemeral",              // fsname
 | |
| 				"/sysroot/run/user/1000", // target
 | |
| 				uintptr(0),               // flags
 | |
| 				0x400,                    // size
 | |
| 				os.FileMode(0700),        // perm
 | |
| 			}, nil, nil},
 | |
| 		}, nil},
 | |
| 	})
 | |
| 
 | |
| 	checkOpsValid(t, []opValidTestCase{
 | |
| 		{"nil", (*MountTmpfsOp)(nil), false},
 | |
| 		{"zero", new(MountTmpfsOp), false},
 | |
| 		{"nil path", &MountTmpfsOp{FSName: "tmpfs"}, false},
 | |
| 		{"zero fsname", &MountTmpfsOp{Path: MustAbs("/tmp/")}, false},
 | |
| 		{"valid", &MountTmpfsOp{FSName: "tmpfs", Path: MustAbs("/tmp/")}, true},
 | |
| 	})
 | |
| 
 | |
| 	checkOpsBuilder(t, []opsBuilderTestCase{
 | |
| 		{"runtime", new(Ops).Tmpfs(
 | |
| 			MustAbs("/run/user"),
 | |
| 			1<<10,
 | |
| 			0755,
 | |
| 		), Ops{
 | |
| 			&MountTmpfsOp{
 | |
| 				FSName: "ephemeral",
 | |
| 				Path:   MustAbs("/run/user"),
 | |
| 				Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 				Size:   1 << 10,
 | |
| 				Perm:   0755,
 | |
| 			},
 | |
| 		}},
 | |
| 
 | |
| 		{"nscd", new(Ops).Readonly(
 | |
| 			MustAbs("/var/run/nscd"),
 | |
| 			0755,
 | |
| 		), Ops{
 | |
| 			&MountTmpfsOp{
 | |
| 				FSName: "readonly",
 | |
| 				Path:   MustAbs("/var/run/nscd"),
 | |
| 				Flags:  syscall.MS_NOSUID | syscall.MS_NODEV | syscall.MS_RDONLY,
 | |
| 				Perm:   0755,
 | |
| 			},
 | |
| 		}},
 | |
| 	})
 | |
| 
 | |
| 	checkOpIs(t, []opIsTestCase{
 | |
| 		{"zero", new(MountTmpfsOp), new(MountTmpfsOp), false},
 | |
| 
 | |
| 		{"fsname differs", &MountTmpfsOp{
 | |
| 			FSName: "readonly",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, false},
 | |
| 
 | |
| 		{"path differs", &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user/differs"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, false},
 | |
| 
 | |
| 		{"flags differs", &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV | syscall.MS_RDONLY,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, false},
 | |
| 
 | |
| 		{"size differs", &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1,
 | |
| 			Perm:   0755,
 | |
| 		}, &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, false},
 | |
| 
 | |
| 		{"perm differs", &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0700,
 | |
| 		}, &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, false},
 | |
| 
 | |
| 		{"equals", &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, true},
 | |
| 	})
 | |
| 
 | |
| 	checkOpMeta(t, []opMetaTestCase{
 | |
| 		{"runtime", &MountTmpfsOp{
 | |
| 			FSName: "ephemeral",
 | |
| 			Path:   MustAbs("/run/user"),
 | |
| 			Flags:  syscall.MS_NOSUID | syscall.MS_NODEV,
 | |
| 			Size:   1 << 10,
 | |
| 			Perm:   0755,
 | |
| 		}, "mounting", `tmpfs on "/run/user" size 1024`},
 | |
| 	})
 | |
| }
 |