blob: b4f44f80fa20908839cc1d1ecc22aadfcd9cdcab [file] [log] [blame]
package caveat_test
import (
"net"
"testing"
"time"
"veyron/security/caveat"
"veyron2/naming"
"veyron2/security"
)
// endpoint implements naming.Endpoint
type endpoint struct {
naming.Endpoint
addr net.Addr
}
func (e endpoint) Addr() net.Addr { return e.addr }
type context struct {
local, remote security.PublicID
localEndpoint, remoteEndpoint endpoint
method string
}
func (c *context) Method() string { return c.method }
func (c *context) Name() string { return "some_name" }
func (c *context) Suffix() string { return "some_suffix" }
func (c *context) Label() security.Label { return security.AdminLabel }
func (c *context) CaveatDischarges() security.CaveatDischargeMap { return nil }
func (c *context) LocalID() security.PublicID { return c.local }
func (c *context) RemoteID() security.PublicID { return c.remote }
func (c *context) LocalEndpoint() naming.Endpoint { return &c.localEndpoint }
func (c *context) RemoteEndpoint() naming.Endpoint { return &c.remoteEndpoint }
func TestCaveats(t *testing.T) {
var (
alice = security.FakePublicID("alice")
bob = security.FakePublicID("bob")
)
now := time.Now()
tests := []struct {
c security.Caveat
ok bool
}{
{&caveat.Expiry{IssueTime: now, ExpiryTime: now.Add(time.Hour)}, true},
{&caveat.Expiry{IssueTime: now.Add(-1 * time.Hour), ExpiryTime: now.Add(-1 * time.Minute)}, false},
{caveat.MethodRestriction(nil), false},
{caveat.NetworkType("udp"), false},
{caveat.NetworkType("tcp"), true},
{caveat.MethodRestriction{"Pause", "Play"}, true},
{caveat.MethodRestriction{"List"}, false},
{caveat.PeerIdentity(nil), false},
{caveat.PeerIdentity{"fake/alice"}, true},
{caveat.PeerIdentity{"fake/carol"}, false},
{caveat.PeerIdentity{"fake/alice", "fake/carol"}, true},
}
ctx := &context{local: alice, remote: bob, method: "Play", remoteEndpoint: endpoint{addr: &net.TCPAddr{}}}
for _, test := range tests {
if err := test.c.Validate(ctx); test.ok != (err == nil) {
t.Errorf("Caveat:%#v. Got error:%v, want error:%v", test.c, err, test.ok)
}
}
}