@@ -10,14 +10,16 @@ use mas_data_model::SiteConfig;
1010use mas_email:: Mailer ;
1111use mas_matrix:: HomeserverConnection ;
1212use mas_router:: UrlBuilder ;
13- use mas_storage:: { BoxRepository , Clock , RepositoryError , RepositoryFactory , SystemClock } ;
13+ use mas_storage:: { BoxRepository , Clock , RepositoryError , RepositoryFactory } ;
1414use mas_storage_pg:: PgRepositoryFactory ;
1515use new_queue:: QueueRunnerError ;
1616use opentelemetry:: metrics:: Meter ;
1717use rand:: SeedableRng ;
1818use sqlx:: { Pool , Postgres } ;
1919use tokio_util:: { sync:: CancellationToken , task:: TaskTracker } ;
2020
21+ pub use crate :: new_queue:: QueueWorker ;
22+
2123mod database;
2224mod email;
2325mod matrix;
@@ -99,29 +101,31 @@ impl State {
99101 }
100102}
101103
102- /// Initialise the workers.
104+ /// Initialise the worker, without running it.
105+ ///
106+ /// This is mostly useful for tests.
103107///
104108/// # Errors
105109///
106110/// This function can fail if the database connection fails.
107111pub async fn init (
108112 repository_factory : PgRepositoryFactory ,
113+ clock : impl Clock + ' static ,
109114 mailer : & Mailer ,
110115 homeserver : impl HomeserverConnection + ' static ,
111116 url_builder : UrlBuilder ,
112117 site_config : & SiteConfig ,
113118 cancellation_token : CancellationToken ,
114- task_tracker : & TaskTracker ,
115- ) -> Result < ( ) , QueueRunnerError > {
119+ ) -> Result < QueueWorker , QueueRunnerError > {
116120 let state = State :: new (
117121 repository_factory,
118- SystemClock :: default ( ) ,
122+ clock ,
119123 mailer. clone ( ) ,
120124 homeserver,
121125 url_builder,
122126 site_config. clone ( ) ,
123127 ) ;
124- let mut worker = self :: new_queue :: QueueWorker :: new ( state, cancellation_token) . await ?;
128+ let mut worker = QueueWorker :: new ( state, cancellation_token) . await ?;
125129
126130 worker
127131 . register_handler :: < mas_storage:: queue:: CleanupExpiredTokensJob > ( )
@@ -157,6 +161,35 @@ pub async fn init(
157161 mas_storage:: queue:: PruneStalePolicyDataJob ,
158162 ) ;
159163
164+ Ok ( worker)
165+ }
166+
167+ /// Initialise the worker and run it.
168+ ///
169+ /// # Errors
170+ ///
171+ /// This function can fail if the database connection fails.
172+ pub async fn init_and_run (
173+ repository_factory : PgRepositoryFactory ,
174+ clock : impl Clock + ' static ,
175+ mailer : & Mailer ,
176+ homeserver : impl HomeserverConnection + ' static ,
177+ url_builder : UrlBuilder ,
178+ site_config : & SiteConfig ,
179+ cancellation_token : CancellationToken ,
180+ task_tracker : & TaskTracker ,
181+ ) -> Result < ( ) , QueueRunnerError > {
182+ let worker = init (
183+ repository_factory,
184+ clock,
185+ mailer,
186+ homeserver,
187+ url_builder,
188+ site_config,
189+ cancellation_token,
190+ )
191+ . await ?;
192+
160193 task_tracker. spawn ( worker. run ( ) ) ;
161194
162195 Ok ( ( ) )
0 commit comments