Пример #1
0
 public void JobNameInFolder()
 {
     var jobId = JobId.ParseName("job/cat/job/dog");
     var buildId = new BuildId(42, jobId);
     var buildKey = new BuildKey(buildId);
     Assert.False(AzureUtil.IsIllegalKey(buildKey.Key));
 }
Пример #2
0
 public void DateKey()
 {
     var offset = DateTimeOffset.UtcNow;
     var buildId = new BuildId(42, JobId.ParseName("test"));
     var key = BuildFailureEntity.GetDateEntityKey(offset, buildId, "testName");
     Assert.False(key.RowKey.Contains("Key"));
 }
Пример #3
0
 public static Uri GetBuildStatusIconUri(Uri jenkinsUri, BuildId id)
 {
     var builder = new UriBuilder(jenkinsUri);
     builder.Path = "buildStatus/icon";
     builder.Query = $"job={id.JobId.Name}&build={id.Number}";
     return builder.Uri;
 }
Пример #4
0
 public void ComplexJobKey()
 {
     var jobId = JobId.ParseName("job/cat/job/dog");
     var buildId = new BuildId(42, jobId);
     var entityKey = BuildResultEntity.GetExactEntityKey(buildId);
     Assert.False(AzureUtil.IsIllegalKey(entityKey.PartitionKey));
     Assert.False(AzureUtil.IsIllegalKey(entityKey.RowKey));
 }
        public void DateKey()
        {
            var offset  = DateTimeOffset.UtcNow;
            var buildId = new BuildId(42, JobId.ParseName("test"));
            var key     = BuildFailureEntity.GetDateEntityKey(offset, buildId, "testName");

            Assert.False(key.RowKey.Contains("Key"));
        }
Пример #6
0
 public void Simple()
 {
     var jobId = JobId.ParseName("dog");
     var buildId = new BuildId(42, jobId);
     var buildKey = new BuildKey(buildId);
     Assert.False(AzureUtil.IsIllegalKey(buildKey.Key));
     Assert.Equal("42-dog", buildKey.Key);
 }
Пример #7
0
 public void ComplexJobKeyDate()
 {
     var jobId = JobId.ParseName("job/cat/job/dog");
     var buildId = new BuildId(42, jobId);
     var entityKey = BuildFailureEntity.GetDateEntityKey(DateTimeOffset.UtcNow, buildId, "terrible/blah");
     Assert.False(AzureUtil.IsIllegalKey(entityKey.PartitionKey));
     Assert.False(AzureUtil.IsIllegalKey(entityKey.RowKey));
 }
Пример #8
0
        private static void OomTest()
        {
            var buildId = new BuildId(352, JobId.ParseName("dotnet_corefx/master/windows_nt_release_prtest"));
            var client  = CreateClient();
            var list    = client.GetFailedTestCases(buildId);

            Console.WriteLine(list.Count);
        }
Пример #9
0
        public async Task VerifySymbolFileAsync(string filepath, bool isDebugInfoFile)
        {
            BuildId buildId = await ReadBuildIdAsync(filepath);

            if (_verificationFailures.TryGetValue(buildId.ToString(), out string errorString))
            {
                throw new BinaryFileUtilException(errorString);
            }
        }
Пример #10
0
        /// <summary>
        /// Update the table storage to contain the result of the specified build.
        /// </summary>
        private async Task <BuildResultEntity> GetBuildFailureEntity(BuildId id)
        {
            var buildInfo = await _client.GetBuildInfoAsync(id);

            var jobKind = await _client.GetJobKindAsync(id.JobId);

            PullRequestInfo prInfo = null;

            if (JobUtil.IsPullRequestJobName(id.JobId.Name))
            {
                try
                {
                    prInfo = await _client.GetPullRequestInfoAsync(id);
                }
                catch (Exception ex)
                {
                    // TODO: Flow builds don't have the PR directly in the triggered jobs.  Have to walk
                    // back up to the parent job.  For now swallow this error so we don't trigger false
                    // positives in the error detection.
                    _textWriter.WriteLine($"Error pulling PR info for {id}: {ex.Message}");
                }
            }

            BuildResultClassification classification;

            switch (buildInfo.State)
            {
            case BuildState.Succeeded:
                classification = BuildResultClassification.Succeeded;
                break;

            case BuildState.Aborted:
                classification = BuildResultClassification.Aborted;
                break;

            case BuildState.Failed:
                classification = await PopulateFailedBuildResult(buildInfo, jobKind, prInfo);

                break;

            case BuildState.Running:
                classification = BuildResultClassification.Unknown;
                break;

            default:
                throw new Exception($"Invalid enum: {buildInfo.State} for {id.JobName} - {id.Number}");
            }

            return(new BuildResultEntity(
                       buildInfo.Id,
                       buildInfo.Date,
                       buildInfo.Duration,
                       jobKind: jobKind,
                       machineName: buildInfo.MachineName,
                       classification: classification,
                       prInfo: prInfo));
        }
