diff --git a/pkg/api/BUILD b/pkg/api/BUILD index b552710e41c..71f6e96a7a7 100644 --- a/pkg/api/BUILD +++ b/pkg/api/BUILD @@ -96,6 +96,7 @@ go_test( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/auth/user:go_default_library", "//pkg/conversion:go_default_library", "//pkg/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", diff --git a/pkg/api/context_test.go b/pkg/api/context_test.go index a0a72c5bde2..9a40ccebeed 100644 --- a/pkg/api/context_test.go +++ b/pkg/api/context_test.go @@ -20,6 +20,8 @@ import ( "testing" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/auth/user" + "k8s.io/kubernetes/pkg/types" ) // TestNamespaceContext validates that a namespace can be get/set on a context object @@ -27,16 +29,16 @@ func TestNamespaceContext(t *testing.T) { ctx := api.NewDefaultContext() result, ok := api.NamespaceFrom(ctx) if !ok { - t.Errorf("Error getting namespace") + t.Fatalf("Error getting namespace") } if api.NamespaceDefault != result { - t.Errorf("Expected: %v, Actual: %v", api.NamespaceDefault, result) + t.Fatalf("Expected: %s, Actual: %s", api.NamespaceDefault, result) } ctx = api.NewContext() result, ok = api.NamespaceFrom(ctx) if ok { - t.Errorf("Should not be ok because there is no namespace on the context") + t.Fatalf("Should not be ok because there is no namespace on the context") } } @@ -46,23 +48,113 @@ func TestValidNamespace(t *testing.T) { namespace, _ := api.NamespaceFrom(ctx) resource := api.ReplicationController{} if !api.ValidNamespace(ctx, &resource.ObjectMeta) { - t.Errorf("expected success") + t.Fatalf("expected success") } if namespace != resource.Namespace { - t.Errorf("expected resource to have the default namespace assigned during validation") + t.Fatalf("expected resource to have the default namespace assigned during validation") } resource = api.ReplicationController{ObjectMeta: api.ObjectMeta{Namespace: "other"}} if api.ValidNamespace(ctx, &resource.ObjectMeta) { - t.Errorf("Expected error that resource and context errors do not match because resource has different namespace") + t.Fatalf("Expected error that resource and context errors do not match because resource has different namespace") } ctx = api.NewContext() if api.ValidNamespace(ctx, &resource.ObjectMeta) { - t.Errorf("Expected error that resource and context errors do not match since context has no namespace") + t.Fatalf("Expected error that resource and context errors do not match since context has no namespace") } ctx = api.NewContext() ns := api.NamespaceValue(ctx) if ns != "" { - t.Errorf("Expected the empty string") + t.Fatalf("Expected the empty string") + } +} + +//TestUserContext validates that a userinfo can be get/set on a context object +func TestUserContext(t *testing.T) { + ctx := api.NewContext() + _, ok := api.UserFrom(ctx) + if ok { + t.Fatalf("Should not be ok because there is no user.Info on the context") + } + ctx = api.WithUser( + ctx, + &user.DefaultInfo{ + Name: "bob", + UID: "123", + Groups: []string{"group1"}, + Extra: map[string][]string{"foo": {"bar"}}, + }, + ) + + result, ok := api.UserFrom(ctx) + if !ok { + t.Fatalf("Error getting user info") + } + + expectedName := "bob" + if result.GetName() != expectedName { + t.Fatalf("Get user name error, Expected: %s, Actual: %s", expectedName, result.GetName()) + } + + expectedUID := "123" + if result.GetUID() != expectedUID { + t.Fatalf("Get UID error, Expected: %s, Actual: %s", expectedUID, result.GetName()) + } + + expectedGroup := "group1" + actualGroup := result.GetGroups() + if len(actualGroup) != 1 { + t.Fatalf("Get user group number error, Expected: 1, Actual: %d", len(actualGroup)) + } else if actualGroup[0] != expectedGroup { + t.Fatalf("Get user group error, Expected: %s, Actual: %s", expectedGroup, actualGroup[0]) + } + + expectedExtraKey := "foo" + expectedExtraValue := "bar" + actualExtra := result.GetExtra() + if len(actualExtra[expectedExtraKey]) != 1 { + t.Fatalf("Get user extra map number error, Expected: 1, Actual: %d", len(actualExtra[expectedExtraKey])) + } else if actualExtra[expectedExtraKey][0] != expectedExtraValue { + t.Fatalf("Get user extra map value error, Expected: %s, Actual: %s", expectedExtraValue, actualExtra[expectedExtraKey]) + } + +} + +//TestUIDContext validates that a UID can be get/set on a context object +func TestUIDContext(t *testing.T) { + ctx := api.NewContext() + _, ok := api.UIDFrom(ctx) + if ok { + t.Fatalf("Should not be ok because there is no UID on the context") + } + ctx = api.WithUID( + ctx, + types.UID("testUID"), + ) + _, ok = api.UIDFrom(ctx) + if !ok { + t.Fatalf("Error getting UID") + } +} + +//TestUserAgentContext validates that a useragent can be get/set on a context object +func TestUserAgentContext(t *testing.T) { + ctx := api.NewContext() + _, ok := api.UserAgentFrom(ctx) + if ok { + t.Fatalf("Should not be ok because there is no UserAgent on the context") + } + + ctx = api.WithUserAgent( + ctx, + "TestUserAgent", + ) + result, ok := api.UserAgentFrom(ctx) + if !ok { + t.Fatalf("Error getting UserAgent") + } + expectedResult := "TestUserAgent" + if result != expectedResult { + t.Fatalf("Get user agent error, Expected: %s, Actual: %s", expectedResult, result) } }