> On May 19, 2014, at 11:14 AM, Todd Fiala <[email protected]> wrote: > > Totally agree. > > I'm actually working on a change to the gdbremote framework test expectations > as we speak (well, I pushed the warning fix on the stack, about ready with > that now). The change to the gdb remote scripting framework will allow a > type of expectation that does iteration, for things like qRegisterInfo and > qfThreadInfo/qnThreadInfo, collecting results that can later be checked > against. > > I planned on adding checks for things over the aggregate set like: > * at least some register classes exist > * at least the generic registers (or some subset of them) are present, > etc. > > I should have that in this afternoon.
Hopefully it will convert all "<key>:<value>;" items into a python dictionary, and all collections (like multiple qRegisterInfo calls) into arrays of dictionaries? > > -Todd > > > On Mon, May 19, 2014 at 11:10 AM, Greg Clayton <[email protected]> wrote: > You might also want to check if people have at least defined the generic > register values for "pc", "sp", "fp" as we rely on these for some things in > the debugger. > > > On May 18, 2014, at 11:11 PM, Todd Fiala <[email protected]> wrote: > > > > Author: tfiala > > Date: Mon May 19 01:11:41 2014 > > New Revision: 209109 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=209109&view=rev > > Log: > > Added gdb remote test for one valid qRegisterInfo result. > > > > Checks that at at least qRegisterInfo0 responds with a valid > > register info reply packet. The packet is parsed and validates > > that all keys come from the documented set of valid keys. It > > then validates that a minimum set of expected keys > > are present in the returned packet. > > > > This test is set to pass on debugserver and fail on llgs TOT. > > > > Modified: > > lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py > > > > Modified: lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py > > URL: > > http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py?rev=209109&r1=209108&r2=209109&view=diff > > ============================================================================== > > --- lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py (original) > > +++ lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py Mon May 19 > > 01:11:41 2014 > > @@ -134,6 +134,40 @@ class LldbGdbServerTestCase(TestBase): > > def expect_gdbremote_sequence(self): > > return expect_lldb_gdbserver_replay(self, self.sock, > > self.test_sequence, self._TIMEOUT_SECONDS, self.logger) > > > > + _KNOWN_REGINFO_KEYS = [ > > + "name", > > + "alt-name", > > + "bitsize", > > + "offset", > > + "encoding", > > + "format", > > + "set", > > + "gcc", > > + "dwarf", > > + "generic", > > + "container-regs", > > + "invalidate-regs" > > + ] > > + > > + def assert_valid_reg_info_packet(self, reginfo_packet): > > + keyval_pairs = reginfo_packet.split(";") > > + self.assertTrue(len(keyval_pairs) >= 5) > > + > > + values = {} > > + for kv in keyval_pairs: > > + (key, val) = kv.split(':') > > + values[key] = val > > + # Ensure key is something we expect. > > + self.assertTrue(key in self._KNOWN_REGINFO_KEYS) > > + > > + # Check the bare-minimum expected set of register info keys. > > + self.assertTrue("name" in values) > > + self.assertTrue("bitsize" in values) > > + self.assertTrue("offset" in values) > > + self.assertTrue("encoding" in values) > > + self.assertTrue("format" in values) > > + > > + > > @debugserver_test > > def test_exe_starts_debugserver(self): > > self.init_debugserver_test() > > @@ -522,5 +556,41 @@ class LldbGdbServerTestCase(TestBase): > > self.buildDwarf() > > self.attach_commandline_kill_after_initial_stop() > > > > + def qRegisterInfo_returns_one_valid_result(self): > > + server = self.start_server() > > + self.assertIsNotNone(server) > > + > > + # Build launch args > > + launch_args = [os.path.abspath('a.out')] > > + > > + # Build the expected protocol stream > > + self.add_no_ack_remote_stream() > > + self.add_verified_launch_packets(launch_args) > > + self.test_sequence.add_log_lines( > > + ["read packet: $qRegisterInfo0#00", > > + { "direction":"send", "regex":r"^\$(.+);#\d{2}", > > "capture":{1:"reginfo_0"} }], > > + True) > > + > > + # Run the stream > > + context = self.expect_gdbremote_sequence() > > + self.assertIsNotNone(context) > > + self.assertIsNotNone(context.get("reginfo_0")) > > + self.assert_valid_reg_info_packet(context.get("reginfo_0")) > > + > > + @debugserver_test > > + @dsym_test > > + def test_qRegisterInfo_returns_one_valid_result_debugserver_dsym(self): > > + self.init_debugserver_test() > > + self.buildDsym() > > + self.qRegisterInfo_returns_one_valid_result() > > + > > + @llgs_test > > + @dwarf_test > > + @unittest2.expectedFailure() > > + def test_qRegisterInfo_returns_one_valid_result_llgs_dwarf(self): > > + self.init_llgs_test() > > + self.buildDwarf() > > + self.qRegisterInfo_returns_one_valid_result() > > + > > if __name__ == '__main__': > > unittest2.main() > > > > > > _______________________________________________ > > lldb-commits mailing list > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits > > > > > -- > -Todd _______________________________________________ lldb-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
