package accessctl import ( "dehub/sigcred" "reflect" "testing" ) func TestConditionSignatureSatisfied(t *testing.T) { tests := []struct { descr string cond ConditionSignature credAccountIDs []string err error }{ { descr: "no cred accounts", cond: ConditionSignature{ AnyAccount: true, Count: "1", }, err: ErrConditionSignatureUnsatisfied{ TargetNumAccounts: 1, NumAccounts: 0, }, }, { descr: "one cred account", cond: ConditionSignature{ AnyAccount: true, Count: "1", }, credAccountIDs: []string{"foo"}, }, { descr: "one matching cred account", cond: ConditionSignature{ AccountIDs: []string{"foo", "bar"}, Count: "1", }, credAccountIDs: []string{"foo"}, }, { descr: "no matching cred account", cond: ConditionSignature{ AccountIDs: []string{"foo", "bar"}, Count: "1", }, credAccountIDs: []string{"baz"}, err: ErrConditionSignatureUnsatisfied{ TargetNumAccounts: 1, NumAccounts: 0, }, }, { descr: "two matching cred accounts", cond: ConditionSignature{ AccountIDs: []string{"foo", "bar"}, Count: "2", }, credAccountIDs: []string{"foo", "bar"}, }, { descr: "one matching cred account, missing one", cond: ConditionSignature{ AccountIDs: []string{"foo", "bar"}, Count: "2", }, credAccountIDs: []string{"foo", "baz"}, err: ErrConditionSignatureUnsatisfied{ TargetNumAccounts: 2, NumAccounts: 1, }, }, { descr: "50 percent matching cred accounts", cond: ConditionSignature{ AccountIDs: []string{"foo", "bar", "baz"}, Count: "50%", }, credAccountIDs: []string{"foo", "bar"}, }, { descr: "not 50 percent matching cred accounts", cond: ConditionSignature{ AccountIDs: []string{"foo", "bar", "baz"}, Count: "50%", }, credAccountIDs: []string{"foo"}, err: ErrConditionSignatureUnsatisfied{ TargetNumAccounts: 2, NumAccounts: 1, }, }, } for _, test := range tests { t.Run(test.descr, func(t *testing.T) { creds := make([]sigcred.Credential, len(test.credAccountIDs)) for i := range test.credAccountIDs { creds[i].AccountID = test.credAccountIDs[i] } err := test.cond.Satisfied(creds) if !reflect.DeepEqual(err, test.err) { t.Fatalf("Satisfied returned %#v\nexpected %#v", err, test.err) } }) } }