Пример #11
0
        public void ComplexJobKey()
        {
            var jobId     = JobId.ParseName("job/cat/job/dog");
            var buildId   = new BuildId(42, jobId);
            var entityKey = BuildResultEntity.GetExactEntityKey(buildId);

            Assert.False(AzureUtil.IsIllegalKey(entityKey.PartitionKey));
            Assert.False(AzureUtil.IsIllegalKey(entityKey.RowKey));
        }
Пример #12
0
        public void ComplexJobKeyDate()
        {
            var jobId     = JobId.ParseName("job/cat/job/dog");
            var buildId   = new BuildId(42, jobId);
            var entityKey = BuildFailureEntity.GetDateEntityKey(DateTimeOffset.UtcNow, buildId, "terrible/blah");

            Assert.False(AzureUtil.IsIllegalKey(entityKey.PartitionKey));
            Assert.False(AzureUtil.IsIllegalKey(entityKey.RowKey));
        }
Пример #13
0
 public void HostName()
 {
     var host = new Uri("http://test.com");
     var buildId = new BuildId(42, JobId.ParseName("cat"));
     RunAll(EqualityUnit
         .Create(new BoundBuildId(host, buildId))
         .WithEqualValues(new BoundBuildId(host, buildId), new BoundBuildId(host, buildId))
         .WithNotEqualValues(new BoundBuildId(new Uri("http://other.com"), buildId)));
 }
Пример #14
0
            public void Scheme()
            {
                var buildId = new BuildId(42, JobId.ParseName("cat"));

                RunAll(EqualityUnit
                       .Create(new BoundBuildId("test", buildId, Uri.UriSchemeFtp))
                       .WithEqualValues(new BoundBuildId("test", buildId, Uri.UriSchemeFtp))
                       .WithNotEqualValues(new BoundBuildId("other", buildId, Uri.UriSchemeHttps)));
            }
Пример #15
0
        public void Simple()
        {
            var jobId    = JobId.ParseName("dog");
            var buildId  = new BuildId(42, jobId);
            var buildKey = new BuildKey(buildId);

            Assert.False(AzureUtil.IsIllegalKey(buildKey.Key));
            Assert.Equal("42-dog", buildKey.Key);
        }
Пример #16
0
        public void Inequality(string aStr, string bStr)
        {
            var a = new BuildId(aStr);
            var b = new BuildId(bStr);

            Assert.False(a.Equals(b));
            Assert.False(Equals(a, b));
            Assert.True(a != b);
            Assert.AreNotEqual(a.GetHashCode(), b.GetHashCode());
        }
Пример #17
0
            public void HostName()
            {
                var host    = new Uri("http://test.com");
                var buildId = new BuildId(42, JobId.ParseName("cat"));

                RunAll(EqualityUnit
                       .Create(new BoundBuildId(host, buildId))
                       .WithEqualValues(new BoundBuildId(host, buildId), new BoundBuildId(host, buildId))
                       .WithNotEqualValues(new BoundBuildId(new Uri("http://other.com"), buildId)));
            }
Пример #18
0
        public void Equality_DefaultEqualsZeroLength()
        {
            BuildId defaultBuilId;
            BuildId zeroLength = new BuildId(new byte[] { });

            Assert.True(defaultBuilId.Equals(zeroLength));
            Assert.True(Equals(defaultBuilId, zeroLength));
            Assert.True(defaultBuilId == zeroLength);
            Assert.AreEqual(defaultBuilId.GetHashCode(), zeroLength.GetHashCode());
        }
