Esempio n. 1
0
        public void EndToEnd_PortableToWindows_ImplicitPath_SuppressSourceLinkConversion()
        {
            var dir = _temp.CreateDirectory();
            var pe  = dir.CreateFile("SourceLink.dll").WriteAllBytes(TestResources.SourceLink.PortableDll);

            dir.CreateFile("SourceLink.pdb").WriteAllBytes(TestResources.SourceLink.PortablePdb);
            var outPdb = dir.CreateFile("SourceLink.converted.pdb").WriteAllText("dummy");

            Assert.True(Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                            peFilePath: pe.Path,
                                            pdbFilePathOpt: null,
                                            outPdbFilePathOpt: outPdb.Path,
                                            options: new PortablePdbConversionOptions(suppressSourceLinkConversion: true),
                                            suppressedWarnings: ImmutableArray <PdbDiagnosticId> .Empty,
                                            suppressAllWarnings: false,
                                            extract: false)));

            using (var peStream = File.OpenRead(pe.Path))
                using (var pdbStream = File.OpenRead(outPdb.Path))
                {
                    var symReader = SymReaderHelpers.CreateWindowsPdbReader(pdbStream);
                    AssertEx.Equal(TestResources.SourceLink.SourceLinkJson, symReader.GetRawSourceLinkData());
                    Assert.Null(symReader.GetSourceServerData());
                }
        }
Esempio n. 2
0
        public void EndToEnd_PortableToWindows_ExplicitPath_SourceLinkConversion()
        {
            var dir        = _temp.CreateDirectory();
            var pe         = dir.CreateFile("SourceLink.dll").WriteAllBytes(TestResources.SourceLink.PortableDll);
            var pdb        = dir.CreateFile("SourceLink.x.pdb").WriteAllBytes(TestResources.SourceLink.PortablePdb);
            var outPdbPath = Path.Combine(dir.Path, "SourceLink.pdb2");

            Assert.True(Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                            peFilePath: pe.Path,
                                            pdbFilePathOpt: pdb.Path,
                                            outPdbFilePathOpt: outPdbPath,
                                            options: PortablePdbConversionOptions.Default,
                                            suppressedWarnings: ImmutableArray.Create(PdbDiagnosticId.UnmappedDocumentName),
                                            suppressAllWarnings: false,
                                            extract: false)));

            using (var peStream = File.OpenRead(pe.Path))
                using (var pdbStream = File.OpenRead(outPdbPath))
                {
                    var symReader = SymReaderHelpers.CreateWindowsPdbReader(pdbStream);

                    string sourceLink = symReader.GetSourceLinkData();
                    AssertEx.AssertLinesEqual(
                        @"{
  ""documents"": {
    ""C:\\a*"": ""http://server/1/a*"",
    ""C:\\A*"": ""http://server/2/A*"",
    ""C:\\*"": ""http://server/3/*.g"",
    "":*"": ""http://server/4/*""
  }
}", sourceLink);

                    string srcsvr = symReader.GetSourceServerData();
                    AssertEx.AssertLinesEqual(
                        @"SRCSRV: ini ------------------------------------------------
VERSION=2
SRCSRV: variables ------------------------------------------
RAWURL=http://server/%var2%
SRCSRVVERCTRL=http
SRCSRVTRG=%RAWURL%
SRCSRV: source files ---------------------------------------
C:\Documents.cs*3/Documents.cs.g
C:\a\b\c\d\1.cs*1/a/b/c/d/1.cs
C:\a\b\c\D\2.cs*1/a/b/c/D/2.cs
C:\a\b\C\d\3.cs*1/a/b/C/d/3.cs
C:\a\b\c\d\x.cs*1/a/b/c/d/x.cs
C:\A\b\c\x.cs*1/a/b/c/x.cs
C:\a\b\x.cs*1/a/b/x.cs
C:\a\B\3.cs*1/a/B/3.cs
C:\a\B\c\4.cs*1/a/B/c/4.cs
:6.cs*4/6.cs
C:\a\b\X.cs*1/a/b/X.cs
C:\a\B\x.cs*1/a/B/x.cs
SRCSRV: end ------------------------------------------------", srcsvr);
                }
        }
Esempio n. 3
0
        public void EndToEnd_EmbeddedToWindows_Extraction()
        {
            var dir    = _temp.CreateDirectory();
            var pe     = dir.CreateFile("SourceLink.Embedded.dll").WriteAllBytes(TestResources.SourceLink.EmbeddedDll);
            var outPdb = dir.CreateFile("SourceLink.extracted.pdb").WriteAllText("dummy");

            Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                peFilePath: pe.Path,
                                pdbFilePathOpt: null,
                                outPdbFilePath: outPdb.Path,
                                options: PdbConversionOptions.Default,
                                extract: true,
                                verbose: false));

            AssertEx.Equal(TestResources.SourceLink.PortablePdb, File.ReadAllBytes(outPdb.Path));
        }
