From c474665753335cdf6db4439c9565c8b90269915c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Duffeck?= Date: Mon, 9 May 2022 10:42:35 +0200 Subject: [PATCH] Extract events test into a separate file --- .../search/pkg/search/provider/events_test.go | 171 ++++++++++++++++++ .../search/provider/searchprovider_test.go | 100 ---------- 2 files changed, 171 insertions(+), 100 deletions(-) create mode 100644 extensions/search/pkg/search/provider/events_test.go diff --git a/extensions/search/pkg/search/provider/events_test.go b/extensions/search/pkg/search/provider/events_test.go new file mode 100644 index 0000000000..c6fd687331 --- /dev/null +++ b/extensions/search/pkg/search/provider/events_test.go @@ -0,0 +1,171 @@ +package provider_test + +import ( + "context" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/stretchr/testify/mock" + + gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" + userv1beta1 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + sprovider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + "github.com/cs3org/reva/v2/pkg/events" + "github.com/cs3org/reva/v2/pkg/rgrpc/status" + cs3mocks "github.com/cs3org/reva/v2/tests/cs3mocks/mocks" + "github.com/owncloud/ocis/v2/extensions/search/pkg/search/mocks" + provider "github.com/owncloud/ocis/v2/extensions/search/pkg/search/provider" + "github.com/owncloud/ocis/v2/ocis-pkg/log" +) + +var _ = Describe("Searchprovider", func() { + var ( + p *provider.Provider + gwClient *cs3mocks.GatewayAPIClient + indexClient *mocks.IndexClient + + ctx context.Context + eventsChan chan interface{} + + logger = log.NewLogger() + user = &userv1beta1.User{ + Id: &userv1beta1.UserId{ + OpaqueId: "user", + }, + } + + ref = &sprovider.Reference{ + ResourceId: &sprovider.ResourceId{ + StorageId: "storageid", + OpaqueId: "rootopaqueid", + }, + Path: "./foo.pdf", + } + ri = &sprovider.ResourceInfo{ + Id: &sprovider.ResourceId{ + StorageId: "storageid", + OpaqueId: "opaqueid", + }, + Path: "foo.pdf", + Size: 12345, + } + ) + + BeforeEach(func() { + ctx = context.Background() + eventsChan = make(chan interface{}) + gwClient = &cs3mocks.GatewayAPIClient{} + indexClient = &mocks.IndexClient{} + + p = provider.New(gwClient, indexClient, "", eventsChan, logger) + + gwClient.On("Authenticate", mock.Anything, mock.Anything).Return(&gateway.AuthenticateResponse{ + Status: status.NewOK(ctx), + Token: "authtoken", + }, nil) + gwClient.On("Stat", mock.Anything, mock.Anything).Return(&sprovider.StatResponse{ + Status: status.NewOK(context.Background()), + Info: ri, + }, nil) + indexClient.On("DocCount").Return(uint64(1), nil) + }) + + Describe("New", func() { + It("returns a new instance", func() { + p = provider.New(gwClient, indexClient, "", eventsChan, logger) + Expect(p).ToNot(BeNil()) + }) + }) + + Describe("events", func() { + It("triggers an index update when a file has been uploaded", func() { + called := false + indexClient.On("Add", mock.Anything, mock.MatchedBy(func(riToIndex *sprovider.ResourceInfo) bool { + return riToIndex.Id.OpaqueId == ri.Id.OpaqueId + })).Return(nil).Run(func(args mock.Arguments) { + called = true + }) + eventsChan <- events.FileUploaded{ + Ref: ref, + Executant: user.Id, + } + + Eventually(func() bool { + return called + }, "2s").Should(BeTrue()) + }) + + It("removes an entry from the index when the file has been deleted", func() { + called := false + + gwClient.On("Stat", mock.Anything, mock.Anything).Return(&sprovider.StatResponse{ + Status: status.NewNotFound(context.Background(), ""), + }, nil) + indexClient.On("Delete", mock.MatchedBy(func(id *sprovider.ResourceId) bool { + return id.OpaqueId == ri.Id.OpaqueId + })).Return(nil).Run(func(args mock.Arguments) { + called = true + }) + eventsChan <- events.ItemTrashed{ + Ref: ref, + ID: ri.Id, + Executant: user.Id, + } + + Eventually(func() bool { + return called + }, "2s").Should(BeTrue()) + }) + + It("indexes items when they are being restored", func() { + called := false + indexClient.On("Restore", mock.MatchedBy(func(id *sprovider.ResourceId) bool { + return id.OpaqueId == ri.Id.OpaqueId + })).Return(nil).Run(func(args mock.Arguments) { + called = true + }) + eventsChan <- events.ItemRestored{ + Ref: ref, + Executant: user.Id, + } + + Eventually(func() bool { + return called + }, "2s").Should(BeTrue()) + }) + + It("indexes items when a version has been restored", func() { + called := false + indexClient.On("Add", mock.Anything, mock.MatchedBy(func(riToIndex *sprovider.ResourceInfo) bool { + return riToIndex.Id.OpaqueId == ri.Id.OpaqueId + })).Return(nil).Run(func(args mock.Arguments) { + called = true + }) + eventsChan <- events.FileVersionRestored{ + Ref: ref, + Executant: user.Id, + } + + Eventually(func() bool { + return called + }, "2s").Should(BeTrue()) + }) + + It("indexes items when they are being moved", func() { + called := false + indexClient.On("Move", mock.MatchedBy(func(riToIndex *sprovider.ResourceInfo) bool { + return riToIndex.Id.OpaqueId == ri.Id.OpaqueId + })).Return(nil).Run(func(args mock.Arguments) { + called = true + }) + eventsChan <- events.ItemMoved{ + Ref: ref, + Executant: user.Id, + } + + Eventually(func() bool { + return called + }, "2s").Should(BeTrue()) + }) + }) +}) diff --git a/extensions/search/pkg/search/provider/searchprovider_test.go b/extensions/search/pkg/search/provider/searchprovider_test.go index b5403bb489..37f59ff1cd 100644 --- a/extensions/search/pkg/search/provider/searchprovider_test.go +++ b/extensions/search/pkg/search/provider/searchprovider_test.go @@ -11,7 +11,6 @@ import ( userv1beta1 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" sprovider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" typesv1beta1 "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" - "github.com/cs3org/reva/v2/pkg/events" "github.com/cs3org/reva/v2/pkg/rgrpc/status" cs3mocks "github.com/cs3org/reva/v2/tests/cs3mocks/mocks" "github.com/owncloud/ocis/v2/extensions/search/pkg/search/mocks" @@ -55,13 +54,6 @@ var _ = Describe("Searchprovider", func() { Name: "personalspace", } - ref = &sprovider.Reference{ - ResourceId: &sprovider.ResourceId{ - StorageId: "storageid", - OpaqueId: "rootopaqueid", - }, - Path: "./foo.pdf", - } ri = &sprovider.ResourceInfo{ Id: &sprovider.ResourceId{ StorageId: "storageid", @@ -98,98 +90,6 @@ var _ = Describe("Searchprovider", func() { }) }) - Describe("events", func() { - It("trigger an index update when a file has been uploaded", func() { - called := false - indexClient.On("Add", mock.Anything, mock.MatchedBy(func(riToIndex *sprovider.ResourceInfo) bool { - return riToIndex.Id.OpaqueId == ri.Id.OpaqueId - })).Return(nil).Run(func(args mock.Arguments) { - called = true - }) - eventsChan <- events.FileUploaded{ - Ref: ref, - Executant: user.Id, - } - - Eventually(func() bool { - return called - }, "2s").Should(BeTrue()) - }) - - It("removes an entry from the index when the file has been deleted", func() { - called := false - - gwClient.On("Stat", mock.Anything, mock.Anything).Return(&sprovider.StatResponse{ - Status: status.NewNotFound(context.Background(), ""), - }, nil) - indexClient.On("Delete", mock.MatchedBy(func(id *sprovider.ResourceId) bool { - return id.OpaqueId == ri.Id.OpaqueId - })).Return(nil).Run(func(args mock.Arguments) { - called = true - }) - eventsChan <- events.ItemTrashed{ - Ref: ref, - ID: ri.Id, - Executant: user.Id, - } - - Eventually(func() bool { - return called - }, "2s").Should(BeTrue()) - }) - - It("indexes items when they are being restored", func() { - called := false - indexClient.On("Restore", mock.MatchedBy(func(id *sprovider.ResourceId) bool { - return id.OpaqueId == ri.Id.OpaqueId - })).Return(nil).Run(func(args mock.Arguments) { - called = true - }) - eventsChan <- events.ItemRestored{ - Ref: ref, - Executant: user.Id, - } - - Eventually(func() bool { - return called - }, "2s").Should(BeTrue()) - }) - - It("indexes items when a version has been restored", func() { - called := false - indexClient.On("Add", mock.Anything, mock.MatchedBy(func(riToIndex *sprovider.ResourceInfo) bool { - return riToIndex.Id.OpaqueId == ri.Id.OpaqueId - })).Return(nil).Run(func(args mock.Arguments) { - called = true - }) - eventsChan <- events.FileVersionRestored{ - Ref: ref, - Executant: user.Id, - } - - Eventually(func() bool { - return called - }, "2s").Should(BeTrue()) - }) - - It("indexes items when they are being moved", func() { - called := false - indexClient.On("Move", mock.MatchedBy(func(riToIndex *sprovider.ResourceInfo) bool { - return riToIndex.Id.OpaqueId == ri.Id.OpaqueId - })).Return(nil).Run(func(args mock.Arguments) { - called = true - }) - eventsChan <- events.ItemMoved{ - Ref: ref, - Executant: user.Id, - } - - Eventually(func() bool { - return called - }, "2s").Should(BeTrue()) - }) - }) - Describe("IndexSpace", func() { It("walks the space and indexes all files", func() { gwClient.On("GetUserByClaim", mock.Anything, mock.Anything).Return(&userv1beta1.GetUserByClaimResponse{