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); }
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); }
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); }
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); }
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); }
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(); }
public BuildsEventArgs(JenkinsConnector connector) : base(connector) { this.Builds = new List <JenkinsBuild>(); }