Пример #19
0
        private static async Task <BuildData?> GetBuildDataAsync(BuildId buildId)
        {
            var client    = CreateClient();
            var buildInfo = await client.GetBuildInfoAsync(buildId);

            string name;
            string category;

            switch (buildInfo.State)
            {
            case BuildState.Succeeded:
                name     = "Succeeded";
                category = "Succeeded";
                break;;

            case BuildState.Aborted:
                name     = "Aborted";
                category = "Aborted";
                break;;

            case BuildState.Failed:
            {
                try
                {
                    var buildResult = await client.GetBuildResultAsync(buildInfo);

                    var cause = GetBestCause(buildResult.FailureInfo);
                    name     = string.IsNullOrEmpty(cause.Name) ? "Unknown Name" : cause.Name;
                    category = string.IsNullOrEmpty(cause.Category) ? "Unknown Category" : cause.Category;
                }
                catch
                {
                    name     = "Rest API Error";
                    category = "Unknown";
                }
            }
            break;

            case BuildState.Running:
                // Don't collect data here
                return(null);

            default:
                Debug.Assert(false);
                return(null);
            }

            return(new BuildData()
            {
                BuildId = buildId,
                ResultName = name,
                ResultCategory = category,
            });
        }
Пример #20
0
        public Auth(byte[] state, string node = "")
        {
            if (string.IsNullOrEmpty(node))
            {
                node  = new BuildId().MakeIdS + Encoding.UTF8.GetString(state);
                node += new Random().NextDouble().ToString(CultureInfo.CurrentCulture);
            }

            this.KeyBytes   = this._sha512.ComputeHash(Encoding.UTF8.GetBytes(node));
            this.TokenBytes = this._sha512.ComputeHash(this.KeyBytes);
        }
Пример #21
0
        public void AddFile_InvalidArgument(string filename, string buildIdStr)
        {
            var buildId = new BuildId(buildIdStr);
            var store   = GetEmptyStore();

            if (!store.SupportsAddingFiles)
            {
                return;
            }

            Assert.ThrowsAsync <ArgumentException>(
                () => store.AddFileAsync(sourceSymbolFile, filename, buildId));
        }
Пример #22
0
        public static byte[] GetElfFileBytesFromBuildId(BuildId id, bool isExecutable = false)
        {
            var idNote = GetNoteSectionBytes(NoteSection.GnuName, NoteSection.NtGnuBuildIdType,
                                             id.Bytes.ToArray());

            var noteOffset    = ProgramHeader.Size + ElfHeader.Size;
            var programHeader = GetProgramHeaderBytes(
                ProgramHeader.Type.NoteSegment, (ulong)noteOffset, 0, (ulong)idNote.Length);

            var elfHeader = GetElfBytes(ElfHeader.Size, ProgramHeader.Size, 1, isExecutable);

            return(elfHeader.Concat(programHeader).Concat(idNote).ToArray());
        }
Пример #23
0
        public async Task FindFile_BuildIdMismatchAsync()
        {
            var mismatchedBuildId = new BuildId("4321");

            var store = await GetStoreWithFileAsync();

            var fileReference = await store.FindFileAsync(FILENAME, mismatchedBuildId, true, log);

            Assert.Null(fileReference);
            StringAssert.Contains(Strings.BuildIdMismatch(Path.Combine(STORE_PATH, FILENAME),
                                                          mismatchedBuildId, BUILD_ID),
                                  log.ToString());
        }
Пример #24
0
        private OS GetOsForBuild(BuildId buildId)
        {
            var json     = _client.GetJson(JenkinsUtil.GetBuildPath(buildId), tree: "builtOn[*]");
            var computer = json.Value <string>("builtOn");
            OS  os;

            if (!string.IsNullOrEmpty(computer) && _computerNameMap.TryGetValue(computer, out os))
            {
                return(os);
            }

            return(OS.Unknown);
        }
