Permalink
Switch branches/tags
Nothing to show
Commits on Mar 26, 2015
  1. Only tear down the parser once all filehandles are done

    alexmv committed Mar 26, 2015
    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.
  2. Close filehandles after their watchers are done

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

    alexmv committed May 4, 2014
    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.
  2. If previous test run times are provided, use them to order tests

    alexmv committed May 4, 2014
    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
  3. Switch to a complete event-based backend

    alexmv committed May 4, 2014
    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
    consumers.
Commits on Apr 2, 2014
  1. Write and exec a shell script for configuration

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

    alexmv committed Mar 28, 2014
    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.
Commits on Mar 4, 2014
  1. Load ::AnyEvent early, not at ->runtests time

    alexmv committed Mar 4, 2014
    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
    later.
  2. Switch from Coro to a real AnyEvent loop

    alexmv committed Mar 4, 2014
    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.
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

    alexmv committed Oct 10, 2013
    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.
  2. Run tests inside Coro async{} block to return control to Anyevent

    alexmv committed Oct 10, 2013
    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.
  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

    alexmv committed Jun 28, 2013
    This requires the diag-merge branch of https://github.com/alexmv/Test-Harness.git
  2. Store raw TAP output rather than the aggregator

    alexmv committed Jun 21, 2013
    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.
Commits on 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

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

    alexmv committed Jun 20, 2012
    Using AMQP as a backend allows for reliable message delivery, as well as
    providing a general-use message bus for other uses.
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

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