/// <summary> /// Selects a node.js version to run the application with and augments iisnode.yml accordingly /// </summary> private void SelectNodeVersion(DeploymentContext context) { var fileSystem = new FileSystem(); var nodeSiteEnabler = new NodeSiteEnabler( fileSystem, repoFolder: _sourcePath, siteFolder: context.OutputPath, scriptPath: _scriptPath, settings: _settings); if (nodeSiteEnabler.LooksLikeNode()) { ILogger innerLogger = context.Logger.Log(Resources.Log_SelectNodeJsVersion); try { string log = nodeSiteEnabler.SelectNodeVersion(context.Tracer); if (!String.IsNullOrEmpty(log)) { innerLogger.Log(log); } } catch (Exception ex) { innerLogger.Log(ex); throw; } } }
/// <summary> /// Add a web.config file if we detect a Node site /// </summary> private void AddIISNodeConfig(DeploymentContext context) { var nodeSiteEnabler = new NodeSiteEnabler( new FileSystem(), repoFolder: _sourcePath, siteFolder: context.OutputPath, scriptPath: _scriptPath, settings: _settings); // Check if need to do anythng related to Node if (nodeSiteEnabler.NeedNodeHandling()) { // If we can figure out the start file, create the config file. // Otherwise give a warning string nodeStartFile = nodeSiteEnabler.GetNodeStartFile(); if (nodeStartFile != null) { context.Logger.Log(Resources.Log_CreatingNodeConfig); nodeSiteEnabler.CreateConfigFile(nodeStartFile); } else { context.Logger.Log(Resources.Log_NodeWithMissingServerJs); } } }
public void TestJsFileWithExtraNonNodeFile(string nonNodeFile) { var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData> { { @"c:\site\hello.js", new MockFileData("some js") }, { @"c:\site\" + nonNodeFile, new MockFileData("some file") }, }); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, @"c:\repo", @"c:\site"); Assert.False(nodeSiteEnabler.NeedNodeHandling()); }
public void TestServerJsWithExistingRepoConfig() { var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData> { { @"c:\site\server.js", new MockFileData("some js") }, { @"c:\repo\web.config", new MockFileData("some config") }, }); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, @"c:\repo", @"c:\site", null, new MockDeploymentSettingsManager()); Assert.False(nodeSiteEnabler.NeedNodeHandling()); }
public void TestJsFileWithExtraRandomFile() { var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData> { { @"c:\site\hello.js", new MockFileData("some js") }, { @"c:\site\foo.blah", new MockFileData("some file") }, }); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, @"c:\repo", @"c:\site"); Assert.True(nodeSiteEnabler.NeedNodeHandling()); Assert.Equal(null, nodeSiteEnabler.GetNodeStartFile()); }
public void TestJsFileWithAspxAndNodesModuleFolder() { var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData> { { @"c:\site\hello.js", new MockFileData("some js") }, { @"c:\site\hello.aspx", new MockFileData("some aspx") }, { @"c:\site\node_modules\foo.txt", new MockFileData("some file") }, }); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, @"c:\repo", @"c:\site"); Assert.True(nodeSiteEnabler.NeedNodeHandling()); Assert.Equal(null, nodeSiteEnabler.GetNodeStartFile()); }
public void TestServerJsWithExistingSiteConfig() { var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData> { { @"c:\site\server.js", new MockFileData("some js") }, { @"c:\site\web.config", new MockFileData("some config") }, }); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, @"c:\repo", @"c:\site", null, new MockDeploymentSettingsManager()); Assert.True(nodeSiteEnabler.NeedNodeHandling()); nodeSiteEnabler.CreateConfigFile("server.js"); Assert.True(fileSystem.File.ReadAllText(@"c:\site\web.config").Contains("server.js")); }
public void TestFallbackToDefaultNodeJsVersionWithServerJsOnly() { var repoDir = this.CreateTempDirectory(); var siteDir = this.CreateTempDirectory(); var fileSystem = new FileSystem(); fileSystem.File.WriteAllText(Path.Combine(repoDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "server.js"), "some js"); var scriptDir = Path.Combine(System.Environment.CurrentDirectory, "scripts"); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, repoDir, siteDir, scriptDir); Assert.True(nodeSiteEnabler.LooksLikeNode()); string output = nodeSiteEnabler.SelectNodeVersion(new MockTracer()); Assert.True(output.Contains("The package.json file is not present"), "the package.json was determined absent"); Assert.True(!fileSystem.File.Exists(Path.Combine(siteDir, "iisnode.yml")), "iisnode.yml has not been created at " + siteDir); fileSystem.Directory.Delete(repoDir, true); fileSystem.Directory.Delete(siteDir, true); }
public void TestJustOneStartFile(string existingStartFile) { var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData> { { @"c:\site\" + existingStartFile, new MockFileData("some js") }, { @"c:\site\foo.blah", new MockFileData("some file") }, }); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, @"c:\repo", @"c:\site"); Assert.True(nodeSiteEnabler.NeedNodeHandling()); string startFile = nodeSiteEnabler.GetNodeStartFile(); Assert.Equal(existingStartFile, startFile); Assert.False(fileSystem.File.Exists(@"c:\site\web.config")); nodeSiteEnabler.CreateConfigFile(startFile); Assert.True(fileSystem.File.Exists(@"c:\site\web.config")); Assert.True(fileSystem.File.ReadAllText(@"c:\site\web.config").Contains(existingStartFile)); }
public void TestFallbackToDefaultNodeJsVersionWithIisnodeYmlLackingNodeProcessCommandLine() { var repoDir = this.CreateTempDirectory(); var siteDir = this.CreateTempDirectory(); var fileSystem = new FileSystem(); fileSystem.File.WriteAllText(Path.Combine(repoDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(repoDir, "iisnode.yml"), "foo: bar"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "iisnode.yml"), "foo: bar"); var scriptDir = Path.Combine(System.Environment.CurrentDirectory, "scripts"); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, repoDir, siteDir, scriptDir); Assert.True(nodeSiteEnabler.LooksLikeNode()); string output = nodeSiteEnabler.SelectNodeVersion(new MockTracer()); Assert.True(output.Contains("The package.json file is not present"), "the package.json does not specify node.js version"); Assert.True(fileSystem.File.Exists(Path.Combine(siteDir, "iisnode.yml")), "iisnode.yml exists at " + siteDir); Assert.True(!fileSystem.File.ReadAllText(Path.Combine(siteDir, "iisnode.yml")).Contains("nodeProcessCommandLine"), "iisnode.yml at " + siteDir + " does not contain nodeProcessCommandLine"); fileSystem.Directory.Delete(repoDir, true); fileSystem.Directory.Delete(siteDir, true); }
/// <summary> /// Selects a node.js version to run the application with and augments iisnode.yml accordingly /// </summary> private void SelectNodeVersion(DeploymentContext context) { var fileSystem = new FileSystem(); var nodeSiteEnabler = new NodeSiteEnabler( fileSystem, repoFolder: _sourcePath, siteFolder: context.OutputPath, scriptPath: _scriptPath); ILogger innerLogger = null; try { if (nodeSiteEnabler.LooksLikeNode()) { innerLogger = context.Logger.Log(Resources.Log_SelectNodeJsVersion); string log = nodeSiteEnabler.SelectNodeVersion(context.Tracer); if (!String.IsNullOrEmpty(log)) { innerLogger.Log(log); } } } catch (Exception ex) { if (innerLogger != null) { innerLogger.Log(ex); } throw; } }
/// <summary> /// Add a web.config file if we detect a Node site /// </summary> private void AddIISNodeConfig(DeploymentContext context) { var nodeSiteEnabler = new NodeSiteEnabler( new FileSystem(), repoFolder: _sourcePath, siteFolder: context.OutputPath, scriptPath: _scriptPath); // Check if need to do anythng related to Node if (nodeSiteEnabler.NeedNodeHandling()) { // If we can figure out the start file, create the config file. // Otherwise give a warning string nodeStartFile = nodeSiteEnabler.GetNodeStartFile(); if (nodeStartFile != null) { context.Logger.Log(Resources.Log_CreatingNodeConfig); nodeSiteEnabler.CreateConfigFile(nodeStartFile); } else { context.Logger.Log(Resources.Log_NodeWithMissingServerJs); } } }
/// <summary> /// Selects a node.js version to run the application with and augments iisnode.yml accordingly /// </summary> private void SelectNodeVersion(DeploymentContext context) { var fileSystem = new FileSystem(); var nodeSiteEnabler = new NodeSiteEnabler( fileSystem, repoFolder: _sourcePath, siteFolder: context.OutputPath, scriptPath: _scriptPath); if (nodeSiteEnabler.LooksLikeNode()) { nodeSiteEnabler.SelectNodeVersion(context.Tracer); } }
public void TestMismatchBetweenAvailableVersionsAndRequestedVersions() { var repoDir = this.CreateTempDirectory(); var siteDir = this.CreateTempDirectory(); var fileSystem = new FileSystem(); fileSystem.File.WriteAllText(Path.Combine(repoDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(repoDir, "package.json"), "{ \"engines\": { \"node\": \"0.1.0\" }}"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "package.json"), "{ \"engines\": { \"node\": \"0.1.0\" }}"); var scriptDir = Path.Combine(System.Environment.CurrentDirectory, "scripts"); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, repoDir, siteDir, scriptDir); Assert.True(nodeSiteEnabler.LooksLikeNode()); try { nodeSiteEnabler.SelectNodeVersion(new MockTracer()); } catch (InvalidOperationException e) { Assert.True(e.InnerException != null); Assert.True(e.InnerException.Message.Contains("No available node.js version matches"), "No available node.js version matches"); } Assert.True(!fileSystem.File.Exists(Path.Combine(siteDir, "iisnode.yml")), "iisnode.yml does not exist at " + siteDir); fileSystem.Directory.Delete(repoDir, true); fileSystem.Directory.Delete(siteDir, true); }
public void TestTurningAutomaticVersionSelectionOffWithIisnodeYmlWithNodeProcessCommandLine() { var repoDir = this.CreateTempDirectory(); var siteDir = this.CreateTempDirectory(); var fileSystem = new FileSystem(); fileSystem.File.WriteAllText(Path.Combine(repoDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(repoDir, "package.json"), "{ \"engines\": { \"node\": \"0.1.0\" }}"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "package.json"), "{ \"engines\": { \"node\": \"0.1.0\" }}"); fileSystem.File.WriteAllText(Path.Combine(repoDir, "iisnode.yml"), "nodeProcessCommandLine: bar"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "iisnode.yml"), "nodeProcessCommandLine: bar"); var scriptDir = Path.Combine(System.Environment.CurrentDirectory, "scripts"); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, repoDir, siteDir, scriptDir); Assert.True(nodeSiteEnabler.LooksLikeNode()); string output = nodeSiteEnabler.SelectNodeVersion(new MockTracer()); Assert.True(output.Contains("The iisnode.yml file explicitly sets nodeProcessCommandLine"), "The iisnode.yml file explicitly sets nodeProcessCommandLine"); Assert.True(fileSystem.File.Exists(Path.Combine(siteDir, "iisnode.yml")), "iisnode.yml exists at " + siteDir); Assert.True(fileSystem.File.ReadAllText(Path.Combine(siteDir, "iisnode.yml")).Contains("nodeProcessCommandLine: bar"), "iisnode.yml at " + siteDir + " remains unchanged"); fileSystem.Directory.Delete(repoDir, true); fileSystem.Directory.Delete(siteDir, true); }
public void TestPositiveMatch() { var repoDir = this.CreateTempDirectory(); var siteDir = this.CreateTempDirectory(); var fileSystem = new FileSystem(); fileSystem.File.WriteAllText(Path.Combine(repoDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "server.js"), "some js"); fileSystem.File.WriteAllText(Path.Combine(repoDir, "package.json"), "{ \"engines\": { \"node\": \"> 0.6.0\" }}"); fileSystem.File.WriteAllText(Path.Combine(siteDir, "package.json"), "{ \"engines\": { \"node\": \"> 0.6.0\" }}"); var scriptDir = Path.Combine(System.Environment.CurrentDirectory, "scripts"); var nodeSiteEnabler = new NodeSiteEnabler(fileSystem, repoDir, siteDir, scriptDir); Assert.True(nodeSiteEnabler.LooksLikeNode()); string output = nodeSiteEnabler.SelectNodeVersion(new MockTracer()); Assert.True(output.Contains("Selected node.js version"), "Selected node.js version"); Assert.True(fileSystem.File.Exists(Path.Combine(siteDir, "iisnode.yml")), "iisnode.yml exists at " + siteDir); Assert.True(fileSystem.File.ReadAllText(Path.Combine(siteDir, "iisnode.yml")).Contains("nodeProcessCommandLine: "), "iisnode.yml at " + siteDir + " contains nodeProcessCommandLine"); fileSystem.Directory.Delete(repoDir, true); fileSystem.Directory.Delete(siteDir, true); }