Exemple #1
0
        /// <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;
                }
            }
        }
Exemple #2
0
        /// <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);
                }
            }
        }
Exemple #3
0
        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());
        }
Exemple #5
0
        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());
        }
Exemple #6
0
        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);
        }
Exemple #9
0
        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));
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        /// <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;
            }
        }
Exemple #12
0
        /// <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);
                }
            }
        }
Exemple #13
0
        /// <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);
            }
        }
Exemple #14
0
        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);
        }
Exemple #15
0
        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);
        }
Exemple #16
0
        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);
        }