@@ -265,6 +265,57 @@ public function testLockMergeConfigs()
265265 );
266266 }
267267
268+ /**
269+ * @dataProvider provideValidSemaphoreConfigurationTests
270+ */
271+ public function testValidSemaphoreConfiguration ($ semaphoreConfig , $ processedConfig )
272+ {
273+ $ processor = new Processor ();
274+ $ configuration = new Configuration (true );
275+ $ config = $ processor ->processConfiguration ($ configuration , [
276+ [
277+ 'semaphore ' => $ semaphoreConfig ,
278+ ],
279+ ]);
280+
281+ $ this ->assertArrayHasKey ('semaphore ' , $ config );
282+
283+ $ this ->assertEquals ($ processedConfig , $ config ['semaphore ' ]);
284+ }
285+
286+ public function provideValidSemaphoreConfigurationTests ()
287+ {
288+ yield [null , ['enabled ' => true , 'resources ' => []]];
289+
290+ yield ['redis://default ' , ['enabled ' => true , 'resources ' => ['default ' => 'redis://default ' ]]];
291+ yield [['foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ], ['enabled ' => true , 'resources ' => ['foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ]]];
292+ yield [['default ' => 'redis://default ' ], ['enabled ' => true , 'resources ' => ['default ' => 'redis://default ' ]]];
293+
294+ yield [['enabled ' => false , 'redis://default ' ], ['enabled ' => false , 'resources ' => ['default ' => 'redis://default ' ]]];
295+ yield [['enabled ' => false , 'foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ], ['enabled ' => false , 'resources ' => ['foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ]]];
296+ yield [['enabled ' => false , 'default ' => 'redis://default ' ], ['enabled ' => false , 'resources ' => ['default ' => 'redis://default ' ]]];
297+
298+ yield [['resources ' => 'redis://default ' ], ['enabled ' => true , 'resources ' => ['default ' => 'redis://default ' ]]];
299+ yield [['resources ' => ['foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ]], ['enabled ' => true , 'resources ' => ['foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ]]];
300+ yield [['resources ' => ['default ' => 'redis://default ' ]], ['enabled ' => true , 'resources ' => ['default ' => 'redis://default ' ]]];
301+
302+ yield [['enabled ' => false , 'resources ' => 'redis://default ' ], ['enabled ' => false , 'resources ' => ['default ' => 'redis://default ' ]]];
303+ yield [['enabled ' => false , 'resources ' => ['foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ]], ['enabled ' => false , 'resources ' => ['foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ]]];
304+ yield [['enabled ' => false , 'resources ' => ['default ' => 'redis://default ' ]], ['enabled ' => false , 'resources ' => ['default ' => 'redis://default ' ]]];
305+
306+ // xml
307+
308+ yield [['resource ' => ['redis://default ' ]], ['enabled ' => true , 'resources ' => ['default ' => 'redis://default ' ]]];
309+ yield [['resource ' => ['redis://default ' , ['name ' => 'foo ' , 'value ' => 'redis://default ' ]]], ['enabled ' => true , 'resources ' => ['default ' => 'redis://default ' , 'foo ' => 'redis://default ' ]]];
310+ yield [['resource ' => [['name ' => 'foo ' , 'value ' => 'redis://default ' ]]], ['enabled ' => true , 'resources ' => ['foo ' => 'redis://default ' ]]];
311+ yield [['resource ' => [['name ' => 'foo ' , 'value ' => 'redis://default ' ], ['name ' => 'bar ' , 'value ' => 'redis://default ' ]]], ['enabled ' => true , 'resources ' => ['foo ' => 'redis://default ' , 'bar ' => 'redis://default ' ]]];
312+
313+ yield [['enabled ' => false , 'resource ' => ['redis://default ' ]], ['enabled ' => false , 'resources ' => ['default ' => 'redis://default ' ]]];
314+ yield [['enabled ' => false , 'resource ' => ['redis://default ' , ['name ' => 'foo ' , 'value ' => 'redis://default ' ]]], ['enabled ' => false , 'resources ' => ['default ' => 'redis://default ' , 'foo ' => 'redis://default ' ]]];
315+ yield [['enabled ' => false , 'resource ' => [['name ' => 'foo ' , 'value ' => 'redis://default ' ]]], ['enabled ' => false , 'resources ' => ['foo ' => 'redis://default ' ]]];
316+ yield [['enabled ' => false , 'resource ' => [['name ' => 'foo ' , 'value ' => 'redis://foo ' ], ['name ' => 'bar ' , 'value ' => 'redis://bar ' ]]], ['enabled ' => false , 'resources ' => ['foo ' => 'redis://foo ' , 'bar ' => 'redis://bar ' ]]];
317+ }
318+
268319 public function testItShowANiceMessageIfTwoMessengerBusesAreConfiguredButNoDefaultBus ()
269320 {
270321 $ expectedMessage = 'You must specify the "default_bus" if you define more than one bus. ' ;
@@ -525,6 +576,11 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
525576 ],
526577 ],
527578 ],
579+ 'semaphore ' => [
580+ 'enabled ' => !class_exists (FullStack::class),
581+ 'resources ' => [
582+ ],
583+ ],
528584 'messenger ' => [
529585 'enabled ' => !class_exists (FullStack::class) && interface_exists (MessageBusInterface::class),
530586 'routing ' => [],
0 commit comments