public void TryGenerateScript_Throws_IfCanDetectLanguageVersion_AndLanguageVersionIsUnsupported() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "2.0.0"); // Unsupported version var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector); var commonOptions = new BuildScriptGeneratorOptions(); var generator = CreateDefaultScriptGenerator(platform, commonOptions); var context = CreateScriptGeneratorContext(); // Act & Assert var exception = Assert.Throws <UnsupportedVersionException>( () => generator.GenerateBashScript(context, out var generatedScript)); Assert.Equal( "Platform 'test' version '2.0.0' is unsupported. Supported versions: 1.0.0", exception.Message); Assert.True(detector.DetectInvoked); }
public void DoesNotDetectPlatforms_IfDetectionResultsAlreadyProvided() { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: "test", detectedPlatformVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", installationScriptContent: "install-content", detector: detector); var envScriptProvider = CreateEnvironmentSetupScriptProvider(new[] { platform }); var context = CreateScriptGeneratorContext(); var detectionResults = new[] { new PlatformDetectorResult { Platform = "test", PlatformVersion = "1.0.0", } }; // Act var setupScript = envScriptProvider.GetBashScriptSnippet(context, detectionResults); // Assert Assert.False(detector.DetectInvoked); Assert.Contains("install-content", setupScript); Assert.DoesNotContain("script-content", setupScript); }
public void GenerateDockerfile_GeneratesBuildTagAndRuntime_ForProvidedPlatform( string platformName, string detectedPlatformVersion, string expectedBuildTag) { // Arrange var detector = new TestLanguageDetectorUsingLangName( detectedLanguageName: platformName, detectedLanguageVersion: detectedPlatformVersion); var platform = new TestProgrammingPlatform( platformName, new[] { detectedPlatformVersion }, detector: detector); var generator = CreateDefaultDockerfileGenerator(platform); var ctx = CreateDockerfileContext(platformName, null); // Act var dockerfile = generator.GenerateDockerfile(ctx); // Assert Assert.NotNull(dockerfile); Assert.NotEqual(string.Empty, dockerfile); Assert.Contains(string.Format(_buildImageFormat, expectedBuildTag), dockerfile); Assert.Contains(string.Format(_argRuntimeFormat, platformName, detectedPlatformVersion), dockerfile); Assert.True(detector.DetectInvoked); }
public void TryGenerateScript_ReturnsTrue_IfNoLanguageIsProvided_AndCanDetectLanguage() { // Arrange var detector = new TestLanguageDetectorUsingLangName( detectedLanguageName: "test", detectedLanguageVersion: "1.0.0"); var platform = new TestProgrammingPlatform( "test", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "script-content", detector: detector); var generator = CreateDefaultScriptGenerator(platform); var context = CreateScriptGeneratorContext( suppliedLanguageName: null, suppliedLanguageVersion: null); // Act var canGenerateScript = generator.TryGenerateBashScript(context, out var generatedScript); // Assert Assert.True(canGenerateScript); Assert.Contains("script-content", generatedScript); Assert.True(detector.DetectInvoked); }
public void GenerateDockerfile_GeneratesBuildTagAndRuntime_ForProvidedPlatformAndVersion( string platformName, string platformVersion, string expectedBuildTag) { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: platformName, detectedPlatformVersion: platformVersion); var platform = new TestProgrammingPlatform( platformName, new[] { platformVersion }, detector: detector); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = platformName, PlatformVersion = platformVersion }; var generator = CreateDefaultDockerfileGenerator(platform, commonOptions); var ctx = CreateDockerfileContext(); // Act var dockerfile = generator.GenerateDockerfile(ctx); // Assert Assert.NotNull(dockerfile); Assert.NotEqual(string.Empty, dockerfile); Assert.Contains(string.Format(_buildImageFormat, expectedBuildTag), dockerfile); Assert.Contains(string.Format(_argRuntimeFormat, ConvertToRuntimeName(platformName), platformVersion), dockerfile); Assert.True(detector.DetectInvoked); }
public void UsesMaxSatisfyingVersion_WhenOnlyMajorAndMinorVersion_OfLanguageIsSpecified() { // Arrange var detector = new TestLanguageDetectorUsingLangName( detectedLanguageName: "test", detectedLanguageVersion: "1.0.0"); var platform1 = new TestProgrammingPlatform( "test", new[] { "1.1.0" }, canGenerateScript: true, scriptContent: "1.0.0-content", detector); var platform2 = new TestProgrammingPlatform( "test", new[] { "1.1.5" }, canGenerateScript: true, scriptContent: "1.1.5-content", detector); var generator = CreateDefaultScriptGenerator( new[] { platform1, platform2 }); var context = CreateScriptGeneratorContext( suppliedLanguageName: "test", suppliedLanguageVersion: "1.1"); // Act var canGenerateScript = generator.TryGenerateBashScript(context, out var generatedScript); // Assert Assert.True(canGenerateScript); Assert.Contains("1.1.5-content", generatedScript); Assert.False(detector.DetectInvoked); }
public void GenerateDockerfile_GeneratesBuildTagAndRuntime_ForMultiPlatformBuild( string platformName, string platformVersion, string runtimePlatformName, string runtimePlatformVersion) { // Arrange var detector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: platformName, detectedPlatformVersion: platformVersion); var platform = new TestProgrammingPlatform( platformName, new[] { platformVersion }, detector: detector); var runtimeDetector = new TestPlatformDetectorUsingPlatformName( detectedPlatformName: runtimePlatformName, detectedPlatformVersion: runtimePlatformVersion); var runtimePlatform = new TestProgrammingPlatform( runtimePlatformName, new[] { runtimePlatformVersion }, detector: runtimeDetector); var commonOptions = new BuildScriptGeneratorOptions { EnableMultiPlatformBuild = true, PlatformName = platformName, PlatformVersion = platformVersion, RuntimePlatformName = runtimePlatformName, RuntimePlatformVersion = runtimePlatformVersion, }; var generator = CreateDefaultDockerfileGenerator(new[] { platform, runtimePlatform }, commonOptions); var ctx = CreateDockerfileContext(); // Act var dockerfile = generator.GenerateDockerfile(ctx); // Assert Assert.NotNull(dockerfile); Assert.NotEqual(string.Empty, dockerfile); Assert.Contains(string.Format(_buildImageFormat, _buildImageName, _buildImageTag), dockerfile); Assert.Contains(string.Format(_argRuntimeFormat, ConvertToRuntimeName(runtimePlatformName), runtimePlatformVersion), dockerfile); }
public void GeneratesScript_AddsSnippetsForMultiplePlatforms() { // Arrange var platform1 = new TestProgrammingPlatform( platformName: "lang1", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "ABCDEFG", detector: new TestPlatformDetectorSimpleMatch( shouldMatch: true, platformName: "lang1", platformVersion: "1.0.0")); var platform2 = new TestProgrammingPlatform( platformName: "lang2", new[] { "1.0.0" }, canGenerateScript: true, scriptContent: "123456", detector: new TestPlatformDetectorSimpleMatch( shouldMatch: true, platformName: "lang2", platformVersion: "1.0.0")); var commonOptions = new BuildScriptGeneratorOptions { PlatformName = "lang1", PlatformVersion = "1.0.0", EnableMultiPlatformBuild = true, }; var generator = CreateDefaultScriptGenerator(new[] { platform1, platform2 }, commonOptions); var context = CreateScriptGeneratorContext(); // Act generator.GenerateBashScript(context, out var generatedScript); var expectedPlatformNameManifestEntry = "echo \"PlatformName=\\\"lang1,lang2\\\"\" >> \"$MANIFEST_DIR/$MANIFEST_FILE\""; var buggyPlatformNameManifestEntry = "echo \"PlatformName=\\\",lang1lang2\\\"\" >> \"$MANIFEST_DIR/$MANIFEST_FILE\""; // Assert Assert.Contains("ABCDEFG", generatedScript); Assert.Contains("123456", generatedScript); Assert.Contains(expectedPlatformNameManifestEntry, generatedScript, StringComparison.OrdinalIgnoreCase); Assert.DoesNotContain(buggyPlatformNameManifestEntry, generatedScript, StringComparison.OrdinalIgnoreCase); }