Пример #25
0
        public override async Task <IFileReference> FindFileAsync(string filename, BuildId buildId,
                                                                  bool isDebugInfoFile,
                                                                  TextWriter log)
        {
            if (string.IsNullOrEmpty(filename))
            {
                throw new ArgumentException(Strings.FilenameNullOrEmpty, "filename");
            }

            ISymbolStore currentCache = null;

            foreach (var store in _stores)
            {
                IFileReference fileReference =
                    await store.FindFileAsync(filename, buildId, false, log);

                if (fileReference != null)
                {
                    if (!store.IsCache && currentCache != null)
                    {
                        try
                        {
                            fileReference = await currentCache.AddFileAsync(fileReference, filename,
                                                                            buildId, log);
                        }
                        catch (Exception e)
                            when(e is NotSupportedException || e is SymbolStoreException ||
                                 e is ArgumentException)
                            {
                                Trace.WriteLine(e.Message);
                                await log.WriteLineAsync(e.Message);
                            }
                    }

                    if (!fileReference.IsFilesystemLocation ||
                        await VerifySymbolFileAsync(fileReference.Location, buildId,
                                                    isDebugInfoFile, log))
                    {
                        return(fileReference);
                    }
                }

                if (store.IsCache)
                {
                    currentCache = store;
                }
            }

            return(null);
        }
Пример #26
0
        private static async Task TestJob()
        {
            var jobUrlStr = "http://dotnet-ci.cloudapp.net/job/Private/job/dotnet_roslyn-internal/job/microupdate/job/windows_vsi_p2/8/";
            var uri       = new Uri(jobUrlStr);
            var parts     = uri.PathAndQuery.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            var jobPath   = string.Join("/", parts.Take(parts.Length - 1));
            var number    = int.Parse(parts.Last());
            var jobId     = JenkinsUtil.ConvertPathToJobId(jobPath);
            var buildId   = new BuildId(number, jobId);

            var account   = GetStorageAccount();
            var populator = new BuildTablePopulator(account.CreateCloudTableClient(), CreateClient(), Console.Out);
            await populator.PopulateBuild(buildId);
        }
Пример #27
0
        public async Task IsPopulated()
        {
            var buildId = new BuildId(42, JobId.ParseName(Guid.NewGuid().ToString()));
            Assert.False(await _populator.IsPopulated(buildId));

            var key = BuildResultEntity.GetExactEntityKey(buildId);
            var entity = new DynamicTableEntity()
            {
                PartitionKey = key.PartitionKey,
                RowKey = key.RowKey
            };
            await _buildResultExactTable.ExecuteAsync(TableOperation.Insert(entity));
            Assert.True(await _populator.IsPopulated(buildId));
        }
Пример #28
0
        private async Task <BuildResultEntity> PopulateBuildIdCore(BuildId buildId)
        {
            try
            {
                var entity = await GetBuildFailureEntity(buildId);

                WriteLine(buildId, $"adding reason {entity.ClassificationKind}");
                return(entity);
            }
            catch (Exception ex)
            {
                WriteLine(buildId, $"error processing {ex.Message}");
                throw;
            }
        }
Пример #29
0
        public async Task IsPopulated()
        {
            var buildId = new BuildId(42, JobId.ParseName(Guid.NewGuid().ToString()));

            Assert.False(await _populator.IsPopulated(buildId));

            var key    = BuildResultEntity.GetExactEntityKey(buildId);
            var entity = new DynamicTableEntity()
            {
                PartitionKey = key.PartitionKey,
                RowKey       = key.RowKey
            };
            await _buildResultExactTable.ExecuteAsync(TableOperation.Insert(entity));

            Assert.True(await _populator.IsPopulated(buildId));
        }
Пример #30
0
        /// <summary>
        /// Populate the <see cref="BuildResultEntity"/> structures for a build overwriting any data
        /// that existed before.  Returns the entity if enough information was there to process the value.
        /// </summary>
        public async Task <BuildResultEntity> PopulateBuild(BuildId buildId)
        {
            var entity = await PopulateBuildIdCore(buildId);

            if (entity == null)
            {
                return(null);
            }

            await PopulateViewName(buildId.JobId, entity.BuildDateTimeOffset);

            await _buildResultDateTable.ExecuteAsync(TableOperation.InsertOrReplace(entity.CopyDate()));

            await _buildResultExactTable.ExecuteAsync(TableOperation.InsertOrReplace(entity.CopyExact()));

            return(entity);
        }
