discovery = new SiteAliasFileDiscovery(); $this->discovery->addSearchLocation($this->fixturesDir() . '/sitealiases/legacy'); $this->sut = new LegacyAliasConverter($this->discovery); $this->target = $this->tempdir(); $this->sut->setTargetDir($this->target); } protected function tearDown() { $this->removeDir($this->target); } protected function tempdir() { $tempfile = tempnam(sys_get_temp_dir(),''); if (file_exists($tempfile)) { unlink($tempfile); } mkdir($tempfile); if (is_dir($tempfile)) { return $tempfile; } } public function testWriteOne() { $testPath = $this->target . '/testWriteOne.yml'; $checksumPath = $this->target . '/.checksums/testWriteOne.md5'; $testContents = 'test: This is the initial file contents'; // Write the data once, and confirm it was written. $this->callProtected('writeOne', [$testPath, $testContents]); $this->assertStringEqualsFile($testPath, $testContents); // Check to see that the checksum file was written, and that // it contains a useful comment. $checksumContents = file_get_contents($checksumPath); $this->assertContains("# Checksum for converted Drush alias file testWriteOne.yml.\n# Delete this checksum file or modify testWriteOne.yml to prevent further updates to it.", $checksumContents); $overwriteContents = 'test: Overwrite the file contents'; // Write the data again, and confirm it was changed. $this->callProtected('writeOne', [$testPath, $overwriteContents]); $this->assertStringEqualsFile($testPath, $overwriteContents); $simulatedEditedContents = 'test: My simulated edit'; file_put_contents($testPath, $simulatedEditedContents); $ignoredContents = 'test: Data that is not written'; // Write the yet data again; this time, confirm that // nothing changed, because the checksum does not match. $this->callProtected('writeOne', [$testPath, $ignoredContents]); $this->assertStringEqualsFile($testPath, $simulatedEditedContents); // Write yet again, this time removing the target so that it will // be writable again. unlink($testPath); $this->callProtected('writeOne', [$testPath, $overwriteContents]); $this->assertStringEqualsFile($testPath, $overwriteContents); $this->assertFileExists($checksumPath); // Remove the checksum file, and confirm that the target cannot // be overwritten unlink($checksumPath); $this->callProtected('writeOne', [$testPath, $ignoredContents]); $this->assertStringEqualsFile($testPath, $overwriteContents); } public function testConvertAll() { $legacyFiles = $this->discovery->findAllLegacyAliasFiles(); $result = $this->callProtected('convertAll', [$legacyFiles]); ksort($result); $this->assertEquals('cc.site.yml,isp.site.yml,live.site.yml,nitrogen.site.yml,one.site.yml,outlandish-josh.site.yml,pantheon.site.yml,server.site.yml,update.site.yml', implode(',', array_keys($result))); //$this->assertEquals('', var_export($result, true)); $this->assertEquals('dev-outlandish-josh.pantheonsite.io', $result['outlandish-josh.site.yml']['dev']['uri']); } public function testWriteAll() { $convertedFileFixtures = [ 'a.yml' => [ 'foo' => 'bar', ], 'b.yml' => [ ], ]; $this->callProtected('cacheConvertedFilePath', ['b.aliases.drushrc.php', 'b.yml']); $this->callProtected('writeAll', [$convertedFileFixtures]); $this->assertFileExists($this->target . '/a.yml'); $this->assertFileExists($this->target . '/.checksums/a.md5'); $this->assertFileExists($this->target . '/b.yml'); $this->assertFileExists($this->target . '/.checksums/b.md5'); $this->assertStringEqualsFile($this->target . '/b.yml', "# This is a placeholder file used to track when b.aliases.drushrc.php was converted.\n# If you delete b.aliases.drushrc.php, then you may delete this file."); $aContents = file_get_contents($this->target . '/a.yml'); $this->assertEquals('foo: bar', trim($aContents)); } /** * Test to see if the data converter produces the right data for the * legacy alias file fixtures. * * @dataProvider convertLegacyFileTestData */ public function testConvertLegacyFile($source, $expected) { $legacyFile = $this->fixturesDir() . '/sitealiases/legacy/' . $source; $result = $this->callProtected('convertLegacyFile', [$legacyFile]); $this->assertEquals($expected, $result); } public function convertLegacyFileTestData() { return [ [ 'one.alias.drushrc.php', [ 'one.site.yml' => [ 'dev' => [ 'uri' => 'http://example.com', 'root' => '/path/to/drupal', ], ], ], ], [ 'server.aliases.drushrc.php', [ 'isp.site.yml' => [ 'dev' => [ 'host' => 'hydrogen.server.org', 'user' => 'www-admin', ], ], 'nitrogen.site.yml' => [ 'dev' => [ 'host' => 'nitrogen.server.org', 'user' => 'admin', ], ], ], ], [ 'pantheon.aliases.drushrc.php', [ 'outlandish-josh.site.yml' => [ 'dev' => [ 'uri' => 'dev-outlandish-josh.pantheonsite.io', 'host' => 'appserver.dev.site-id.drush.in', 'user' => 'dev.site-id', 'paths' => [ 'files' => 'code/sites/default/files', 'drush-script' => 'drush', ], 'options' => [ 'db-url' => 'mysql://pantheon:pw@dbserver.dev.site-id.drush.in:21086/pantheon', 'db-allows-remote' => true, ], 'ssh' => [ 'options' => '-p 2222 -o "AddressFamily inet"', ], ], 'live' => [ 'uri' => 'www.outlandishjosh.com', 'host' => 'appserver.live.site-id.drush.in', 'user' => 'live.site-id', 'paths' => [ 'files' => 'code/sites/default/files', 'drush-script' => 'drush', ], 'options' => [ 'db-url' => 'mysql://pantheon:pw@dbserver.live.site-id.drush.in:10516/pantheon', 'db-allows-remote' => true, ], 'ssh' => [ 'options' => '-p 2222 -o "AddressFamily inet"', ], ], 'test' => [ 'uri' => 'test-outlandish-josh.pantheonsite.io', 'host' => 'appserver.test.site-id.drush.in', 'user' => 'test.site-id', 'paths' => [ 'files' => 'code/sites/default/files', 'drush-script' => 'drush', ], 'options' => [ 'db-url' => 'mysql://pantheon:pw@dbserver.test.site-id.drush.in:11621/pantheon', 'db-allows-remote' => true, ], 'ssh' => [ 'options' => '-p 2222 -o "AddressFamily inet"', ], ], ], ], ], /* // Future: this test includes 'parent' and 'target-command-specific', // which are not converted yet. [ 'cc.aliases.drushrc.php', [ 'cc.site.yml' => [ 'live' => [ ], 'update' => [ ], ], ], ], */ ]; } }