| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | // GoToSocial | 
					
						
							|  |  |  | // Copyright (C) GoToSocial Authors admin@gotosocial.org | 
					
						
							|  |  |  | // SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | // it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | // GNU Affero General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  | // along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package testrig | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2025-04-26 15:34:10 +02:00
										 |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/admin" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/cleaner" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/email" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/filter/interaction" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/filter/visibility" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/processing" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/processing/common" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/state" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/subscriptions" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/transport" | 
					
						
							|  |  |  | 	"code.superseriousbusiness.org/gotosocial/internal/typeutils" | 
					
						
							| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TestStructs encapsulates structs needed to | 
					
						
							|  |  |  | // run one test independently. 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 a | 
					
						
							|  |  |  | // package from overwriting one another's processors | 
					
						
							|  |  |  | // and worker queues, which was causing issues | 
					
						
							|  |  |  | // when running all tests at once. | 
					
						
							|  |  |  | type TestStructs struct { | 
					
						
							| 
									
										
										
										
											2025-01-08 11:29:40 +01:00
										 |  |  | 	State               *state.State | 
					
						
							|  |  |  | 	Common              *common.Processor | 
					
						
							|  |  |  | 	Processor           *processing.Processor | 
					
						
							|  |  |  | 	HTTPClient          *MockHTTPClient | 
					
						
							|  |  |  | 	TypeConverter       *typeutils.Converter | 
					
						
							|  |  |  | 	EmailSender         email.Sender | 
					
						
							| 
									
										
										
										
											2025-01-23 16:47:30 -08:00
										 |  |  | 	WebPushSender       *WebPushMockSender | 
					
						
							| 
									
										
										
										
											2025-01-08 11:29:40 +01:00
										 |  |  | 	TransportController transport.Controller | 
					
						
							| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func SetupTestStructs( | 
					
						
							|  |  |  | 	rMediaPath string, | 
					
						
							|  |  |  | 	rTemplatePath string, | 
					
						
							|  |  |  | ) *TestStructs { | 
					
						
							|  |  |  | 	state := state.State{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	state.Caches.Init() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	db := NewTestDB(&state) | 
					
						
							|  |  |  | 	state.DB = db | 
					
						
							| 
									
										
										
										
											2025-01-08 11:29:40 +01:00
										 |  |  | 	state.AdminActions = admin.New(db, &state.Workers) | 
					
						
							| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	storage := NewInMemoryStorage() | 
					
						
							|  |  |  | 	state.Storage = storage | 
					
						
							|  |  |  | 	typeconverter := typeutils.NewConverter(&state) | 
					
						
							|  |  |  | 	visFilter := visibility.NewFilter(&state) | 
					
						
							|  |  |  | 	intFilter := interaction.NewFilter(&state) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	StartTimelines( | 
					
						
							|  |  |  | 		&state, | 
					
						
							|  |  |  | 		visFilter, | 
					
						
							|  |  |  | 		typeconverter, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	httpClient := NewMockHTTPClient(nil, rMediaPath) | 
					
						
							|  |  |  | 	httpClient.TestRemotePeople = NewTestFediPeople() | 
					
						
							|  |  |  | 	httpClient.TestRemoteStatuses = NewTestFediStatuses() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	transportController := NewTestTransportController(&state, httpClient) | 
					
						
							|  |  |  | 	mediaManager := NewTestMediaManager(&state) | 
					
						
							|  |  |  | 	federator := NewTestFederator(&state, transportController, mediaManager) | 
					
						
							| 
									
										
										
										
											2025-03-03 16:03:36 +01:00
										 |  |  | 	oauthServer := NewTestOauthServer(&state) | 
					
						
							| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | 	emailSender := NewEmailSender(rTemplatePath, nil) | 
					
						
							| 
									
										
										
										
											2025-01-23 16:47:30 -08:00
										 |  |  | 	webPushSender := NewWebPushMockSender() | 
					
						
							| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	common := common.New( | 
					
						
							|  |  |  | 		&state, | 
					
						
							|  |  |  | 		mediaManager, | 
					
						
							|  |  |  | 		typeconverter, | 
					
						
							|  |  |  | 		federator, | 
					
						
							|  |  |  | 		visFilter, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	processor := processing.NewProcessor( | 
					
						
							|  |  |  | 		cleaner.New(&state), | 
					
						
							| 
									
										
										
										
											2025-01-08 11:29:40 +01:00
										 |  |  | 		subscriptions.New(&state, transportController, typeconverter), | 
					
						
							| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | 		typeconverter, | 
					
						
							|  |  |  | 		federator, | 
					
						
							|  |  |  | 		oauthServer, | 
					
						
							|  |  |  | 		mediaManager, | 
					
						
							|  |  |  | 		&state, | 
					
						
							|  |  |  | 		emailSender, | 
					
						
							| 
									
										
										
										
											2025-01-23 16:47:30 -08:00
										 |  |  | 		webPushSender, | 
					
						
							| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | 		visFilter, | 
					
						
							|  |  |  | 		intFilter, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	StartWorkers(&state, processor.Workers()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	StandardDBSetup(db, nil) | 
					
						
							|  |  |  | 	StandardStorageSetup(storage, rMediaPath) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return &TestStructs{ | 
					
						
							| 
									
										
										
										
											2025-01-08 11:29:40 +01:00
										 |  |  | 		State:               &state, | 
					
						
							|  |  |  | 		Common:              &common, | 
					
						
							|  |  |  | 		Processor:           processor, | 
					
						
							|  |  |  | 		HTTPClient:          httpClient, | 
					
						
							|  |  |  | 		TypeConverter:       typeconverter, | 
					
						
							|  |  |  | 		EmailSender:         emailSender, | 
					
						
							| 
									
										
										
										
											2025-01-23 16:47:30 -08:00
										 |  |  | 		WebPushSender:       webPushSender, | 
					
						
							| 
									
										
										
										
											2025-01-08 11:29:40 +01:00
										 |  |  | 		TransportController: transportController, | 
					
						
							| 
									
										
										
										
											2024-08-24 11:49:37 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TearDownTestStructs(testStructs *TestStructs) { | 
					
						
							|  |  |  | 	StandardDBTeardown(testStructs.State.DB) | 
					
						
							|  |  |  | 	StandardStorageTeardown(testStructs.State.Storage) | 
					
						
							|  |  |  | 	StopWorkers(testStructs.State) | 
					
						
							|  |  |  | } |