blob: f2edf84c79675c5d8e464e3feef018ce366e9cf7 [file] [log] [blame]
package flag
import (
"bytes"
"flag"
"fmt"
"io"
"os"
"reflect"
"testing"
"v.io/core/veyron2/security"
"v.io/core/veyron2/services/security/access"
"v.io/core/veyron/lib/modules"
"v.io/core/veyron/lib/testutil"
tsecurity "v.io/core/veyron/lib/testutil/security"
)
func TestHelperProcess(t *testing.T) {
modules.DispatchInTest()
}
var (
acl1 = access.TaggedACLMap{}
acl2 = access.TaggedACLMap{
string(access.Read): access.ACL{
In: []security.BlessingPattern{"veyron/alice", "veyron/bob"},
},
string(access.Write): access.ACL{
In: []security.BlessingPattern{"veyron/alice"},
},
}
expectedAuthorizer = map[string]security.Authorizer{
"empty": auth(access.TaggedACLAuthorizer(acl1, access.TypicalTagType())),
"acl2": auth(access.TaggedACLAuthorizer(acl2, access.TypicalTagType())),
}
)
func init() {
testutil.Init()
modules.RegisterChild("tamFromFlag", "", tamFromFlag)
}
func auth(a security.Authorizer, err error) security.Authorizer {
if err != nil {
panic(err)
}
return a
}
func tamFromFlag(stdin io.Reader, stdout, stderr io.Writer, env map[string]string, args ...string) error {
nfargs := flag.CommandLine.Args()
tam, err := TaggedACLMapFromFlag()
if err != nil {
fmt.Fprintf(stdout, "TaggedACLMapFromFlag() failed: %v", err)
return nil
}
got := auth(access.TaggedACLAuthorizer(tam, access.TypicalTagType()))
want := expectedAuthorizer[nfargs[0]]
if !reflect.DeepEqual(got, want) {
fmt.Fprintf(stdout, "args %#v\n", args)
fmt.Fprintf(stdout, "AuthorizerFromFlags() got Authorizer: %v, want: %v", got, want)
}
return nil
}
func TestNewAuthorizerOrDie(t *testing.T) {
sh, err := modules.NewShell(nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
defer sh.Cleanup(os.Stderr, os.Stderr)
// Create a file.
acl2FileName := tsecurity.SaveACLToFile(acl2)
defer os.Remove(acl2FileName)
testdata := []struct {
cmd string
flags []string
auth string
}{
{
cmd: "tamFromFlag",
flags: []string{"--veyron.acl.file", "runtime:" + acl2FileName},
auth: "acl2",
},
{
cmd: "tamFromFlag",
flags: []string{"--veyron.acl.literal", "{}"},
auth: "empty",
},
{
cmd: "tamFromFlag",
flags: []string{"--veyron.acl.literal", `{"Read": {"In":["veyron/alice", "veyron/bob"]}, "Write": {"In":["veyron/alice"]}}`},
auth: "acl2",
},
}
for _, td := range testdata {
fp := append(td.flags, td.auth)
h, err := sh.Start(td.cmd, nil, fp...)
if err != nil {
t.Errorf("unexpected error: %s", err)
}
b := new(bytes.Buffer)
h.Shutdown(b, os.Stderr)
if got := b.String(); got != "" {
t.Errorf(got)
}
}
}