github.com/cs3org/reva/v2@v2.27.7/pkg/group/manager/json/json_test.go (about) 1 // Copyright 2018-2020 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 grouppb "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1" 28 userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" 29 "github.com/cs3org/reva/v2/pkg/errtypes" 30 "github.com/google/go-cmp/cmp" 31 "google.golang.org/protobuf/proto" 32 "google.golang.org/protobuf/testing/protocmp" 33 ) 34 35 var ctx = context.Background() 36 37 func TestUserManager(t *testing.T) { 38 // add tempdir 39 tempdir, err := os.MkdirTemp("", "json_test") 40 if err != nil { 41 t.Fatalf("error while create temp dir: %v", err) 42 } 43 defer os.RemoveAll(tempdir) 44 45 // corrupt json object with user meta data 46 userJSON := `[{` 47 48 // get file handler for temporary file 49 file, err := os.CreateTemp(tempdir, "json_test") 50 if err != nil { 51 t.Fatalf("error while open temp file: %v", err) 52 } 53 54 // write json object to tempdir 55 _, err = file.WriteString(userJSON) 56 if err != nil { 57 t.Fatalf("error while writing temp file: %v", err) 58 } 59 60 // get manager 61 input := map[string]interface{}{ 62 "groups": file.Name(), 63 } 64 _, err = New(input) 65 if err == nil { 66 t.Fatalf("no error (but we expected one) while get manager") 67 } 68 69 // clean up 70 os.Remove(file.Name()) 71 72 // json object with user meta data 73 userJSON = `[{"id":{"opaque_id":"sailing-lovers"},"group_name":"sailing-lovers","mail":"sailing-lovers@example.org","display_name":"Sailing Lovers","gid_number":1234,"members":[{"idp":"localhost","opaque_id":"einstein","type":1},{"idp":"localhost","opaque_id":"marie","type":1}]}]` 74 75 // get file handler for temporary file 76 file, err = os.CreateTemp(tempdir, "json_test") 77 if err != nil { 78 t.Fatalf("error while open temp file: %v", err) 79 } 80 defer os.Remove(file.Name()) 81 82 // write json object to tempdir 83 _, err = file.WriteString(userJSON) 84 if err != nil { 85 t.Fatalf("error while writing temp file: %v", err) 86 } 87 88 // get manager - positive test 89 input = map[string]interface{}{ 90 "groups": file.Name(), 91 } 92 manager, _ := New(input) 93 94 // setup test data 95 gid := &grouppb.GroupId{OpaqueId: "sailing-lovers"} 96 uidEinstein := &userpb.UserId{Idp: "localhost", OpaqueId: "einstein", Type: userpb.UserType_USER_TYPE_PRIMARY} 97 uidMarie := &userpb.UserId{Idp: "localhost", OpaqueId: "marie", Type: userpb.UserType_USER_TYPE_PRIMARY} 98 members := []*userpb.UserId{uidEinstein, uidMarie} 99 group := &grouppb.Group{ 100 Id: gid, 101 GroupName: "sailing-lovers", 102 Mail: "sailing-lovers@example.org", 103 GidNumber: 1234, 104 DisplayName: "Sailing Lovers", 105 Members: members, 106 } 107 groupWithoutMembers := &grouppb.Group{ 108 Id: gid, 109 GroupName: "sailing-lovers", 110 Mail: "sailing-lovers@example.org", 111 GidNumber: 1234, 112 DisplayName: "Sailing Lovers", 113 } 114 groupFake := &grouppb.GroupId{OpaqueId: "fake-group"} 115 116 // positive test GetGroup 117 resGroup, _ := manager.GetGroup(ctx, gid, false) 118 if !proto.Equal(resGroup, group) { 119 t.Fatalf("group differs: expected=%v got=%v", group, resGroup) 120 } 121 122 // positive test GetGroup without members 123 resGroupWithoutMembers, _ := manager.GetGroup(ctx, gid, true) 124 if !proto.Equal(resGroupWithoutMembers, groupWithoutMembers) { 125 t.Fatalf("group differs: expected=%v got=%v", groupWithoutMembers, resGroupWithoutMembers) 126 } 127 128 // negative test GetGroup 129 expectedErr := errtypes.NotFound(groupFake.OpaqueId) 130 _, err = manager.GetGroup(ctx, groupFake, false) 131 if !reflect.DeepEqual(err, expectedErr) { 132 t.Fatalf("group not found error differ: expected='%v' got='%v'", expectedErr, err) 133 } 134 135 // positive test GetGroupByClaim by mail 136 resGroupByEmail, _ := manager.GetGroupByClaim(ctx, "mail", "sailing-lovers@example.org", false) 137 if !proto.Equal(resGroupByEmail, group) { 138 t.Fatalf("group differs: expected=%v got=%v", group, resGroupByEmail) 139 } 140 141 // negative test GetGroupByClaim by mail 142 expectedErr = errtypes.NotFound("abc@example.com") 143 _, err = manager.GetGroupByClaim(ctx, "mail", "abc@example.com", false) 144 if !reflect.DeepEqual(err, expectedErr) { 145 t.Fatalf("group not found error differs: expected='%v' got='%v'", expectedErr, err) 146 } 147 148 // test GetMembers 149 resMembers, _ := manager.GetMembers(ctx, gid) 150 if !cmp.Equal(resMembers, members, protocmp.Transform()) { 151 t.Fatalf("members differ: expected=%v got=%v", members, resMembers) 152 } 153 154 // positive test HasMember 155 resMember, _ := manager.HasMember(ctx, gid, uidMarie) 156 if resMember != true { 157 t.Fatalf("result differs: expected=%v got=%v", true, resMember) 158 } 159 160 // negative test HasMember 161 resMemberNegative, _ := manager.HasMember(ctx, gid, &userpb.UserId{Idp: "localhost", OpaqueId: "fake-user", Type: userpb.UserType_USER_TYPE_PRIMARY}) 162 if resMemberNegative != false { 163 t.Fatalf("result differs: expected=%v got=%v", false, resMemberNegative) 164 } 165 166 // test FindGroups 167 resFind, _ := manager.FindGroups(ctx, "sail", false) 168 if len(resFind) != 1 { 169 t.Fatalf("too many groups found: expected=%d got=%d", 1, len(resFind)) 170 } 171 if !reflect.DeepEqual(resFind[0].GroupName, "sailing-lovers") { 172 t.Fatalf("group differ: expected=%v got=%v", "sailing-lovers", resFind[0].GroupName) 173 } 174 }