/** * @dataProvider provideCheckIpLimits */ public function testCheckIpLimits($ip, $sessionData, $userData, $logLevel1, $logLevel2) { $this->setMwGlobals(array('wgSuspiciousIpPerSessionLimit' => 5, 'wgSuspiciousIpPerUserLimit' => 10, 'wgSuspiciousIpExpiry' => 600, 'wgSquidServers' => array('11.22.33.44'))); $manager = new SessionManager(); $logger = $this->getMock('\\Psr\\Log\\LoggerInterface'); $this->setLogger('session-ip', $logger); $request = new \FauxRequest(); $request->setIP($ip); $session = $manager->getSessionForRequest($request); /** @var SessionBackend $backend */ $backend = \TestingAccessWrapper::newFromObject($session)->backend; $data =& $backend->getData(); $data = array('SessionManager-ip' => $sessionData); $backend->setUser(User::newFromName('UTSysop')); $manager = \TestingAccessWrapper::newFromObject($manager); $manager->store->set('SessionManager-ip:' . md5('UTSysop'), $userData); $logger->expects($this->exactly(isset($logLevel1) + isset($logLevel2)))->method('log'); if ($logLevel1) { $logger->expects($this->at(0))->method('log')->with($logLevel1, 'Same session used from {count} IPs', $this->isType('array')); } if ($logLevel2) { $logger->expects($this->at(isset($logLevel1)))->method('log')->with($logLevel2, 'Same user had sessions from {count} IPs', $this->isType('array')); } $manager->checkIpLimits($session); }