github.com/cs3org/reva/v2@v2.27.7/pkg/user/manager/json/json_test.go (about) 1 // Copyright 2018-2021 CERN 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 // In applying this license, CERN does not waive the privileges and immunities 16 // granted to it by virtue of its status as an Intergovernmental Organization 17 // or submit itself to any jurisdiction. 18 19 package json 20 21 import ( 22 "context" 23 "os" 24 "reflect" 25 "testing" 26 27 userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" 28 "github.com/cs3org/reva/v2/pkg/errtypes" 29 "google.golang.org/protobuf/proto" 30 ) 31 32 var ctx = context.Background() 33 34 func TestUserManager(t *testing.T) { 35 // add tempdir 36 tempdir, err := os.MkdirTemp("", "json_test") 37 if err != nil { 38 t.Fatalf("error while create temp dir: %v", err) 39 } 40 defer os.RemoveAll(tempdir) 41 42 // corrupt json object with user meta data 43 userJSON := `[{` 44 45 // get file handler for temporary file 46 file, err := os.CreateTemp(tempdir, "json_test") 47 if err != nil { 48 t.Fatalf("error while open temp file: %v", err) 49 } 50 51 // write json object to tempdir 52 _, err = file.WriteString(userJSON) 53 if err != nil { 54 t.Fatalf("error while writing temp file: %v", err) 55 } 56 57 // get manager 58 input := map[string]interface{}{ 59 "users": file.Name(), 60 } 61 _, err = New(input) 62 if err == nil { 63 t.Fatalf("no error (but we expected one) while get manager") 64 } 65 66 // clean up 67 os.Remove(file.Name()) 68 69 // json object with user meta data 70 userJSON = `[{"id":{"idp":"localhost","opaque_id":"einstein","type":1},"username":"einstein","mail":"einstein@example.org","display_name":"Albert Einstein","groups":["sailing-lovers","violin-haters","physics-lovers"]}]` 71 72 // get file handler for temporary file 73 file, err = os.CreateTemp(tempdir, "json_test") 74 if err != nil { 75 t.Fatalf("error while open temp file: %v", err) 76 } 77 defer os.Remove(file.Name()) 78 79 // write json object to tempdir 80 _, err = file.WriteString(userJSON) 81 if err != nil { 82 t.Fatalf("error while writing temp file: %v", err) 83 } 84 85 // get manager - positive test 86 input = map[string]interface{}{ 87 "users": file.Name(), 88 } 89 manager, _ := New(input) 90 91 // setup test data 92 uidEinstein := &userpb.UserId{Idp: "localhost", OpaqueId: "einstein", Type: userpb.UserType_USER_TYPE_PRIMARY} 93 userEinstein := &userpb.User{ 94 Id: uidEinstein, 95 Username: "einstein", 96 Groups: []string{"sailing-lovers", "violin-haters", "physics-lovers"}, 97 Mail: "einstein@example.org", 98 DisplayName: "Albert Einstein", 99 } 100 userEinsteinWithoutGroups := &userpb.User{ 101 Id: uidEinstein, 102 Username: "einstein", 103 Mail: "einstein@example.org", 104 DisplayName: "Albert Einstein", 105 } 106 userFake := &userpb.UserId{Idp: "localhost", OpaqueId: "fakeUser", Type: userpb.UserType_USER_TYPE_PRIMARY} 107 groupsEinstein := []string{"sailing-lovers", "violin-haters", "physics-lovers"} 108 109 // negative test GetUserGroups 110 expectedErr := errtypes.NotFound(userFake.OpaqueId) 111 _, err = manager.GetUserGroups(ctx, userFake) 112 if !reflect.DeepEqual(err, expectedErr) { 113 t.Fatalf("user not found error differ: expected='%v' got='%v'", expectedErr, err) 114 } 115 116 // positive test GetUserByClaim by mail 117 resUserByEmail, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", false) 118 if !proto.Equal(resUserByEmail, userEinstein) { 119 t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByEmail) 120 } 121 122 // negative test GetUserByClaim by mail 123 expectedErr = errtypes.NotFound("abc@example.com") 124 _, err = manager.GetUserByClaim(ctx, "mail", "abc@example.com", false) 125 if !reflect.DeepEqual(err, expectedErr) { 126 t.Fatalf("user not found error differs: expected='%v' got='%v'", expectedErr, err) 127 } 128 129 // positive test GetUserByClaim by mail without groups 130 resUserByEmailWithoutGroups, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", true) 131 if !proto.Equal(resUserByEmailWithoutGroups, userEinsteinWithoutGroups) { 132 t.Fatalf("user differs: expected=%v got=%v", userEinsteinWithoutGroups, resUserByEmailWithoutGroups) 133 } 134 135 // positive test GetUserGroups 136 resGroups, _ := manager.GetUserGroups(ctx, uidEinstein) 137 if !reflect.DeepEqual(resGroups, groupsEinstein) { 138 t.Fatalf("groups differ: expected=%v got=%v", resGroups, groupsEinstein) 139 } 140 141 // test FindUsers 142 resUser, _ := manager.FindUsers(ctx, "stein", false) 143 if len(resUser) != 1 { 144 t.Fatalf("too many users found: expected=%d got=%d", 1, len(resUser)) 145 } 146 if !reflect.DeepEqual(resUser[0].Username, "einstein") { 147 t.Fatalf("user differ: expected=%v got=%v", "einstein", resUser[0].Username) 148 } 149 }