111 lines
2.4 KiB
Go
111 lines
2.4 KiB
Go
|
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)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|