mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-18 08:36:13 +00:00
Mirrors the .md/.txt sweep across all tracked _test.go, testdata XML,
and .http integration files. Test files are self-contained (producer
+ assertion in the same file), so the matched-pair swap stays green
under `go test ./...`.
Mapping applied:
192.168.178.[0-9]+ → 192.0.2.[same]
192.168.1.[0-9]+ → 192.0.2.[same]
Sound Machinechen → Living Room SoundTouch
A Sound Machine → Kitchen SoundTouch
A81B6A536A98 + case/separator variants → AABBCCDDEEFF (etc.)
A81B6A849D99 → AABBCCDDEE01
A81B6A849D88 → AABBCCDDEE03
A81B6A536A09 → AABBCCDDEE04
884AEAEEBD27 → AABBCCDDEE02
3230304 → 1000001
9569497 → 1000002
Two semantic fixes alongside the bulk swap:
- pkg/service/zeroconf/zeroconf_test.go: the "private 192" and
"strips query" cases pin acceptance of RFC-1918 192.168/16. They
must use a real 192.168 value; doc-range IPs would (correctly) be
rejected by validateZcBaseURL. Switched to 192.168.10.10 — generic
enough not to match any home LAN default, real enough for the
validator. Added a comment explaining why this single test still
carries a 192.168 literal.
- pkg/service/setup/setup_test.go: TestTestDNSRedirection mocks the
device's `od -An -tu1` byte output, which is space-separated
octets ("192 168 1 100"). My sed only matched the dot-separated
form, so the mock was returning the old IP while the test
assertions had moved to the doc range. Updated to " 192 0 2 100".
go build ./... clean. go test ./... clean (only TestDocsConsistency
remains failing, which is a pre-existing/untracked-file issue).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package datastore
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestDNSDiscoveryPersistence(t *testing.T) {
|
|
tempDir, err := os.MkdirTemp("", "datastore-dns-test")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create temp dir: %v", err)
|
|
}
|
|
defer os.RemoveAll(tempDir)
|
|
|
|
ds := NewDataStore(tempDir)
|
|
|
|
now := time.Now().Round(time.Second)
|
|
discoveries := []DNSDiscoveryEntry{
|
|
{
|
|
Hostname: "api.bose.com",
|
|
FirstSeen: now.Add(-1 * time.Hour),
|
|
LastSeen: now,
|
|
QueryCount: 10,
|
|
IsBoseService: true,
|
|
IsIntercepted: true,
|
|
RemoteAddr: "192.0.2.100",
|
|
},
|
|
{
|
|
Hostname: "google.com",
|
|
FirstSeen: now.Add(-2 * time.Hour),
|
|
LastSeen: now.Add(-1 * time.Hour),
|
|
QueryCount: 5,
|
|
IsBoseService: false,
|
|
IsIntercepted: false,
|
|
RemoteAddr: "192.0.2.101",
|
|
},
|
|
}
|
|
|
|
// Test Save
|
|
err = ds.SaveDNSDiscoveries(discoveries)
|
|
if err != nil {
|
|
t.Fatalf("SaveDNSDiscoveries failed: %v", err)
|
|
}
|
|
|
|
// Test Load
|
|
loaded, err := ds.LoadDNSDiscoveries()
|
|
if err != nil {
|
|
t.Fatalf("LoadDNSDiscoveries failed: %v", err)
|
|
}
|
|
|
|
if len(loaded) != 2 {
|
|
t.Errorf("Expected 2 discoveries, got %d", len(loaded))
|
|
}
|
|
|
|
// Check if sorted by LastSeen (SaveDNSDiscoveries sorts them)
|
|
if loaded[0].Hostname != "api.bose.com" {
|
|
t.Errorf("Expected api.bose.com to be first, got %s", loaded[0].Hostname)
|
|
}
|
|
|
|
// Test Clear
|
|
err = ds.ClearDNSDiscoveries()
|
|
if err != nil {
|
|
t.Fatalf("ClearDNSDiscoveries failed: %v", err)
|
|
}
|
|
|
|
loadedAfterClear, err := ds.LoadDNSDiscoveries()
|
|
if err != nil {
|
|
t.Fatalf("LoadDNSDiscoveries after clear failed: %v", err)
|
|
}
|
|
|
|
if len(loadedAfterClear) != 0 {
|
|
t.Errorf("Expected 0 discoveries after clear, got %d", len(loadedAfterClear))
|
|
}
|
|
}
|