Apply the plan's credential form only to an offer that declares a credential (issue 825)
mesh/merge-gate head a4e7f480b3b0 merged into trunk 219bedbdd2b3 beside mesh-catalog#337@d2992f81 +1 more — pass, with a note: builds mesh-sdk (+41 depende…
mesh/repo-check head a4e7f480b3b0 merged into trunk 219bedbdd2b3 beside mesh-catalog#337@d2992f81 +1 more — pass: its merge-check.sh passed, each part in i…
mesh/delivery delivered
mesh/delivery-group group feat/providers-after-switch-on delivered: every member is delivered
mesh/merge-gate head a4e7f480b3b0 merged into trunk 219bedbdd2b3 beside mesh-catalog#337@d2992f81 +1 more — pass, with a note: builds mesh-sdk (+41 depende…
mesh/repo-check head a4e7f480b3b0 merged into trunk 219bedbdd2b3 beside mesh-catalog#337@d2992f81 +1 more — pass: its merge-check.sh passed, each part in i…
mesh/delivery delivered
mesh/delivery-group group feat/providers-after-switch-on delivered: every member is delivered
This commit is contained in:
@@ -476,8 +476,11 @@ func (p *Provider) answer(ctx context.Context, e Entry, have []byte) Outcome {
|
|||||||
e.Values = values
|
e.Values = values
|
||||||
var credential []byte
|
var credential []byte
|
||||||
// The plan's form wins; the offer's is the default.
|
// The plan's form wins; the offer's is the default.
|
||||||
|
// An offer that declares no credential has none whatever the plan says: the controller writes "pair" for it.
|
||||||
form := e.CredentialForm
|
form := e.CredentialForm
|
||||||
if form == "" {
|
if offer.Credential == NoCredential {
|
||||||
|
form = ""
|
||||||
|
} else if form == "" {
|
||||||
form = map[CredentialForm]string{Shared: "shared", PerConsumer: "pair"}[offer.Credential]
|
form = map[CredentialForm]string{Shared: "shared", PerConsumer: "pair"}[offer.Credential]
|
||||||
}
|
}
|
||||||
switch form {
|
switch form {
|
||||||
|
|||||||
@@ -710,10 +710,6 @@ func TestThePlansCredentialFormWinsOverTheOffers(t *testing.T) {
|
|||||||
"pair/novox/postgres-database/ace/letta" || e.User != "mesh_ace_letta" {
|
"pair/novox/postgres-database/ace/letta" || e.User != "mesh_ace_letta" {
|
||||||
t.Fatalf("pair over shared: %+v", e)
|
t.Fatalf("pair over shared: %+v", e)
|
||||||
}
|
}
|
||||||
if e := run(NoCredential, map[string]string{"credential-form": "pair"}); e.VaultName !=
|
|
||||||
"pair/novox/postgres-database/ace/letta" {
|
|
||||||
t.Fatalf("pair over none: %+v", e)
|
|
||||||
}
|
|
||||||
for _, form := range []string{"issued", "given"} {
|
for _, form := range []string{"issued", "given"} {
|
||||||
if e := run(PerConsumer, map[string]string{"credential-form": form, "name": "main"}); e.VaultName !=
|
if e := run(PerConsumer, map[string]string{"credential-form": form, "name": "main"}); e.VaultName !=
|
||||||
"provision/novox/postgres-database/ace/letta" || e.User != "mesh_ace_letta" {
|
"provision/novox/postgres-database/ace/letta" || e.User != "mesh_ace_letta" {
|
||||||
@@ -784,3 +780,24 @@ func TestAFailedMakeIsSaidWithoutTheCredentialInAnyOfItsForms(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// An offer that declares no credential is answered with none whatever form the plan says (the controller writes
|
||||||
|
// "pair" for such an offer): no vault name, and the Vault is never asked, so a provider with no Vault works (issue 825,
|
||||||
|
// finding 4; issue 923).
|
||||||
|
func TestAnOfferWithNoCredentialIgnoresThePlansForm(t *testing.T) {
|
||||||
|
bus := newStandIn()
|
||||||
|
b := bind("route", "", "novox", "route-proxy")
|
||||||
|
b["credential-form"] = "pair"
|
||||||
|
assign(t, bus, "ace", "letta", b)
|
||||||
|
p := New(Options{Node: "novox", Module: "route-proxy", Bus: bus, Logf: func(string, ...any) {},
|
||||||
|
Offers: map[string]Offer{"route": {Credential: NoCredential}}})
|
||||||
|
out, err := p.Pass(context.Background())
|
||||||
|
if err != nil || len(out) != 1 || out[0].Status != Answered {
|
||||||
|
t.Fatalf("%v %+v", err, out)
|
||||||
|
}
|
||||||
|
var e Entry
|
||||||
|
if err := json.Unmarshal(bus.get(BucketOf("route-proxy"), "ace.letta.route"), &e); err != nil || e.VaultName != "" ||
|
||||||
|
e.User != "" {
|
||||||
|
t.Fatalf("%v %+v", err, e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user