public void GeneratesScript_UsingTheFirstPlatform_WhichCanGenerateScript()
        {
            // Arrange
            var detector = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: null,
                detectedPlatformVersion: null);
            var platform1 = new TestProgrammingPlatform(
                "lang1",
                new[] { "1.0.0" },
                canGenerateScript: false,
                scriptContent: null,
                detector);
            var platform2 = new TestProgrammingPlatform(
                "lang2",
                new[] { "1.0.0" },
                canGenerateScript: true,
                scriptContent: "script-content",
                detector);

            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName    = "lang2",
                PlatformVersion = "1.0.0",
            };
            var generator = CreateDefaultScriptGenerator(new[] { platform1, platform2 }, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act
            generator.GenerateBashScript(context, out var generatedScript);

            // Assert
            Assert.Contains("script-content", generatedScript);
            Assert.False(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_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 TryGenerateScript_Throws_IfSuppliedPlatformIsUnsupported()
        {
            // 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",
                detector: detector);
            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName    = "unsupported",
                PlatformVersion = "1.0.0",
            };
            var generator = CreateDefaultScriptGenerator(platform, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act & Assert
            var exception = Assert.Throws <UnsupportedPlatformException>(
                () => generator.GenerateBashScript(context, out var generatedScript));

            Assert.Equal(
                "'unsupported' platform is not supported. Supported platforms are: test",
                exception.Message);
            Assert.True(detector.DetectInvoked);
        }
        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 TryGenerateScript_ReturnsTrue_IfPlatformIsProvidedButNoVersion_AndCanDetectVersion()
        {
            // 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",
                detector: detector);
            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName    = "test",
                PlatformVersion = null, // version not provided by user
            };
            var generator = CreateDefaultScriptGenerator(platform, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act
            generator.GenerateBashScript(context, out var generatedScript);

            // Assert
            Assert.Contains("script-content", generatedScript);
            Assert.True(detector.DetectInvoked);
        }
Esempio n. 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 TryGenerateScript_Throws_IfPlatformIsProvidedButDisabled()
        {
            // Arrange
            var detector = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: "test",
                detectedPlatformVersion: "1.0.0");
            var platform      = new TestProgrammingPlatform("test", new[] { "1.0.0" }, detector: detector, enabled: false);
            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName    = "test",
                PlatformVersion = "1.0.0",
            };
            var generator = CreateDefaultScriptGenerator(platform, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act & Assert
            var exception = Assert.Throws <UnsupportedPlatformException>(
                () => generator.GenerateBashScript(context, out var generatedScript));
        }
        public void TryGenerateScript_Throws_IfPlatformIsProvided_AndCannotDetectPlatform()
        {
            // Arrange
            var detector = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: null,
                detectedPlatformVersion: null);
            var platform      = new TestProgrammingPlatform("test1", new[] { "1.0.0" }, detector: detector);
            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName = "test2",
            };
            var generator = CreateDefaultScriptGenerator(platform, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act & Assert
            var exception = Assert.Throws <UnsupportedPlatformException>(
                () => generator.GenerateBashScript(context, out var generatedScript));

            Assert.Equal("'test2' platform is not supported. Supported platforms are: test1", exception.Message);
        }
        public void TryGenerateScript_Throws_IfPlatformIsProvidedButNoVersion_AndCannotDetectVersion()
        {
            // Arrange
            var detector = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: "test",
                detectedPlatformVersion: null);
            var platform      = new TestProgrammingPlatform("test", new[] { "1.0.0" }, detector: detector);
            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName = "test",
            };
            var generator = CreateDefaultScriptGenerator(platform, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act & Assert
            var exception = Assert.Throws <UnsupportedVersionException>(
                () => generator.GenerateBashScript(context, out var generatedScript));

            Assert.Equal("Couldn't detect a version for the platform 'test' in the repo.", exception.Message);
            Assert.True(detector.DetectInvoked);
        }
        public void TryGenerateScript_Throws_IfNoPlatformIsProvided_AndCannotDetectPlatform()
        {
            // Arrange
            var detector = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: null,
                detectedPlatformVersion: null);
            var platform      = new TestProgrammingPlatform("test", new[] { "1.0.0" }, detector: detector);
            var commonOptions = new BuildScriptGeneratorOptions
            {
                EnableMultiPlatformBuild = true,
            };
            var generator = CreateDefaultScriptGenerator(platform, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act & Assert
            var exception = Assert.Throws <UnsupportedPlatformException>(
                () => generator.GenerateBashScript(context, out var generatedScript));

            Assert.Equal(Labels.UnableToDetectPlatformMessage, exception.Message);
            Assert.True(detector.DetectInvoked);
        }
        public void GetRequiredToolVersions_ReturnsPlatformTools()
        {
            // Arrange
            var platName = "test";
            var platVer  = "1.0.0";
            var detector = new TestPlatformDetectorUsingPlatformName(platName, platVer);
            var platform = new TestProgrammingPlatform(
                platName,
                new[] { platVer },
                canGenerateScript: true,
                scriptContent: "script-content",
                detector: detector);
            var commonOptions = new BuildScriptGeneratorOptions();
            var generator     = CreateDefaultScriptGenerator(platform, commonOptions);
            var context       = CreateScriptGeneratorContext();

            // Act
            var result = generator.GetRequiredToolVersions(context);

            // Assert
            Assert.Equal(platName, result.First().Key);
            Assert.Equal(platVer, result.First().Value);
        }
        public void TryGenerateScript_CallsDetector_IfMultiPlatformIsOff_AndNoLangProvided()
        {
            // 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",
                detector: detector);
            var commonOptions = new BuildScriptGeneratorOptions
            {
                EnableMultiPlatformBuild = false,
            };
            var generator = CreateDefaultScriptGenerator(platform, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act & Assert
            generator.GenerateBashScript(context, out var generatedScript);
            Assert.True(detector.DetectInvoked);
        }
        public void TryGenerateScript_ReturnsFalse_IfGeneratorTryGenerateScript_IsFalse()
        {
            // Arrange
            var detector = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: "test",
                detectedPlatformVersion: "1.0.0");
            var platform = new TestProgrammingPlatform(
                "test",
                new[] { "1.0.0" },
                canGenerateScript: false,
                scriptContent: null,
                detector: detector);
            var commonOptions = new BuildScriptGeneratorOptions();
            var generator     = CreateDefaultScriptGenerator(platform, commonOptions);
            var context       = CreateScriptGeneratorContext();

            // Act & Assert
            var exception = Assert.Throws <UnsupportedPlatformException>(
                () => generator.GenerateBashScript(context, out var generatedScript));

            Assert.Equal(Labels.UnableToDetectPlatformMessage, exception.Message);
            Assert.True(detector.DetectInvoked);
        }
