2 use Liuggio\StatsdClient\Factory\StatsdDataFactory;
26 $testConfig->set(
'ServiceWiringFiles', $globalConfig->get(
'ServiceWiringFiles' ) );
27 $testConfig->set(
'ConfigRegistry', $globalConfig->get(
'ConfigRegistry' ) );
36 if ( $config ===
null ) {
43 $wiringFiles = $config->get(
'ServiceWiringFiles' );
44 $instance->loadWiringFiles( $wiringFiles );
50 $services = MediaWikiServices::getInstance();
51 $this->assertInstanceOf(
'MediaWiki\\MediaWikiServices',
$services );
56 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
58 $this->assertInstanceOf(
'MediaWiki\\MediaWikiServices', $oldServices );
59 $this->assertNotSame( $oldServices, $newServices );
61 $theServices = MediaWikiServices::getInstance();
62 $this->assertSame( $theServices, $newServices );
64 MediaWikiServices::forceGlobalInstance( $oldServices );
66 $theServices = MediaWikiServices::getInstance();
67 $this->assertSame( $theServices, $oldServices );
72 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
75 $service1->expects( $this->never() )
76 ->method(
'salvage' );
78 $newServices->defineService(
80 function()
use ( $service1 ) {
86 $newServices->getService(
'Test' );
88 MediaWikiServices::resetGlobalInstance( $this->
newTestConfig() );
89 $theServices = MediaWikiServices::getInstance();
93 $theServices->getService(
'Test' ),
94 'service definition should survive reset'
97 $this->assertNotSame( $theServices, $newServices );
98 $this->assertNotSame( $theServices, $oldServices );
100 MediaWikiServices::forceGlobalInstance( $oldServices );
105 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
108 $service1->expects( $this->never() )
109 ->method(
'salvage' );
112 $service2->expects( $this->once() )
113 ->method(
'salvage' )
117 $instantiatorReturnValues = [
122 $newServices->defineService(
124 function()
use ( &$instantiatorReturnValues ) {
125 return array_shift( $instantiatorReturnValues );
130 $newServices->getService(
'Test' );
132 MediaWikiServices::resetGlobalInstance( $this->
newTestConfig(),
'quick' );
133 $theServices = MediaWikiServices::getInstance();
135 $this->assertSame( $service2, $theServices->getService(
'Test' ) );
137 $this->assertNotSame( $theServices, $newServices );
138 $this->assertNotSame( $theServices, $oldServices );
140 MediaWikiServices::forceGlobalInstance( $oldServices );
145 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
147 $lbFactory = $this->getMockBuilder(
'LBFactorySimple' )
148 ->disableOriginalConstructor()
151 $newServices->redefineService(
152 'DBLoadBalancerFactory',
159 $newServices->getService(
'DBLoadBalancerFactory' );
161 MediaWikiServices::disableStorageBackend();
164 MediaWikiServices::getInstance()->getService(
'DBLoadBalancerFactory' );
165 $this->fail(
'DBLoadBalancerFactory should have been disabled' );
169 }
catch ( Throwable $ex ) {
170 $this->fail(
'ServiceDisabledException expected, caught ' . get_class( $ex ) );
173 MediaWikiServices::forceGlobalInstance( $oldServices );
174 $newServices->destroy();
179 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
182 $service1->expects( $this->once() )
183 ->method(
'destroy' );
186 $service2->expects( $this->never() )
187 ->method(
'destroy' );
190 $instantiatorReturnValues = [
195 $newServices->defineService(
197 function()
use ( &$instantiatorReturnValues ) {
198 return array_shift( $instantiatorReturnValues );
203 $oldTestService = $newServices->getService(
'Test' );
205 MediaWikiServices::resetChildProcessServices();
206 $finalServices = MediaWikiServices::getInstance();
208 $newTestService = $finalServices->getService(
'Test' );
209 $this->assertNotSame( $oldTestService, $newTestService );
211 MediaWikiServices::forceGlobalInstance( $oldServices );
220 function()
use ( &$serviceCounter ) {
222 $service = $this->createMock(
'MediaWiki\Services\DestructibleService' );
223 $service->expects( $this->once() )->method(
'destroy' );
229 $services->resetServiceForTesting(
'Test' );
230 $this->assertEquals( 0, $serviceCounter,
'No service instance should be created yet.' );
232 $oldInstance =
$services->getService(
'Test' );
233 $this->assertEquals( 1, $serviceCounter,
'A service instance should exit now.' );
236 $services->resetServiceForTesting(
'Test' );
237 $newInstance =
$services->getService(
'Test' );
239 $this->assertNotSame( $oldInstance, $newInstance );
242 $newInstance->destroy();
251 $service = $this->createMock(
'MediaWiki\Services\DestructibleService' );
252 $service->expects( $this->never() )->method(
'destroy' );
257 $oldInstance =
$services->getService(
'Test' );
260 $services->resetServiceForTesting(
'Test',
false );
261 $newInstance =
$services->getService(
'Test' );
263 $this->assertNotSame( $oldInstance, $newInstance );
271 foreach ( $getServiceCases
as $name => $case ) {
272 if (
$name[0] ===
'_' ) {
276 list( $service, $class ) = $case;
277 $getterCases[
$name] = [
291 $services = MediaWikiServices::getInstance();
293 $this->assertInstanceOf(
$type, $service );
313 'DBLoadBalancer' => [
'DBLoadBalancer',
'LoadBalancer' ],
341 $services = MediaWikiServices::getInstance();
344 $this->assertInstanceOf(
$type, $service );
351 $services = MediaWikiServices::getInstance();
357 $this->assertInternalType(
'object', $service );