github.com/cs3org/reva/v2@v2.27.7/pkg/user/manager/memory/memory_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 memory
    20  
    21  import (
    22  	"context"
    23  	"reflect"
    24  	"testing"
    25  
    26  	userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
    27  	"github.com/cs3org/reva/v2/pkg/errtypes"
    28  )
    29  
    30  var ctx = context.Background()
    31  
    32  func TestUserManager(t *testing.T) {
    33  	// get manager
    34  	manager, _ := New(map[string]interface{}{
    35  		"users": map[string]interface{}{
    36  			"4c510ada-c86b-4815-8820-42cdf82c3d51": map[string]interface{}{
    37  				"id": map[string]interface{}{
    38  					"opaqueId": "4c510ada-c86b-4815-8820-42cdf82c3d51",
    39  					"idp":      "http://localhost:9998",
    40  					"type":     1, // user.UserType_USER_TYPE_PRIMARY
    41  				},
    42  				"uid_number":   123,
    43  				"gid_number":   987,
    44  				"username":     "einstein",
    45  				"mail":         "einstein@example.org",
    46  				"display_name": "Albert Einstein",
    47  				"groups":       []string{"sailing-lovers", "violin-haters", "physics-lovers"},
    48  			},
    49  		},
    50  	})
    51  
    52  	// setup test data
    53  	uidEinstein := &userpb.UserId{Idp: "http://localhost:9998", OpaqueId: "4c510ada-c86b-4815-8820-42cdf82c3d51", Type: userpb.UserType_USER_TYPE_PRIMARY}
    54  	userEinstein := &userpb.User{
    55  		Id:          uidEinstein,
    56  		Username:    "einstein",
    57  		Groups:      []string{"sailing-lovers", "violin-haters", "physics-lovers"},
    58  		Mail:        "einstein@example.org",
    59  		DisplayName: "Albert Einstein",
    60  		UidNumber:   123,
    61  		GidNumber:   987,
    62  	}
    63  	userEinsteinWithoutGroups := &userpb.User{
    64  		Id:          uidEinstein,
    65  		Username:    "einstein",
    66  		Mail:        "einstein@example.org",
    67  		DisplayName: "Albert Einstein",
    68  		UidNumber:   123,
    69  		GidNumber:   987,
    70  	}
    71  
    72  	uidFake := &userpb.UserId{Idp: "nonesense", OpaqueId: "fakeUser"}
    73  	groupsEinstein := []string{"sailing-lovers", "violin-haters", "physics-lovers"}
    74  
    75  	// positive test GetUserByClaim by uid
    76  	resUserByUID, _ := manager.GetUserByClaim(ctx, "uid", "123", false)
    77  	if !reflect.DeepEqual(resUserByUID, userEinstein) {
    78  		t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByUID)
    79  	}
    80  
    81  	// negative test GetUserByClaim by uid
    82  	expectedErr := errtypes.NotFound("789")
    83  	_, err := manager.GetUserByClaim(ctx, "uid", "789", false)
    84  	if !reflect.DeepEqual(err, expectedErr) {
    85  		t.Fatalf("user not found error differs: expected='%v' got='%v'", expectedErr, err)
    86  	}
    87  
    88  	// positive test GetUserByClaim by mail
    89  	resUserByEmail, _ := manager.GetUserByClaim(ctx, "mail", "einstein@example.org", false)
    90  	if !reflect.DeepEqual(resUserByEmail, userEinstein) {
    91  		t.Fatalf("user differs: expected=%v got=%v", userEinstein, resUserByEmail)
    92  	}
    93  
    94  	// positive test GetUserByClaim by uid without groups
    95  	resUserByUIDWithoutGroups, _ := manager.GetUserByClaim(ctx, "uid", "123", true)
    96  	if !reflect.DeepEqual(resUserByUIDWithoutGroups, userEinsteinWithoutGroups) {
    97  		t.Fatalf("user differs: expected=%v got=%v", userEinsteinWithoutGroups, resUserByUIDWithoutGroups)
    98  	}
    99  
   100  	// positive test GetUserGroups
   101  	resGroups, _ := manager.GetUserGroups(ctx, uidEinstein)
   102  	if !reflect.DeepEqual(resGroups, groupsEinstein) {
   103  		t.Fatalf("groups differ: expected=%v got=%v", groupsEinstein, resGroups)
   104  	}
   105  
   106  	// negative test GetUserGroups
   107  	expectedErr = errtypes.NotFound(uidFake.OpaqueId)
   108  	_, err = manager.GetUserGroups(ctx, uidFake)
   109  	if !reflect.DeepEqual(err, expectedErr) {
   110  		t.Fatalf("user not found error differs: expected='%v' got='%v'", expectedErr, err)
   111  	}
   112  
   113  	// test FindUsers
   114  	resUser, _ := manager.FindUsers(ctx, "einstein", false)
   115  	if !reflect.DeepEqual(resUser, []*userpb.User{userEinstein}) {
   116  		t.Fatalf("user differs: expected=%v got=%v", []*userpb.User{userEinstein}, resUser)
   117  	}
   118  
   119  	// negative test FindUsers
   120  	resUsers, _ := manager.FindUsers(ctx, "notARealUser", false)
   121  	if len(resUsers) > 0 {
   122  		t.Fatalf("user not in group: expected=%v got=%v", []*userpb.User{}, resUsers)
   123  	}
   124  }