public void testParseTopLevelConfig()
        {
            string content = ResourceHelper.GetEmbeddedResource("/top_level_projects.json");
            string url     = "http://test";

            HttpClient moqClient = HttpClientMoqHelper.CreateHttpClientMoq(url, content);

            JenkinsConnector connector = new JenkinsConnector(moqClient, url, null, null);
            JobsModel        modelTask = connector.GetModel("/").Result;

            Assert.AreEqual(modelTask.Jobs.Count, 3);
        }
        public async Task <JenkinsBuild> GetJenkinsBuild(JenkinsConnector connector, int buildNumber, CancellationToken token)
        {
            if (this.BuildRequest == null)
            {
                throw new InvalidOperationException($"{nameof(this.JobRequest)} must be handled for {nameof(FakeJenkinsApi)} to work.");
            }

            var eventArgs = new BuildEventArgs(connector, buildNumber);

            this.BuildRequest(this, eventArgs);
            if (eventArgs.ResponseDelay > 0)
            {
                await Task.Delay(eventArgs.ResponseDelay, token);
            }

            return(eventArgs.Result);
        }
示例#3
0
        public async Task <IList <JenkinsBuild> > GetBuilds(JenkinsConnector connector, CancellationToken token, int @from = 0, int to = Connector.MaxSnapshots)
        {
            if (this.BuildsRequest == null)
            {
                throw new InvalidOperationException($"{nameof(this.BuildsRequest)} must be handled for {nameof(FakeJenkinsApi)} to work.");
            }

            var eventArgs = new BuildsEventArgs(connector);

            this.BuildsRequest(this, eventArgs);
            if (eventArgs.ResponseDelay > 0)
            {
                await Task.Delay(eventArgs.ResponseDelay, token);
            }

            return(eventArgs.Builds);
        }
示例#4
0
        public void EnsureProjectsInFoldersAreProperlyConvertedToUrl()
        {
            var api    = MockRepository.GenerateMock <IJenkinsApi>();
            var config = new ConnectorConfiguration(JenkinsConnector.ConnectorName, "my project", new List <ConfigurationItem>
            {
                new ConfigurationItem(Connector.ServerAddress)
                {
                    Value = "https://www.my-little-jenkins.com"
                },
                new ConfigurationItem(Connector.ProjectName)
                {
                    Value = "folder/my-fancy-build-project"
                },
            });

            var connector = new JenkinsConnector(config, api);

            var url = JenkinsApi.UrlHelper.ProjectUrl(connector);

            Assert.AreEqual("https://www.my-little-jenkins.com/job/folder/job/my-fancy-build-project", url);
        }
示例#5
0
        public void EnsureLegacyProjectNameFormatPriorTo_0_9_1_Works()
        {
            var api    = MockRepository.GenerateMock <IJenkinsApi>();
            var config = new ConnectorConfiguration(JenkinsConnector.ConnectorName, "my project", new List <ConfigurationItem>
            {
                new ConfigurationItem(Connector.ServerAddress)
                {
                    Value = "https://www.my-little-jenkins.com"
                },
                new ConfigurationItem(Connector.ProjectName)
                {
                    Value = "folder1/job/folder2/job/my-job"
                },
            });

            var connector = new JenkinsConnector(config, api);

            var url = JenkinsApi.UrlHelper.ProjectUrl(connector);

            Assert.AreEqual("https://www.my-little-jenkins.com/job/folder1/job/folder2/job/my-job", url);
        }
示例#6
0
        public void EnsureProjectsWithSpecialCharsAreProperlyConvertedToUrl()
        {
            var api    = MockRepository.GenerateMock <IJenkinsApi>();
            var config = new ConnectorConfiguration(JenkinsConnector.ConnectorName, "my project", new List <ConfigurationItem>
            {
                new ConfigurationItem(Connector.ServerAddress)
                {
                    Value = "https://www.my-little-jenkins.com"
                },
                new ConfigurationItem(Connector.ProjectName)
                {
                    Value = "playground/strâng335 sads== Jöb NAME"
                },
            });

            var connector = new JenkinsConnector(config, api);

            var url = JenkinsApi.UrlHelper.ProjectUrl(connector);

            Assert.AreEqual("https://www.my-little-jenkins.com/job/playground/job/str%C3%A2ng335%20sads==%20J%C3%B6b%20NAME", url);
        }
