BTW, this is what I do in the swig service, and I think it's the idiomatic way of sending variable length data over a socket.
On Wed, Dec 2, 2015 at 2:08 PM Zachary Turner <ztur...@google.com> wrote: > I think the best solution is going to be to use struct.pack. Like this on > the writing side: > > import struct > msg = cPickle.dumps(test_event) > packet = struct.pack("!I%ds" % len(msg), len(msg), msg) > self.out_file.send(packet) > > and like this on the reading side: > > self.packet_bytes_remaining = struct.unpack("!I", > self.header_contents)[0] > self.header_contents = b"" > self.reading_header = False > return data[(index+1):] > > The current solution still doesn't work because it's calling socket.send() > with a str instead of a bytes. So it has to be bytes all the way through. > > On Wed, Dec 2, 2015 at 1:48 PM Todd Fiala <todd.fi...@gmail.com> wrote: > >> Those fixes are up here: >> r254550 >> >> Let me know what you see after that, Zachary. >> >> On Wed, Dec 2, 2015 at 1:45 PM, Todd Fiala <todd.fi...@gmail.com> wrote: >> >>> >>> >>> On Wed, Dec 2, 2015 at 1:42 PM, Todd Fiala <todd.fi...@gmail.com> wrote: >>> >>>> Can you try making those changes in the other spots? There's a handful >>>> of code you have probably not ever run if you haven't selected running with >>>> a test results formatter. >>>> >>>> >>> I'm actually going to make the ibuffer ones now since it's easier for me >>> to verify that it doesn't break the non-Windows side since I'm right in >>> there now. If that doesn't do it, we'll need to see what else doesn't work. >>> >>> >>>> If not, I can try to address them tonight or tomorrow night when I can >>>> get to some kind of python 3 setup. >>>> >>>> On Wed, Dec 2, 2015 at 1:36 PM, Zachary Turner <ztur...@google.com> >>>> wrote: >>>> >>>>> Yea I was messing around with it too. I don't have a fix yet but I >>>>> think you will need to either encode the pickled data as utf8, or better >>>>> yet, don't write this: >>>>> >>>>> "{}#{}".format(...) >>>>> >>>>> because pickled data is supposed to be binary data anyway. So use >>>>> bytes.append() instead. >>>>> >>>>> Then on the other side in dotest_channels, there's a couple places >>>>> where you do something like: >>>>> >>>>> self.ibuffer = "" >>>>> >>>>> which would need to change to >>>>> >>>>> self.ibuffer = b"" >>>>> >>>>> and any other similar operations on self.ibuffer which assume string >>>>> data. >>>>> >>>>> On Wed, Dec 2, 2015 at 1:33 PM Todd Fiala <todd.fi...@gmail.com> >>>>> wrote: >>>>> >>>>>> I think I know how to fix. Trying now. >>>>>> >>>>>> On Wed, Dec 2, 2015 at 1:17 PM, Todd Fiala <todd.fi...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> I think I can fix the issue without you debugging. >>>>>>> >>>>>>> Getting the single pass test runner to use it isn't impossible but >>>>>>> will take some work. Can you direct-send me the backtrace from the >>>>>>> point >>>>>>> of failure from your system? Thanks! >>>>>>> >>>>>>> -Todd >>>>>>> >>>>>>> On Wed, Dec 2, 2015 at 12:34 PM, Zachary Turner <ztur...@google.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Is there any way to force the single process test runner to use >>>>>>>> this same system? I'm trying to debug the problem, but this codepath >>>>>>>> doesn't execute in the single process test runner, and it executes in >>>>>>>> the >>>>>>>> child process in the multiprocess test runner. Basically I need the >>>>>>>> following callstack to execute in the single process test runner: >>>>>>>> >>>>>>>> Command invoked: C:\Python35\python_d.exe >>>>>>>> D:\src\llvm\tools\lldb\test\dotest.py -q --arch=i686 --executable >>>>>>>> D:/src/llvmbuild/ninja_py35/bin/lldb.exe -s >>>>>>>> D:/src/llvmbuild/ninja_py35/lldb-test-traces -u CXXFLAGS -u CFLAGS >>>>>>>> --enable-crash-dialog -C d:\src\llvmbuild\ninja_release\bin\clang.exe >>>>>>>> --results-port 60794 --inferior -p TestIntegerTypesExpr.py >>>>>>>> D:\src\llvm\tools\lldb\packages\Python\lldbsuite\test >>>>>>>> --event-add-entries >>>>>>>> worker_index=7:int >>>>>>>> 411 out of 412 test suites processed - TestIntegerTypesExpr.py >>>>>>>> Traceback (most recent call last): >>>>>>>> File "D:\src\llvm\tools\lldb\test\dotest.py", line 7, in <module> >>>>>>>> lldbsuite.test.run_suite() >>>>>>>> File >>>>>>>> "D:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\dotest.py", line >>>>>>>> 1476, in run_suite >>>>>>>> setupTestResults() >>>>>>>> File >>>>>>>> "D:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\dotest.py", line >>>>>>>> 982, in setupTestResults >>>>>>>> results_formatter_object.handle_event(initialize_event) >>>>>>>> File >>>>>>>> "D:\src\llvm\tools\lldb\packages\Python\lldbsuite\test\test_results.py", >>>>>>>> line 1033, in handle_event >>>>>>>> "{}#{}".format(len(pickled_message), pickled_message)) >>>>>>>> TypeError: a bytes-like object is required, not 'str' >>>>>>>> >>>>>>>> On Wed, Dec 2, 2015 at 11:40 AM Zachary Turner <ztur...@google.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> When I run this under Python 3 I get "A bytes object is used like >>>>>>>>> a string" on Line 1033 of test_results.py. I'm going to dig into it a >>>>>>>>> little bit, but maybe you know off the top of your head the right way >>>>>>>>> to >>>>>>>>> fix it. >>>>>>>>> >>>>>>>>> On Wed, Dec 2, 2015 at 11:32 AM Zachary Turner <ztur...@google.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Oh yea, I made up that decorator idea because I didn't know all >>>>>>>>>> the formatters were derived from a common base. But your idea is >>>>>>>>>> better if >>>>>>>>>> everything is derived from a common base. To be honest you could >>>>>>>>>> even just >>>>>>>>>> generate an error if there are two ResultsFormatter derived classes >>>>>>>>>> in the >>>>>>>>>> same module. We should be encouraging more smaller files with single >>>>>>>>>> responsibility. One of the things I plan to do as part of some >>>>>>>>>> cleanup in >>>>>>>>>> a week or two is to split up dotest, dosep, and lldbtest.py into a >>>>>>>>>> couple >>>>>>>>>> different files by breaking out things like TestBase, etc into >>>>>>>>>> separate >>>>>>>>>> files. So that it's easier to keep a mental map of where different >>>>>>>>>> code is. >>>>>>>>>> >>>>>>>>>> On Wed, Dec 2, 2015 at 11:26 AM Todd Fiala <todd.fi...@gmail.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> On Wed, Dec 2, 2015 at 11:20 AM, Todd Fiala < >>>>>>>>>>> todd.fi...@gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Yeah I'd be good with that. I can change that as well. >>>>>>>>>>>> >>>>>>>>>>>> -Todd >>>>>>>>>>>> >>>>>>>>>>>> On Wed, Dec 2, 2015 at 11:10 AM, Zachary Turner < >>>>>>>>>>>> ztur...@google.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Also another stylistic suggestion. I've been thinking about >>>>>>>>>>>>> how to more logically organize all the source files now that we >>>>>>>>>>>>> have a >>>>>>>>>>>>> package. So it makes sense conceptually to group all of the >>>>>>>>>>>>> different >>>>>>>>>>>>> result formatters under a subpackage called formatters. So right >>>>>>>>>>>>> now >>>>>>>>>>>>> you've got lldbsuite.test.basic_results_formatter. >>>>>>>>>>>>> BasicResultsFormatter but it might make sense for this to be >>>>>>>>>>>>> lldbsuite.test.formatters.basic.BasicResultsFormatter. If you do >>>>>>>>>>>>> things >>>>>>>>>>>>> this way, it can actually result in a substantially shorter >>>>>>>>>>>>> command line, >>>>>>>>>>>>> because the --results-formatter option can use >>>>>>>>>>>>> lldbsuite.test.formatters as >>>>>>>>>>>>> a starting point. So you could instead write: >>>>>>>>>>>>> >>>>>>>>>>>>> test/dotest.py --results-formatter basic >>>>>>>>>>>>> >>>>>>>>>>>>> dotest then looks for a `basic.py` module in the >>>>>>>>>>>>> `lldbsuite.test.formatters` package, looks for a class inside >>>>>>>>>>>>> with a >>>>>>>>>>>>> @result_formatter decorator, and instantiates that. >>>>>>>>>>>>> >>>>>>>>>>>>> This has the advantage of making the command line shorter >>>>>>>>>>>>> *and* a more logical source file organization. >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> The other thing that could allow me to do is possibly >>>>>>>>>>> short-circuit the results formatter specifier so that, if just the >>>>>>>>>>> module >>>>>>>>>>> is specified, and if the module only has one >>>>>>>>>>> ResultsFormatter-derived >>>>>>>>>>> class, I can probably rig up code that figures out the right results >>>>>>>>>>> formatter, shortening the required discriminator to something even >>>>>>>>>>> shorter >>>>>>>>>>> (i.e. module.classname becomes just module.) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> On Wed, Dec 2, 2015 at 11:04 AM Zachary Turner < >>>>>>>>>>>>> ztur...@google.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Can --results-file=stdout be the default so that we don't >>>>>>>>>>>>>> have to specify that? >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Wed, Dec 2, 2015 at 11:02 AM Todd Fiala via lldb-dev < >>>>>>>>>>>>>> lldb-dev@lists.llvm.org> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Also, all the text in the summary is fixed-width lined up >>>>>>>>>>>>>>> nicely, which may not show in the commit message description if >>>>>>>>>>>>>>> you're >>>>>>>>>>>>>>> using a variable-width font. On a terminal it looks nice. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Wed, Dec 2, 2015 at 11:01 AM, Todd Fiala < >>>>>>>>>>>>>>> todd.fi...@gmail.com> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Wed, Dec 2, 2015 at 10:57 AM, Todd Fiala < >>>>>>>>>>>>>>>> todd.fi...@gmail.com> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi all, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I just put up an optional test results formatter that is a >>>>>>>>>>>>>>>>> prototype of what we may move towards for our default test >>>>>>>>>>>>>>>>> summary >>>>>>>>>>>>>>>>> results. It went in here: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> r254530 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> and you can try it out with something like: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> time test/dotest.py --executable `pwd`/build/Debug/lldb >>>>>>>>>>>>>>>>> --results-formatter >>>>>>>>>>>>>>>>> lldbsuite.test.basic_results_formatter.BasicResultsFormatter >>>>>>>>>>>>>>>>> --results-file >>>>>>>>>>>>>>>>> st >>>>>>>>>>>>>>>>> out >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I cut and paste my line, but more than likely for most >>>>>>>>>>>>>>>> people you'd just want this: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> test/dotest.py --results-formatter >>>>>>>>>>>>>>>> lldbsuite.test.basic_results_formatter.BasicResultsFormatter >>>>>>>>>>>>>>>> --results-file >>>>>>>>>>>>>>>> stdout >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> The other stuff was specific to my setup. That line >>>>>>>>>>>>>>>> assumes you run from the lldb source dir root. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Let me know if this satisfies the basic needs of counts and >>>>>>>>>>>>>>>>> whatnot. It counts test method runs rather than all the >>>>>>>>>>>>>>>>> oddball "file, >>>>>>>>>>>>>>>>> class, etc." counts we had before. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> It prints out the Details section when there are details, >>>>>>>>>>>>>>>>> and keeps it nice and clean when there are none. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> It also mentions a bit about test reruns up top, but that >>>>>>>>>>>>>>>>> won't come into play until I get the multi-test-pass, >>>>>>>>>>>>>>>>> single-worker/low-load mechanism in place, which will depend >>>>>>>>>>>>>>>>> on newer rerun >>>>>>>>>>>>>>>>> count awareness support. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> The change also cleans up places where the test event >>>>>>>>>>>>>>>>> framework was using string codes and replaces them with >>>>>>>>>>>>>>>>> symbolic constants. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Let me know what you think. I can tweak it as needed to >>>>>>>>>>>>>>>>> address testbot and other needs. Once it looks reasonable, >>>>>>>>>>>>>>>>> I'd like to >>>>>>>>>>>>>>>>> move over to using it by default in the parallel test runner >>>>>>>>>>>>>>>>> rather than >>>>>>>>>>>>>>>>> the legacy support. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks! >>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>> -Todd >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>> -Todd >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> -Todd >>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>> lldb-dev mailing list >>>>>>>>>>>>>>> lldb-dev@lists.llvm.org >>>>>>>>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> -Todd >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> -Todd >>>>>>>>>>> >>>>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -Todd >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> -Todd >>>>>> >>>>> >>>> >>>> >>>> -- >>>> -Todd >>>> >>> >>> >>> >>> -- >>> -Todd >>> >> >> >> >> -- >> -Todd >> >
_______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev