public function node()
{
$args = func_get_args();
if (count($args) < 1) {
throw new \RuntimeException("Missing argument. Must 1 arguments at minimum.");
}
$node = new Node();
if (count($args) === 1) {
// When it's passed 1 argument, register node with name only.
$node->setName($args[0]);
} elseif (count($args) === 2) {
// When it's passed 2 arguments, register node with roles and some options.
$node->setName($args[0]);
if (is_string($args[1]) || Arr::isVector($args[1])) {
$node->setReferenceRoles($args[1]);
} else {
if (isset($args[1]['roles'])) {
$node->setReferenceRoles($args[1]['roles']);
unset($args[1]['roles']);
}
$node->setOptions($args[1]);
}
} else {
// When it's passed more than 3 arguments, register node with roles and some options.
$node->setName($args[0]);
$node->setOptions($args[1]);
$node->setReferenceRoles($args[2]);
}
$this->container->set("nodes/" . $node->getName(), $node);
$roles = $node->getReferenceRoles();
if ($roles) {
if (is_string($roles)) {
$this->role($roles, $node->getName());
} else {
if (is_array($roles)) {
foreach ($roles as $role) {
$this->role($role, $node->getName());
}
}
}
}
return $node;
}
public function testNode() { $module = new ServerModule($this->container); $module->node("node1"); $this->assertEquals("node1", $module->getNode("node1")->getName()); $module->node("node2", "role1"); $this->assertEquals("node2", $module->getNode("node2")->getName()); $this->assertSame(array("node2" => "node2"), $module->getRole("role1")); $module->node("node3", array("role1", "role2")); $this->assertEquals("node3", $module->getNode("node3")->getName()); $this->assertSame(array("node3" => "node3"), $module->getRole("role2")); $module->node("node4", array("roles" => "role3")); $this->assertEquals("node4", $module->getNode("node4")->getName()); $this->assertSame(array("node4" => "node4"), $module->getRole("role3")); $module->node("node5", array("roles" => array("role4", "role5"))); $this->assertEquals("node5", $module->getNode("node5")->getName()); $this->assertSame(array("node5" => "node5"), $module->getRole("role4")); $this->assertSame(array("node5" => "node5"), $module->getRole("role5")); $module->node("node6", array("roles" => "role4")); $this->assertSame(array("node5" => "node5", "node6" => "node6"), $module->getRole("role4")); $module->node("node7", array("username" => "kohkimakimoto"), "role7"); $this->assertSame(array("node7" => "node7"), $module->getRole("role7")); }