couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dale Harvey <d...@arandomurl.com>
Subject Re: Javascript Test Suite
Date Mon, 08 Apr 2013 14:41:12 GMT
We have been looking to reuse the CouchDB javascript tests for PouchDB and
extracted them into a seperate npm package

https://npmjs.org/package/couchdb-harness

The idea was that we could reused the same test suite and throw ours away
however it hit a few problems, mostly that the test suite requires a sync
api (which caused most of the problems with xhr in the browser couch
tests),  I spent a bunch of time converting the test suites to async, they
dont map 1-1 because the couch suite is quite imperative and not really
split into self contained unit tests.

But already have 1000+ tests that test CouchDB, work on the command line
and reliably in the browser, I dont think they are suitable for couch right
now, but would be happy to do the work so we could share a test suite

https://github.com/daleharvey/pouchdb/tree/master/tests


On 8 April 2013 15:26, Paul Davis <paul.joseph.davis@gmail.com> wrote:

> The first bit I'd like to say is that the use of couchjs was just a
> stop gap measure to get the test suite out of the browser. We used to
> have to deal with so many browser issues it was just a terrible mess.
> The issue with couchjs is much as you've seen that its not a very full
> environment for writing tests. So just to be clear that the only real
> thing tying us to that as a test platform is that we have a large
> amount of JS written already so either we need to make the couchjs
> better, use node, or translate tests to something that has a more
> useful environment.
>
> I've been noodling over whether we might be better off to just start
> translating everything to Python or something. I've seen suggestions
> for Erlang but I personally think Erlang is a terrible language for
> writing tests like this (specifically, the code to test ratio is
> ungood). If we had something like Python to hack on then I was also
> thinking of writing a library function that would start CouchDB as a
> slave process which then would remove the need to have the _restart
> handler because you could just kill -9 the subprocess and restart it
> with maybe a wait for when things boot again.
>
> I reviewed your feature branch the other day and I'm +1 for pushing
> that to master.
>
> Awesome work, Wendall.
>
> On Fri, Apr 5, 2013 at 6:57 PM, Wendall Cada <wendallc@apache.org> wrote:
> > I wanted to follow up on this.
> >
> > I've created a feature branch for this and a JIRA issue
> > https://issues.apache.org/jira/browse/COUCHDB-1762
> >
> > Overall, I think the worst problem is that the tests really aren't
> > debuggable in any sane way, and logging is essentially useless for most
> > things. The only sure way to spot an error most of the time is if it's an
> > actual CouchDB bug and shows up in the log. I'm not sure how this can
> ever
> > be fixed with the current test suite. I'd opt for testing with jasmine,
> but
> > that would require not using couchjs for the test runner, so for now, I
> just
> > focused on getting random failures under control.
> >
> > Paul was kind enough to share some code that he wrote recently to deal
> with
> > the rampant _restart issues.
> >
> https://github.com/davisp/couchdb/commit/0cbf6a9cea01eea599524bcdb77dedb322c7ade4
> > This is a very sound approach in using a token so you can see if it
> actually
> > restarts. The current test suite can result in false positives very
> easily,
> > which leads to test failures. I think this is probably the biggest reason
> > for the random failures. In a previous IRC conversation with Bob
> (rnewson),
> > Jan and I think Benoit (sorry if not the case) _restart was deemed
> something
> > that should go away. I filed a ticket for it's removal
> > https://issues.apache.org/jira/browse/COUCHDB-1714, and as Bob points
> out in
> > the comments, this is useful for the test suite. I'd argue it's only
> useful
> > with Paul's patch adding a token. Otherwise, it's just not reliable at
> all.
> >
> > For the branch I created, instead of using _restart, I did some bash
> magic
> > with a pipe and stop/start the process through the local run script. This
> > has the same drawback of not knowing if CouchDB restarted, or we just
> got a
> > false positive. To account for this, I put a small delay in the
> execution of
> > the lookup, using a new method isRunning to give a little time to stop.
> >
> > I also changed the suite to run a new couchjs for each test file. I'm not
> > certain at this point that this is even necessary at all, but I still
> think
> > it's safer in case of a crash, since the rest of the suite can continue.
> >
> > Other changes I made were just timing related in running the test suite
> for
> > spinning disks, and a couple bug fixes in individual tests.
> >
> > The lack of timers makes writing these tests very ugly. I really dislike
> > this, but so long as the test suite needs couchjs, I don't see a way to
> > avoid this without implementing our own setInterval method in C.
> >
> > One last item. I was getting a consistent failure in Centos 6. I tracked
> > this down to a bug in libcurl. For some reason, after any xhr request
> that
> > returns a 416, the very next send() will hang for a long time, then
> > eventually crash couchjs. The specific version causing the issue is
> > curl-7.19.7-35.el6 and libcurl-7.19.7-35.el6. I'm not certain if this is
> > worth reporting in JIRA, but it will certainly cause a test suite failure
> > consistently in attachment_ranges, but otherwise appears to be fairly
> > harmless. Maybe this should be documented somewhere?
> >
> > Wendall
> >
> >
> > On 03/27/2013 02:05 PM, Wendall Cada wrote:
> >>
> >> In 1.3.0, there is a new part of the test suite to run the javascript
> >> tests from the command line. I'm running into various issues on
> different
> >> hardware/OS configurations. Mostly, tests hanging or timing out and
> failing.
> >> These are really hard to troubleshoot, as they all pass just fine if run
> >> individually.
> >>
> >> What I'm experimenting with today is rewriting how the tests are
> >> implemented to be run one at a time from a loop in bash, versus a loop
> in
> >> javascript. I think the failures I'm running into are improper
> >> setup/teardown. There may be an issue with rapid delete and adding a
> db, or
> >> rapidly starting and stopping couchdb, but I think this is not what's
> >> happening in my failures.
> >>
> >> The nature of spidermonkey doesn't allow for spawning threads, or
> >> sandboxing, etc, so it's hard looking at the test suite to see how I can
> >> improve running all tests. I think it's far better to have the setup
> spawn a
> >> new interpreter for each test. Tear down will kill the interpreter.
> >>
> >> Wendall
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message