Example #1
0
        public ConfigureServer(SirenOfShameSettings settings, CiEntryPointSetting ciEntryPointSetting)
        {
            _adding = ciEntryPointSetting == null;
            if (_adding)
            {
                ciEntryPointSetting = new CiEntryPointSetting();
            }

            Settings             = settings;
            _ciEntryPointSetting = ciEntryPointSetting;

            IocContainer.Instance.Compose(this);

            InitializeComponent();

            _ciServerPanel.Visible = _adding;
            ICiEntryPoint[] ciEntryPoints = CIEntryPoints.ToArray();
            if (_adding)
            {
                _serverType.DataSource = ciEntryPoints;
            }
            else
            {
                SetServerType(ciEntryPointSetting.GetCiEntryPoint(settings));
            }

            _add.Text       = _adding ? "Add" : "Update";
            _cancel.Visible = _adding;
        }
Example #2
0
        public IEnumerable <HudsonBuildStatus> GetBuildsStatuses(CiEntryPointSetting ciEntryPointSetting, IEnumerable <BuildDefinitionSetting> watchedBuildDefinitions)
        {
            var parallelResult = from buildDefinitionSetting in watchedBuildDefinitions
                                 select GetBuildStatus(buildDefinitionSetting, ciEntryPointSetting);

            return(parallelResult.AsParallel().ToList());
        }
Example #3
0
        protected override IList <BuildStatus> GetBuildStatus()
        {
            CiEntryPointSetting ciEntryPointSetting = CiEntryPointSetting;
            var watchedBuildDefinitions             = GetAllWatchedBuildDefinitions().ToArray();

            if (string.IsNullOrEmpty(ciEntryPointSetting.Url))
            {
                throw new SosException("Buildbot URL is null or empty");
            }

            try
            {
                return(_service.GetBuildsStatuses(ciEntryPointSetting.Url,
                                                  ciEntryPointSetting.UserName,
                                                  ciEntryPointSetting.GetPassword(),
                                                  watchedBuildDefinitions)
                       .Cast <BuildStatus>().ToList());
            }
            catch (WebException ex)
            {
                if (
                    ex.Message.StartsWith("The remote name could not be resolved:") ||
                    ex.Message.Contains("Unable to connect to the remote server")
                    )
                {
                    throw new ServerUnavailableException();
                }
                throw;
            }
        }
Example #4
0
 public ConfigureMock(SirenOfShameSettings settings, MockCiEntryPoint mockCiEntryPoint, CiEntryPointSetting ciEntryPointSetting)
     : base(settings)
 {
     InitializeComponent();
     _mockCiEntryPoint    = mockCiEntryPoint;
     _ciEntryPointSetting = ciEntryPointSetting;
 }
Example #5
0
        private AppVeyorBuildStatus GetBuildStatus(BuildDefinitionSetting buildDefinitionSetting,
                                                   CiEntryPointSetting ciEntryPointSetting)
        {
            var token       = ciEntryPointSetting.GetPassword();
            var projectInfo = AppVeyorBuildDefinition.FromId(buildDefinitionSetting.Id);


            var serviceClient = CreateClient(ciEntryPointSetting.Url, token);

            var request = new GetProjectLastBuild
            {
                AccountName = projectInfo.AccountName,
                ProjectSlug = projectInfo.Slug
            };

            try
            {
                var response = serviceClient.Get(request);
                if (response.Build == null)
                {
                    throw new BuildDefinitionNotFoundException(buildDefinitionSetting);
                }

                return(new AppVeyorBuildStatus(CreateProjectUrl(projectInfo), response.Project, response.Build,
                                               buildDefinitionSetting));
            }
            catch (WebServiceException)
            {
                throw new BuildDefinitionNotFoundException(buildDefinitionSetting);
            }
        }
Example #6
0
        public static bool Show(SirenOfShameSettings settings, CiEntryPointSetting ciEntryPointSetting)
        {
            ConfigureServer configureServer = new ConfigureServer(settings, ciEntryPointSetting);
            var             anyChanges      = configureServer.ShowDialog() != DialogResult.Cancel;

            return(anyChanges);
        }
