You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.1 KiB

package mock
import (
"context"
"net"
"os"
"path/filepath"
"tera-clone/services/tera-api/internal/domain"
"tera-clone/services/tera-api/internal/logservice"
"tera-clone/services/tera-api/internal/logstorage"
"testing"
)
func TestClearLinkLogsInvalidatesOtherClientCaches(t *testing.T) {
journal, err := logstorage.Open(logstorage.Options{Root: t.TempDir(), Clock: fixedClock})
if err != nil {
t.Fatal(err)
}
dir, err := os.MkdirTemp("", "link-clear-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
socket := filepath.Join(dir, "log.sock")
listener, err := net.Listen("unix", socket)
if err != nil {
t.Fatal(err)
}
done := make(chan error, 1)
go func() { done <- (logservice.Server{Store: journal}).Serve(listener) }()
defer func() { listener.Close(); <-done }()
options := StoreOptions{LogJournal: logservice.NewClient(socket)}
first, err := NewStoreWithOptions(fixedClock, options)
if err != nil {
t.Fatal(err)
}
defer first.Close()
second, err := NewStoreWithOptions(fixedClock, options)
if err != nil {
t.Fatal(err)
}
defer second.Close()
event := domain.LinkLogEvent{Timestamp: fixedClock(), Kind: "serial", Resource: "CH01", State: "down", PreviousState: "up", Signal: "dcd", EventType: "transition", Message: "test down"}
if _, err := journal.Append(logstorage.ClassLink, event.Timestamp, event); err != nil {
t.Fatal(err)
}
ctx := context.Background()
if rows, err := second.LinkLogEvents(ctx, domain.LinkLogFilter{}); err != nil || len(rows) != 1 {
t.Fatalf("prime %v %v", rows, err)
}
if result, err := first.ClearLinkLogs(ctx); err != nil || result.Deleted != 1 {
t.Fatalf("clear %v %v", result, err)
}
if rows, err := second.LinkLogEvents(ctx, domain.LinkLogFilter{}); err != nil || len(rows) != 0 {
t.Fatalf("stale %v %v", rows, err)
}
event.State = "up"
event.PreviousState = "down"
if _, err := journal.Append(logstorage.ClassLink, event.Timestamp, event); err != nil {
t.Fatal(err)
}
if rows, err := second.LinkLogEvents(ctx, domain.LinkLogFilter{}); err != nil || len(rows) != 1 {
t.Fatalf("new %v %v", rows, err)
}
}