Skip to content
quarry Artifact [2f642520a1]
Login

Artifact [2f642520a1]

Artifact 2f642520a177bd233a68bf41dc8a5a88099d909980ab3aaea85d5b2e898cd6d0:


package oltp

import "testing"

// An account whose only token resolves to no push letter has no push
// credential, but its token still proves it: LetterlessSecrets answers
// that token's secret so a card signed with it can be told what is
// missing. A name that is not an account, and a disabled account, have
// nothing to answer.
func TestLetterlessSecretsAreTheTokensThatSignNoPush(t *testing.T) {
	db := tokenDB(t, "sandbox")
	if err := db.AddAccount("pat", "irrelevant to pushing", false); err != nil {
		t.Fatal(err)
	}
	if err := db.Grant("pat", "sandbox", Read); err != nil {
		t.Fatal(err)
	}
	if _, err := db.MintSyncToken("pat"); err != nil {
		t.Fatal(err)
	}
	if got := db.Secrets("sandbox", "pat"); len(got) != 0 {
		t.Fatalf("FAIL: a reader's token signs a push: %+v", got)
	}
	got := db.LetterlessSecrets("sandbox", "pat")
	if len(got) != 1 || got[0].CheckIn || got[0].Publish || got[0].Secret == "" {
		t.Fatalf("FAIL: the reader's token is not offered as letterless: %+v", got)
	}
	if got := db.LetterlessSecrets("sandbox", "nobody-here"); len(got) != 0 {
		t.Errorf("FAIL: an unknown name has credentials: %+v", got)
	}
	// An account that may push has its token in Secrets, not here.
	writerWithToken(t, db, "jan", "sandbox")
	if got := db.LetterlessSecrets("sandbox", "jan"); len(got) != 0 {
		t.Errorf("FAIL: a pushing token is offered as letterless: %+v", got)
	}
	if err := db.SetDisabled("pat", true); err != nil {
		t.Fatal(err)
	}
	if got := db.LetterlessSecrets("sandbox", "pat"); len(got) != 0 {
		t.Errorf("FAIL: a disabled account has credentials: %+v", got)
	}
	t.Log("ok")
}