mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
117 lines
2.8 KiB
Go
117 lines
2.8 KiB
Go
package clientid
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolveKeepsExplicitID(t *testing.T) {
|
|
id, persisted, err := Resolve("explicit", nil)
|
|
if err != nil || id != "explicit" || !persisted {
|
|
t.Fatalf("Resolve() = %q, %v, %v", id, persisted, err)
|
|
}
|
|
}
|
|
|
|
func TestResolveReadsFirstValidFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
broken := filepath.Join(dir, "broken.json")
|
|
good := filepath.Join(dir, fileName)
|
|
if err := os.WriteFile(broken, []byte("{not json"), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(good, []byte(`{"client_id":"stored"}`), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
id, persisted, err := Resolve("", []string{broken, good})
|
|
if err != nil || id != "stored" || !persisted {
|
|
t.Fatalf("Resolve() = %q, %v, %v", id, persisted, err)
|
|
}
|
|
}
|
|
|
|
func TestResolveOverwritesFileWithEmptyID(t *testing.T) {
|
|
empty := filepath.Join(t.TempDir(), fileName)
|
|
if err := os.WriteFile(empty, []byte(`{"client_id":""}`), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
id, persisted, err := Resolve("", []string{empty})
|
|
if err != nil || !persisted {
|
|
t.Fatalf("Resolve() = %q, %v, %v", id, persisted, err)
|
|
}
|
|
if len(id) != 32 {
|
|
t.Fatalf("generated id = %q, want 32 hex chars", id)
|
|
}
|
|
assertStoredID(t, empty, id)
|
|
}
|
|
|
|
func TestResolveCreatesMissingDirectory(t *testing.T) {
|
|
target := filepath.Join(t.TempDir(), "nested", "dir", fileName)
|
|
|
|
id, persisted, err := Resolve("", []string{target})
|
|
if err != nil || !persisted {
|
|
t.Fatalf("Resolve() = %q, %v, %v", id, persisted, err)
|
|
}
|
|
assertStoredID(t, target, id)
|
|
}
|
|
|
|
func assertStoredID(t *testing.T, path, want string) {
|
|
t.Helper()
|
|
b, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatalf("id not persisted: %v", err)
|
|
}
|
|
var f fileFormat
|
|
if json.Unmarshal(b, &f) != nil || f.ClientID != want {
|
|
t.Fatalf("persisted file = %s, want client_id %q", b, want)
|
|
}
|
|
}
|
|
|
|
func TestResolveGeneratedIDIsStableAcrossCalls(t *testing.T) {
|
|
paths := []string{filepath.Join(t.TempDir(), fileName)}
|
|
|
|
first, _, err := Resolve("", paths)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second, _, err := Resolve("", paths)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if first != second {
|
|
t.Fatalf("id rotated between calls: %q != %q", first, second)
|
|
}
|
|
}
|
|
|
|
func TestResolveReportsUnpersistedID(t *testing.T) {
|
|
id, persisted, err := Resolve("", nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if persisted {
|
|
t.Fatal("persisted = true without any writable path")
|
|
}
|
|
if len(id) != 32 {
|
|
t.Fatalf("generated id = %q, want 32 hex chars", id)
|
|
}
|
|
}
|
|
|
|
func TestDefaultPathsAreUniqueAndNamed(t *testing.T) {
|
|
paths := DefaultPaths()
|
|
if len(paths) == 0 {
|
|
t.Fatal("DefaultPaths() is empty")
|
|
}
|
|
seen := map[string]bool{}
|
|
for _, p := range paths {
|
|
if filepath.Base(p) != fileName {
|
|
t.Fatalf("path %q does not end with %q", p, fileName)
|
|
}
|
|
if seen[p] {
|
|
t.Fatalf("duplicate path %q", p)
|
|
}
|
|
seen[p] = true
|
|
}
|
|
}
|