package acl

import (
	"bytes"
	"reflect"
	"testing"

	"veyron.io/veyron/veyron2/security"
)

func TestInclude(t *testing.T) {
	acl := ACL{
		In:    []security.BlessingPattern{"alice", "alice/friend/...", "bob/family/..."},
		NotIn: []string{"alice/friend/carol", "bob/family/mallory"},
	}
	type V []string // shorthand
	tests := []struct {
		Blessings []string
		Want      bool
	}{
		{nil, false}, // No blessings presented, cannot access
		{V{}, false},
		{V{"alice"}, true},
		{V{"bob"}, true},
		{V{"carol"}, false},
		{V{"alice/colleague"}, false},
		{V{"alice", "carol/friend"}, true}, // Presenting one blessing that grants access is sufficient
		{V{"alice/friend/bob"}, true},
		{V{"alice/friend/carol"}, false},        // alice/friend/carol is blacklisted
		{V{"alice/friend/carol/family"}, false}, // alice/friend/carol is blacklisted, thus her delegates must be too.
		{V{"alice/friend/bob", "alice/friend/carol"}, true},
		{V{"bob/family/eve", "bob/family/mallory"}, true},
		{V{"bob/family/mallory", "alice/friend/carol"}, false},
	}
	for _, test := range tests {
		if got, want := acl.Includes(test.Blessings...), test.Want; got != want {
			t.Errorf("Includes(%v): Got %v, want %v", test.Blessings, got, want)
		}
	}
}

func TestOpenACL(t *testing.T) {
	acl := ACL{In: []security.BlessingPattern{security.AllPrincipals}}
	if !acl.Includes() {
		t.Errorf("OpenACL should allow principals that present no blessings")
	}
	if !acl.Includes("frank") {
		t.Errorf("OpenACL should allow principals that present any blessings")
	}
}

func TestTaggedACLMapSerialization(t *testing.T) {
	obj := TaggedACLMap{
		"R": ACL{
			In:    []security.BlessingPattern{"foo/...", "bar/..."},
			NotIn: []string{"bar/baz"},
		},
		"W": ACL{
			In:    []security.BlessingPattern{"foo/...", "bar"},
			NotIn: []string{"foo/bar", "foo/baz/boz"},
		},
	}
	txt := `
{
	"R": {
		"In":["foo/...","bar/..."],
		"NotIn":["bar/baz"]
	},
	"W": {
		"In":["foo/...","bar"],
		"NotIn":["foo/bar","foo/baz/boz"]
	}
}
`
	if got, err := ReadTaggedACLMap(bytes.NewBufferString(txt)); err != nil || !reflect.DeepEqual(got, obj) {
		t.Errorf("Got error %v, TaggedACLMap: %v, want %v", err, got, obj)
	}
	// And round-trip (don't compare with 'txt' because indentation/spacing might differ).
	var buf bytes.Buffer
	if err := obj.WriteTo(&buf); err != nil {
		t.Fatal(err)
	}
	if got, err := ReadTaggedACLMap(&buf); err != nil || !reflect.DeepEqual(got, obj) {
		t.Errorf("Got error %v, TaggedACLMap: %v, want %v", err, got, obj)
	}
}
