//go:build integration package process import ( "testing" "github.com/nats-io/nats.go/jetstream" ) // 1189/AC1: given the router's records bucket on a test bus holding a record under ., // when the process connection reads its module's ask of that id, then it gets the record's bytes and // revision by direct get; a deleted or purged key is said as absent; a missing key as absent. func TestAskReadsTheRoutersRecordOfItsOwnAsk(t *testing.T) { url, account := grantedSendProcess(t) _, adminJetStream := adminJS(t, url) kv, err := adminJetStream.CreateKeyValue(ctxFor(t), jetstream.KeyValueConfig{Bucket: "messenger_asks"}) if err != nil { t.Fatalf("the admin could not make the records bucket: %v", err) } rev, err := kv.Put(ctxFor(t), "mesh-mail.ask-1", []byte(`{"state":"decided"}`)) if err != nil { t.Fatal(err) } conn, err := Connect(account) if err != nil { t.Fatal(err) } defer conn.Close() e, err := conn.Ask("messenger_asks", "ask-1") if err != nil { t.Fatalf("reading an existing record: %v", err) } if e == nil || e.Revision != rev || string(e.Value) != `{"state":"decided"}` { t.Fatalf("read back %+v, want revision %d and {\"state\":\"decided\"}", e, rev) } if err := kv.Delete(ctxFor(t), "mesh-mail.ask-1"); err != nil { t.Fatal(err) } if e, err := conn.Ask("messenger_asks", "ask-1"); err != nil || e != nil { t.Fatalf("a deleted record: %+v, %v, want absent", e, err) } if _, err := kv.Create(ctxFor(t), "mesh-mail.ask-2", []byte(`{"state":"asked"}`)); err != nil { t.Fatal(err) } if err := kv.Purge(ctxFor(t), "mesh-mail.ask-2"); err != nil { t.Fatal(err) } if e, err := conn.Ask("messenger_asks", "ask-2"); err != nil || e != nil { t.Fatalf("a purged record: %+v, %v, want absent", e, err) } if e, err := conn.Ask("messenger_asks", "ask-missing"); err != nil || e != nil { t.Fatalf("a missing record: %+v, %v, want absent", e, err) } }