public void Detect_ReturnsNull_ForSourceRepoWithServerJs_NotInRootDirectory() { // Arrange var version = "8.11.2"; var detector = CreateNodePlatformDetector( supportedNodeVersions: new[] { version }, defaultVersion: version, new NodeScriptGeneratorOptions()); var repo = new MemorySourceRepo(); repo.AddFile(SamplePackageJsonContents.SimpleServerJs, "subDir1", "server.js"); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.Null(result); }
public void Detect_ReturnsNull_IfIISStartupFileIsPresent(string iisStartupFileName) { // Arrange var version = "8.11.2"; var sourceRepo = new MemorySourceRepo(); sourceRepo.AddFile("", iisStartupFileName); var detector = CreateNodePlatformDetector( supportedNodeVersions: new[] { version }, defaultVersion: version, new NodeScriptGeneratorOptions()); var context = CreateContext(sourceRepo); // Act var result = detector.Detect(context); // Assert Assert.Null(result); }
public void Detect_ReturnsLernaNpmClientName_IfLernaJsonFileExists() { // Arrange var sourceRepo = new MemorySourceRepo(); sourceRepo.AddFile("", NodeConstants.PackageJsonFileName); sourceRepo.AddFile("", NodeConstants.YarnLockFileName); sourceRepo.AddFile(LernaJsonWithNpmClient, NodeConstants.LernaJsonFileName); var detector = CreateNodePlatformDetector(); var context = CreateContext(sourceRepo); // Act var result = (NodePlatformDetectorResult)detector.Detect(context); // Assert Assert.NotNull(result); Assert.True(result.HasLernaJsonFile); Assert.Equal(result.LernaNpmClient, NodeConstants.YarnToolName); }
public void Detect_ReturnsVersionFromPackageJson_IfEnvironmentVariableValueIsNotPresent() { // Arrange var detector = CreateNodePlatformDetector(); var repo = new MemorySourceRepo(); var packageJson = PackageJsonTemplateWithNodeVersion.Replace("#VERSION_RANGE#", "6.11.0"); repo.AddFile(packageJson, NodeConstants.PackageJsonFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("nodejs", result.Platform); Assert.Equal("6.11.0", result.PlatformVersion); Assert.Equal(string.Empty, result.AppDirectory); }
public void Detect_ReturnsFalse_ForSourceRepoHasInvalidyamlYarnlockFile() { // Arrange var detector = CreateNodePlatformDetector(); var repo = new MemorySourceRepo(); repo.AddFile(SampleInvalidYAMLYarnLockfile, NodeConstants.YarnLockFileName); var context = CreateContext(repo); // Act var result = (NodePlatformDetectorResult)detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("nodejs", result.Platform); Assert.Null(result.PlatformVersion); Assert.Equal(string.Empty, result.AppDirectory); Assert.False(result.IsYarnLockFileValidYamlFormat); }
public void GeneratedScript_DoesNotZipNodeModules_IfZipNodeModulesEnvironmentVariable_False() { // Arrange var scriptGenerator = GetNodePlatform( defaultNodeVersion: NodeVersions.Node12Version, new BuildScriptGeneratorOptions { PlatformVersion = "8.2.1" }, new NodeScriptGeneratorOptions()); var repo = new MemorySourceRepo(); repo.AddFile(PackageJsonWithBuildScript, NodeConstants.PackageJsonFileName); var context = CreateScriptGeneratorContext(repo); var detectorResult = new NodePlatformDetectorResult { Platform = NodeConstants.PlatformName, PlatformVersion = "10.10.10", }; var expected = new NodeBashBuildSnippetProperties { PackageInstallCommand = NpmInstallCommand, PackageInstallerVersionCommand = NodeConstants.NpmVersionCommand, NpmRunBuildCommand = "npm run build", NpmRunBuildAzureCommand = "npm run build:azure", HasProdDependencies = true, HasDevDependencies = true, ProductionOnlyPackageInstallCommand = string.Format( NodeConstants.ProductionOnlyPackageInstallCommandTemplate, NpmInstallCommand), CompressedNodeModulesFileName = null, CompressNodeModulesCommand = null, }; // Act var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context, detectorResult); // Assert Assert.NotNull(snippet); Assert.Equal( TemplateHelper.Render(TemplateHelper.TemplateResource.NodeBuildSnippet, expected), snippet.BashBuildScriptSnippet); Assert.True(scriptGenerator.IsCleanRepo(repo)); }
public void GeneratedScript_ConfigureAppInsights_Condition_Satisfied(string version) { // Condition is node version have to be 8 or newer or node version is 6.12.0 // As we don't support 6.12.0 in our build image we condition remains node 8 or newer // Arrange var otherEnvironment = new Dictionary <string, string> { { Constants.AppInsightsKey, "xyz" } }; var scriptGenerator = GetNodePlatformInstance( defaultNodeVersion: version, otherEnvironment: otherEnvironment); var repo = new MemorySourceRepo(); repo.AddFile(PackageJsonWithBuildScript, NodeConstants.PackageJsonFileName); var context = CreateScriptGeneratorContext(repo); context.NodeVersion = version; //context.LanguageVersion = version; var expected = new NodeBashBuildSnippetProperties( packageInstallCommand: NpmInstallCommand, runBuildCommand: "npm run build", runBuildAzureCommand: "npm run build:azure", hasProductionOnlyDependencies: true, productionOnlyPackageInstallCommand: string.Format( NodeConstants.ProductionOnlyPackageInstallCommandTemplate, NpmInstallCommand), compressedNodeModulesFileName: null, compressNodeModulesCommand: null, appInsightsInjectCommand: "npm install --save applicationinsights", appInsightsPackageName: "applicationinsights", appInsightsLoaderFileName: "oryx-appinsightsloader.js"); // Act var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context); // Assert Assert.NotNull(snippet); Assert.Contains("applicationinsights", snippet.BashBuildScriptSnippet); Assert.Equal( TemplateHelper.Render(TemplateHelper.TemplateResource.NodeBuildSnippet, expected), snippet.BashBuildScriptSnippet); Assert.True(scriptGenerator.IsCleanRepo(repo)); }
public void Detect_Throws_WhenUnsupportedNodeVersion_IsDetected() { // Arrange var version = "6.11.0"; var detector = CreateNodePlatformDetector( supportedNodeVersions: new[] { version }, defaultVersion: version, new NodeScriptGeneratorOptions()); var repo = new MemorySourceRepo(); var context = CreateContext(repo); repo.AddFile(PakageJsonWithUnsupportedNodeVersion, NodeConstants.PackageJsonFileName); // Act & Assert var exception = Assert.Throws <UnsupportedVersionException>(() => detector.Detect(context)); Assert.Equal( $"Platform '{NodeConstants.PlatformName}' version '20.20.20' is unsupported. Supported versions: {version}", exception.Message); }
public void Detect_ReturnsResult_WithDefaultVersion_ForPackageJsonWithNoExplicitVersionsSpecified() { // Arrange var detector = CreateNodePlatformDetector( supportedNodeVersions: new[] { NodeConstants.NodeLtsVersion }, defaultVersion: NodeConstants.NodeLtsVersion, new NodeScriptGeneratorOptions()); var repo = new MemorySourceRepo(); repo.AddFile(PackageJsonWithNoVersions, NodeConstants.PackageJsonFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("nodejs", result.Platform); Assert.Equal(NodeConstants.NodeLtsVersion, result.PlatformVersion); }
public void Detect_ReturnsDefaultVersionOfVersionProvider_IfNoVersionFoundInPackageJson_OrOptions() { // Arrange var detector = CreateNodePlatformDetector( supportedNodeVersions: new[] { "6.11.0", "8.11.2", "10.14.0" }, defaultVersion: "8.11.2", new NodeScriptGeneratorOptions()); var repo = new MemorySourceRepo(); repo.AddFile(PackageJsonWithNoVersions, NodeConstants.PackageJsonFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("nodejs", result.Platform); Assert.Equal("8.11.2", result.PlatformVersion); }
public void Detect_ReturnsResult_WithDefaultVersion_ForSourceRepoOnlyWithAppJs() { // Arrange var detector = CreateNodePlatformDetector( supportedNodeVersions: new[] { NodeConstants.NodeLtsVersion }, defaultVersion: NodeConstants.NodeLtsVersion, new NodeScriptGeneratorOptions()); var repo = new MemorySourceRepo(); repo.AddFile("app.js content", "app.js"); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("nodejs", result.Platform); Assert.Equal(NodeConstants.NodeLtsVersion, result.PlatformVersion); }
public void Detect_ReturnsResult_WithDefaultVersion_ForSourceRepoOnlyWithAppJs_AndNoPackageJson() { // Arrange var expectedVersion = "1.2.3"; var detector = CreateNodePlatform( supportedNodeVersions: new[] { expectedVersion }, defaultVersion: expectedVersion); var repo = new MemorySourceRepo(); repo.AddFile("app.js content", "app.js"); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal(NodeConstants.PlatformName, result.Platform); Assert.Equal(expectedVersion, result.PlatformVersion); }
public void Detect_ReturnsDefaultVersionOfVersionProvider_IfNoVersionFoundInPackageJson_OrOptions() { // Arrange var expectedVersion = "8.11.2"; var detector = CreateNodePlatform( supportedNodeVersions: new[] { "6.11.0", expectedVersion, "10.14.0" }, defaultVersion: expectedVersion); var repo = new MemorySourceRepo(); repo.AddFile(SamplePackageJsonContents.PackageJsonWithNoVersions, NodeConstants.PackageJsonFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal(NodeConstants.PlatformName, result.Platform); Assert.Equal(expectedVersion, result.PlatformVersion); }
public void Detect_Returns_ForSourceRepoHasYarnrcYmlFile_InRootDirectory() { // Arrange var detector = CreateNodePlatformDetector(); var repo = new MemorySourceRepo(); repo.AddFile(SampleValidYAMLYarnLockfile, NodeConstants.YarnLockFileName); repo.AddFile("", ".yarnrc.yml"); var context = CreateContext(repo); // Act var result = (NodePlatformDetectorResult)detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("nodejs", result.Platform); Assert.Null(result.PlatformVersion); Assert.Equal(string.Empty, result.AppDirectory); Assert.True(result.HasYarnrcYmlFile); }
public void Detect_ReturnsVersion_FromVersionProvider_IfNoVersionFoundInComposerFile_OrEnvVariable() { // Arrange var environment = new TestEnvironment(); var detector = CreatePhpLanguageDetector( supportedPhpVersions: new[] { "7.3.14", "7.2.5", "5.6.0" }, defaultVersion: "7.3.14", environment); var repo = new MemorySourceRepo(); repo.AddFile("{}", PhpConstants.ComposerFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("7.3.14", result.LanguageVersion); }
public void Detect_ReturnsDefaultVersion_IfNoVersionFoundInComposerFile_OrOptions() { // Arrange var expectedVersion = "7.3.14"; var platform = CreatePhpPlatform( supportedPhpVersions: new[] { "5.6.0", expectedVersion, "7.2.5" }, defaultVersion: expectedVersion); var repo = new MemorySourceRepo(); repo.AddFile("{}", PhpConstants.ComposerFileName); var context = CreateContext(repo); // Act var result = platform.Detect(context); // Assert Assert.NotNull(result); Assert.Equal(PhpConstants.PlatformName, result.Platform); Assert.Equal(expectedVersion, result.PlatformVersion); }
public void Detect_ReturnsDefaultVersion_ForSourceRepoOnlyWithServerJs_AndNoPackageJson() { // Arrange var expectedVersion = "1.2.3"; var platform = CreateNodePlatform( supportedNodeVersions: new[] { expectedVersion }, defaultVersion: expectedVersion); var repo = new MemorySourceRepo(); repo.AddFile(SamplePackageJsonContents.SimpleServerJs, "server.js"); var context = CreateContext(repo); // Act var result = platform.Detect(context); // Assert Assert.NotNull(result); Assert.Equal(NodeConstants.PlatformName, result.Platform); Assert.Equal(expectedVersion, result.PlatformVersion); }
public void Detect_ReturnsNullVersion_ForPackageJsonWithOnlyNpmVersion() { // Node detector only looks for node version and not the NPM version. The individual script // generator looks for npm version. // Arrange var detector = CreateNodePlatformDetector(); var repo = new MemorySourceRepo(); repo.AddFile(PackageJsonWithOnlyNpmVersion, NodeConstants.PackageJsonFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("nodejs", result.Platform); Assert.Null(result.PlatformVersion); }
public void BuildScript_DoesNotHaveSdkInstallScript_IfDynamicInstallNotEnabled_AndSdkIsNotAlreadyInstalled() { // Arrange var nodePlatform = CreateNodePlatform(dynamicInstallIsEnabled: false, sdkAlreadyInstalled: false); var repo = new MemorySourceRepo(); repo.AddFile(string.Empty, NodeConstants.PackageJsonFileName); var context = CreateContext(repo); var detectorResult = new NodePlatformDetectorResult { Platform = NodeConstants.PlatformName, PlatformVersion = "10.10", }; // Act var buildScriptSnippet = nodePlatform.GetInstallerScriptSnippet(context, detectorResult); // Assert Assert.Null(buildScriptSnippet); }
public void Detect_ReturnsPreviewVersion_UsingMaximumSatisfyingVersionRules( string[] supportedVersions, string versionInComposerFile, string expectedVersion) { // Arrange var platform = CreatePhpPlatform( detectedVersion: versionInComposerFile, supportedPhpVersions: supportedVersions); var repo = new MemorySourceRepo(); var context = CreateContext(repo); // Act var result = platform.Detect(context); // Assert Assert.NotNull(result); Assert.Equal(PhpConstants.PlatformName, result.Platform); Assert.Equal(expectedVersion, result.PlatformVersion); }
public void NodeDoesNotAddsBenv_IfNoPlatformVersionSupplied() { // Arrange var repo = new MemorySourceRepo(); repo.AddFile(PackageJsonWithMainScript, NodeConstants.PackageJsonFileName); var options = new RunScriptGeneratorOptions(); options.SourceRepo = repo; options.DebuggingMode = DebuggingMode.Standard; options.PlatformVersion = "10.15"; var platform = GetPlatform(); // Act var script = platform.GenerateBashRunScript(options); // Assert Assert.NotNull(script); Assert.Contains("source /usr/local/bin/benv node=10.15", script); }
public void Detect_ReturnsVersion_FromComposerFile_IfOptionsDoesNotHaveValue() { // Arrange var detector = CreatePhpPlatformDetector( supportedPhpVersions: new[] { "7.3.14", "7.2.5", "5.6.0" }, defaultVersion: "7.3.14", new PhpScriptGeneratorOptions()); var repo = new MemorySourceRepo(); var version = "5.6.0"; repo.AddFile("{\"require\":{\"php\":\"" + version + "\"}}", PhpConstants.ComposerFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("5.6.0", result.PlatformVersion); }
public void GeneratedScript_DoesNotUseVenv() { // Arrange var scriptGenerator = CreatePlatform(); var repo = new MemorySourceRepo(); repo.AddFile("", PythonConstants.RequirementsFileName); repo.AddFile("print(1)", "bla.py"); var context = new BuildScriptGeneratorContext { SourceRepo = repo }; // Act var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context); // Assert Assert.NotNull(snippet); Assert.Contains("Python Virtual Environment", snippet.BashBuildScriptSnippet); Assert.True(scriptGenerator.IsCleanRepo(repo)); }
public void GeneratedScript_UsesYarnInstallAndRunsNpmBuild_IfYarnLockIsPresent_AndHasBuildNodeUnderScripts() { // Arrange var scriptGenerator = GetNodePlatform( defaultNodeVersion: NodeVersions.Node12Version, new BuildScriptGeneratorOptions { PlatformVersion = "8.2.1" }, new NodeScriptGeneratorOptions()); var repo = new MemorySourceRepo(); repo.AddFile(PackageJsonWithBuildScript, NodeConstants.PackageJsonFileName); repo.AddFile("Yarn lock file content here", NodeConstants.YarnLockFileName); var context = CreateScriptGeneratorContext(repo); var expected = new NodeBashBuildSnippetProperties { PackageInstallCommand = YarnInstallCommand, PackageInstallerVersionCommand = NodeConstants.YarnVersionCommand, NpmRunBuildCommand = "yarn run build", NpmRunBuildAzureCommand = "yarn run build:azure", HasProdDependencies = true, HasDevDependencies = true, ProductionOnlyPackageInstallCommand = string.Format( NodeConstants.ProductionOnlyPackageInstallCommandTemplate, YarnInstallCommand), CompressedNodeModulesFileName = null, CompressNodeModulesCommand = null, ConfigureYarnCache = true, }; // Act var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context); // Assert Assert.NotNull(snippet); Assert.Equal( TemplateHelper.Render(TemplateHelper.TemplateResource.NodeBuildSnippet, expected), snippet.BashBuildScriptSnippet); Assert.True(scriptGenerator.IsCleanRepo(repo)); }
public void Detect_ReturnsResult_WithPhpDefaultVersion_WithComposerFile(string composerFileContent) { // Arrange var expectedVersion = "10.10.10"; var platform = CreatePhpPlatform( supportedPhpVersions: new[] { expectedVersion }, defaultVersion: expectedVersion); var repo = new MemorySourceRepo(); repo.AddFile(composerFileContent, PhpConstants.ComposerFileName); repo.AddFile("<?php echo true; ?>", "foo.php"); var context = CreateContext(repo); // Act var result = platform.Detect(context); // Assert Assert.NotNull(result); Assert.Equal(PhpConstants.PlatformName, result.Platform); Assert.Equal(expectedVersion, result.PlatformVersion); }
public void Detect_Throws_WhenUnsupportedPhpVersion_FoundInComposerFile() { // Arrange var unsupportedVersion = "0"; var supportedVersion = "7.3.5"; var platform = CreatePhpPlatform( supportedPhpVersions: new[] { supportedVersion }, defaultVersion: supportedVersion); var repo = new MemorySourceRepo(); repo.AddFile("{\"require\":{\"php\":\"" + unsupportedVersion + "\"}}", PhpConstants.ComposerFileName); var context = CreateContext(repo); // Act & Assert var exception = Assert.Throws <UnsupportedVersionException>(() => platform.Detect(context)); Assert.Equal( $"Platform 'php' version '{unsupportedVersion}' is unsupported. " + $"Supported versions: {supportedVersion}", exception.Message); }
public void Detect_ReturnsVersionFromPackageJson_IfEnvironmentVariableValueIsNotPresent() { // Arrange var detector = CreateNodePlatformDetector( supportedNodeVersions: new[] { "6.11.0", "8.11.2" }, defaultVersion: "8.11.2", new NodeScriptGeneratorOptions()); var repo = new MemorySourceRepo(); var packageJson = PackageJsonTemplateWithNodeVersion.Replace("#VERSION_RANGE#", "6.11.0"); repo.AddFile(packageJson, NodeConstants.PackageJsonFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("nodejs", result.Platform); Assert.Equal("6.11.0", result.PlatformVersion); }
public void GeneratedScript_WritesNpmRc_WithCustomRegistry() { // Arrange var scriptGenerator = GetNodePlatformInstance(defaultNpmVersion: "6.0.0"); var repo = new MemorySourceRepo(); repo.AddFile(PackageJsonWithNpmVersion, NodeConstants.PackageJsonFileName); var context = CreateScriptGeneratorContext(repo); context.LanguageVersion = "8.2.1"; context.Properties[NodePlatform.RegistryUrlPropertyKey] = "https://example.com/registry/"; // Act var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context); // Assert Assert.NotNull(snippet); Assert.Contains( $"echo \"registry={context.Properties[NodePlatform.RegistryUrlPropertyKey]}\" >> ~/.npmrc", snippet.BashBuildScriptSnippet); }
public void Detect_ReturnsTrue_IfBothConfigYmlFileAndGemfileExist_AndItsNotStaticWebApp() { // Arrange var detector = CreateRubyPlatformDetector(); var repo = new MemorySourceRepo(); repo.AddFile("", RubyConstants.ConfigYmlFileName); repo.AddFile("", RubyConstants.GemFileName); var context = CreateContext(repo); // Act var result = (RubyPlatformDetectorResult)detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal(RubyConstants.PlatformName, result.Platform); Assert.Null(result.PlatformVersion); Assert.Equal(string.Empty, result.AppDirectory); Assert.True(result.GemfileExists); Assert.True(result.ConfigYmlFileExists); }
public void Detect_ReturnsVersion_FromComposerFile_IfEnvironmentVariableDoesNotHaveValue() { // Arrange var environment = new TestEnvironment(); var detector = CreatePhpLanguageDetector( supportedPhpVersions: new[] { "7.3.14", "7.2.5", "5.6.0" }, defaultVersion: "7.3.14", environment); var repo = new MemorySourceRepo(); var version = "5.6.0"; repo.AddFile("{\"require\":{\"php\":\"" + version + "\"}}", PhpConstants.ComposerFileName); var context = CreateContext(repo); // Act var result = detector.Detect(context); // Assert Assert.NotNull(result); Assert.Equal("5.6.0", result.LanguageVersion); }