mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-19 17:50:12 +00:00
feat(agentcompat): add SQLite hold scoped attribution
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
//go:build agentcompat && linux
|
||||
|
||||
package singleton
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSQLiteAttributionErrorsDoNotExposeDatabasePath(t *testing.T) {
|
||||
// Given
|
||||
databasePath := filepath.Join(t.TempDir(), "private-dashboard.sqlite")
|
||||
unsupportedDSN := "file:" + databasePath + "?mode=memory"
|
||||
missingJournal := filepath.Join(t.TempDir(), "missing-journal")
|
||||
|
||||
// When
|
||||
memoryDatabase, dsnErr := openSQLiteAttributionTestDB(unsupportedDSN)
|
||||
if dsnErr == nil {
|
||||
dsnErr = memoryDatabase.Ping()
|
||||
}
|
||||
if memoryDatabase != nil {
|
||||
t.Cleanup(func() {
|
||||
if closeErr := memoryDatabase.Close(); closeErr != nil {
|
||||
t.Error(closeErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
_, journalErr := sqliteAttributionOpenJournalDescriptor(missingJournal)
|
||||
|
||||
// Then
|
||||
if !errors.Is(dsnErr, ErrSQLiteAttributionUnsupportedDSN) {
|
||||
t.Fatal("file URI error does not wrap the typed unsupported DSN error")
|
||||
}
|
||||
if !errors.Is(journalErr, ErrSQLiteAttributionJournalIdentity) {
|
||||
t.Fatal("journal error does not wrap the typed journal identity error")
|
||||
}
|
||||
if strings.Contains(dsnErr.Error(), databasePath) || strings.Contains(dsnErr.Error(), unsupportedDSN) {
|
||||
t.Fatal("unsupported DSN error exposes its database path")
|
||||
}
|
||||
if strings.Contains(journalErr.Error(), missingJournal) {
|
||||
t.Fatal("journal identity error exposes its database path")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSQLiteAttributionAcceptsOnDiskFileURIAndRejectsInMemoryDSN(t *testing.T) {
|
||||
// Given
|
||||
resetSQLiteAttributionForTest()
|
||||
databasePath := filepath.Join(t.TempDir(), "dashboard.sqlite")
|
||||
|
||||
// When
|
||||
fileDatabase, fileErr := openSQLiteAttributionTestDB("file:" + databasePath)
|
||||
if fileDatabase != nil {
|
||||
t.Cleanup(func() {
|
||||
if closeErr := fileDatabase.Close(); closeErr != nil {
|
||||
t.Error(closeErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
if fileErr == nil {
|
||||
fileErr = fileDatabase.Ping()
|
||||
}
|
||||
memoryDatabase, memoryErr := openSQLiteAttributionTestDB(":memory:")
|
||||
if memoryDatabase != nil {
|
||||
t.Cleanup(func() {
|
||||
if closeErr := memoryDatabase.Close(); closeErr != nil {
|
||||
t.Error(closeErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
if memoryErr == nil {
|
||||
memoryErr = memoryDatabase.Ping()
|
||||
}
|
||||
|
||||
// Then
|
||||
if fileErr != nil {
|
||||
t.Fatal("file URI for an on-disk database was rejected")
|
||||
}
|
||||
if !errors.Is(memoryErr, ErrSQLiteAttributionUnsupportedDSN) {
|
||||
t.Fatal("in-memory DSN does not return the typed unsupported DSN error")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user