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);
        }
예제 #3
0
        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);
        }
예제 #7
0
        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);
        }