Something went wrong. Try again.
An ATProto Powered Reputation Network
Something went wrong. Try again.
2.5 kB · 65 lines
Go
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566package storage
import ( "context" "database/sql" "errors" "path/filepath" "testing" "time"
"provenance/internal/domain")
func TestSoftMigration(t *testing.T) { path := filepath.Join(t.TempDir(), "version4.db") conn, err := sql.Open(sqliteDriver, path) if err != nil { t.Fatal(err) } if _, err := conn.Exec("CREATE TABLE participants(did TEXT PRIMARY KEY, threshold REAL NOT NULL DEFAULT 1, synced_at TEXT NOT NULL DEFAULT '', bootstrap_us INTEGER NOT NULL DEFAULT 0, active INTEGER NOT NULL DEFAULT 1, account_us INTEGER NOT NULL DEFAULT 0); CREATE TABLE vouches(author TEXT NOT NULL, subject TEXT NOT NULL, tag TEXT NOT NULL, score INTEGER NOT NULL, created_at TEXT NOT NULL, record_key TEXT NOT NULL, comment TEXT NOT NULL DEFAULT '', PRIMARY KEY(author,subject,tag));"); err != nil { t.Fatal(err) } if _, err := conn.Exec(migration4); err != nil { t.Fatal(err) } const author = "did:plc:a" const subject = "did:plc:b" key := domain.RecordKey(subject, "") if _, err := conn.Exec("INSERT INTO participants(did) VALUES (?)", author); err != nil { t.Fatal(err) } if _, err := conn.Exec("INSERT INTO vouches(author,subject,tag,score,created_at,record_key,comment) VALUES (?,?,'',2,'',?,'reference')", author, subject, key); err != nil { t.Fatal(err) } now := time.UnixMicro(1000) if _, err := conn.Exec("INSERT INTO trust_cache(cache_key,result,expires_us) VALUES ('legacy','{\"status\":\"calculated\",\"score\":2}',?)", now.Add(time.Hour).UnixMicro()); err != nil { t.Fatal(err) } if _, err := conn.Exec("INSERT INTO trust_dependencies(cache_key,author,record_key) VALUES ('legacy',?,?)", author, key); err != nil { t.Fatal(err) } if _, err := conn.Exec("PRAGMA user_version=4"); err != nil { t.Fatal(err) } conn.Close() s, err := OpenWithSoft(path, domain.SoftParticipants) if err != nil { t.Fatal(err) } defer s.Close() ctx := context.Background() graph, err := s.Graph(ctx, "", domain.Default, 10) if err != nil || len(graph) != 1 || graph[0].Source != domain.Collection || graph[0].Comment != "reference" { t.Fatalf("migration: %+v %v", graph, err) } if _, err := s.CachedTrust(ctx, "legacy", now); err != nil { t.Fatalf("migration lost cache: %v", err) } if err := s.Apply(ctx, "stream", domain.Change{Kind: domain.RecordChange, DID: author, RecordKey: key, TimeUS: 100}); err != nil { t.Fatal(err) } if _, err := s.CachedTrust(ctx, "legacy", now); !errors.Is(err, sql.ErrNoRows) { t.Fatalf("legacy dependency not invalidated: %v", err) }}