Exemplo n.º 1
0
        public void ToPrettyString_Should_Represent_Range()
        {
            // Arrange
            var r0 = new ReleaseRange();
            var r1 = new ReleaseRange("1.0");
            var r2 = new ReleaseRange("[1.0,2.0]");
            var r3 = new ReleaseRange("(1.0,2.0]");
            var r4 = new ReleaseRange("[1.0,2.0)");
            var r5 = new ReleaseRange("(1.0,2.0)");

            // Act
            var s0 = r0.ToPrettyString();
            var s1 = r1.ToPrettyString();
            var s2 = r2.ToPrettyString();
            var s3 = r3.ToPrettyString();
            var s4 = r4.ToPrettyString();
            var s5 = r5.ToPrettyString();

            // Assert
            s0.Should().BeEmpty();
            s1.Should().Be(">=1.0");
            s2.Should().Be(">=1.0 and <=2.0");
            s3.Should().Be(">1.0 and <=2.0");
            s4.Should().Be(">=1.0 and <2.0");
            s5.Should().Be(">1.0 and <2.0");
        }
Exemplo n.º 2
0
        public void Range_Must_Follow_Format()
        {
            // Arrange

            // Act
            Action a1 = () =>
            {
                var _ = new ReleaseRange("1.0,2.0");
            };
            Action a2 = () =>
            {
                var _ = new ReleaseRange("[1.0,2.0");
            };
            Action a3 = () =>
            {
                var _ = new ReleaseRange("myversion");
            };

            // Assert
            a1.Should().Throw <ArgumentException>()
            .WithMessage("Release range start version must begin with '[' or '(': '1.0'");
            a2.Should().Throw <ArgumentException>()
            .WithMessage("Release range stop version must end with ']' or ')': '2.0'");
            a3.Should().Throw <ArgumentException>()
            .WithMessage("Release range must contain 1 or 2 versions: 'myversion'");
        }
Exemplo n.º 3
0
        public void Range_Should_Only_Accept_Versions_Within_Boundaries()
        {
            // Arrange
            var r1 = new ReleaseRange("prod9.5");
            var r2 = new ReleaseRange("[prod9.0, prod10.0]");
            var r3 = new ReleaseRange("(prod9.0, prod10.0]");
            var r4 = new ReleaseRange("[prod9.0, prod10.0)");
            var r5 = new ReleaseRange("(prod9.0, prod10.0)");

            // Act

            // Assert
            r1.Accepts("prod9.0").Should().BeFalse();
            r2.Accepts("prod9.0").Should().BeTrue();
            r3.Accepts("prod9.0").Should().BeFalse();
            r4.Accepts("prod9.0").Should().BeTrue();
            r5.Accepts("prod9.0").Should().BeFalse();
            r1.Accepts("prod9.5").Should().BeTrue();
            r2.Accepts("prod9.5").Should().BeTrue();
            r3.Accepts("prod9.5").Should().BeTrue();
            r4.Accepts("prod9.5").Should().BeTrue();
            r5.Accepts("prod9.5").Should().BeTrue();
            r1.Accepts("prod10.0").Should().BeTrue();
            r2.Accepts("prod10.0").Should().BeTrue();
            r3.Accepts("prod10.0").Should().BeTrue();
            r4.Accepts("prod10.0").Should().BeFalse();
            r5.Accepts("prod10.0").Should().BeFalse();
        }
Exemplo n.º 4
0
        public void Spaces_Should_Be_Ignored()
        {
            // Arrange
            var r = new ReleaseRange("[1.0, 2.0]");

            // Act
            var s = r.ToString();

            // Assert
            s.Should().Be("[1.0,2.0]");
        }
Exemplo n.º 5
0
        public void Range_Cannot_Contain_More_Than_Two_Versions()
        {
            // Arrange

            // Act
            Action a = () =>
            {
                var _ = new ReleaseRange("[1.0,2.0,3.0]");
            };

            // Assert
            a.Should().Throw <ArgumentException>()
            .WithMessage("Release range cannot contain more than 2 versions: '[1.0,2.0,3.0]'");
        }
Exemplo n.º 6
0
        public void Empty_Or_Null_Range_Accepts_All_Versions()
        {
            // Arrange
            var rr1 = new ReleaseRange(null);
            var rr2 = new ReleaseRange(string.Empty);

            // Act
            var s1 = rr1.ToString();
            var s2 = rr1.ToString();

            // Assert
            s1.Should().BeEmpty();
            s2.Should().BeEmpty();
            rr1.Accepts("v1.2").Should().BeTrue();
            rr2.Accepts("v1.2").Should().BeTrue();
        }
