コード例 #1
0
        public async Task When_reading_a_file_with_source_server_information()
        {
            var sut = new Pdb70SymbolMetadataProvider();

            var ms = new MemoryStream();
            var stream = new TestStream(ms);
            await stream.WriteAsync(Pdbs.RealSrcSrv, 0, Pdbs.RealSrcSrv.Length);
            stream.Position = 0;

            using (var metadata = await sut.TryGetSymbolMetadataAsync(stream))
            {
                Assert.NotNull(metadata);
                Assert.True(metadata.SupportsSourceServerInformation);
                Assert.Equal("63ba9bb5992dfc429f6bcc52135dbb092", metadata.Identifier);
                Assert.True(metadata.HasSourceServerInformation);
                Assert.Equal(581, metadata.SourceInformation.Count);
                Assert.False(metadata.SourceInformation.Any(x => string.IsNullOrEmpty(x.TargetPath)));
            }
        }
コード例 #2
0
ファイル: Pdb70FileFixtures.cs プロジェクト: tmr232/symblr
        public async Task When_writing_to_a_PDB_with_no_source_server_stream()
        {
            var longString = new StringBuilder();
            for (var i = 0; i < 1000; i++)
                longString.AppendFormat("Line {0}", i).AppendLine();

            var ms = new MemoryStream();
            var stream = new TestStream(ms);
            await stream.WriteAsync(Pdbs.NoSrcSrv, 0, Pdbs.NoSrcSrv.Length);
            stream.Position = 0;

            using (var file = await Pdb70File.TryOpenAsync(stream))
            {
                using (var srcsrv = file.GetStream("SRCSRV"))
                using (var writer = new StreamWriter(srcsrv))
                {
                    await writer.WriteAsync(longString.ToString());
                    await writer.FlushAsync();
                }

                await file.SaveAsync();

                stream = new TestStream(ms.ToArray());
                stream.Position = 0;
            }

            using (var file = await Pdb70File.TryOpenAsync(stream))
            {
                using (var srcsrv = file.GetStream("SRCSRV"))
                using (var reader = new StreamReader(srcsrv))
                {
                    var data = await reader.ReadToEndAsync();
                    Assert.Equal(longString.ToString(), data);
                }
            }
        }
コード例 #3
0
ファイル: Pdb70FileFixtures.cs プロジェクト: tmr232/symblr
        public async Task When_an_exception_is_thrown_during_reading()
        {
            var ms = new MemoryStream();
            var stream = new TestStream(ms);
            await stream.WriteAsync(Pdbs.SrcSrv, 0, Pdbs.SrcSrv.Length);
            stream.Position = 0;
            stream.ThrowAfter = 1024;

            await Assert.ThrowsAsync<Pdb70LoadException>(async () =>
            {
                try
                {
                    await Pdb70File.TryOpenAsync(stream);
                }
                catch (Pdb70LoadException e)
                {
                    Assert.Equal(Pdb70LoadErrorCode.Unknown, e.ErrorCode);
                    Assert.NotNull(e.InnerException);
                    Assert.Equal(e.InnerException.Message, "Exception from the stream.");
                    throw;
                }
            });
        }
コード例 #4
0
ファイル: Pdb70FileFixtures.cs プロジェクト: tmr232/symblr
        public async Task When_reading_a_PDB_with_a_deleted_header_entry()
        {
            var ms = new MemoryStream();
            var stream = new TestStream(ms);
            await stream.WriteAsync(Pdbs.DeletedBitSet, 0, Pdbs.DeletedBitSet.Length);
            stream.Position = 0;

            await Assert.ThrowsAsync<Pdb70LoadException>(async () =>
            {
                try
                {
                    await Pdb70File.TryOpenAsync(stream);
                }
                catch (Pdb70LoadException e)
                {
                    Assert.Equal(Pdb70LoadErrorCode.UnsupportedFeature, e.ErrorCode);
                    throw;
                }
            });
        }
コード例 #5
0
ファイル: Pdb70FileFixtures.cs プロジェクト: tmr232/symblr
        public async Task When_reading_a_truncated_PDB_with_a_valid_index()
        {
            var ms = new MemoryStream();
            var stream = new TestStream(ms);
            var didReadStream = false;
            await stream.WriteAsync(Pdbs.NoSrcSrv, 0, Pdbs.NoSrcSrv.Length);
            stream.Position = 0;

            await Assert.ThrowsAsync<Pdb70LoadException>(async () =>
            {
                try
                {
                    using (var f = await Pdb70File.TryOpenAsync(stream))
                    {
                        didReadStream = true;

                        // Now that the index has been read cause the next stream
                        // to fail to read.
                        stream.SetLength(stream.Length / 2);

                        for (var i = 0; i < f.StreamCount; i++)
                        {
                            using (var s = f.GetStream(i))
                            {
                                var b = new byte[s.Length];
                                await s.ReadAsync(b, 0, b.Length);
                            }
                        }
                    }
                }
                catch (Pdb70LoadException e)
                {
                    if (!didReadStream) Assert.True(false, "The PDB read failed at the incorrect time.");
                    Assert.Equal(Pdb70LoadErrorCode.AssumedCorrupt, e.ErrorCode);
                    throw;
                }
            });
        }
コード例 #6
0
ファイル: Pdb70FileFixtures.cs プロジェクト: tmr232/symblr
        public async Task When_reading_a_truncated_PDB()
        {
            var ms = new MemoryStream();
            var stream = new TestStream(ms);
            await stream.WriteAsync(Pdbs.NoSrcSrv, 0, Pdbs.NoSrcSrv.Length / 2);
            stream.Position = 0;

            await Assert.ThrowsAsync<Pdb70LoadException>(async () =>
            {
                try
                {
                    await Pdb70File.TryOpenAsync(stream);
                }
                catch (Pdb70LoadException e)
                {
                    Assert.Equal(Pdb70LoadErrorCode.AssumedCorrupt, e.ErrorCode);
                    throw;
                }
            });
        }