| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- package permset
- import (
- "context"
- "testing"
- )
- const (
- TestPerm1 Perm = iota
- TestPerm2
- TestPerm3
- )
- func TestNew(t *testing.T) {
- var newtests = []struct {
- perms []Perm
- }{
- {[]Perm{TestPerm1}},
- {[]Perm{TestPerm1, TestPerm2}},
- {[]Perm{TestPerm3, TestPerm2}},
- {[]Perm{TestPerm2, TestPerm2}},
- {[]Perm{TestPerm3, TestPerm2, TestPerm3}},
- }
- for _, tt := range newtests {
- permset := New(tt.perms...)
- // See if perms within the permset checks out with the ones provided to the New().
- for _, perm := range tt.perms {
- if _, ok := permset.permset[perm]; !ok {
- t.Fatalf("perm should exist in the permset: %v", perm)
- }
- }
- // See if there are any extra perms in the permset that is not provided to the New().
- for perm := range permset.permset {
- var found bool
- for _, ttPerm := range tt.perms {
- if ttPerm == perm {
- found = true
- }
- }
- if !found {
- t.Fatalf("perm should not exist in the permset: %v", perm)
- }
- }
- }
- }
- func TestAdd(t *testing.T) {
- permset := New(TestPerm2)
- permset.Add(TestPerm3)
- if _, ok := permset.permset[TestPerm3]; !ok {
- t.Fatal("perm TestPerm3 should exist in the permset")
- }
- if _, ok := permset.permset[TestPerm2]; !ok {
- t.Fatal("perm TestPerm2 should exist in the permset")
- }
- }
- func TestRemove(t *testing.T) {
- // See if remove works OK.
- permset := New(TestPerm2, TestPerm3)
- permset.Remove(TestPerm3)
- if _, ok := permset.permset[TestPerm3]; ok {
- t.Fatal("perm TestPerm3 should not exist in the permset")
- }
- if _, ok := permset.permset[TestPerm2]; !ok {
- t.Fatal("perm TestPerm2 should exist in the permset")
- }
- // See if double remove breaks it.
- permset = New(TestPerm2, TestPerm3)
- permset.Remove(TestPerm3)
- permset.Remove(TestPerm3)
- if _, ok := permset.permset[TestPerm3]; ok {
- t.Fatal("perm TestPerm3 should not exist in the permset")
- }
- if _, ok := permset.permset[TestPerm2]; !ok {
- t.Fatal("perm TestPerm2 should exist in the permset")
- }
- }
- func TestPerms(t *testing.T) {
- permset := New(TestPerm2, TestPerm3)
- perms := permset.Perms()
- var found bool
- for _, perm := range perms {
- if perm == TestPerm2 {
- found = true
- }
- }
- if !found {
- t.Fatal("Perms() should return all the perms within the permset")
- }
- }
- func TestContains(t *testing.T) {
- permset := New(TestPerm2, TestPerm3)
- if !permset.Contains(TestPerm2) {
- t.Fatal("permset should contain TestPerm2")
- }
- if !permset.Contains(TestPerm3) {
- t.Fatal("permset should contain TestPerm3")
- }
- if permset.Contains(TestPerm1) {
- t.Fatal("permset should not contain TestPerm1")
- }
- }
- func TestContainsAll(t *testing.T) {
- permset := New(TestPerm2, TestPerm3)
- if !permset.ContainsAll(TestPerm2) {
- t.Fatal("permset should contain TestPerm2")
- }
- if !permset.ContainsAll(TestPerm3) {
- t.Fatal("permset should contain TestPerm3")
- }
- if permset.ContainsAll(TestPerm1) {
- t.Fatal("permset should not contain TestPerm1")
- }
- if !permset.ContainsAll(TestPerm2, TestPerm3) {
- t.Fatal("permset should contain TestPerm2 and TestPerm3")
- }
- if !permset.ContainsAll(TestPerm3, TestPerm2) {
- t.Fatal("permset should contain TestPerm2 and TestPerm3")
- }
- if permset.ContainsAll(TestPerm1, TestPerm2) {
- t.Fatal("permset should not contain TestPerm1 and TestPerm3")
- }
- }
- func TestContainsSome(t *testing.T) {
- permset := New(TestPerm2, TestPerm3)
- if !permset.ContainsSome(TestPerm2) {
- t.Fatal("permset should contain TestPerm2")
- }
- if !permset.ContainsSome(TestPerm1, TestPerm3) {
- t.Fatal("permset should contain TestPerm1 and TestPerm3")
- }
- if permset.ContainsSome(TestPerm1) {
- t.Fatal("permset should contain TestPerm1")
- }
- }
- func TestContainsNone(t *testing.T) {
- permset := New(TestPerm2, TestPerm3)
- if !permset.ContainsNone(TestPerm1) {
- t.Fatal("ContainsNone should return true")
- }
- if permset.ContainsNone(TestPerm2) {
- t.Fatal("ContainsNone should return false")
- }
- }
- func TestNewContext(t *testing.T) {
- permset := New(TestPerm2, TestPerm3)
- ctx := NewContext(context.Background(), permset)
- permsetFromCtx, ok := ctx.Value(permsetKey).(Permset)
- if !ok {
- t.Fatal("can't extract permset from ctx")
- }
- if !permset.ContainsAll(permsetFromCtx.Perms()...) {
- t.Fatal("permsets should match")
- }
- }
- func TestFromContext(t *testing.T) {
- permset := New(TestPerm2, TestPerm3)
- ctx := NewContext(context.Background(), permset)
- permsetFromCtx, err := FromContext(ctx)
- if err != nil {
- t.Fatalf("error is not expected here: %v", err)
- }
- if !permset.ContainsAll(permsetFromCtx.Perms()...) {
- t.Fatal("permsets should match")
- }
- }
|