For the 1.7 release, ra_serf grew a new internal feature to "pause"
the parsing of (large) XML response bodies. This file intends to
document the strategy for testing this new feature.

[ We've simply shipped more invasive and difficult code before.
  However, due to the current attempts to stabilize, and the near-ness
  of our 1.7.x branch... it seems warranted to apply a bit of
  testing.  ]


RAW NOTES (from some earlier thinking)
/* Testing strategy for the PAUSED feature:

   It may be possible to arrange for writing a white box test, but I'll
   leave that to somebody with a more masochistic bent. This section will
   outline the different scenarios to test, and then how we can adjust
   the various control parameters to make that happen.

   There are seven states to the PENDING structure:

     1) pending == NULL
     2) pending->head == NULL && pending->spill == NULL
        (this should only happen when some data has been placed into the
         pending membuf structure, then emptied)
     3) pending->head != NULL && pending->spill == NULL
     4) pending->head != NULL && pending->spill != NULL. content in file
     5) pending->head != NULL && pending->spill != NULL. no content in file
     6) pending->head == NULL && pending->spill != NULL. content in file
     7) pending->head == NULL && pending->spill != NULL. nocontent in file

   Most of the above states are doubled, based on the PAUSED flag.

   There are two operations that occur:

     1) network content arrives
     2) process content from the pending structures

   These combine into the following test scenarios to exercise the two
   actions against each of the ten data states.

     1) REPORT completes with no pausing
     2) REPORT requires in-memory (only) buffering:
        a) buffer empties while network content arrives again
        b) network content completes while buffer has content
        c) buffer empties, then later needs buffering again
        d) partial in-mem consumption, new content lands into membuf
     3) REPORT requires on-disk buffering:
        a) diskbuf empties while network content arrives again
        b) network content completes while diskbuf has content
        c) diskbuf empties, then more buffering is needed again
           (note: due to the code, this will go onto the disk rather
            than back to the in-mem buffer)
        d) partial in-mem consumption, new content lands in diskbuf
        e) partial diskbuf consumption, new content lands in diskbuf

   
*/
