/** * @param string $cluster * @param bool|string $wiki * @return array */ public function &getExternalLB($cluster, $wiki = false) { if (!isset($this->extLBs[$cluster])) { $this->extLBs[$cluster] = $this->newExternalLB($cluster, $wiki); $this->extLBs[$cluster]->parentInfo(array('id' => "ext-{$cluster}")); $this->chronProt->initLB($this->extLBs[$cluster]); } return $this->extLBs[$cluster]; }
public function testChronologyProtector() { // (a) First HTTP request $mPos = new MySQLMasterPos('db1034-bin.000976', '843431247'); $mockDB = $this->getMockBuilder('DatabaseMysql')->disableOriginalConstructor()->getMock(); $mockDB->expects($this->any())->method('doneWrites')->will($this->returnValue(true)); $mockDB->expects($this->any())->method('getMasterPos')->will($this->returnValue($mPos)); $lb = $this->getMockBuilder('LoadBalancer')->disableOriginalConstructor()->getMock(); $lb->expects($this->any())->method('getConnection')->will($this->returnValue($mockDB)); $lb->expects($this->any())->method('getServerCount')->will($this->returnValue(2)); $lb->expects($this->any())->method('parentInfo')->will($this->returnValue(array('id' => "main-DEFAULT"))); $lb->expects($this->any())->method('getAnyOpenConnection')->will($this->returnValue($mockDB)); $bag = new HashBagOStuff(); $cp = new ChronologyProtector($bag, array('ip' => '127.0.0.1', 'agent' => "Totally-Not-FireFox")); $mockDB->expects($this->exactly(2))->method('doneWrites'); // Nothing to wait for $cp->initLB($lb); // Record in stash $cp->shutdownLB($lb); $cp->shutdown(); // (b) Second HTTP request $cp = new ChronologyProtector($bag, array('ip' => '127.0.0.1', 'agent' => "Totally-Not-FireFox")); $lb->expects($this->once())->method('waitFor')->with($this->equalTo($mPos)); // Wait $cp->initLB($lb); // Record in stash $cp->shutdownLB($lb); $cp->shutdown(); }
public function testChronologyProtector() { // (a) First HTTP request $mPos = new MySQLMasterPos('db1034-bin.000976', '843431247'); $now = microtime(true); $mockDB = $this->getMockBuilder('DatabaseMysql')->disableOriginalConstructor()->getMock(); $mockDB->method('writesOrCallbacksPending')->willReturn(true); $mockDB->method('lastDoneWrites')->willReturn($now); $mockDB->method('getMasterPos')->willReturn($mPos); $lb = $this->getMockBuilder('LoadBalancer')->disableOriginalConstructor()->getMock(); $lb->method('getConnection')->willReturn($mockDB); $lb->method('getServerCount')->willReturn(2); $lb->method('parentInfo')->willReturn(['id' => "main-DEFAULT"]); $lb->method('getAnyOpenConnection')->willReturn($mockDB); $lb->method('hasOrMadeRecentMasterChanges')->will($this->returnCallback(function () use($mockDB) { $p = 0; $p |= call_user_func([$mockDB, 'writesOrCallbacksPending']); $p |= call_user_func([$mockDB, 'lastDoneWrites']); return (bool) $p; })); $lb->method('getMasterPos')->willReturn($mPos); $bag = new HashBagOStuff(); $cp = new ChronologyProtector($bag, ['ip' => '127.0.0.1', 'agent' => "Totally-Not-FireFox"]); $mockDB->expects($this->exactly(2))->method('writesOrCallbacksPending'); $mockDB->expects($this->exactly(2))->method('lastDoneWrites'); // Nothing to wait for $cp->initLB($lb); // Record in stash $cp->shutdownLB($lb); $cp->shutdown(); // (b) Second HTTP request $cp = new ChronologyProtector($bag, ['ip' => '127.0.0.1', 'agent' => "Totally-Not-FireFox"]); $lb->expects($this->once())->method('waitFor')->with($this->equalTo($mPos)); // Wait $cp->initLB($lb); // Record in stash $cp->shutdownLB($lb); $cp->shutdown(); }