hst/container: flags string representation
All checks were successful
Test / Create distribution (push) Successful in 32s
Test / Sandbox (push) Successful in 2m9s
Test / Sandbox (race detector) (push) Successful in 3m56s
Test / Hpkg (push) Successful in 4m5s
Test / Hakurei (race detector) (push) Successful in 4m42s
Test / Hakurei (push) Successful in 2m9s
Test / Flake checks (push) Successful in 1m28s
All checks were successful
Test / Create distribution (push) Successful in 32s
Test / Sandbox (push) Successful in 2m9s
Test / Sandbox (race detector) (push) Successful in 3m56s
Test / Hpkg (push) Successful in 4m5s
Test / Hakurei (race detector) (push) Successful in 4m42s
Test / Hakurei (push) Successful in 2m9s
Test / Flake checks (push) Successful in 1m28s
This is useful for a user-facing representation other than JSON. This also gets rid of the ugly, outdated flags string builder in cmd/hakurei. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -2,6 +2,7 @@ package hst
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
@@ -38,9 +39,12 @@ const (
|
||||
ExitRequest = 254
|
||||
)
|
||||
|
||||
// Flags are options held by [ContainerConfig].
|
||||
type Flags uintptr
|
||||
|
||||
const (
|
||||
// FMultiarch unblocks syscalls required for multiarch to work on applicable targets.
|
||||
FMultiarch uintptr = 1 << iota
|
||||
FMultiarch Flags = 1 << iota
|
||||
|
||||
// FSeccompCompat changes emitted seccomp filter programs to be identical to that of Flatpak.
|
||||
FSeccompCompat
|
||||
@@ -74,6 +78,45 @@ const (
|
||||
FAll = fMax - 1
|
||||
)
|
||||
|
||||
func (flags Flags) String() string {
|
||||
switch flags {
|
||||
case FMultiarch:
|
||||
return "multiarch"
|
||||
case FSeccompCompat:
|
||||
return "compat"
|
||||
case FDevel:
|
||||
return "devel"
|
||||
case FUserns:
|
||||
return "userns"
|
||||
case FHostNet:
|
||||
return "net"
|
||||
case FHostAbstract:
|
||||
return "abstract"
|
||||
case FTty:
|
||||
return "tty"
|
||||
case FMapRealUID:
|
||||
return "mapuid"
|
||||
case FDevice:
|
||||
return "device"
|
||||
case FShareRuntime:
|
||||
return "runtime"
|
||||
case FShareTmpdir:
|
||||
return "tmpdir"
|
||||
|
||||
default:
|
||||
s := make([]string, 0, 1<<4)
|
||||
for f := Flags(1); f < fMax; f <<= 1 {
|
||||
if flags&f != 0 {
|
||||
s = append(s, f.String())
|
||||
}
|
||||
}
|
||||
if len(s) == 0 {
|
||||
return "none"
|
||||
}
|
||||
return strings.Join(s, ", ")
|
||||
}
|
||||
}
|
||||
|
||||
// ContainerConfig describes the container configuration to be applied to an underlying [container].
|
||||
type ContainerConfig struct {
|
||||
// Container UTS namespace hostname.
|
||||
@@ -106,7 +149,7 @@ type ContainerConfig struct {
|
||||
Args []string `json:"args"`
|
||||
|
||||
// Flags holds boolean options of [ContainerConfig].
|
||||
Flags uintptr `json:"-"`
|
||||
Flags Flags `json:"-"`
|
||||
}
|
||||
|
||||
// ContainerConfigF is [ContainerConfig] stripped of its methods.
|
||||
|
||||
@@ -3,6 +3,7 @@ package hst_test
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"math"
|
||||
"reflect"
|
||||
"syscall"
|
||||
"testing"
|
||||
@@ -10,6 +11,30 @@ import (
|
||||
"hakurei.app/hst"
|
||||
)
|
||||
|
||||
func TestFlagsString(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
flags hst.Flags
|
||||
want string
|
||||
}{
|
||||
{"none", 0, "none"},
|
||||
{"none high", hst.FAll + 1, "none"},
|
||||
{"all", hst.FAll, "multiarch, compat, devel, userns, net, abstract, tty, mapuid, device, runtime, tmpdir"},
|
||||
{"all high", math.MaxUint, "multiarch, compat, devel, userns, net, abstract, tty, mapuid, device, runtime, tmpdir"},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
if got := tc.flags.String(); got != tc.want {
|
||||
t.Errorf("String(%#b): %q, want %q", tc.flags, got, tc.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestContainerConfig(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user