Esempio n. 15
0
        private string GenerateScript(BuildConfigurationFileFlags flags)//
        {
            // Arrange
            var detector1 = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: "lang1",
                detectedPlatformVersion: "1.0.0");
            var platform1 = new TestProgrammingPlatform(
                "lang1",
                new[] { "1.0.0" },
                canGenerateScript: false,
                scriptContent: null,
                installationScriptContent: "lang1-installationscript",
                detector: detector1);
            var detector2 = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: "lang2",
                detectedPlatformVersion: "1.0.0");
            var platform2 = new TestProgrammingPlatform(
                "lang2",
                new[] { "1.0.0" },
                canGenerateScript: true,
                installationScriptContent: "lang2-installationscript",
                scriptContent: "script-content",
                detector: detector2);

            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName    = "lang2",
                PlatformVersion = "1.0.0",
            };
            var generator = CreateDefaultScriptGenerator(new[] { platform1, platform2 }, commonOptions);
            var context   = CreateScriptGeneratorContext();

            ((TestSourceRepo)context.SourceRepo).buildConfigurationFileFlags = flags;
            // Act
            generator.GenerateBashScript(context, out var generatedScript);
            return(generatedScript);
        }
        public void ContainsInstallationScriptContent_FromMultiplePlatforms()
        {
            // Arrange
            var detector1 = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: "test1",
                detectedPlatformVersion: "1.0.0");
            var platform1 = new TestProgrammingPlatform(
                "test1",
                new[] { "1.0.0" },
                canGenerateScript: true,
                scriptContent: "script1-content",
                installationScriptContent: "install1-content",
                detector: detector1);
            var detector2 = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: "test2",
                detectedPlatformVersion: "1.0.0");
            var platform2 = new TestProgrammingPlatform(
                "test2",
                new[] { "1.0.0" },
                canGenerateScript: true,
                scriptContent: "script2-content",
                installationScriptContent: "install2-content",
                detector: detector2);
            var envScriptProvider = CreateEnvironmentSetupScriptProvider(new[] { platform1, platform2 });
            var context           = CreateScriptGeneratorContext();

            // Act
            var setupScript = envScriptProvider.GetBashScriptSnippet(context);

            // Assert
            Assert.Contains("install1-content", setupScript);
            Assert.Contains("install2-content", setupScript);
            Assert.DoesNotContain("script1-content", setupScript);
            Assert.DoesNotContain("script2-content", setupScript);
            Assert.True(detector1.DetectInvoked);
            Assert.True(detector2.DetectInvoked);
        }
        public void DoesNotFailIfPlatformDoesNotReturnInstallationScriptSnippet(
            string installationScriptContent)
        {
            // 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: installationScriptContent,
                detector: detector);
            var envScriptProvider = CreateEnvironmentSetupScriptProvider(new[] { platform });
            var context           = CreateScriptGeneratorContext();

            // Act
            var setupScript = envScriptProvider.GetBashScriptSnippet(context);

            // Assert
            Assert.True(detector.DetectInvoked);
            Assert.DoesNotContain("script-content", setupScript);
        }
        public void TryGenerateScript_DoesntCallDetector_IfMultiPlatformIsOff_AndLangProvided()
        {
            // 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",
                detector);

            var detector2 = new TestPlatformDetectorUsingPlatformName(
                detectedPlatformName: "test2",
                detectedPlatformVersion: "1.0.0");
            var platform2 = new TestProgrammingPlatform(
                "test2",
                new[] { "1.0.0" },
                canGenerateScript: true,
                scriptContent: "script-content",
                detector2);

            var commonOptions = new BuildScriptGeneratorOptions
            {
                PlatformName    = "test",
                PlatformVersion = "1.0.0",
            };
            var generator = CreateDefaultScriptGenerator(new[] { platform, platform2 }, commonOptions);
            var context   = CreateScriptGeneratorContext();

            // Act & Assert
            generator.GenerateBashScript(context, out var generatedScript);
            Assert.False(detector.DetectInvoked);
            Assert.False(detector2.DetectInvoked);
        }