Example #7
0
 public ConfigureTravisCi(SirenOfShameSettings sosSettings, TravisCiEntryPoint travisCiEntryPoint, CiEntryPointSetting ciEntryPointSetting)
     : base(sosSettings)
 {
     _travisCiEntryPoint  = travisCiEntryPoint;
     _ciEntryPointSetting = ciEntryPointSetting;
     InitializeComponent();
     LoadProjectList();
 }
        public void GivenNullUrlInCiEntryPointSetting_WhenGettingBuildStatus_ThenSosException()
        {
            // arrange
            var ciEntryPointSetting = new CiEntryPointSetting();
            var tfsRestWatcher      = new MyTfsRestWatcher(null, new BuildDefinitionSetting[] { }, ciEntryPointSetting);

            // act
            Assert.Throws <SosException>(() => tfsRestWatcher.MyGetBuildStatus(), "TFS URL is null or empty")
            ;
        }
Example #9
0
 public MyTfsServer(CiEntryPointSetting ciEntryPointSetting)
 {
     try {
         _tfsConfigurationServer = GetTfsConfigurationServer(ciEntryPointSetting.Url, ciEntryPointSetting.UserName, ciEntryPointSetting.GetPassword());
         _tfsConfigurationServer.EnsureAuthenticated();
     } catch (TeamFoundationServiceUnavailableException ex) {
         _log.Debug(ex);
         throw new ServerUnavailableException(ex.Message, ex);
     }
 }
Example #10
0
 public ConfigureAppVeyor(SirenOfShameSettings sosSettings, AppVeyorCiEntryPoint appVeyorCiEntryPoint,
                          CiEntryPointSetting ciEntryPointSetting)
     : base(sosSettings)
 {
     _appVeyorCiEntryPoint = appVeyorCiEntryPoint;
     InitializeComponent();
     _ciEntryPointSetting = ciEntryPointSetting;
     _url.Text            = _ciEntryPointSetting.Url ?? APP_VEYOR_API_BASE_URL;
     _password.Text       = _ciEntryPointSetting.GetPassword();
 }
 public ConfigureTeamCity(SirenOfShameSettings sosSettings, TeamCityCiEntryPoint teamCityCiEntryPoint, CiEntryPointSetting ciEntryPointSetting)
     : base(sosSettings)
 {
     _teamCityCiEntryPoint = teamCityCiEntryPoint;
     InitializeComponent();
     _ciEntryPointSetting = ciEntryPointSetting;
     _url.Text            = _ciEntryPointSetting.Url;
     _userName.Text       = _ciEntryPointSetting.UserName;
     _password.Text       = _ciEntryPointSetting.GetPassword();
     Load += OnLoad;
 }
Example #12
0
 public ConfigureTfs(SirenOfShameSettings settings, TfsCiEntryPoint tfsCiEntryPoint, CiEntryPointSetting ciEntryPointSetting)
     : base(settings)
 {
     _tfsCiEntryPoint = tfsCiEntryPoint;
     InitializeComponent();
     _ciEntryPointSetting = ciEntryPointSetting;
     _url.Text            = _ciEntryPointSetting.Url;
     someoneElse.Checked  = !string.IsNullOrEmpty(_ciEntryPointSetting.UserName);
     username.Text        = _ciEntryPointSetting.UserName;
     password.Text        = _ciEntryPointSetting.GetPassword();
     DataBindAsync();
 }
Example #13
0
 public ConfigureBuildBot(SirenOfShameSettings sosSettings, BuildBotCIEntryPoint BuildBotCiEntryPoint, CiEntryPointSetting ciEntryPointSetting)
     : base(sosSettings)
 {
     _BuildBotCiEntryPoint = BuildBotCiEntryPoint;
     InitializeComponent();
     _ciEntryPointSetting = ciEntryPointSetting;
     _url.Text            = _ciEntryPointSetting.Url;
     _userName.Text       = _ciEntryPointSetting.UserName;
     _password.Text       = _ciEntryPointSetting.GetPassword();
     if (!string.IsNullOrEmpty(_url.Text))
     {
         ReloadProjects();
     }
 }