Esempio n. 4
0
        public void EndToEnd_WindowsToPortable_ImplicitPath()
        {
            var dir = _temp.CreateDirectory();
            var pe  = dir.CreateFile("SourceData.dll").WriteAllBytes(TestResources.SourceData.WindowsDll);

            dir.CreateFile("SourceData.pdb").WriteAllBytes(TestResources.SourceData.WindowsPdb);
            var outPdb = dir.CreateFile("SourceLink.pdb").WriteAllText("dummy");

            Assert.True(Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                            peFilePath: pe.Path,
                                            pdbFilePathOpt: null,
                                            outPdbFilePathOpt: outPdb.Path,
                                            options: PortablePdbConversionOptions.Default,
                                            suppressedWarnings: ImmutableArray <PdbDiagnosticId> .Empty,
                                            suppressAllWarnings: false,
                                            extract: false)));

            using (var provider = MetadataReaderProvider.FromPortablePdbStream(File.OpenRead(outPdb.Path)))
            {
                var sourceLinkCdiGuid = new Guid("CC110556-A091-4D38-9FEC-25AB9A351A6A");

                var mdReader   = provider.GetMetadataReader();
                var sourceLink = from cdiHandle in mdReader.CustomDebugInformation
                                 let cdi = mdReader.GetCustomDebugInformation(cdiHandle)
                                           where mdReader.GetGuid(cdi.Kind) == sourceLinkCdiGuid
                                           select Encoding.UTF8.GetString(mdReader.GetBlobBytes(cdi.Value));

                AssertEx.AssertLinesEqual(@"
{
""documents"": {
    ""C:\Documents.cs"": ""http://server/3/Documents.cs.g"",
    ""C:\a\b\c\d\1.cs"": ""http://server/1/a/b/c/d/1.cs"",
    ""C:\a\b\c\D\2.cs"": ""http://server/1/a/b/c/D/2.cs"",
    ""C:\a\b\C\d\3.cs"": ""http://server/1/a/b/C/d/3.cs"",
    ""C:\a\b\c\d\x.cs"": ""http://server/1/a/b/c/d/x.cs"",
    ""C:\A\b\c\x.cs"": ""http://server/1/a/b/c/x.cs"",
    ""C:\a\b\x.cs"": ""http://server/1/a/b/x.cs"",
    ""C:\a\B\3.cs"": ""http://server/1/a/B/3.cs"",
    ""C:\a\B\c\4.cs"": ""http://server/1/a/B/c/4.cs"",
    "":6.cs"": ""http://server/4/%3A6.cs"",
    ""C:\a\b\X.cs"": ""http://server/1/a/b/X.cs"",
    ""C:\a\B\x.cs"": ""http://server/1/a/B/x.cs""
  }
}
", sourceLink.Single());
            }
        }
Esempio n. 5
0
        public void EndToEnd_EmbeddedToWindows_Extraction_OutPath()
        {
            var dir    = _temp.CreateDirectory();
            var pe     = dir.CreateFile("SourceLink.Embedded.dll").WriteAllBytes(TestResources.SourceLink.EmbeddedDll);
            var outPdb = dir.CreateFile("SourceLink.extracted.pdb").WriteAllText("dummy");

            Assert.True(Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                            peFilePath: pe.Path,
                                            pdbFilePathOpt: null,
                                            outPdbFilePathOpt: outPdb.Path,
                                            options: PortablePdbConversionOptions.Default,
                                            suppressedWarnings: ImmutableArray <PdbDiagnosticId> .Empty,
                                            suppressAllWarnings: false,
                                            extract: true)));

            AssertEx.Equal(TestResources.SourceLink.PortablePdb, File.ReadAllBytes(outPdb.Path));
        }
Esempio n. 6
0
        public void EndToEnd_Extraction_Error()
        {
            var dir    = _temp.CreateDirectory();
            var pe     = dir.CreateFile("SourceData.dll").WriteAllBytes(TestResources.SourceData.WindowsDll);
            var outPdb = dir.CreateFile("SourceLink.extracted.pdb").WriteAllText("dummy");

            Assert.Throws <IOException>(() =>
                                        Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                                            peFilePath: pe.Path,
                                                            pdbFilePathOpt: null,
                                                            outPdbFilePath: outPdb.Path,
                                                            options: PdbConversionOptions.Default,
                                                            extract: true,
                                                            verbose: false)));

            Assert.Equal("dummy", outPdb.ReadAllText());
        }
