summaryrefslogtreecommitdiff
path: root/internal/processing/workers/workers_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing/workers/workers_test.go')
-rw-r--r--internal/processing/workers/workers_test.go122
1 files changed, 66 insertions, 56 deletions
diff --git a/internal/processing/workers/workers_test.go b/internal/processing/workers/workers_test.go
index af1428e64..5e2a78bb6 100644
--- a/internal/processing/workers/workers_test.go
+++ b/internal/processing/workers/workers_test.go
@@ -22,18 +22,12 @@ import (
"github.com/stretchr/testify/suite"
"github.com/superseriousbusiness/gotosocial/internal/cleaner"
- "github.com/superseriousbusiness/gotosocial/internal/db"
- "github.com/superseriousbusiness/gotosocial/internal/email"
- "github.com/superseriousbusiness/gotosocial/internal/federation"
"github.com/superseriousbusiness/gotosocial/internal/filter/visibility"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/media"
"github.com/superseriousbusiness/gotosocial/internal/oauth"
"github.com/superseriousbusiness/gotosocial/internal/processing"
"github.com/superseriousbusiness/gotosocial/internal/state"
- "github.com/superseriousbusiness/gotosocial/internal/storage"
"github.com/superseriousbusiness/gotosocial/internal/stream"
- "github.com/superseriousbusiness/gotosocial/internal/transport"
"github.com/superseriousbusiness/gotosocial/internal/typeutils"
"github.com/superseriousbusiness/gotosocial/testrig"
)
@@ -41,16 +35,6 @@ import (
type WorkersTestSuite struct {
// standard suite interfaces
suite.Suite
- db db.DB
- storage *storage.Driver
- state state.State
- mediaManager *media.Manager
- typeconverter *typeutils.Converter
- httpClient *testrig.MockHTTPClient
- transportController transport.Controller
- federator *federation.Federator
- oauthServer oauth.Server
- emailSender email.Sender
// standard suite models
testTokens map[string]*gtsmodel.Token
@@ -68,8 +52,22 @@ type WorkersTestSuite struct {
testActivities map[string]testrig.ActivityWithSignature
testLists map[string]*gtsmodel.List
testListEntries map[string]*gtsmodel.ListEntry
+}
- processor *processing.Processor
+// TestStructs encapsulates structs needed to
+// run one test in this package. Each test should
+// call SetupTestStructs to get a new TestStructs,
+// and defer TearDownTestStructs to close it when
+// the test is complete. The reason for doing things
+// this way here is to prevent the tests in this
+// package from overwriting one another's processors
+// and worker queues, which was causing issues
+// when running all tests at once.
+type TestStructs struct {
+ State *state.State
+ Processor *processing.Processor
+ HTTPClient *testrig.MockHTTPClient
+ TypeConverter *typeutils.Converter
}
func (suite *WorkersTestSuite) SetupSuite() {
@@ -96,48 +94,12 @@ func (suite *WorkersTestSuite) SetupSuite() {
}
func (suite *WorkersTestSuite) SetupTest() {
- suite.state.Caches.Init()
-
testrig.InitTestConfig()
testrig.InitTestLog()
-
- suite.db = testrig.NewTestDB(&suite.state)
- suite.state.DB = suite.db
suite.testActivities = testrig.NewTestActivities(suite.testAccounts)
- suite.storage = testrig.NewInMemoryStorage()
- suite.state.Storage = suite.storage
- suite.typeconverter = typeutils.NewConverter(&suite.state)
-
- testrig.StartTimelines(
- &suite.state,
- visibility.NewFilter(&suite.state),
- suite.typeconverter,
- )
-
- suite.httpClient = testrig.NewMockHTTPClient(nil, "../../../testrig/media")
- suite.httpClient.TestRemotePeople = testrig.NewTestFediPeople()
- suite.httpClient.TestRemoteStatuses = testrig.NewTestFediStatuses()
-
- suite.transportController = testrig.NewTestTransportController(&suite.state, suite.httpClient)
- suite.mediaManager = testrig.NewTestMediaManager(&suite.state)
- suite.federator = testrig.NewTestFederator(&suite.state, suite.transportController, suite.mediaManager)
- suite.oauthServer = testrig.NewTestOauthServer(suite.db)
- suite.emailSender = testrig.NewEmailSender("../../../web/template/", nil)
-
- suite.processor = processing.NewProcessor(cleaner.New(&suite.state), suite.typeconverter, suite.federator, suite.oauthServer, suite.mediaManager, &suite.state, suite.emailSender)
- testrig.StartWorkers(&suite.state, suite.processor.Workers())
-
- testrig.StandardDBSetup(suite.db, suite.testAccounts)
- testrig.StandardStorageSetup(suite.storage, "../../../testrig/media")
}
-func (suite *WorkersTestSuite) TearDownTest() {
- testrig.StandardDBTeardown(suite.db)
- testrig.StandardStorageTeardown(suite.storage)
- testrig.StopWorkers(&suite.state)
-}
-
-func (suite *WorkersTestSuite) openStreams(ctx context.Context, account *gtsmodel.Account, listIDs []string) map[string]*stream.Stream {
+func (suite *WorkersTestSuite) openStreams(ctx context.Context, processor *processing.Processor, account *gtsmodel.Account, listIDs []string) map[string]*stream.Stream {
streams := make(map[string]*stream.Stream)
for _, streamType := range []string{
@@ -145,7 +107,7 @@ func (suite *WorkersTestSuite) openStreams(ctx context.Context, account *gtsmode
stream.TimelinePublic,
stream.TimelineNotifications,
} {
- stream, err := suite.processor.Stream().Open(ctx, account, streamType)
+ stream, err := processor.Stream().Open(ctx, account, streamType)
if err != nil {
suite.FailNow(err.Error())
}
@@ -156,7 +118,7 @@ func (suite *WorkersTestSuite) openStreams(ctx context.Context, account *gtsmode
for _, listID := range listIDs {
streamType := stream.TimelineList + ":" + listID
- stream, err := suite.processor.Stream().Open(ctx, account, streamType)
+ stream, err := processor.Stream().Open(ctx, account, streamType)
if err != nil {
suite.FailNow(err.Error())
}
@@ -166,3 +128,51 @@ func (suite *WorkersTestSuite) openStreams(ctx context.Context, account *gtsmode
return streams
}
+
+func (suite *WorkersTestSuite) SetupTestStructs() *TestStructs {
+ state := state.State{}
+
+ state.Caches.Init()
+
+ db := testrig.NewTestDB(&state)
+ state.DB = db
+
+ storage := testrig.NewInMemoryStorage()
+ state.Storage = storage
+ typeconverter := typeutils.NewConverter(&state)
+
+ testrig.StartTimelines(
+ &state,
+ visibility.NewFilter(&state),
+ typeconverter,
+ )
+
+ httpClient := testrig.NewMockHTTPClient(nil, "../../../testrig/media")
+ httpClient.TestRemotePeople = testrig.NewTestFediPeople()
+ httpClient.TestRemoteStatuses = testrig.NewTestFediStatuses()
+
+ transportController := testrig.NewTestTransportController(&state, httpClient)
+ mediaManager := testrig.NewTestMediaManager(&state)
+ federator := testrig.NewTestFederator(&state, transportController, mediaManager)
+ oauthServer := testrig.NewTestOauthServer(db)
+ emailSender := testrig.NewEmailSender("../../../web/template/", nil)
+
+ processor := processing.NewProcessor(cleaner.New(&state), typeconverter, federator, oauthServer, mediaManager, &state, emailSender)
+ testrig.StartWorkers(&state, processor.Workers())
+
+ testrig.StandardDBSetup(db, suite.testAccounts)
+ testrig.StandardStorageSetup(storage, "../../../testrig/media")
+
+ return &TestStructs{
+ State: &state,
+ Processor: processor,
+ HTTPClient: httpClient,
+ TypeConverter: typeconverter,
+ }
+}
+
+func (suite *WorkersTestSuite) TearDownTestStructs(testStructs *TestStructs) {
+ testrig.StandardDBTeardown(testStructs.State.DB)
+ testrig.StandardStorageTeardown(testStructs.State.Storage)
+ testrig.StopWorkers(testStructs.State)
+}