Пример #31
0
        public override async Task <IFileReference> FindFileAsync(string filename, BuildId buildId,
                                                                  bool isDebugInfoFile,
                                                                  TextWriter log)
        {
            if (string.IsNullOrEmpty(filename))
            {
                throw new ArgumentException(Strings.FilenameNullOrEmpty, "filename");
            }
            if (buildId == BuildId.Empty)
            {
                Trace.WriteLine(
                    Strings.FailedToSearchStructuredStore(_path, filename, Strings.EmptyBuildId));
                await log.WriteLineAsync(
                    Strings.FailedToSearchStructuredStore(_path, filename, Strings.EmptyBuildId));

                return(null);
            }

            string filepath;

            try
            {
                filepath = Path.Combine(_path, filename, buildId.ToString(), filename);
            }
            catch (ArgumentException e)
            {
                Trace.WriteLine(Strings.FailedToSearchStructuredStore(_path, filename, e.Message));
                await log.WriteLineAsync(
                    Strings.FailedToSearchStructuredStore(_path, filename, e.Message));

                return(null);
            }
            if (!_fileSystem.File.Exists(filepath))
            {
                Trace.WriteLine(Strings.FileNotFound(filepath));
                await log.WriteLineAsync(Strings.FileNotFound(filepath));

                return(null);
            }

            Trace.WriteLine(Strings.FileFound(filepath));
            await log.WriteLineAsync(Strings.FileFound(filepath));

            return(new FileReference(_fileSystem, filepath));
        }
        public override int GetHashCode()
        {
            int hash = 1;

            if (Id.Length != 0)
            {
                hash ^= Id.GetHashCode();
            }
            if (RepoSource.Length != 0)
            {
                hash ^= RepoSource.GetHashCode();
            }
            if (RepoOwner.Length != 0)
            {
                hash ^= RepoOwner.GetHashCode();
            }
            if (RepoName.Length != 0)
            {
                hash ^= RepoName.GetHashCode();
            }
            if (RepoBranch.Length != 0)
            {
                hash ^= RepoBranch.GetHashCode();
            }
            if (RepoRevision.Length != 0)
            {
                hash ^= RepoRevision.GetHashCode();
            }
            if (BuildId.Length != 0)
            {
                hash ^= BuildId.GetHashCode();
            }
            hash ^= steps_.GetHashCode();
            if (insertedAtTime_ != null)
            {
                hash ^= InsertedAtTime.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
        /// <inheritdoc />
        public bool Equals(BuildChangeStateCommentReadModel other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }

            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return
                (BuildId.Equals(other.BuildId) &&
                 Comment == other.Comment &&
                 Equals(UserId, other.UserId) &&
                 CreatedAt == other.CreatedAt &&
                 NewState == other.NewState);
        }
Пример #34
0
        public override async Task <IFileReference> AddFileAsync(IFileReference source,
                                                                 string filename, BuildId buildId,
                                                                 TextWriter log)
        {
            if (source == null)
            {
                throw new ArgumentException(Strings.FailedToCopyToStructuredStore(
                                                _path, filename, Strings.SourceFileReferenceNull),
                                            nameof(source));
            }
            if (string.IsNullOrEmpty(filename))
            {
                throw new ArgumentException(Strings.FailedToCopyToStructuredStore(
                                                _path, filename, Strings.FilenameNullOrEmpty),
                                            nameof(filename));
            }
            if (buildId == BuildId.Empty)
            {
                throw new ArgumentException(
                          Strings.FailedToCopyToStructuredStore(_path, filename, Strings.EmptyBuildId),
                          nameof(buildId));
            }

            try
            {
                AddMarkerFileIfNeeded();

                string filepath = Path.Combine(_path, filename, buildId.ToString(), filename);
                await source.CopyToAsync(filepath);

                Trace.WriteLine(Strings.CopiedFile(filename, filepath));
                await log.WriteLineAsync(Strings.CopiedFile(filename, filepath));

                return(new FileReference(_fileSystem, filepath));
            }
            catch (Exception e) when(e is SymbolStoreException || e is IOException ||
                                     e is UnauthorizedAccessException ||
                                     e is NotSupportedException || e is ArgumentException)
            {
                throw new SymbolStoreException(
                          Strings.FailedToCopyToStructuredStore(_path, filename, e.Message), e);
            }
        }
Пример #35
0
        public async Task <string> FindFileAsync(
            string filename, BuildId uuid, bool isDebugInfoFile, TextWriter searchLog)
        {
            if (string.IsNullOrEmpty(filename))
            {
                throw new ArgumentNullException(Strings.FilenameNullOrEmpty, nameof(filename));
            }
            searchLog = searchLog ?? TextWriter.Null;

            await searchLog.WriteLineAsync($"Searching for {filename}");

            Trace.WriteLine($"Searching for {filename}");

            if (uuid == BuildId.Empty)
            {
                await searchLog.WriteLineAsync(ErrorStrings.ModuleBuildIdUnknown);

                Trace.WriteLine($"Warning: The build ID of {filename} is unknown.");
            }

            var fileReference =
                await _symbolStore.FindFileAsync(filename, uuid, isDebugInfoFile, searchLog);

            if (fileReference == null)
            {
                await searchLog.WriteLineAsync(ErrorStrings.FailedToFindFile(filename));

                Trace.WriteLine(ErrorStrings.FailedToFindFile(filename));
                return(null);
            }
            if (!fileReference.IsFilesystemLocation)
            {
                await searchLog.WriteLineAsync(
                    ErrorStrings.FileNotOnFilesystem(fileReference.Location));

                Trace.WriteLine($"Unable to load file. '{fileReference.Location}' must be " +
                                $"cached in a filesystem location.");
                return(null);
            }

            return(fileReference.Location);
        }
Пример #36
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (Target.Length != 0)
            {
                hash ^= Target.GetHashCode();
            }
            if (Type != global::Google.Cloud.Functions.V1.OperationType.OperationUnspecified)
            {
                hash ^= Type.GetHashCode();
            }
            if (request_ != null)
            {
                hash ^= Request.GetHashCode();
            }
            if (VersionId != 0L)
            {
                hash ^= VersionId.GetHashCode();
            }
            if (updateTime_ != null)
            {
                hash ^= UpdateTime.GetHashCode();
            }
            if (BuildId.Length != 0)
            {
                hash ^= BuildId.GetHashCode();
            }
            if (SourceToken.Length != 0)
            {
                hash ^= SourceToken.GetHashCode();
            }
            if (BuildName.Length != 0)
            {
                hash ^= BuildName.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Пример #37
0
        private static async Task <bool> IsJavaFailure(BuildId buildId)
        {
            var client = CreateClient();

            try
            {
                var consoleText = await client.GetConsoleTextAsync(buildId);

                if (consoleText.Contains("java.lang.IllegalStateException: Invalid"))
                {
                    return(true);
                }

                return(false);
            }
            catch
            {
                return(false);
            }
        }
Пример #38
0
        public void PullRequestInfo()
        {
            var buildId   = new BuildId(42, JobId.ParseName("hello"));
            var buildDate = DateTimeOffset.UtcNow;
            var prInfo    = new PullRequestInfo("bob", "dog", 42, "cat", "tree");
            var entity    = new BuildResultEntity(
                buildId,
                buildDate,
                TimeSpan.FromSeconds(1),
                "kind",
                "test",
                BuildResultClassification.Succeeded,
                prInfo: prInfo);

            Assert.True(entity.HasPullRequestInfo);
            Assert.Equal(entity.PullRequestInfo.Author, prInfo.Author);
            Assert.Equal(entity.PullRequestInfo.AuthorEmail, prInfo.AuthorEmail);
            Assert.Equal(entity.PullRequestInfo.Id, prInfo.Id);
            Assert.Equal(entity.PullRequestInfo.PullUrl, prInfo.PullUrl);
            Assert.Equal(entity.PullRequestSha1, prInfo.Sha1);
        }
Пример #39
0
        public async Task TaoFailure()
        {
            var buildId = new BuildId(4, JobId.ParseName("test"));
            _restClient.AddJson(
                buildId: buildId,
                buildResultJson: TestResources.Tao1BuildResult,
                buildInfoJson: TestResources.Tao1BuildInfo,
                failureInfoJson: TestResources.Tao1FailureInfo,
                testReportJson: TestResources.Tao1TestResult,
                jobXml: @"<freeStyleProject></freeStyleProject>");

            await _populator.PopulateBuild(new BoundBuildId(new Uri("http://example.com"), buildId));

            var filter = TableQueryUtil.Column(nameof(BuildFailureEntity.JobName), buildId.JobName);
            var list = AzureUtil.Query<BuildFailureEntity>(_buildFailureExactTable, filter).ToList();
            Assert.Equal(2, list.Count);
            foreach (var item in list)
            {
                Assert.Equal(BuildFailureKind.TestCase, item.BuildFailureKind);
                Assert.Equal(buildId, item.BuildId);
            }
        }
Пример #40
0
 public BuildAnalyzeError(BuildId id, Exception ex)
 {
     BuildId = id;
     Exception = ex;
 }
Пример #41
0
 public void ParseNonJson()
 {
     var buildId = new BuildId(42, JobId.ParseName("test"));
     _restClient.AddJson(buildId, testReportJson: TestResources.TestReport1);
     Assert.Throws<JsonReaderException>(() => _client.GetFailedTestCases(buildId));
 }
Пример #42
0
 public BuildEventEntity(BuildId id)
 {
     var key = GetEntityKey(id);
     PartitionKey = key.PartitionKey;
     RowKey = key.RowKey;
 }
Пример #43
0
 // TODO: Consider using the host name here as part of the key.  Need to understand what happens when 
 // jenkins sends multiple events with same BuildId from different hosts (because it picks one of the
 // several host names we have for the server).
 public static EntityKey GetExactEntityKey(BuildId buildId)
 {
     var partitionKey = AzureUtil.NormalizeKey(buildId.JobId.Name, '_');
     var rowKey = buildId.Number.ToString("0000000000");
     return new EntityKey(partitionKey, rowKey);
 }
Пример #44
0
 public static EntityKey GetDateEntityKey(DateTimeOffset buildDate, BuildId buildId)
 {
     return new EntityKey(
         DateTimeKey.GetDateKey(buildDate),
         new BuildKey(buildId).Key);
 }
Пример #45
0
 public static string GetTestReportPath(BuildId id)
 {
     return $"{GetBuildPath(id)}testReport";
 }
Пример #46
0
 /// <summary>
 /// Is this build alreadiy fully populated.
 /// </summary>
 public async Task<bool> IsPopulated(BuildId buildId, CancellationToken cancellationToken = default(CancellationToken))
 {
     var key = BuildResultEntity.GetExactEntityKey(buildId);
     var entity = await AzureUtil.QueryAsync<DynamicTableEntity>(_buildResultExactTable, key, cancellationToken);
     return entity != null;
 }
Пример #47
0
 public static EntityKey GetDateEntityKey(DateTimeOffset buildDate, BuildId buildId, string identifier)
 {
     identifier = AzureUtil.NormalizeKey(identifier, '_');
     return new EntityKey(
         DateTimeKey.GetDateKey(buildDate),
         $"{new BuildKey(buildId).Key}-{identifier}");
 }
Пример #48
0
 public static EntityKey GetExactEntityKey(BuildId buildId, string identifier)
 {
     return new EntityKey(
         AzureUtil.NormalizeKey(identifier, '_'),
         new BuildKey(buildId).Key);
 }
Пример #49
0
 private static void Test(string path, BuildId buildId)
 {
     Assert.Equal(buildId, JenkinsUtil.ConvertPathToBuildId(path));
 }
Пример #50
0
        public static bool TryConvertPathToBuildId(string path, out BuildId buildId)
        {
            buildId = default(BuildId);

            if (path.Contains('?'))
            {
                return false;
            }

            var parts = path.Split(new[] { '/' }, options: StringSplitOptions.RemoveEmptyEntries);
            if (parts.Length == 0)
            {
                return false;
            }

            int number;
            if (!int.TryParse(parts[parts.Length - 1], out number))
            {
                return false;
            }

            var jobPath = string.Join("/", parts.Take(parts.Length - 1));
            JobId jobId;
            if (!TryConvertPathToJobId(jobPath, out jobId))
            {
                return false;
            }

            buildId = new BuildId(number, jobId);
            return true;
        }
Пример #51
0
 public static Uri GetBuildUri(Uri baseUrl, BuildId buildId)
 {
     var path = GetBuildPath(buildId);
     return GetUri(baseUrl, path);
 }
Пример #52
0
 public static string GetBuildPath(BuildId id)
 {
     return $"{GetJobPath(id.JobId)}/{id.Number}/";
 }
Пример #53
0
 public static string GetConsoleTextPath(BuildId id)
 {
     return $"{GetBuildPath(id)}consoleText";
 }
Пример #54
0
 public static EntityKey GetEntityKey(BuildId id)
 {
     return new EntityKey(id.JobName.ToString(), id.Number.ToString());
 }
Пример #55
0
 private void WriteLine(BuildId buildId, string message)
 {
     _textWriter.WriteLine($"{buildId.JobName} - {buildId.Number}: {message}");
 }