Commits on Mar 26, 2015
  1. Only tear down the parser once all filehandles are done

    Otherwise, if STDERR is closed before the test is done outputting
    results to STDOUT, the last STDOUT results will be lost.  Leave the
    parser running until all filehandles are done, and the exit code has
    been captured.
    alexmv committed Mar 26, 2015
  2. Close filehandles after their watchers are done

    Otherwise, the watcher is still in the set of filehandles to select()
    on, and may hang because select returns EBADF.
    alexmv committed Mar 26, 2015
Commits on May 15, 2014
Commits on May 4, 2014
  1. Ensure that we add things to the mux before removing them

    As $all_done fires as soon as the number of ->begin calls is equal to
    the number of ->end calls, it is important in non-parallel builds that
    we top off the queue before removing from it -- otherwise, the test run
    will complte prematurely after the first test.
    alexmv committed May 4, 2014
  2. If previous test run times are provided, use them to order tests

    Parallel tests should optimally be run from longest to shortest, to
    minimize leftover time at the tail end of the testsuite.  If
    previous-test-timing information is passed, use it to order tests:
      * Unknown tests go first, as they may be long
      * Otherwise, order by test length, longest to shortest
      * Finally, fall back to asciibetical
    alexmv committed May 4, 2014
  3. Switch to a complete event-based backend

    The previous implementation used techniques to still present an iterator
    interface; while the "select" had been replaced by I/O events, the
    iterator nature still required a blocking call.  This caused odd
    interactions with the event-based RPC calls that the worker used
    elsewhere, causing them to be delayed or sent out of order.
    By switching to a complete event-based interface, these problems are
    prevented, and the complexity of presenting as an iterator can be
    removed.  TAP::Harness already presents callbacks to its users, making
    adaption of an event-driven interface mostly transparent to its
    alexmv committed May 4, 2014
Commits on Apr 2, 2014
  1. Write and exec a shell script for configuration

    This is less error-prone.  Also, use AnyEvent::Util::run_cmd for exit value and output.
    alexmv committed Apr 2, 2014
Commits on Mar 28, 2014
  1. Calling on_failure does not ack the query

    The return value from the RPC call (via is_success) is ignored, in this
    case.  But calling on_failure does not ack the request, causing the
    worker to stall.
    alexmv committed Mar 28, 2014
Commits on Mar 4, 2014
  1. Load ::AnyEvent early, not at ->runtests time

    The cwd has been changed by the time ->runtests has run, causing the
    «use lib 'lib'» in bin/smokingit-worker to not help in finding
    TAP::Parser::Multiplexer::AnyEvent.  Load it early, when
    Smokingit::Worker is loaded, to ensure that it can be found when needed
    alexmv committed Mar 4, 2014
  2. Switch from Coro to a real AnyEvent loop

    This fixes bogus -1 waitpid() returns, as well as blead-through of exit
    codes from one failed test to others running at the same time.
    alexmv committed Mar 4, 2014
Commits on Nov 15, 2013
  1. Fix the regex

    alexmv committed Nov 15, 2013
Commits on Oct 10, 2013
  1. Use Coro::AnyEvent::poll to provide hooks for events

    Place calls to Coro::AnyEvent::poll in locations which are called
    frequently, or which are liable to require event servicing shortly
    thereafter.  These would not be required if TAP parsing were done in
    an event-based manner.
    alexmv committed Oct 10, 2013
  2. Run tests inside Coro async{} block to return control to Anyevent

    While running tests, the main Anyevent loop is blocked.  This means
    that any process which involves events being received by the mainloop
    will not complete.  This affects creation of message queues used to
    submit test results, for instance, which require that
    AnyEvent::RabbitMQ::RPC read acknowledgements from the RabbitMQ server
    for each step of the queue creation.
    Solving this correctly would require that TAP::Harness use an
    event-based multiplexer and read loop, ensuring that blocking IO was
    never used.  This is a far more complex change than slapping an
    async{} block arount it, which allows event-based code to co-exist
    with explicit control.  However, async{} in itself is not sufficient
    to allow event-based loops to run; see the following commit for the
    remaining changes.
    alexmv committed Oct 10, 2013
  3. Submit results per-testfile

    alexmv committed Oct 10, 2013
Commits on Aug 10, 2013
Commits on Aug 8, 2013
  1. Merge branch 'full-tap'

    alexmv committed Aug 8, 2013
Commits on Jun 28, 2013
  1. Merge STDERR into the raw tap

    This requires the diag-merge branch of
    alexmv committed Jun 28, 2013
  2. Store raw TAP output rather than the aggregator

    The aggregator object does not capture the full output of the tests,
    merely the ok/nok status of each line.  For a complete view of what
    occurred in the test, instead capture and pass on the raw TAP output.
    alexmv committed Jun 21, 2013
Commits on Mar 27, 2013
  1. DB cleaning: Drop users created during smoke runs

    Otherwise the databases may end up with thousands of test users which
    are rarely used again (for example, RT's test suite does this).  This
    can cause decent slowdowns when performing DDL operations in tests.
    tsibley committed Mar 27, 2013
Commits on Sep 4, 2012
  1. Merge branch 'pubsub'

    alexmv committed Sep 4, 2012
Commits on Jun 20, 2012
  1. Publish smoke progress on the `worker_progress` topic

    Use the message bus to publish updates on the progress of the smoke test
    alexmv committed Jun 20, 2012
  2. Move to using AnyEvent::RabbitMQ::RPC instead of Gearman

    Using AMQP as a backend allows for reliable message delivery, as well as
    providing a general-use message bus for other uses.
    alexmv committed Jun 20, 2012
Commits on Jun 8, 2012
Commits on Mar 14, 2012
Commits on Mar 13, 2012
  1. There is no reason to wait for the ack from the server

    If it fails, we'll have to redo it anyways, so do it asyncronously.
    alexmv committed Mar 13, 2012