55 lines
1.8 KiB
Go
55 lines
1.8 KiB
Go
// Copyright (c) 2026 Storm Dragon
|
|
// Authors: Storm Dragon, Angus Kola
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package atspi
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestFlatpakProcessInstanceBoundaries(t *testing.T) {
|
|
root := t.TempDir()
|
|
write := func(pid int, data string) {
|
|
t.Helper()
|
|
dir := filepath.Join(root, fmt.Sprint(pid), "root")
|
|
if err := os.MkdirAll(dir, 0700); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(dir, ".flatpak-info"), []byte(data), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
metadata := "[Application]\nname=org.example.App\n[Instance]\ninstance-id=123\n"
|
|
write(100, metadata)
|
|
for _, test := range []struct {
|
|
name, data string
|
|
want bool
|
|
}{
|
|
{"same instance", metadata, true},
|
|
{"other instance of same app", strings.ReplaceAll(metadata, "123", "456"), false},
|
|
{"other app", strings.ReplaceAll(metadata, "org.example.App", "org.example.Other"), false},
|
|
{"app ID alone", "[Application]\nname=org.example.App\n", false},
|
|
{"instance ID alone", "[Instance]\ninstance-id=123\n", false},
|
|
{"wrong section", "[Application]\nname=org.example.App\ninstance-id=123\n", false},
|
|
{"empty metadata", "", false},
|
|
{"malformed metadata", metadata + "broken", false},
|
|
{"duplicate identity", metadata + "instance-id=456\n", false},
|
|
{"oversized metadata", metadata + strings.Repeat("#", 65536), false},
|
|
} {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
write(200, test.data)
|
|
if got := sameFlatpakInstance(root, 100, 200); got != test.want {
|
|
t.Fatalf("same instance = %v; want %v", got, test.want)
|
|
}
|
|
})
|
|
}
|
|
if sameFlatpakInstance(root, 100, 300) || sameFlatpakInstance(root, 300, 400) || sameFlatpakInstance(root, 0, 0) {
|
|
t.Fatal("missing process or unknown identity matched")
|
|
}
|
|
}
|