/** * @covers WindowsAzure\ServiceRuntime\RoleEnvironment::getRoles * @covers WindowsAzure\ServiceRuntime\RoleEnvironment::_initialize */ public function testGetRoles() { // Setup $rootDirectory = 'root'; \vfsStreamWrapper::register(); \vfsStreamWrapper::setRoot(new \vfsStreamDirectory($rootDirectory)); $roleEnvironmentFileName = 'roleEnvironment'; $roleEnvironmentFileContent = '<?xml version="1.0" encoding="utf-8"?>' . '<RoleEnvironment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' . 'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' . '<Deployment id="deploymentId" emulated="false" />' . '<CurrentInstance id="role3instance1" roleName="role3" faultDomain="4" updateDomain="4">' . '</CurrentInstance>' . '<Roles>' . '<Role name="role1">' . '<Instances>' . '<Instance id="role1instance1" faultDomain="1" updateDomain="1">' . '<Endpoints>' . '<Endpoint name="MyInternalEndpoint1" address="127.255.0.0" port="20000" protocol="tcp" />' . '</Endpoints>' . '</Instance>' . '</Instances>' . '</Role>' . '<Role name="role2">' . '<Instances>' . '<Instance id="role2instance1" faultDomain="2" updateDomain="2">' . '<Endpoints>' . '<Endpoint name="MyInternalEndpoint2" address="127.255.0.2" port="20002" protocol="tcp" />' . '</Endpoints>' . '</Instance>' . '<Instance id="role2instance2" faultDomain="3" updateDomain="3">' . '<Endpoints>' . '<Endpoint name="MyInternalEndpoint3" address="127.255.0.3" port="20002" protocol="tcp" />' . '<Endpoint name="MyInternalEndpoint4" address="127.255.0.3" port="20004" protocol="tcp" />' . '</Endpoints>' . '</Instance>' . '</Instances>' . '</Role>' . '</Roles>' . '</RoleEnvironment>'; $file = \vfsStream::newFile($roleEnvironmentFileName); $file->setContent($roleEnvironmentFileContent); \vfsStreamWrapper::getRoot()->addChild($file); $goalStateFileName = 'goalstate'; $goalStateFileContent = '<?xml version="1.0" encoding="utf-8"?>' . '<GoalState xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' . 'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' . '<Incarnation>1</Incarnation>' . '<ExpectedState>Started</ExpectedState>' . '<RoleEnvironmentPath>' . \vfsStream::url($rootDirectory . '/' . $roleEnvironmentFileName) . '</RoleEnvironmentPath>' . '<CurrentStateEndpoint>\\.\\pipe\\WindowsAzureRuntime.CurrentState</CurrentStateEndpoint>' . '<Deadline>9999-12-31T23:59:59.9999999</Deadline>' . '</GoalState>'; $goalStateFileContent = dechex(strlen($goalStateFileContent)) . "\n" . $goalStateFileContent; $file = \vfsStream::newFile($goalStateFileName); $file->setContent($goalStateFileContent); \vfsStreamWrapper::getRoot()->addChild($file); $fileName = 'versionendpoint'; $fileContent = '<?xml version="1.0" encoding="utf-8"?>' . '<RuntimeServerDiscovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' . 'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' . '<RuntimeServerEndpoints>' . '<RuntimeServerEndpoint version="2011-03-08" path="' . \vfsStream::url($rootDirectory . '/' . $goalStateFileName) . '" />' . '</RuntimeServerEndpoints>' . '</RuntimeServerDiscovery>'; $file = \vfsStream::newFile($fileName); $file->setContent($fileContent); \vfsStreamWrapper::getRoot()->addChild($file); putenv('WaRuntimeEndpoint=' . \vfsStream::url($rootDirectory . '/' . $fileName)); // Test $roles = RoleEnvironment::getRoles(); $this->assertEquals(3, count($roles)); $this->assertTrue(array_key_exists('role1', $roles)); $this->assertTrue(array_key_exists('role2', $roles)); $this->assertTrue(array_key_exists('role3', $roles)); $role1 = $roles['role1']; $this->assertEquals('role1', $role1->getName()); $role1Instances = $role1->getInstances(); $this->assertEquals(1, count($role1Instances)); $this->assertTrue(array_key_exists('role1instance1', $role1Instances)); $this->assertEquals(1, $role1Instances['role1instance1']->getFaultDomain()); $this->assertEquals(1, $role1Instances['role1instance1']->getUpdateDomain()); $role2 = $roles['role2']; $this->assertEquals('role2', $role2->getName()); $role2Instances = $role2->getInstances(); $this->assertEquals(2, count($role2Instances)); $this->assertTrue(array_key_exists('role2instance1', $role2Instances)); $this->assertEquals(2, $role2Instances['role2instance1']->getFaultDomain()); $this->assertEquals(2, $role2Instances['role2instance1']->getUpdateDomain()); $this->assertTrue(array_key_exists('role2instance2', $role2Instances)); $this->assertEquals(3, $role2Instances['role2instance2']->getFaultDomain()); $this->assertEquals(3, $role2Instances['role2instance2']->getUpdateDomain()); $role3 = $roles['role3']; $this->assertEquals('role3', $role3->getName()); $role3Instances = $role3->getInstances(); $this->assertEquals(1, count($role3Instances)); $this->assertTrue(array_key_exists('role3instance1', $role3Instances)); $this->assertEquals(4, $role3Instances['role3instance1']->getFaultDomain()); $this->assertEquals(4, $role3Instances['role3instance1']->getUpdateDomain()); }