Example #14
0
 public ConfigureHudson(SirenOfShameSettings sosSettings, HudsonCIEntryPoint hudsonCiEntryPoint, CiEntryPointSetting ciEntryPointSetting)
     : base(sosSettings)
 {
     _hudsonCiEntryPoint = hudsonCiEntryPoint;
     InitializeComponent();
     _ciEntryPointSetting            = ciEntryPointSetting;
     _url.Text                       = _ciEntryPointSetting.Url;
     _userName.Text                  = _ciEntryPointSetting.UserName;
     _password.Text                  = _ciEntryPointSetting.GetPassword();
     _treatUnstableAsSuccess.Checked = _ciEntryPointSetting.TreatUnstableAsSuccess;
     if (!string.IsNullOrEmpty(_url.Text))
     {
         ReloadProjects();
     }
 }
Example #15
0
 public ConfigureTfsRest(SirenOfShameSettings sosSettings, TfsRestCiEntryPoint ciEntryPoint,
                         CiEntryPointSetting ciEntryPointSetting)
     : base(sosSettings)
 {
     _ciEntryPoint        = ciEntryPoint;
     _ciEntryPointSetting = ciEntryPointSetting;
     InitializeComponent();
     _url.Text        = _ciEntryPointSetting.Url;
     _userName.Text   = _ciEntryPointSetting.UserName;
     _password.Text   = _ciEntryPointSetting.GetPassword();
     _collection.Text = _ciEntryPointSetting.CollectionName;
     if (!string.IsNullOrEmpty(_url.Text))
     {
         ReloadProjects();
     }
 }
        public void GivenHttpRequestException_WhenGettingBuildStatus_ThenServerUnavailableException()
        {
            // arrange
            var buildDefinitionSettings = new[] { new BuildDefinitionSetting() };
            var tfsRestService          = new Mock <TfsRestService>();
            var ciEntryPointSetting     = new CiEntryPointSetting {
                Url = "url"
            };

            tfsRestService.Setup(i => i.GetBuildsStatuses(ciEntryPointSetting, buildDefinitionSettings))
            .ThrowsAsync(new System.Net.Http.HttpRequestException("Unable to connect to the remote server"));
            var tfsRestWatcher = new MyTfsRestWatcher(tfsRestService.Object, buildDefinitionSettings, ciEntryPointSetting);

            // assert & act
            Assert.Throws <ServerUnavailableException>(() =>
                                                       tfsRestWatcher.MyGetBuildStatus()
                                                       );
        }
        public void GivenWebExceptionRemoteNameCouldNotBeResolved_WhenGettingBuildStatus_ThenServerUnavailableException()
        {
            // arrange
            var buildDefinitionSettings = new[] { new BuildDefinitionSetting() };
            var tfsRestService          = new Mock <TfsRestService>();
            var ciEntryPointSetting     = new CiEntryPointSetting {
                Url = "url"
            };

            tfsRestService.Setup(i => i.GetBuildsStatuses(ciEntryPointSetting, buildDefinitionSettings))
            .ThrowsAsync(new WebException("The remote name could not be resolved:"));
            var tfsRestWatcher = new MyTfsRestWatcher(tfsRestService.Object, buildDefinitionSettings, ciEntryPointSetting);

            // assert & act
            Assert.Throws <ServerUnavailableException>(() =>
                                                       tfsRestWatcher.MyGetBuildStatus()
                                                       );
        }
        public void GivenHttpRequestExceptionWith401InMessage_WhenGettingBuildStatus_ThenInvalidCredentialsException()
        {
            // arrange
            var buildDefinitionSettings = new[] { new BuildDefinitionSetting() };
            var tfsRestService          = new Mock <TfsRestService>();
            var ciEntryPointSetting     = new CiEntryPointSetting {
                Url = "url"
            };

            tfsRestService.Setup(i => i.GetBuildsStatuses(ciEntryPointSetting, buildDefinitionSettings))
            .ThrowsAsync(new System.Net.Http.HttpRequestException("Response status code does not indicate success: 401 (Unauthorized)."));
            var tfsRestWatcher = new MyTfsRestWatcher(tfsRestService.Object, buildDefinitionSettings, ciEntryPointSetting);

            // assert & act
            Assert.Throws <InvalidCredentialsException>(() =>
                                                        tfsRestWatcher.MyGetBuildStatus()
                                                        );
        }
        public void GivenTaskCanceledExceptionAkaTimeout_WhenGettingBuildStatus_ThenServerUnavailableException()
        {
            // arrange
            var buildDefinitionSettings = new[] { new BuildDefinitionSetting() };
            var tfsRestService          = new Mock <TfsRestService>();
            var ciEntryPointSetting     = new CiEntryPointSetting {
                Url = "url"
            };

            tfsRestService.Setup(i => i.GetBuildsStatuses(ciEntryPointSetting, buildDefinitionSettings))
            .ThrowsAsync(new TaskCanceledException());
            var tfsRestWatcher = new MyTfsRestWatcher(tfsRestService.Object, buildDefinitionSettings, ciEntryPointSetting);

            // assert & act
            Assert.Throws <ServerUnavailableException>(() =>
                                                       tfsRestWatcher.MyGetBuildStatus()
                                                       );
        }
        public async Task <IEnumerable <TfsRestBuildStatus> > GetBuildsStatuses(CiEntryPointSetting ciEntryPointSetting, BuildDefinitionSetting[] watchedBuildDefinitions)
        {
            var connection = new TfsConnectionDetails(ciEntryPointSetting);
            var buildDefinitionsByProjectCollection          = watchedBuildDefinitions.GroupBy(bd => bd.Parent);
            List <TfsRestBuildStatus> resultingBuildStatuses = new List <TfsRestBuildStatus>();

            foreach (var buildDefinitionGroup in buildDefinitionsByProjectCollection)
            {
                var projectCollection = buildDefinitionGroup.Key;
                var buildQueryParams  = GetBuildQueryParams(buildDefinitionGroup.ToArray());
                var projects          = await _tfsJsonService.GetBuildsStatuses(connection, buildQueryParams, projectCollection);

                await _commentsCache.FetchNewComments(projects, connection, tfsJsonBuilds => GetComment(tfsJsonBuilds, connection, projectCollection));

                var buildStatuses = projects.Select(i => new TfsRestBuildStatus(i, _commentsCache));
                resultingBuildStatuses.AddRange(buildStatuses);
            }
            return(resultingBuildStatuses);
        }
