/**
  * @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());
 }