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))); } }
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); } } }
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; } }); }
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; } }); }
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; } }); }
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; } }); }