mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-01 10:40:30 -05:00
107 lines
3.1 KiB
Go
107 lines
3.1 KiB
Go
package cache
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
|
|
cs3User "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
"github.com/opencloud-eu/reva/v2/pkg/rgrpc/todo/pool"
|
|
)
|
|
|
|
// mockGatewaySelector is a mock implementation of pool.Selectable[gateway.GatewayAPIClient]
|
|
type mockGatewaySelector struct {
|
|
client gateway.GatewayAPIClient
|
|
}
|
|
|
|
func (m *mockGatewaySelector) Next(opts ...pool.Option) (gateway.GatewayAPIClient, error) {
|
|
return m.client, nil
|
|
}
|
|
|
|
var _ = Describe("Cache", func() {
|
|
var (
|
|
ctx context.Context
|
|
idc IdentityCache
|
|
mockGwSelector pool.Selectable[gateway.GatewayAPIClient]
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
// Create a mock gateway selector (client can be nil for cached tests)
|
|
mockGwSelector = &mockGatewaySelector{
|
|
client: nil,
|
|
}
|
|
|
|
idc = NewIdentityCache(
|
|
IdentityCacheWithGatewaySelector(mockGwSelector),
|
|
)
|
|
ctx = context.Background()
|
|
})
|
|
|
|
Describe("GetUser", func() {
|
|
It("should return no error", func() {
|
|
alan := &cs3User.User{
|
|
Id: &cs3User.UserId{
|
|
OpaqueId: "alan",
|
|
TenantId: "",
|
|
},
|
|
DisplayName: "Alan",
|
|
}
|
|
// Persist the user to the cache for 1 hour
|
|
idc.users.Set(alan.GetId().GetTenantId()+"|"+alan.GetId().GetOpaqueId(), alan, time.Hour)
|
|
|
|
// getting the cache item in cache.go line 103 does not work
|
|
ru, err := idc.GetUser(ctx, "", "alan")
|
|
Expect(err).To(BeNil())
|
|
Expect(ru).ToNot(BeNil())
|
|
Expect(ru.GetId()).To(Equal(alan.GetId().GetOpaqueId()))
|
|
Expect(ru.GetDisplayName()).To(Equal(alan.GetDisplayName()))
|
|
})
|
|
|
|
It("should return the correct user if two users with the same uid and different tennant ids exist", func() {
|
|
alan1 := &cs3User.User{
|
|
Id: &cs3User.UserId{
|
|
OpaqueId: "alan",
|
|
TenantId: "1234",
|
|
},
|
|
DisplayName: "Alan1",
|
|
}
|
|
|
|
alan2 := &cs3User.User{
|
|
Id: &cs3User.UserId{
|
|
OpaqueId: "alan",
|
|
TenantId: "5678",
|
|
},
|
|
DisplayName: "Alan2",
|
|
}
|
|
// Persist the user to the cache for 1 hour
|
|
idc.users.Set(alan1.GetId().GetTenantId()+"|"+alan1.GetId().GetOpaqueId(), alan1, time.Hour)
|
|
idc.users.Set(alan2.GetId().GetTenantId()+"|"+alan2.GetId().GetOpaqueId(), alan2, time.Hour)
|
|
ru, err := idc.GetUser(ctx, "5678", "alan")
|
|
Expect(err).To(BeNil())
|
|
Expect(ru.GetDisplayName()).To(Equal(alan2.GetDisplayName()))
|
|
ru, err = idc.GetUser(ctx, "1234", "alan")
|
|
Expect(err).To(BeNil())
|
|
Expect(ru.GetDisplayName()).To(Equal(alan1.GetDisplayName()))
|
|
})
|
|
|
|
It("should not return an error, if the tenant id does match", func() {
|
|
alan := &cs3User.User{
|
|
Id: &cs3User.UserId{
|
|
OpaqueId: "alan",
|
|
TenantId: "1234",
|
|
},
|
|
DisplayName: "Alan",
|
|
}
|
|
// Persist the user to the cache for 1 hour
|
|
cu := idc.users.Set(alan.GetId().GetTenantId()+"|"+alan.GetId().GetOpaqueId(), alan, time.Hour)
|
|
// Test if element has been persisted in the cache
|
|
Expect(cu.Value().GetId().GetOpaqueId()).To(Equal(alan.GetId().GetOpaqueId()))
|
|
ru, err := idc.GetUser(ctx, "1234", "alan")
|
|
Expect(err).To(BeNil())
|
|
Expect(ru.GetDisplayName()).To(Equal(alan.GetDisplayName()))
|
|
})
|
|
})
|
|
})
|