restructure to go structure
This commit is contained in:
111
cmd/plt-build/src/test/kotlin/HakureiDSLTest.kt
Normal file
111
cmd/plt-build/src/test/kotlin/HakureiDSLTest.kt
Normal file
@@ -0,0 +1,111 @@
|
||||
import moe.rosa.planterette.dsl.*
|
||||
import moe.rosa.planterette.dsl.DSLEnablements.*
|
||||
import kotlin.test.*
|
||||
|
||||
class HakureiDSLTest {
|
||||
companion object {
|
||||
val HAKUREI_DSL_TEST = planterette {
|
||||
hakurei("org.chromium.Chromium") {
|
||||
|
||||
enable(Wayland, DBus, Pulse)
|
||||
dbus {
|
||||
session {
|
||||
talk("org.freedesktop.Notifications",
|
||||
"org.freedesktop.FileManager1",
|
||||
"org.freedesktop.ScreenSaver",
|
||||
"org.freedesktop.secrets",
|
||||
"org.kde.kwalletd5",
|
||||
"org.kde.kwalletd6",
|
||||
"org.gnome.SessionManager")
|
||||
own("org.chromium.Chromium.*",
|
||||
"org.mpris.MediaPlayer2.org.chromium.Chromium.*",
|
||||
"org.mpris.MediaPlayer2.chromium.*")
|
||||
call("org.freedesktop.portal.*" to "*")
|
||||
broadcast("org.freedesktop.portal.*" to "@/org/freedesktop/portal/*")
|
||||
filter()
|
||||
}
|
||||
system {
|
||||
talk("org.bluez",
|
||||
"org.freedesktop.Avahi",
|
||||
"org.freedesktop.UPower")
|
||||
filter()
|
||||
}
|
||||
}
|
||||
|
||||
extraPerms(
|
||||
perm("/var/lib/hakurei/u0") {
|
||||
ensure()
|
||||
execute()
|
||||
},
|
||||
perm("/var/lib/hakurei/u0/org.chromium.Chromium", rwx = "rwx")
|
||||
)
|
||||
identity(9)
|
||||
groups("video",
|
||||
"dialout",
|
||||
"plugdev")
|
||||
container {
|
||||
hostname("localhost")
|
||||
noTimeout()
|
||||
seccompCompat()
|
||||
devel()
|
||||
userns()
|
||||
hostNet()
|
||||
hostAbstract()
|
||||
tty()
|
||||
multiarch()
|
||||
env("GOOGLE_API_KEY" to "AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY",
|
||||
"GOOGLE_DEFAULT_CLIENT_ID" to "77185425430.apps.googleusercontent.com",
|
||||
"GOOGLE_DEFAULT_CLIENT_SECRET" to "OTJgUOQcT7lO7GsGZq2G4IlT")
|
||||
mapRealUid()
|
||||
device()
|
||||
executable("/run/current-system/sw/bin/chromium",
|
||||
"chromium",
|
||||
"--ignore-gpu-blocklist",
|
||||
"--disable-smooth-scrolling",
|
||||
"--enable-features=UseOzonePlatform",
|
||||
"--ozone-platform=wayland"
|
||||
)
|
||||
username("chronos")
|
||||
shell("/run/current-system/sw/bin/zsh")
|
||||
home("/data/data/org.chromium.Chromium")
|
||||
filesystem {
|
||||
bind("/var/lib/hakurei/base/org.debian" to "/") {
|
||||
write()
|
||||
special()
|
||||
}
|
||||
bind("/etc/" to "/etc/") {
|
||||
special()
|
||||
}
|
||||
ephemeral("/tmp/") {
|
||||
write()
|
||||
perm(493)
|
||||
}
|
||||
overlay("/nix/store") {
|
||||
lower("/var/lib/hakurei/base/org.nixos/ro-store")
|
||||
upper("/var/lib/hakurei/nix/u0/org.chromium.Chromium/rw-store/upper")
|
||||
work("/var/lib/hakurei/nix/u0/org.chromium.Chromium/rw-store/work")
|
||||
}
|
||||
link("/run/current-system") {
|
||||
dereference()
|
||||
}
|
||||
link("/run/opengl-driver") {
|
||||
dereference()
|
||||
}
|
||||
bind("/var/lib/hakurei/u0/org.chromium.Chromium" to "/data/data/org.chromium.Chromium") {
|
||||
write()
|
||||
ensure()
|
||||
}
|
||||
bind("/dev/dri") {
|
||||
device()
|
||||
optional()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@Test
|
||||
fun hakureiDSLTest() {
|
||||
assertEquals(HakureiTest.TEMPLATE_DATA, HAKUREI_DSL_TEST.hakurei)
|
||||
}
|
||||
}
|
||||
194
cmd/plt-build/src/test/kotlin/HakureiTest.kt
Normal file
194
cmd/plt-build/src/test/kotlin/HakureiTest.kt
Normal file
@@ -0,0 +1,194 @@
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.json.Json
|
||||
import moe.rosa.planterette.hakurei.*
|
||||
import org.junit.jupiter.api.assertDoesNotThrow
|
||||
import kotlin.test.*
|
||||
|
||||
class HakureiTest {
|
||||
companion object {
|
||||
val TEMPLATE_DATA = HakureiConfig(
|
||||
id = "org.chromium.Chromium",
|
||||
|
||||
enablements = Enablements(
|
||||
wayland = true,
|
||||
dbus = true,
|
||||
pulse = true
|
||||
),
|
||||
sessionBus = DBusConfig(
|
||||
see = null,
|
||||
talk = listOf(
|
||||
"org.freedesktop.Notifications",
|
||||
"org.freedesktop.FileManager1",
|
||||
"org.freedesktop.ScreenSaver",
|
||||
"org.freedesktop.secrets",
|
||||
"org.kde.kwalletd5",
|
||||
"org.kde.kwalletd6",
|
||||
"org.gnome.SessionManager"
|
||||
),
|
||||
own = listOf(
|
||||
"org.chromium.Chromium.*",
|
||||
"org.mpris.MediaPlayer2.org.chromium.Chromium.*",
|
||||
"org.mpris.MediaPlayer2.chromium.*"
|
||||
),
|
||||
call = mapOf(
|
||||
"org.freedesktop.portal.*" to "*"
|
||||
),
|
||||
broadcast = mapOf(
|
||||
"org.freedesktop.portal.*" to "@/org/freedesktop/portal/*"
|
||||
),
|
||||
filter = true
|
||||
),
|
||||
systemBus = DBusConfig(
|
||||
see = null,
|
||||
talk = listOf(
|
||||
"org.bluez",
|
||||
"org.freedesktop.Avahi",
|
||||
"org.freedesktop.UPower"
|
||||
),
|
||||
own = null,
|
||||
call = null,
|
||||
broadcast = null,
|
||||
filter = true
|
||||
),
|
||||
|
||||
extraPerms = listOf(
|
||||
ExtraPermsConfig(
|
||||
ensure = true,
|
||||
path = AbsolutePath("/var/lib/hakurei/u0"),
|
||||
read = null,
|
||||
write = null,
|
||||
execute = true,
|
||||
),
|
||||
ExtraPermsConfig(
|
||||
ensure = null,
|
||||
path = AbsolutePath("/var/lib/hakurei/u0/org.chromium.Chromium"),
|
||||
read = true,
|
||||
write = true,
|
||||
execute = true,
|
||||
),
|
||||
),
|
||||
identity = 9,
|
||||
groups = listOf(
|
||||
"video",
|
||||
"dialout",
|
||||
"plugdev"
|
||||
),
|
||||
container = ContainerConfig(
|
||||
hostname = "localhost",
|
||||
waitDelay = -1,
|
||||
seccompCompat = true,
|
||||
devel = true,
|
||||
userns = true,
|
||||
hostNet = true,
|
||||
hostAbstract = true,
|
||||
tty = true,
|
||||
multiarch = true,
|
||||
env = mapOf(
|
||||
"GOOGLE_API_KEY" to "AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY",
|
||||
"GOOGLE_DEFAULT_CLIENT_ID" to "77185425430.apps.googleusercontent.com",
|
||||
"GOOGLE_DEFAULT_CLIENT_SECRET" to "OTJgUOQcT7lO7GsGZq2G4IlT"
|
||||
),
|
||||
mapRealUid = true,
|
||||
device = true,
|
||||
filesystem = listOf(
|
||||
FSBind(
|
||||
target = AbsolutePath("/"),
|
||||
source = AbsolutePath("/var/lib/hakurei/base/org.debian"),
|
||||
write = true,
|
||||
special = true,
|
||||
),
|
||||
FSBind(
|
||||
target = AbsolutePath("/etc/"),
|
||||
source = AbsolutePath("/etc/"),
|
||||
special = true,
|
||||
),
|
||||
FSEphemeral(
|
||||
target = AbsolutePath("/tmp/"),
|
||||
write = true,
|
||||
perm = 493
|
||||
),
|
||||
FSOverlay(
|
||||
target = AbsolutePath("/nix/store"),
|
||||
lower = listOf(
|
||||
AbsolutePath("/var/lib/hakurei/base/org.nixos/ro-store")
|
||||
),
|
||||
upper = AbsolutePath("/var/lib/hakurei/nix/u0/org.chromium.Chromium/rw-store/upper"),
|
||||
work = AbsolutePath("/var/lib/hakurei/nix/u0/org.chromium.Chromium/rw-store/work")
|
||||
),
|
||||
FSLink(
|
||||
target = AbsolutePath("/run/current-system"),
|
||||
linkname = "/run/current-system",
|
||||
dereference = true
|
||||
),
|
||||
FSLink(
|
||||
target = AbsolutePath("/run/opengl-driver"),
|
||||
linkname = "/run/opengl-driver",
|
||||
dereference = true
|
||||
),
|
||||
FSBind(
|
||||
target = AbsolutePath("/data/data/org.chromium.Chromium"),
|
||||
source = AbsolutePath("/var/lib/hakurei/u0/org.chromium.Chromium"),
|
||||
write = true,
|
||||
ensure = true,
|
||||
),
|
||||
FSBind(
|
||||
source = AbsolutePath("/dev/dri"),
|
||||
device = true,
|
||||
optional = true
|
||||
)
|
||||
),
|
||||
|
||||
username = "chronos",
|
||||
shell = AbsolutePath("/run/current-system/sw/bin/zsh"),
|
||||
home = AbsolutePath("/data/data/org.chromium.Chromium"),
|
||||
path = AbsolutePath("/run/current-system/sw/bin/chromium"),
|
||||
args = listOf(
|
||||
"chromium",
|
||||
"--ignore-gpu-blocklist",
|
||||
"--disable-smooth-scrolling",
|
||||
"--enable-features=UseOzonePlatform",
|
||||
"--ozone-platform=wayland"
|
||||
),
|
||||
)
|
||||
)
|
||||
val TEMPLATE_JSON = ProcessBuilder("hakurei", "template")
|
||||
.start()
|
||||
.inputStream
|
||||
.readAllBytes()
|
||||
.toString(Charsets.UTF_8)
|
||||
val format = Json {
|
||||
prettyPrint = true
|
||||
ignoreUnknownKeys = true
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@Test
|
||||
fun deserializeTest() {
|
||||
|
||||
println(TEMPLATE_JSON)
|
||||
val want = format.decodeFromString<HakureiConfig>(TEMPLATE_JSON)
|
||||
assertEquals(TEMPLATE_DATA, want)
|
||||
}
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@Test
|
||||
fun serializeTest() {
|
||||
val encoded = format.encodeToString(TEMPLATE_DATA)
|
||||
val decoded = format.decodeFromString<HakureiConfig>(encoded)
|
||||
assertEquals(TEMPLATE_DATA, decoded)
|
||||
}
|
||||
@Test
|
||||
fun absolutePathTest() {
|
||||
assertDoesNotThrow {
|
||||
AbsolutePath("/test/absolutepath")
|
||||
}
|
||||
assertFailsWith(AbsolutePathException::class) {
|
||||
AbsolutePath("./../../../../")
|
||||
}
|
||||
assertEquals(AbsolutePath("/test/absolutepath"), AbsolutePath("/test/") + "absolutepath")
|
||||
}
|
||||
@Test
|
||||
fun extraPermsTest() {
|
||||
assertIs<String>(TEMPLATE_DATA.extraPerms.toString())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user