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  }