private static IEnumerable <ChangeDetail> SetupBuildTypeAndBuilds(ITeamCityApi api, BuildTemplate template) { A.CallTo(() => api.GetBuildDetailsByBuildId(template.BuildId)).Returns(new BuildDetails { BuildTypeId = template.BuildId, Name = template.BuildName, Id = template.BuildId }); var builds = Enumerable.Range(1, template.BuildCount).Select(i => new Build { BuildTypeId = template.BuildId, Id = i.ToString(), Number = String.Format(template.BuildNumberPattern, i) }); var changeDetails = Enumerable.Range(1, template.BuildCount).Select(i => new ChangeDetail { Comment = Company.CatchPhrase(), Id = i.ToString(), Username = Name.FullName(), Version = (100 + i * 10 + RandomNumber.Next(9)).ToString(), Files = Enumerable.Range(1, RandomNumber.Next(1, 50)).Select(j => new FileDetails { beforerevision = RandomNumber.Next(50, 500).ToString(), afterrevision = RandomNumber.Next(450, 700).ToString(), File = Path.GetTempFileName(), relativefile = Path.GetTempFileName() }).ToList(), }); A.CallTo(() => api.GetBuildsByBuildType(template.BuildId)).Returns(builds); return(changeDetails); }
/// <summary> /// Provides the ability to generate delta change manifests between arbitrary build versions. /// </summary> /// <param name="api">A TeamCityApi.</param> /// <param name="externalIssueResolvers">A list of IExternalIssueResolver objects.</param> /// <param name="packageChangeComparator">Provides package dependency comparison capability.</param> /// <param name="packageBuildMappingCache">Provides the ability to map from a Nuget package to the build that created the package.</param> public AggregateBuildDeltaResolver(ITeamCityApi api, IEnumerable <IExternalIssueResolver> externalIssueResolvers, IPackageChangeComparator packageChangeComparator, PackageBuildMappingCache packageBuildMappingCache, List <NuGetPackageChange> traversedPackageChanges) { _api = api; _externalIssueResolvers = externalIssueResolvers; _packageChangeComparator = packageChangeComparator; _packageBuildMappingCache = packageBuildMappingCache; _traversedPackageChanges = traversedPackageChanges; }
/// <summary> /// Provides the ability to generate delta change manifests between arbitrary build versions. /// </summary> /// <param name="api">A TeamCityApi.</param> /// <param name="issueDetailResolver"></param> /// <param name="packageChangeComparator">Provides package dependency comparison capability.</param> /// <param name="packageBuildMappingCache">Provides the ability to map from a Nuget package to the build that created the package.</param> /// <param name="traversedPackageChanges">Packages changes that we have already calculated and can reuse.</param> public AggregateBuildDeltaResolver(ITeamCityApi api, IIssueDetailResolver issueDetailResolver, IPackageChangeComparator packageChangeComparator, PackageBuildMappingCache packageBuildMappingCache, ConcurrentBag<NuGetPackageChange> traversedPackageChanges) { _api = api; _issueDetailResolver = issueDetailResolver; _packageChangeComparator = packageChangeComparator; _packageBuildMappingCache = packageBuildMappingCache; _traversedPackageChanges = traversedPackageChanges; }
/// <summary> /// Provides the ability to generate delta change manifests between arbitrary build versions. /// </summary> /// <param name="api">A TeamCityApi.</param> /// <param name="externalIssueResolvers">A list of IExternalIssueResolver objects.</param> /// <param name="packageChangeComparator">Provides package dependency comparison capability.</param> /// <param name="packageBuildMappingCache">Provides the ability to map from a Nuget package to the build that created the package.</param> public AggregateBuildDeltaResolver(ITeamCityApi api, IEnumerable<IExternalIssueResolver> externalIssueResolvers, IPackageChangeComparator packageChangeComparator, PackageBuildMappingCache packageBuildMappingCache, List<NuGetPackageChange> traversedPackageChanges) { _api = api; _externalIssueResolvers = externalIssueResolvers; _packageChangeComparator = packageChangeComparator; _packageBuildMappingCache = packageBuildMappingCache; _traversedPackageChanges = traversedPackageChanges; }
public TeamCityBuildMonitor(ITeamCityApi api, string specificProject, bool failFast, List<string> buildLies, double checkIntervalInSeconds) { _api = api; _checkIntervalInSeconds = checkIntervalInSeconds; _failFast = failFast; _specificProject = specificProject; _buildLies = buildLies; }
public TeamCityBuildMonitor(ITeamCityApi api, string specificProject, bool failFast, List<string> buildLies, Int64 checkIntervalInMilliSeconds, IEnumerable<string> buildTypeIds) { _api = api; _checkIntervalInMilliSeconds = checkIntervalInMilliSeconds; _buildTypeIds = buildTypeIds; _failFast = failFast; _specificProject = specificProject; _buildLies = buildLies; }
private static void SetNugetPackageDependencyExpectations(ITeamCityApi api, PackageBuildMappingCache cache, BuildTemplate template, IExternalIssueResolver issueResolver) { var initial = template.StartBuildPackages.Select(p => new TeamCityApi.PackageDetails { Id = p.Key, Version = p.Value }).ToList(); var final = template.FinishBuildPackages.Select(p => new TeamCityApi.PackageDetails { Id = p.Key, Version = p.Value }).ToList(); if (initial.Any()) { A.CallTo(() => api.GetNuGetDependenciesByBuildTypeAndBuildId(template.BuildId, template.StartBuildNumber.ToString())) .Returns(initial); } if (initial.Any()) { A.CallTo(() => api.GetNuGetDependenciesByBuildTypeAndBuildId(template.BuildId, template.FinishBuildNumber.ToString())) .Returns(final); } if (template.CreateNuGetPackageChangeManifests && initial.Any() && final.Any()) { var packageDiffs = new PackageChangeComparator().GetPackageChanges(initial, final); foreach (var diff in packageDiffs.Where(d => d.Type == NuGetPackageChangeType.Modified)) { if (!cache.PackageBuildMappings.Any(c => c.PackageId.Equals(diff.PackageId) && c.BuildConfigurationId.Equals(diff.PackageId))) { cache.PackageBuildMappings.Add(new PackageBuildMapping { BuildConfigurationId = diff.PackageId, BuildConfigurationName = diff.PackageId, PackageId = diff.PackageId, Project = diff.PackageId, ServerUrl = api.TeamCityServer }); } SetExpectations(new BuildTemplate { BuildId = diff.PackageId, BuildCount = 15, BuildName = diff.PackageId, BuildNumberPattern = "1.{0}", CreateNuGetPackageChangeManifests = false, StartBuildNumber = Convert.ToInt16(diff.OldVersion.Split('.')[1]), FinishBuildNumber = Convert.ToInt16(diff.NewVersion.Split('.')[1]), IssueCount = 1, NestedIssueChance = 100, NestedIssueDepth = 1, }, api, issueResolver, cache); } } }
public TeamCityBuildMonitor(ITeamCityApi api, string specificProject, bool failFast, List <string> buildLies, Int64 checkIntervalInMilliSeconds, IEnumerable <string> buildTypeIds) { _api = api; _checkIntervalInMilliSeconds = checkIntervalInMilliSeconds; _buildTypeIds = buildTypeIds; _failFast = failFast; _specificProject = specificProject; _buildLies = buildLies; }
private static void SetExpectations(BuildTemplate template, ITeamCityApi api, IExternalIssueResolver issueResolver, PackageBuildMappingCache packageCache) { var startBuild = string.Format(template.BuildNumberPattern, template.StartBuildNumber); var finishBuild = string.Format(template.BuildNumberPattern, template.FinishBuildNumber); //BuildType/Builds/ChangeDetails A.CallTo(() => api.GetBuildTypeDetailsById(template.BuildId)) .Returns(new BuildTypeDetails { Id = template.BuildId, Name = template.BuildName, Description = template.BuildName, }); var changeDetails = SetupBuildTypeAndBuilds(api, template); A.CallTo(() => api.GetChangeDetailsByBuildTypeAndBuildNumber(template.BuildId, startBuild, finishBuild, A <IEnumerable <Build> > .Ignored)) .Returns(changeDetails.Where(c => Convert.ToInt16(c.Id) > template.StartBuildNumber && Convert.ToInt16(c.Id) <= template.FinishBuildNumber).ToList()); //Issues if (template.IssueCount > 0) { var issues = Enumerable.Range(1, template.IssueCount).Select(i => new Issue { Id = RandomNumber.Next(2000).ToString() }).ToList(); A.CallTo(() => api.GetIssuesByBuildTypeAndBuildRange(template.BuildId, startBuild, finishBuild, A <IEnumerable <Build> > .Ignored)) .Returns(issues); A.CallTo(issueResolver).WithReturnType <IEnumerable <ExternalIssueDetails> >() .Returns(CreateExternalIssueDetails(issues, template)); } //NuGetPackages SetNugetPackageDependencyExpectations(api, packageCache, template, issueResolver); SetNugetPackageDependencyExpectations(api, packageCache, template, issueResolver); }
private static IEnumerable<ChangeDetail> SetupBuildTypeAndBuilds(ITeamCityApi api, BuildTemplate template) { A.CallTo(() => api.GetBuildDetailsByBuildId(template.BuildId)).Returns(new BuildDetails {BuildTypeId = template.BuildId, Name = template.BuildName, Id = template.BuildId}); var builds = Enumerable.Range(1, template.BuildCount).Select(i => new Build {BuildTypeId = template.BuildId, Id = i.ToString(), Number = String.Format(template.BuildNumberPattern, i)}); var changeDetails = Enumerable.Range(1, template.BuildCount).Select(i => new ChangeDetail { Comment = Company.CatchPhrase(), Id = i.ToString(), Username = Name.FullName(), Version = (100+i*10+RandomNumber.Next(9)).ToString(), Files = Enumerable.Range(1,RandomNumber.Next(1,50)).Select(j => new FileDetails { beforerevision = RandomNumber.Next(50,500).ToString(), afterrevision = RandomNumber.Next(450, 700).ToString(), File = Path.GetRandomFileName(), relativefile = Path.GetRandomFileName() }).ToList(), }); A.CallTo(() => api.GetBuildsByBuildType(template.BuildId)).Returns(builds); return changeDetails; }
private static void SetNugetPackageDependencyExpectations(ITeamCityApi api, PackageBuildMappingCache cache, BuildTemplate template, IExternalIssueResolver issueResolver) { var initial = template.StartBuildPackages.Select(p => new TeamCityApi.PackageDetails {Id = p.Key, Version = p.Value}).ToList(); var final = template.FinishBuildPackages.Select(p => new TeamCityApi.PackageDetails { Id = p.Key, Version = p.Value }).ToList(); if (initial.Any()) { A.CallTo(() => api.GetNuGetDependenciesByBuildTypeAndBuildId(template.BuildId, template.StartBuildNumber.ToString())) .Returns(initial); } if (initial.Any()) { A.CallTo(() => api.GetNuGetDependenciesByBuildTypeAndBuildId(template.BuildId, template.FinishBuildNumber.ToString())) .Returns(final); } if (template.CreateNuGetPackageChangeManifests && initial.Any() && final.Any()) { var packageDiffs = new PackageChangeComparator().GetPackageChanges(initial, final); foreach (var diff in packageDiffs.Where(d => d.Type == NuGetPackageChangeType.Modified)) { if (!cache.PackageBuildMappings.Any(c => c.PackageId.Equals(diff.PackageId) && c.BuildConfigurationId.Equals(diff.PackageId))) { cache.PackageBuildMappings.Add(new PackageBuildMapping { BuildConfigurationId = diff.PackageId, BuildConfigurationName = diff.PackageId, PackageId = diff.PackageId, Project = diff.PackageId, ServerUrl = api.Url }); } SetExpectations(new BuildTemplate { BuildId = diff.PackageId, BuildCount = 15, BuildName = diff.PackageId, BuildNumberPattern = "1.{0}", CreateNuGetPackageChangeManifests = false, StartBuildNumber = Convert.ToInt16(diff.OldVersion.Split('.')[1]), FinishBuildNumber = Convert.ToInt16(diff.NewVersion.Split('.')[1]), IssueCount = 1, NestedIssueChance = 100, NestedIssueDepth = 1, }, api, issueResolver, cache); } } }
private static void SetExpectations(BuildTemplate template, ITeamCityApi api, IExternalIssueResolver issueResolver, PackageBuildMappingCache packageCache) { var startBuild = string.Format(template.BuildNumberPattern, template.StartBuildNumber); var finishBuild = string.Format(template.BuildNumberPattern, template.FinishBuildNumber); //BuildType/Builds/ChangeDetails A.CallTo(() => api.GetBuildTypeDetailsById(template.BuildId)) .Returns(new BuildTypeDetails { Id = template.BuildId, Name = template.BuildName, Description = template.BuildName, }); var changeDetails = SetupBuildTypeAndBuilds(api, template); A.CallTo(() =>api.GetChangeDetailsByBuildTypeAndBuildNumber(template.BuildId, startBuild, finishBuild, A<IEnumerable<Build>>.Ignored)) .Returns(changeDetails.Where(c => Convert.ToInt16(c.Id) > template.StartBuildNumber && Convert.ToInt16(c.Id) <= template.FinishBuildNumber).ToList()); //Issues if (template.IssueCount > 0) { var issues = Enumerable.Range(1, template.IssueCount).Select(i => new Issue {Id = RandomNumber.Next(2000).ToString()}).ToList(); A.CallTo(() => api.GetIssuesByBuildTypeAndBuildRange(template.BuildId, startBuild, finishBuild, A<IEnumerable<Build>>.Ignored)) .Returns(issues); A.CallTo(issueResolver).WithReturnType<IEnumerable<ExternalIssueDetails>>() .Returns(CreateExternalIssueDetails(issues, template)); } //NuGetPackages SetNugetPackageDependencyExpectations(api, packageCache, template, issueResolver); SetNugetPackageDependencyExpectations(api, packageCache, template, issueResolver); }
public BuildMonitor(IBuildStatus status, ITeamCityApi api, IBuildViewModel setup) { Status = status ?? throw new ArgumentNullException(nameof(status)); Api = api ?? throw new ArgumentNullException(nameof(api)); Setup = setup ?? throw new ArgumentNullException(nameof(setup)); }