Example #21
0
        private TravisCiBuildStatus GetBuildStatus(CiEntryPointSetting ciEntryPointSetting, BuildDefinitionSetting buildDefinitionSetting)
        {
            var webClient = new WebClient();
            var authToken = ciEntryPointSetting.GetPassword();

            AddTravisHeaders(webClient, authToken);
            var travisBuildDef     = TravisCiBuildDefinition.FromIdString(buildDefinitionSetting.Id);
            var buildDefinitionUrl = GetUrl(ciEntryPointSetting.Url, travisBuildDef.OwnerName, travisBuildDef.ProjectName);

            try
            {
                var json        = webClient.DownloadString(buildDefinitionUrl);
                var lastBuildId = GetJsonValue(json, "last_build_id");
                var buildUrl    = string.Format("{0}builds/{1}", ciEntryPointSetting.Url, lastBuildId);
                json = webClient.DownloadString(buildUrl);
                return(new TravisCiBuildStatus(travisBuildDef, json, buildDefinitionSetting));
            }
            catch (WebException webException)
            {
                throw WebClientXml.ToServerUnavailableException(buildDefinitionUrl, webException);
            }
        }
Example #22
0
 public void InvokeServerUnavailable(ServerUnavailableException serverUnavailableException)
 {
     ((WatcherFake)CiEntryPointSetting.GetWatcher(Settings)).InvokeServerUnavailable(serverUnavailableException);
 }
 public MyTfsRestWatcher(TfsRestService tfsRestService, IEnumerable <BuildDefinitionSetting> buildDefinitions, CiEntryPointSetting ciEntryPointSetting) : base(null, null)
 {
     _buildDefinitions   = buildDefinitions;
     _service            = tfsRestService;
     CiEntryPointSetting = ciEntryPointSetting;
 }
