public function testAdd() { $this->clear(); //old (no newshard) configuration $cm = new Cm([['host' => '127.0.0.1', 'port' => 11211], ['host' => '127.0.0.1', 'port' => 11212]], true); $this->assertTrue($cm->add("b", "valueB")); $this->assertTrue($cm->add("c", "valueC")); $this->assertTrue($cm->add("d", "valueD")); //check first shard $this->assertEquals($this->getFromPort(11211, "b"), "valueB", "first shard B"); $this->assertEquals($this->getFromPort(11211, "c"), null, "first shard C"); $this->assertEquals($this->getFromPort(11211, "d"), "valueD", "first shard D"); //check second shard $this->assertEquals($this->getFromPort(11212, "b"), null, "second shard b"); $this->assertEquals($this->getFromPort(11212, "c"), "valueC", "second shard c"); $this->assertEquals($this->getFromPort(11212, "d"), null, "second shard d"); //configuration with newhost $cm = new Cm([['host' => '127.0.0.1', 'port' => 11211], ['host' => '127.0.0.1', 'port' => 11212], ['newhost' => '127.0.0.1', 'port' => 11221]], true); //old keys avalibaly $this->assertEquals($cm->get("b"), "valueB", "check b in new config"); $this->assertEquals($cm->get("c"), "valueC", "check c in new config"); $this->assertEquals($cm->get("d"), "valueD", "check d in new config"); //reSet keys $cm->add("b", "valueB"); $cm->add("c", "valueC"); $cm->add("d", "valueD"); //check keys for both configurations //check first shard $this->assertEquals($this->getFromPort(11211, "b"), "valueB", "new/first shard B"); $this->assertEquals($this->getFromPort(11211, "c"), "valueC", "new/first shard C"); $this->assertEquals($this->getFromPort(11211, "d"), "valueD", "new/first shard D"); //check second shard $this->assertEquals($this->getFromPort(11212, "b"), null, "new/second shard B"); $this->assertEquals($this->getFromPort(11212, "c"), "valueC", "new/second shard C"); $this->assertEquals($this->getFromPort(11212, "d"), "valueD", "new/second shard D"); //check new shard $this->assertEquals($this->getFromPort(11221, "b"), "valueB", "new/new shard B"); $this->assertEquals($this->getFromPort(11221, "c"), null, "new/new shard C"); $this->assertEquals($this->getFromPort(11221, "d"), null, "new/new shard D"); $cm = new Cm([['host' => '127.0.0.1', 'port' => 11211], ['host' => '127.0.0.1', 'port' => 11212], ['host' => '127.0.0.1', 'port' => 11221]], true); //old keys avalibaly $this->assertEquals($cm->get("b"), "valueB", "check b in only new config"); $this->assertEquals($cm->get("c"), "valueC", "check c in only new config"); $this->assertEquals($cm->get("d"), "valueD", "check d in only new config"); }
public function testShardingByLatestByteAdd() { $shardA = ['host' => '127.0.0.1', 'port' => 11211]; $shardB = ['host' => '127.0.0.1', 'port' => 11212]; $scm = new Cm([$shardA, $shardB]); $scmA = new Cm([$shardA]); $scmB = new Cm([$shardB]); //cleanup $scm->remove("aa"); $scm->remove("ab"); $scmA->remove("aa"); $scmA->remove("ab"); $scmB->remove("aa"); $scmB->remove("ab"); $this->assertTrue($scm->add("aa", "valueA"), "st-1"); $this->assertTrue($scm->add("ab", "valueB"), "st-2"); $this->assertEquals($scm->get("aa"), "valueA", "st-3"); $this->assertEquals($scm->get("ab"), "valueB", "st-4"); $this->assertEquals($scmA->get("ab"), "valueB", "st-5"); $this->assertNull($scmA->get("aa"), "st-6"); $this->assertEquals($scmB->get("aa"), "valueA", "st-7"); $this->assertNull($scmB->get("ab"), "st-8"); }