Exemplo n.º 7
0
        public void ToString_Should_Be_Similar_To_Original_String()
        {
            // Arrange
            var r1 = new ReleaseRange("1.0");
            var r2 = new ReleaseRange("[1.0,2.0]");
            var r3 = new ReleaseRange("(1.0, 2.0]");
            var r4 = new ReleaseRange("[1.0,2.0)");
            var r5 = new ReleaseRange("(1.0, 2.0)");

            // Act
            var s1 = r1.ToString();
            var s2 = r2.ToString();
            var s3 = r3.ToString();
            var s4 = r4.ToString();
            var s5 = r5.ToString();

            // Assert
            s1.Should().Be("1.0");
            s2.Should().Be("[1.0,2.0]");
            s3.Should().Be("(1.0,2.0]");
            s4.Should().Be("[1.0,2.0)");
            s5.Should().Be("(1.0,2.0)");
        }
        public async Task <ActionResult> GetProjectArchive([FromQuery] ProjectSpec spec)
        {
            var defaults       = _uiConfigService.UiConfig;
            var normalizedSpec = new ProjectSpec()
            {
                Name            = spec.Name ?? defaults?.Name?.Default,
                Namespace       = spec.Namespace ?? defaults?.Namespace?.Default,
                Description     = spec.Description ?? defaults?.Description?.Default,
                SteeltoeVersion = spec.SteeltoeVersion ?? defaults?.SteeltoeVersion?.Default,
                DotNetFramework = spec.DotNetFramework ?? defaults?.DotNetFramework?.Default,
                Language        = spec.Language ?? defaults?.Language?.Default,
                Packaging       = spec.Packaging ?? defaults?.Packaging?.Default,
                Dependencies    = spec.Dependencies ?? defaults?.Dependencies?.Default,
            };

            if (new ReleaseRange("3.0.0").Accepts(normalizedSpec.SteeltoeVersion) &&
                !new ReleaseRange("netcoreapp3.1").Accepts(normalizedSpec.DotNetFramework))
            {
                return(NotFound(
                           $".NET framework version {normalizedSpec.DotNetFramework} not found for Steeltoe version {normalizedSpec.SteeltoeVersion}"));
            }

            if (normalizedSpec.Dependencies != null)
            {
                var deps = normalizedSpec.Dependencies.Split(',');
                for (var i = 0; i < deps.Length; ++i)
                {
                    var found = false;
                    foreach (var group in defaults.Dependencies.Values)
                    {
                        foreach (var dep in group.Values)
                        {
                            if (!deps[i].Equals(dep.Id, StringComparison.OrdinalIgnoreCase))
                            {
                                continue;
                            }

                            var steeltoeRange = new ReleaseRange(dep.SteeltoeVersionRange);
                            if (!steeltoeRange.Accepts(normalizedSpec.SteeltoeVersion))
                            {
                                return(NotFound(
                                           $"No dependency '{deps[i]}' found for Steeltoe version {normalizedSpec.SteeltoeVersion}."));
                            }

                            var frameworkRange = new ReleaseRange(dep.DotNetFrameworkRange);
                            if (!frameworkRange.Accepts(normalizedSpec.DotNetFramework))
                            {
                                return(NotFound(
                                           $"No dependency '{deps[i]}' found for .NET framework {normalizedSpec.DotNetFramework}."));
                            }

                            deps[i] = dep.Id;
                            found   = true;
                        }
                    }

                    if (!found)
                    {
                        return(NotFound($"Dependency '{deps[i]}' not found."));
                    }
                }

                normalizedSpec.Dependencies = string.Join(',', deps);
            }

            if (normalizedSpec.Packaging is null)
            {
                return(StatusCode(
                           StatusCodes.Status500InternalServerError,
                           "Default packaging not configured."));
            }

            Logger.LogInformation("Project specification: {ProjectSpec}", normalizedSpec);
            try
            {
                var projectPackage = await _projectGenerator.GenerateProjectArchive(normalizedSpec);

                return(File(
                           projectPackage,
                           $"application/zip",
                           $"{normalizedSpec.Name}.zip"));
            }
            catch (NoProjectForSpecException e)
            {
                return(NotFound(e.Message));
            }
            catch (InvalidSpecException e)
            {
                return(BadRequest(e.Message));
            }
        }