package hostops import ( "context" "errors" "testing" "github.com/carlosframework/platform/internal/release" ) // TestClassifyPointerDigestMarkerIsExact: the account's pointer digest marker // (#253) is a reviewed non-app family, put and deleted; nothing else under // releases/ is. func TestClassifyPointerDigestMarkerIsExact(t *testing.T) { ctx := context.Background() key := release.PointerDigestsKey("bab") for _, c := range []struct { name string target MutationTarget }{ {"marker put", MutationTarget{Surface: "bucket", Method: "Put", Key: key, After: []byte(`{}`)}}, {"marker put over an existing one", MutationTarget{Surface: "bucket", Method: "Put", Key: key, ETag: "x", Before: []byte(`{}`), After: []byte(`{}`)}}, {"marker delete", MutationTarget{Surface: "bucket", Method: "Delete", Key: key}}, } { got, err := ClassifyMutation(ctx, nil, nil, c.target) if err != nil { t.Errorf("%s: %v", c.name, err) continue } if got.Family != "pointer-digest-marker" || got.NonApp == "" || len(got.Scopes) != 0 || got.MailGate { t.Errorf("%s: classified %+v, want non-app family pointer-digest-marker with no scopes", c.name, got) } } for _, c := range []struct { name string target MutationTarget }{ {"an invalid account", MutationTarget{Surface: "bucket", Method: "Put", Key: "releases/BAB!/pointer-digests", After: []byte(`{}`)}}, {"an empty account", MutationTarget{Surface: "bucket", Method: "Put", Key: "releases//pointer-digests", After: []byte(`{}`)}}, {"a fourth segment", MutationTarget{Surface: "bucket", Method: "Put", Key: key + "/x", After: []byte(`{}`)}}, {"another name under the account", MutationTarget{Surface: "bucket", Method: "Put", Key: "releases/bab/other", After: []byte(`{}`)}}, {"a lookalike name", MutationTarget{Surface: "bucket", Method: "Put", Key: key + ".json", After: []byte(`{}`)}}, {"the account prefix itself", MutationTarget{Surface: "bucket", Method: "Delete", Key: "releases/bab"}}, {"a delete-if-match", MutationTarget{Surface: "bucket", Method: "DeleteIfMatch", Key: key, ETag: "x"}}, } { if got, err := ClassifyMutation(ctx, nil, nil, c.target); !errors.Is(err, ErrUnclassified) { t.Errorf("%s: classified %+v, err %v; want ErrUnclassified", c.name, got, err) } } }