aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/testdata/main.go
blob: d63acdbd15aa084c29a57259c6c1d4c68283f42e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//go:build testtool

package main

import (
	"log"
	"os"
	"path"
	"slices"

	"hakurei.app/container/fhs"
	"hakurei.app/container/vfs"
)

func main() {
	log.SetFlags(0)
	log.SetPrefix("testtool: ")

	if wantArgs := []string{"testtool"}; !slices.Equal(os.Args, wantArgs) {
		log.Fatalf("Args: %q, want %q", os.Args, wantArgs)
	}
	if wantEnv := []string{
		"HAKUREI_TEST=1",
	}; !slices.Equal(wantEnv, os.Environ()) {
		log.Fatalf("Environ: %q, want %q", os.Environ(), wantEnv)
	}
	const wantExec = "/opt/bin/testtool"
	if got, err := os.Executable(); err != nil {
		log.Fatalf("Executable: error = %v", err)
	} else if got != wantExec {
		log.Fatalf("Executable: %q, want %q", got, wantExec)
	}

	var m *vfs.MountInfo
	if f, err := os.Open(fhs.Proc + "self/mountinfo"); err != nil {
		log.Fatalf("Open: error = %v", err)
	} else {
		err = vfs.NewMountInfoDecoder(f).Decode(&m)
		closeErr := f.Close()
		if err != nil {
			log.Fatalf("Decode: error = %v", err)
		}
		if closeErr != nil {
			log.Fatalf("Close: error = %v", err)
		}
	}

	log.Println(m)
	if m.Root != "/sysroot" || m.Target != "/" {
		log.Fatal("unexpected root mount entry")
	}
	next := func() { m = m.Next; log.Println(m) }

	next()
	if path.Base(m.Root) != "OLBgp1GsljhM2TJ-sbHjaiH9txEUvgdDTAzHv2P24donTt6_529l-9Ua0vFImLlb" {
		log.Fatal("unexpected file artifact checksum")
	}

	next()
	if path.Base(m.Root) != "MGWmEfjut2QE2xPJwTsmUzpff4BN_FEnQ7T0j7gvUCCiugJQNwqt9m151fm9D1yU" {
		log.Fatal("unexpected artifact checksum")
	}

	next() // testtool artifact

	next()
	if path.Base(m.Root) !=
		"oHuqV7p0v1Vd8IdAzjyYM8sfCS0P2LR5tfv5cb6Gbf2ZWUm8Ec-7hYPJ_qr183m7" || m.Target != "/work" {
		log.Fatal("unexpected work mount entry")
	}

	next()
	if path.Base(m.Root) !=
		"oHuqV7p0v1Vd8IdAzjyYM8sfCS0P2LR5tfv5cb6Gbf2ZWUm8Ec-7hYPJ_qr183m7" || m.Target != "/tmp" {
		log.Fatal("unexpected temp mount entry")
	}

	next()
	if m.Root != "/" || m.Target != "/proc" || m.Source != "proc" || m.FsType != "proc" {
		log.Fatal("unexpected proc mount entry")
	}

	next()
	if m.Root != "/" || m.Target != "/dev" || m.Source != "devtmpfs" || m.FsType != "tmpfs" {
		log.Fatal("unexpected dev mount entry")
	}

	for i := 0; i < 9; i++ { // private /dev entries
		next()
	}

	if m.Next != nil {
		log.Println("unexpected extra mount entries")
		for m.Next != nil {
			next()
		}
		os.Exit(1)
	}

	if err := os.WriteFile("check", []byte{0}, 0400); err != nil {
		log.Fatal(err)
	}
}