createMock(IConfig::class); $config->method('getSystemValueBool') ->with('dns_pinning', true) ->willReturn(true); /** @var ICertificateManager $certificateManager */ $certificateManager = $this->createMock(ICertificateManager::class); $dnsPinMiddleware = $this->createMock(DnsPinMiddleware::class); $dnsPinMiddleware ->expects($this->atLeastOnce()) ->method('addDnsPinning') ->willReturn(function () { }); $remoteHostValidator = $this->createMock(IRemoteHostValidator::class); $eventLogger = $this->createMock(IEventLogger::class); $logger = $this->createMock(LoggerInterface::class); $clientService = new ClientService( $config, $certificateManager, $dnsPinMiddleware, $remoteHostValidator, $eventLogger, $logger, ); $handler = new CurlHandler(); $stack = HandlerStack::create($handler); $stack->push($dnsPinMiddleware->addDnsPinning()); $stack->push(Middleware::tap(function (RequestInterface $request) use ($eventLogger) { $eventLogger->start('http:request', $request->getMethod() . ' request to ' . $request->getRequestTarget()); }, function () use ($eventLogger) { $eventLogger->end('http:request'); }), 'event logger'); $guzzleClient = new GuzzleClient(['handler' => $stack]); $this->assertEquals( new Client( $config, $certificateManager, $guzzleClient, $remoteHostValidator, $logger, ), $clientService->newClient() ); } public function testDisableDnsPinning(): void { /** @var IConfig $config */ $config = $this->createMock(IConfig::class); $config->method('getSystemValueBool') ->with('dns_pinning', true) ->willReturn(false); /** @var ICertificateManager $certificateManager */ $certificateManager = $this->createMock(ICertificateManager::class); $dnsPinMiddleware = $this->createMock(DnsPinMiddleware::class); $dnsPinMiddleware ->expects($this->never()) ->method('addDnsPinning') ->willReturn(function () { }); $remoteHostValidator = $this->createMock(IRemoteHostValidator::class); $eventLogger = $this->createMock(IEventLogger::class); $logger = $this->createMock(LoggerInterface::class); $clientService = new ClientService( $config, $certificateManager, $dnsPinMiddleware, $remoteHostValidator, $eventLogger, $logger, ); $handler = new CurlHandler(); $stack = HandlerStack::create($handler); $stack->push(Middleware::tap(function (RequestInterface $request) use ($eventLogger) { $eventLogger->start('http:request', $request->getMethod() . ' request to ' . $request->getRequestTarget()); }, function () use ($eventLogger) { $eventLogger->end('http:request'); }), 'event logger'); $guzzleClient = new GuzzleClient(['handler' => $stack]); $this->assertEquals( new Client( $config, $certificateManager, $guzzleClient, $remoteHostValidator, $logger, ), $clientService->newClient() ); } }