Esempio n. 7
0
        public void EndToEnd_PortableToWindows_ExplicitPath_SourceLinkConversion()
        {
            var dir        = _temp.CreateDirectory();
            var pe         = dir.CreateFile("SourceLink.dll").WriteAllBytes(TestResources.SourceLink.PortableDll);
            var pdb        = dir.CreateFile("SourceLink.x.pdb").WriteAllBytes(TestResources.SourceLink.PortablePdb);
            var outPdbPath = Path.Combine(dir.Path, "SourceLink.pdb2");

            Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                peFilePath: pe.Path,
                                pdbFilePathOpt: pdb.Path,
                                outPdbFilePath: outPdbPath,
                                options: PdbConversionOptions.Default,
                                extract: false,
                                verbose: false));

            using (var peStream = File.OpenRead(pe.Path))
                using (var pdbStream = File.OpenRead(outPdbPath))
                {
                    var symReader = SymReaderFactory.CreateWindowsPdbReader(pdbStream);
                    Assert.Null(symReader.GetSourceLinkData());

                    string actual = symReader.GetSourceServerData();
                    AssertEx.AssertLinesEqual(
                        @"SRCSRV: ini ------------------------------------------------
VERSION=2
SRCSRV: variables ------------------------------------------
RAWURL=http://server/%var2%
SRCSRVVERCTRL=http
SRCSRVTRG=%RAWURL%
SRCSRV: source files ---------------------------------------
C:\Documents.cs*3/Documents.cs.g
C:\a\b\c\d\1.cs*1/a/b/c/d/1.cs
C:\a\b\c\D\2.cs*1/a/b/c/D/2.cs
C:\a\b\C\d\3.cs*1/a/b/C/d/3.cs
C:\a\b\c\d\x.cs*1/a/b/c/d/x.cs
C:\A\b\c\x.cs*1/a/b/c/x.cs
C:\a\b\x.cs*1/a/b/x.cs
C:\a\B\3.cs*1/a/B/3.cs
C:\a\B\c\4.cs*1/a/B/c/4.cs
:6.cs*4/:6.cs
C:\a\b\X.cs*1/a/b/X.cs
C:\a\B\x.cs*1/a/B/x.cs
SRCSRV: end ------------------------------------------------", actual);
                }
        }
Esempio n. 8
0
        public void EndToEnd_Extraction_Error()
        {
            var dir    = _temp.CreateDirectory();
            var pe     = dir.CreateFile("SourceData.dll").WriteAllBytes(TestResources.SourceData.WindowsDll);
            var outPdb = dir.CreateFile("SourceLink.extracted.pdb").WriteAllText("dummy");

            Assert.Throws <IOException>(() =>
                                        Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                                            peFilePath: pe.Path,
                                                            pdbFilePathOpt: null,
                                                            outPdbFilePathOpt: outPdb.Path,
                                                            options: PortablePdbConversionOptions.Default,
                                                            suppressedWarnings: ImmutableArray <PdbDiagnosticId> .Empty,
                                                            suppressAllWarnings: false,
                                                            extract: true)));

            Assert.Equal("dummy", outPdb.ReadAllText());
        }
Esempio n. 9
0
        public void EndToEnd_EmbeddedToWindows_SuppressSourceLinkConversion()
        {
            var dir    = _temp.CreateDirectory();
            var pe     = dir.CreateFile("SourceLink.Embedded.dll").WriteAllBytes(TestResources.SourceLink.EmbeddedDll);
            var outPdb = dir.CreateFile("SourceLink.converted.pdb").WriteAllText("dummy");

            Pdb2Pdb.Convert(new Pdb2Pdb.Args(
                                peFilePath: pe.Path,
                                pdbFilePathOpt: null,
                                outPdbFilePath: outPdb.Path,
                                options: PdbConversionOptions.SuppressSourceLinkConversion,
                                extract: false,
                                verbose: false));

            using (var peStream = File.OpenRead(pe.Path))
                using (var pdbStream = File.OpenRead(outPdb.Path))
                {
                    var symReader = SymReaderFactory.CreateWindowsPdbReader(pdbStream);
                    AssertEx.Equal(TestResources.SourceLink.SourceLinkJson, symReader.GetRawSourceLinkData());
                    Assert.Null(symReader.GetSourceServerData());
                }
        }