@@ -50,6 +50,35 @@ public class Tests {
5050 Assert . IsFalse ( csr . IsInputSingleLine ( "Histogram 0x1\r \n 0x1" , PatternsToTreatAsMultiline ) ) ;
5151 }
5252
53+ [ TestMethod ] [ TestCategory ( "Unit" ) ]
54+ public void VAOnlyInputDetection ( ) {
55+ using var csr = new StackResolver ( ) ;
56+ Assert . IsFalse ( csr . IsInputVAOnly ( "05 sqldk!SOS_Scheduler::UpdateWaitTimeStats+789" ) ) ;
57+ Assert . IsFalse ( csr . IsInputVAOnly ( @"\r\n sqldk+0x40609\r\n" ) ) ;
58+ Assert . IsFalse ( csr . IsInputVAOnly ( "<frame id=\" 00\" address=\" 0xf00\" pdb=\" ntdll.pdb\" age=\" 1\" guid=\" C374E059-5793-9B92-6525-386A66A2D3F5\" module=\" ntdll.dll\" rva=\" 0x9F7E4\" /><" +
59+ "frame id=\" 01\" address=\" 0xf00\" pdb=\" kernelbase.pdb\" age=\" 1\" guid=\" E77E26E7-D1C4-72BB-2C05-DD17624A9E58\" module=\" KERNELBASE.dll\" rva=\" 0x38973\" /><" +
60+ "frame id=\" 02\" address=\" 0xf00\" pdb=\" SqlDK.pdb\" age=\" 2\" guid=\" 6a193443-3512-464b-8b8e-d905ad930ee6\" module=\" sqldk.dll\" rva=\" 0x40609\" />" ) ) ;
61+ Assert . IsTrue ( csr . IsInputVAOnly ( "callstack\r \n 0x00007FFEABD0D919\r \n 0x00007FFEABC4D45D\r \n 0x00007FFEAC0F7EE0" ) ) ;
62+ Assert . IsFalse ( csr . IsInputVAOnly ( @"\r\n sqldk+0x40609 sqldk+40609\r\n" ) ) ;
63+ Assert . IsFalse ( csr . IsInputVAOnly ( @"\r\n sqldk+0x40609 sqldk+40609\r\nsqldk+0x40609 sqldk+40609" ) ) ;
64+ Assert . IsTrue ( csr . IsInputVAOnly ( "<HistogramTarget truncated=\" 0\" buckets=\" 256\" ><Slot count=\" 5\" ><value>0x00007FFEABD0D919\r \n 0x00007FFEABC4D45D\r \n 0x00007FFEAC0F7EE0\r \n 0x00007FFEAC0F80CF\r \n 0x00007FFEAC1EE447\r \n 0x00007FFEAC1EE6F5</value></Slot></HistogramTarget>" ) ) ;
65+ Assert . IsTrue ( csr . IsInputVAOnly ( "annotation for histogram #1 0 <HistogramTarget truncated=\" 0\" buckets=\" 256\" ><Slot count=\" 5\" ><value>0x00007FFEABD0D919 0x00007FFEABC4D45D 0x00007FFEAC0F7EE0 0x00007FFEAC0F80CF 0x00007FFEAC1EE447 0x00007FFEAC1EE6F5 0x00007FFEAC1D48B0 0x00007FFEAC71475A 0x00007FFEA9A708F1 0x00007FFEA9991FB9 0x00007FFEA9993D21 0x00007FFEA99B59F1 0x00007FFEA99B5055 0x00007FFEA99B2B8F 0x00007FFEA9675AD1 0x00007FFEA9671EFB 0x00007FFEAA37D83D 0x00007FFEAA37D241 0x00007FFEAA379F98 0x00007FFEA96719CA 0x00007FFEA9672933 0x00007FFEA9672041 0x00007FFEA967A82B 0x00007FFEA9681542</value></Slot></HistogramTarget>\r \n " +
66+ "annotation for histogram #2 1 <HistogramTarget truncated=\" 0\" buckets=\" 256\" ><Slot count=\" 5\" ><value>0x00007FFEABD0D919 0x00007FFEABC4D45D 0x00007FFEAC0F7EE0 0x00007FFEAC0F80CF 0x00007FFEAC1EE447 0x00007FFEAC1EE6F5 0x00007FFEAC1D48B0 0x00007FFEAC71475A 0x00007FFEA9A708F1 0x00007FFEA9991FB9 0x00007FFEA9993D21 0x00007FFEA99B59F1 0x00007FFEA99B5055 0x00007FFEA99B2B8F 0x00007FFEA9675AD1 0x00007FFEA9671EFB 0x00007FFEAA37D83D 0x00007FFEAA37D241 0x00007FFEAA379F98 0x00007FFEA96719CA 0x00007FFEA9672933 0x00007FFEA9672041 0x00007FFEA967A82B 0x00007FFEA9681542</value></Slot></HistogramTarget>\r \n " ) ) ;
67+ Assert . IsFalse ( csr . IsInputVAOnly ( "<HistogramTarget truncated=\" 0\" buckets=\" 256\" ><Slot count=\" 5\" ><value><![CDATA[<frame id=\" 00\" pdb=\" ntdll.pdb\" age=\" 1\" guid=\" C374E059-5793-9B92-6525-386A66A2D3F5\" module=\" ntdll.dll\" rva=\" 0x9F7E4\" />" +
68+ "<frame id=\" 01\" pdb=\" kernelbase.pdb\" age=\" 1\" guid=\" E77E26E7-D1C4-72BB-2C05-DD17624A9E58\" module=\" KERNELBASE.dll\" rva=\" 0x38973\" />" +
69+ "<frame id=\" 02\" pdb=\" SqlDK.pdb\" age=\" 2\" guid=\" 6a193443-3512-464b-8b8e-d905ad930ee6\" module=\" sqldk.dll\" rva=\" 0x40609\" />" +
70+ "]]></value></Slot><Slot count=\" 3\" ><value><![CDATA[<frame id=\" 00\" pdb=\" vcruntime140.amd64.pdb\" age=\" 1\" guid=\" AF138C3F-2933-4097-8883-C1071B13375E\" module=\" VCRUNTIME140.dll\" rva=\" 0xB8F0\" />" +
71+ "<frame id=\" 01\" pdb=\" SqlDK.pdb\" age=\" 2\" guid=\" 6a193443-3512-464b-8b8e-d905ad930ee6\" module=\" sqldk.dll\" rva=\" 0x2249f\" />" +
72+ "]]></value></Slot></HistogramTarget>" ) ) ;
73+ Assert . IsFalse ( csr . IsInputVAOnly ( "<HistogramTarget truncated=\" 0\" buckets=\" 256\" >\r \n <Slot count=\" 5\" >\r \n <value><frame id=\" 00\" address=\" 0xf00\" pdb=\" ntdll.pdb\" age=\" 1\" guid=\" C374E059-5793-9B92-6525-386A66A2D3F5\" module=\" ntdll.dll\" rva=\" 0x9F7E4\" /><" +
74+ "frame id=\" 01\" address=\" 0xf00\" pdb=\" kernelbase.pdb\" age=\" 1\" guid=\" E77E26E7-D1C4-72BB-2C05-DD17624A9E58\" module=\" KERNELBASE.dll\" rva=\" 0x38973\" /><" +
75+ "frame id=\" 02\" address=\" 0xf00\" pdb=\" SqlDK.pdb\" age=\" 2\" guid=\" 6a193443-3512-464b-8b8e-d905ad930ee6\" module=\" sqldk.dll\" rva=\" 0x40609\" />" +
76+ "</value>\r \n </Slot>\r \n <Slot count=\" 3\" >\r \n <value><frame id=\" 00\" address=\" 0xf00\" pdb=\" vcruntime140.amd64.pdb\" age=\" 1\" guid=\" AF138C3F-2933-4097-8883-C1071B13375E\" module=\" VCRUNTIME140.dll\" rva=\" 0xB8F0\" /><" +
77+ "frame id=\" 01\" address=\" 0xf00\" pdb=\" SqlDK.pdb\" age=\" 2\" guid=\" 6a193443-3512-464b-8b8e-d905ad930ee6\" module=\" sqldk.dll\" rva=\" 0x2249f\" />" +
78+ "</value>\r \n </Slot>\r \n </HistogramTarget>" ) ) ;
79+ Assert . IsTrue ( csr . IsInputVAOnly ( "Histogram\r \n 0x1\r \n 0x1" ) ) ;
80+ }
81+
5382 /// Validate that "block symbols" in a PDB are resolved correctly.
5483 [ TestMethod ] [ TestCategory ( "Unit" ) ] public async Task BlockResolution ( ) {
5584 using var csr = new StackResolver ( ) ;
@@ -713,12 +742,12 @@ public async Task E2EHistogramOffsets() {
713742 var pdbPath = @"..\..\..\Tests\TestCases\sqlsyms\13.0.4001.0\x64" ;
714743 var input = "<HistogramTargetWrongTag truncated=\" 0\" buckets=\" 256\" ><Slot count=\" 5\" ><value>0x00007FFEABD0D919 0x00007FFEABC4D45D 0x00007FFEAC0F7EE0 0x00007FFEAC0F80CF </value></Slot></HistogramTargetWrongTag>" ;
715744 var ret = await csr . ResolveCallstacksAsync ( await csr . GetListofCallStacksAsync ( input , true , cts ) , pdbPath , false , null , false , false , false , true , false , false , null , cts ) ;
716- var expected = "<HistogramTargetWrongTag\r \n truncated=\" 0\" \r \n buckets=\" 256\" ><Slot\r \n count= \" 5 \" ><value>0x00007FFEABD0D919 \r \n sqldk!SpinlockBase::Sleep+182\r \n sqlmin!Spinlock<143,7,1>::SpinToAcquireWithExponentialBackoff+363\r \n sqlmin!lck_lockInternal+2042\r \n </value></Slot></HistogramTargetWrongTag>" ;
717- Assert . AreEqual ( expected . Trim ( ) , ret . Trim ( ) ) ; // we just expect the input text back as-is
745+ var expected = "<HistogramTargetWrongTag\r \n truncated=\" 0\" \r \n buckets=\" 256\" ><Slot\r \n sqldk!XeSosPkg::spinlock_backoff::Publish+425 \r \n sqldk!SpinlockBase::Sleep+182\r \n sqlmin!Spinlock<143,7,1>::SpinToAcquireWithExponentialBackoff+363\r \n sqlmin!lck_lockInternal+2042\r \n </value></Slot></HistogramTargetWrongTag>" ;
746+ Assert . AreEqual ( expected . Trim ( ) , ret . Trim ( ) ) ;
718747 input = "<HistogramTarget truncated=\" 0\" buckets=\" 256\" ><Slot count=\" 5\" ><value>0x00007FFEABD0D919 0x00007FFEABC4D45D 0x00007FFEAC0F7EE0 0x00007FFEAC0F80CF </value></Slot></HistogramTargetWrongTag>" ;
719748 ret = await csr . ResolveCallstacksAsync ( await csr . GetListofCallStacksAsync ( input , true , cts ) , pdbPath , false , null , false , false , false , true , false , false , null , cts ) ;
720- expected = "<HistogramTarget\r \n truncated=\" 0\" \r \n buckets=\" 256\" ><Slot\r \n count= \" 5 \" ><value>0x00007FFEABD0D919 \r \n sqldk!SpinlockBase::Sleep+182\r \n sqlmin!Spinlock<143,7,1>::SpinToAcquireWithExponentialBackoff+363\r \n sqlmin!lck_lockInternal+2042\r \n </value></Slot></HistogramTargetWrongTag>" ;
721- Assert . AreEqual ( expected . Trim ( ) , ret . Trim ( ) ) ; // we just expect the input text back as-is
749+ expected = "<HistogramTarget\r \n truncated=\" 0\" \r \n buckets=\" 256\" ><Slot\r \n sqldk!XeSosPkg::spinlock_backoff::Publish+425 \r \n sqldk!SpinlockBase::Sleep+182\r \n sqlmin!Spinlock<143,7,1>::SpinToAcquireWithExponentialBackoff+363\r \n sqlmin!lck_lockInternal+2042\r \n </value></Slot></HistogramTargetWrongTag>" ;
750+ Assert . AreEqual ( expected . Trim ( ) , ret . Trim ( ) ) ;
722751 }
723752
724753 /// End-to-end test with stacks being resolved based on symbols from symsrv.
0 commit comments