Example #24
0
 public TfsConnectionDetails(CiEntryPointSetting ciEntryPointSetting)
 {
     BaseUrl  = ciEntryPointSetting.Url;
     Username = ciEntryPointSetting.UserName;
     Password = ciEntryPointSetting.GetPassword();
 }
Example #25
0
        private HudsonBuildStatus GetBuildStatus(BuildDefinitionSetting buildDefinitionSetting, CiEntryPointSetting ciEntryPointSetting)
        {
            string userName = ciEntryPointSetting.UserName;
            string password = ciEntryPointSetting.GetPassword();
            var    rootUrl  = GetRootUrl(ciEntryPointSetting.Url);
            var    treatUnstableAsSuccess = ciEntryPointSetting.TreatUnstableAsSuccess;

            string url = rootUrl + "/job/" + buildDefinitionSetting.Id + "/api/xml";

            try
            {
                XDocument doc = DownloadXml(url, userName, password);
                if (doc.Root == null)
                {
                    return(new HudsonBuildStatus(null, buildDefinitionSetting, "Could not get project status", treatUnstableAsSuccess));
                }
                var lastBuildElem = doc.Root.Element("lastBuild");
                if (lastBuildElem == null)
                {
                    return(new HudsonBuildStatus(null, buildDefinitionSetting, "No project builds found", treatUnstableAsSuccess));
                }
                var buildNumber = lastBuildElem.ElementValueOrDefault("number");
                var buildUrl    = rootUrl + "/job/" + buildDefinitionSetting.Id + "/" + buildNumber;
                if (string.IsNullOrWhiteSpace(buildUrl))
                {
                    throw new Exception("Could not get build url");
                }
                buildUrl += "/api/xml";
                doc       = DownloadXml(buildUrl, userName, password);
                if (doc.Root == null)
                {
                    throw new Exception("Could not get project build status");
                }
                return(GetBuildStatusAndCommentsFromXDocument(buildDefinitionSetting, doc, treatUnstableAsSuccess));
            }
            catch (SosException ex)
            {
                if (ex.Message.ToLower(CultureInfo.CurrentCulture).Contains("not_found"))
                {
                    throw new BuildDefinitionNotFoundException(buildDefinitionSetting);
                }
                throw;
            }
        }
Example #26
0
 public ConfigureServerBase CreateConfigurationWindow(SirenOfShameSettings settings, CiEntryPointSetting ciEntryPointSetting)
 {
     return(new ConfigureTfs(settings, this, ciEntryPointSetting));
 }
Example #27
0
 public void Stop()
 {
     ((WatcherFake)CiEntryPointSetting.GetWatcher(Settings)).InvokeStoppedWatching();
 }
Example #28
0
 public void InvokeStatusChecked(BuildStatus args)
 {
     ((WatcherFake)CiEntryPointSetting.GetWatcher(Settings)).InvokeStatusChecked(new[] { args });
 }
Example #29
0
        public IEnumerable <TravisCiBuildStatus> GetBuildsStatuses(CiEntryPointSetting ciEntryPointSetting, IEnumerable <BuildDefinitionSetting> watchedBuildDefinitions)
        {
            var parallelResult = watchedBuildDefinitions.Select(buildDefinitionSetting => GetBuildStatus(ciEntryPointSetting, buildDefinitionSetting));

            return(parallelResult.AsParallel().ToList());
        }