示例#7
0
        public void BuildsShouldNotBeMissedWhenBuildsAreRunningOneAfterAnother()
        {
            var scheduler = new ObservationScheduler();
            var api       = new FakeJenkinsApi();

            int state = 0;

            api.JobRequest += (s, e) =>
            {
                if (state == 0)
                {
                    e.Result = ApiHelper.GetProject(ObservationState.Running, 10);
                    state++;
                }
                else if (state == 1)
                {
                    e.Result = ApiHelper.GetProject(ObservationState.Running, 11);
                    state++;
                }
                else
                {
                    e.Result = ApiHelper.GetProject(ObservationState.Running, 12);
                    state++;
                    scheduler.Stop(false);
                }
            };

            api.BuildsRequest += (s, e) =>
            {
                var buildsStates = new Dictionary <int, ObservationState>
                {
                    { 11, ObservationState.Failure },
                    { 10, ObservationState.Success },
                    { 9, ObservationState.Unstable },
                    { 8, ObservationState.Unstable },
                    { 7, ObservationState.Unstable },
                    { 6, ObservationState.Unstable },
                    { 5, ObservationState.Unstable },
                    { 4, ObservationState.Unstable },
                };

                int start = 0;
                int end   = 0;

                start = 8 + state;
                end   = 4 + state;

                for (int i = start; i >= end; i--)
                {
                    e.Builds.Add(ApiHelper.GetBuild(buildsStates[i], i));
                }
            };

            api.BuildRequest += (s, e) =>
            {
                if (e.BuildNumber < 10)
                {
                    e.Result = ApiHelper.GetBuild(ObservationState.Unstable, e.BuildNumber);
                }
                else if (state == 0)
                {
                    e.Result = ApiHelper.GetBuild(ObservationState.Running, e.BuildNumber);
                }
                else if (state == 1)
                {
                    var buildSt = e.BuildNumber == 10 ? ObservationState.Success : ObservationState.Running;
                    e.Result = ApiHelper.GetBuild(buildSt, e.BuildNumber);
                }
                else
                {
                    ObservationState buildSt;
                    if (e.BuildNumber == 10)
                    {
                        buildSt = ObservationState.Success;
                    }
                    else if (e.BuildNumber == 11)
                    {
                        buildSt = ObservationState.Failure;
                    }
                    else
                    {
                        buildSt = ObservationState.Running;
                    }

                    e.Result = ApiHelper.GetBuild(buildSt, e.BuildNumber);
                }
            };

            var subj = new JenkinsConnector(new ConnectorConfiguration("Jenkins", "name", "Address", "MyAddress", "ProjectName", "MyProject"), api);

            scheduler.Observe(subj, 0);
            scheduler.Start();
            while (scheduler.Running)
            {
            }

            var jenkinsStatuses = subj.Snapshots.Select(snap => snap.Status).OfType <JenkinsStatus>().ToList();

            Assert.That(jenkinsStatuses.Count, Is.EqualTo(5));

            var expectedBuilds = new[]
            {
                new Tuple <int, ObservationState>(11, ObservationState.Failure),
                new Tuple <int, ObservationState>(10, ObservationState.Success),
                new Tuple <int, ObservationState>(9, ObservationState.Unstable),
                new Tuple <int, ObservationState>(8, ObservationState.Unstable),
                new Tuple <int, ObservationState>(7, ObservationState.Unstable),
            };

            foreach (var expectedBuild in expectedBuilds)
            {
                Assert.That(jenkinsStatuses.Any(stat => stat.BuildNumber == expectedBuild.Item1 && stat.State == expectedBuild.Item2), Is.True, $"Build No. {expectedBuild} was not present in snapshots.");
            }
        }
 public BuildEventArgs(JenkinsConnector connector, int buildNumber)
     : base(connector)
 {
     this.BuildNumber = buildNumber;
 }
 public JobEventArgs(JenkinsConnector connector)
     : base(connector)
 {
 }
 public FakeApiEventArgs(JenkinsConnector connector)
 {
     this.Connector = connector;
 }
 public Task <IList <JenkinsBuild> > GetBuilds(JenkinsConnector connector, CancellationToken token, int @from = 0, int to = Connector.MaxSnapshots)
 {
     throw new NotImplementedException();
 }
示例#12
0
 public BuildsEventArgs(JenkinsConnector connector)
     : base(connector)
 {
     this.Builds = new List <JenkinsBuild>();
 }