internal/app: test case for hst template
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Test / Create distribution (push) Successful in 32s
				
			
		
			
				
	
				Test / Sandbox (push) Successful in 2m8s
				
			
		
			
				
	
				Test / Hakurei (push) Successful in 3m5s
				
			
		
			
				
	
				Test / Hpkg (push) Successful in 3m58s
				
			
		
			
				
	
				Test / Sandbox (race detector) (push) Successful in 4m2s
				
			
		
			
				
	
				Test / Hakurei (race detector) (push) Successful in 4m42s
				
			
		
			
				
	
				Test / Flake checks (push) Successful in 1m21s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 32s
				
			Test / Sandbox (push) Successful in 2m8s
				
			Test / Hakurei (push) Successful in 3m5s
				
			Test / Hpkg (push) Successful in 3m58s
				
			Test / Sandbox (race detector) (push) Successful in 4m2s
				
			Test / Hakurei (race detector) (push) Successful in 4m42s
				
			Test / Flake checks (push) Successful in 1m21s
				
			This helps with other areas of the test suite as they're all based on hst.Template. This also helps contributors understand the behaviour of internal/app as hst.Template covers almost every aspect of it. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
		
							parent
							
								
									1685a4d000
								
							
						
					
					
						commit
						0f8ffee44d
					
				| @ -20,6 +20,7 @@ import ( | |||||||
| 	"hakurei.app/container/check" | 	"hakurei.app/container/check" | ||||||
| 	"hakurei.app/container/comp" | 	"hakurei.app/container/comp" | ||||||
| 	"hakurei.app/container/fhs" | 	"hakurei.app/container/fhs" | ||||||
|  | 	"hakurei.app/container/seccomp" | ||||||
| 	"hakurei.app/hst" | 	"hakurei.app/hst" | ||||||
| 	"hakurei.app/internal/app/state" | 	"hakurei.app/internal/app/state" | ||||||
| 	"hakurei.app/message" | 	"hakurei.app/message" | ||||||
| @ -41,6 +42,148 @@ func TestApp(t *testing.T) { | |||||||
| 		wantSys    *system.I | 		wantSys    *system.I | ||||||
| 		wantParams *container.Params | 		wantParams *container.Params | ||||||
| 	}{ | 	}{ | ||||||
|  | 		{"template", new(stubNixOS), hst.Template(), checkExpectInstanceId, system.New(panicMsgContext{}, message.NewMsg(nil), 1000009). | ||||||
|  | 			// spParamsOp | ||||||
|  | 			Ensure(m("/tmp/hakurei.0"), 0711). | ||||||
|  | 
 | ||||||
|  | 			// spRuntimeOp | ||||||
|  | 			Ensure(m("/tmp/hakurei.0/runtime"), 0700). | ||||||
|  | 			UpdatePermType(system.User, m("/tmp/hakurei.0/runtime"), acl.Execute). | ||||||
|  | 			Ensure(m("/tmp/hakurei.0/runtime/9"), 0700). | ||||||
|  | 			UpdatePermType(system.User, m("/tmp/hakurei.0/runtime/9"), acl.Read, acl.Write, acl.Execute). | ||||||
|  | 
 | ||||||
|  | 			// spTmpdirOp | ||||||
|  | 			Ensure(m("/tmp/hakurei.0/tmpdir"), 0700). | ||||||
|  | 			UpdatePermType(system.User, m("/tmp/hakurei.0/tmpdir"), acl.Execute). | ||||||
|  | 			Ensure(m("/tmp/hakurei.0/tmpdir/9"), 01700). | ||||||
|  | 			UpdatePermType(system.User, m("/tmp/hakurei.0/tmpdir/9"), acl.Read, acl.Write, acl.Execute). | ||||||
|  | 
 | ||||||
|  | 			// instance | ||||||
|  | 			Ephemeral(system.Process, m("/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 0711). | ||||||
|  | 
 | ||||||
|  | 			// spWaylandOp | ||||||
|  | 			Wayland( | ||||||
|  | 				m("/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/wayland"), | ||||||
|  | 				m("/run/user/1971/wayland-0"), | ||||||
|  | 				"org.chromium.Chromium", | ||||||
|  | 				"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", | ||||||
|  | 			). | ||||||
|  | 
 | ||||||
|  | 			// ensureRuntimeDir | ||||||
|  | 			Ensure(m("/run/user/1971/hakurei"), 0700). | ||||||
|  | 			UpdatePermType(system.User, m("/run/user/1971/hakurei"), acl.Execute). | ||||||
|  | 			Ensure(m("/run/user/1971"), 0700). | ||||||
|  | 			UpdatePermType(system.User, m("/run/user/1971"), acl.Execute). | ||||||
|  | 
 | ||||||
|  | 			// runtime | ||||||
|  | 			Ephemeral(system.Process, m("/run/user/1971/hakurei/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 0700). | ||||||
|  | 			UpdatePerm(m("/run/user/1971/hakurei/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), acl.Execute). | ||||||
|  | 
 | ||||||
|  | 			// spPulseOp | ||||||
|  | 			Link(m("/run/user/1971/pulse/native"), m("/run/user/1971/hakurei/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/pulse")). | ||||||
|  | 
 | ||||||
|  | 			// spDBusOp | ||||||
|  | 			MustProxyDBus( | ||||||
|  | 				hst.Template().SessionBus, | ||||||
|  | 				hst.Template().SystemBus, dbus.ProxyPair{ | ||||||
|  | 					"unix:path=/run/user/1971/bus", | ||||||
|  | 					"/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bus", | ||||||
|  | 				}, dbus.ProxyPair{ | ||||||
|  | 					"unix:path=/var/run/dbus/system_bus_socket", | ||||||
|  | 					"/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/system_bus_socket", | ||||||
|  | 				}, | ||||||
|  | 			).UpdatePerm(m("/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bus"), acl.Read, acl.Write). | ||||||
|  | 			UpdatePerm(m("/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/system_bus_socket"), acl.Read, acl.Write). | ||||||
|  | 
 | ||||||
|  | 			// spFilesystemOp | ||||||
|  | 			Ensure(m("/var/lib/hakurei/u0"), 0700). | ||||||
|  | 			UpdatePermType(system.User, m("/var/lib/hakurei/u0"), acl.Execute). | ||||||
|  | 			UpdatePermType(system.User, m("/var/lib/hakurei/u0/org.chromium.Chromium"), acl.Read, acl.Write, acl.Execute), &container.Params{ | ||||||
|  | 
 | ||||||
|  | 			Dir: m("/data/data/org.chromium.Chromium"), | ||||||
|  | 			Env: []string{ | ||||||
|  | 				"DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1971/bus", | ||||||
|  | 				"DBUS_SYSTEM_BUS_ADDRESS=unix:path=/var/run/dbus/system_bus_socket", | ||||||
|  | 				"GOOGLE_API_KEY=AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY", | ||||||
|  | 				"GOOGLE_DEFAULT_CLIENT_ID=77185425430.apps.googleusercontent.com", | ||||||
|  | 				"GOOGLE_DEFAULT_CLIENT_SECRET=OTJgUOQcT7lO7GsGZq2G4IlT", | ||||||
|  | 				"HOME=/data/data/org.chromium.Chromium", | ||||||
|  | 				"PULSE_COOKIE=/.hakurei/pulse-cookie", | ||||||
|  | 				"PULSE_SERVER=unix:/run/user/1971/pulse/native", | ||||||
|  | 				"SHELL=/run/current-system/sw/bin/zsh", | ||||||
|  | 				"TERM=xterm-256color", | ||||||
|  | 				"USER=chronos", | ||||||
|  | 				"WAYLAND_DISPLAY=wayland-0", | ||||||
|  | 				"XDG_RUNTIME_DIR=/run/user/1971", | ||||||
|  | 				"XDG_SESSION_CLASS=user", | ||||||
|  | 				"XDG_SESSION_TYPE=wayland", | ||||||
|  | 			}, | ||||||
|  | 
 | ||||||
|  | 			// spParamsOp | ||||||
|  | 			Hostname:      "localhost", | ||||||
|  | 			RetainSession: true, | ||||||
|  | 			HostNet:       true, | ||||||
|  | 			HostAbstract:  true, | ||||||
|  | 			Path:          m("/run/current-system/sw/bin/chromium"), | ||||||
|  | 			Args: []string{ | ||||||
|  | 				"chromium", | ||||||
|  | 				"--ignore-gpu-blocklist", | ||||||
|  | 				"--disable-smooth-scrolling", | ||||||
|  | 				"--enable-features=UseOzonePlatform", | ||||||
|  | 				"--ozone-platform=wayland", | ||||||
|  | 			}, | ||||||
|  | 			SeccompFlags: seccomp.AllowMultiarch, | ||||||
|  | 			Uid:          1971, | ||||||
|  | 			Gid:          100, | ||||||
|  | 
 | ||||||
|  | 			Ops: new(container.Ops). | ||||||
|  | 				// resolveRoot | ||||||
|  | 				Root(m("/var/lib/hakurei/base/org.debian"), comp.BindWritable). | ||||||
|  | 				// spParamsOp | ||||||
|  | 				Proc(fhs.AbsProc). | ||||||
|  | 				Tmpfs(hst.AbsPrivateTmp, 1<<12, 0755). | ||||||
|  | 				Bind(fhs.AbsDev, fhs.AbsDev, comp.BindWritable|comp.BindDevice). | ||||||
|  | 				Tmpfs(fhs.AbsDev.Append("shm"), 0, 01777). | ||||||
|  | 
 | ||||||
|  | 				// spRuntimeOp | ||||||
|  | 				Tmpfs(fhs.AbsRunUser, 1<<12, 0755). | ||||||
|  | 				Bind(m("/tmp/hakurei.0/runtime/9"), m("/run/user/1971"), comp.BindWritable). | ||||||
|  | 
 | ||||||
|  | 				// spTmpdirOp | ||||||
|  | 				Bind(m("/tmp/hakurei.0/tmpdir/9"), fhs.AbsTmp, comp.BindWritable). | ||||||
|  | 
 | ||||||
|  | 				// spAccountOp | ||||||
|  | 				Place(m("/etc/passwd"), []byte("chronos:x:1971:100:Hakurei:/data/data/org.chromium.Chromium:/run/current-system/sw/bin/zsh\n")). | ||||||
|  | 				Place(m("/etc/group"), []byte("hakurei:x:100:\n")). | ||||||
|  | 
 | ||||||
|  | 				// spWaylandOp | ||||||
|  | 				Bind(m("/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/wayland"), m("/run/user/1971/wayland-0"), 0). | ||||||
|  | 
 | ||||||
|  | 				// spPulseOp | ||||||
|  | 				Bind(m("/run/user/1971/hakurei/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/pulse"), m("/run/user/1971/pulse/native"), 0). | ||||||
|  | 				Place(m("/.hakurei/pulse-cookie"), bytes.Repeat([]byte{0}, pulseCookieSizeMax)). | ||||||
|  | 
 | ||||||
|  | 				// spDBusOp | ||||||
|  | 				Bind(m("/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bus"), m("/run/user/1971/bus"), 0). | ||||||
|  | 				Bind(m("/tmp/hakurei.0/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/system_bus_socket"), m("/var/run/dbus/system_bus_socket"), 0). | ||||||
|  | 
 | ||||||
|  | 				// spFilesystemOp | ||||||
|  | 				Etc(fhs.AbsEtc, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"). | ||||||
|  | 				Tmpfs(fhs.AbsTmp, 0, 0755). | ||||||
|  | 				Overlay(m("/nix/store"), | ||||||
|  | 					fhs.AbsVarLib.Append("hakurei/nix/u0/org.chromium.Chromium/rw-store/upper"), | ||||||
|  | 					fhs.AbsVarLib.Append("hakurei/nix/u0/org.chromium.Chromium/rw-store/work"), | ||||||
|  | 					fhs.AbsVarLib.Append("hakurei/base/org.nixos/ro-store")). | ||||||
|  | 				Link(m("/run/current-system"), "/run/current-system", true). | ||||||
|  | 				Link(m("/run/opengl-driver"), "/run/opengl-driver", true). | ||||||
|  | 				Bind(fhs.AbsVarLib.Append("hakurei/u0/org.chromium.Chromium"), | ||||||
|  | 					m("/data/data/org.chromium.Chromium"), | ||||||
|  | 					comp.BindWritable|comp.BindEnsure). | ||||||
|  | 				Bind(fhs.AbsDev.Append("dri"), fhs.AbsDev.Append("dri"), | ||||||
|  | 					comp.BindOptional|comp.BindWritable|comp.BindDevice). | ||||||
|  | 				Remount(fhs.AbsRoot, syscall.MS_RDONLY), | ||||||
|  | 		}}, | ||||||
|  | 
 | ||||||
| 		{"nixos permissive defaults no enablements", new(stubNixOS), &hst.Config{Container: &hst.ContainerConfig{ | 		{"nixos permissive defaults no enablements", new(stubNixOS), &hst.Config{Container: &hst.ContainerConfig{ | ||||||
| 			Filesystem: []hst.FilesystemConfigJSON{ | 			Filesystem: []hst.FilesystemConfigJSON{ | ||||||
| 				{FilesystemConfig: &hst.FSBind{ | 				{FilesystemConfig: &hst.FSBind{ | ||||||
| @ -648,6 +791,10 @@ func (k *stubNixOS) readdir(name string) ([]fs.DirEntry, error) { | |||||||
| 			"tmpfiles.d", "udev", "udisks2", "UPower", "vconsole.conf", "X11", "zfs", "zinputrc", | 			"tmpfiles.d", "udev", "udisks2", "UPower", "vconsole.conf", "X11", "zfs", "zinputrc", | ||||||
| 			"zoneinfo", "zprofile", "zshenv", "zshrc") | 			"zoneinfo", "zprofile", "zshenv", "zshrc") | ||||||
| 
 | 
 | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian": | ||||||
|  | 		return stubDirEntries("bin", "dev", "etc", "home", "lib64", "lost+found", | ||||||
|  | 			"mnt", "nix", "proc", "root", "run", "srv", "sys", "tmp", "usr", "var") | ||||||
|  | 
 | ||||||
| 	default: | 	default: | ||||||
| 		panic(fmt.Sprintf("attempted to read unexpected directory %q", name)) | 		panic(fmt.Sprintf("attempted to read unexpected directory %q", name)) | ||||||
| 	} | 	} | ||||||
| @ -715,6 +862,38 @@ func (k *stubNixOS) evalSymlinks(path string) (string, error) { | |||||||
| 		return "/nix/store/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-graphics-drivers", nil | 		return "/nix/store/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-graphics-drivers", nil | ||||||
| 	case "/var/lib/persist/module/hakurei/0/1": | 	case "/var/lib/persist/module/hakurei/0/1": | ||||||
| 		return "/var/lib/persist/module/hakurei/0/1", nil | 		return "/var/lib/persist/module/hakurei/0/1", nil | ||||||
|  | 
 | ||||||
|  | 	case "/var/lib/hakurei/nix/u0/org.chromium.Chromium/rw-store/upper": | ||||||
|  | 		return "/var/lib/hakurei/nix/u0/org.chromium.Chromium/rw-store/upper", nil | ||||||
|  | 	case "/var/lib/hakurei/nix/u0/org.chromium.Chromium/rw-store/work": | ||||||
|  | 		return "/var/lib/hakurei/nix/u0/org.chromium.Chromium/rw-store/work", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.nixos/ro-store": | ||||||
|  | 		return "/var/lib/hakurei/base/org.nixos/ro-store", nil | ||||||
|  | 	case "/var/lib/hakurei/u0/org.chromium.Chromium": | ||||||
|  | 		return "/var/lib/hakurei/u0/org.chromium.Chromium", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/bin": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/bin", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/home": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/home", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/lib64": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/lib64", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/lost+found": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/lost+found", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/nix": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/nix", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/root": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/root", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/run": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/run", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/srv": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/srv", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/sys": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/sys", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/usr": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/usr", nil | ||||||
|  | 	case "/var/lib/hakurei/base/org.debian/var": | ||||||
|  | 		return "/var/lib/hakurei/base/org.debian/var", nil | ||||||
|  | 
 | ||||||
| 	default: | 	default: | ||||||
| 		panic(fmt.Sprintf("attempted to evaluate unexpected path %q", path)) | 		panic(fmt.Sprintf("attempted to evaluate unexpected path %q", path)) | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user