Return-Path: X-Original-To: apmail-couchdb-dev-archive@www.apache.org Delivered-To: apmail-couchdb-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 27A9FFA8A for ; Mon, 8 Apr 2013 17:33:33 +0000 (UTC) Received: (qmail 34951 invoked by uid 500); 8 Apr 2013 17:33:32 -0000 Delivered-To: apmail-couchdb-dev-archive@couchdb.apache.org Received: (qmail 34921 invoked by uid 500); 8 Apr 2013 17:33:32 -0000 Mailing-List: contact dev-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list dev@couchdb.apache.org Received: (qmail 34913 invoked by uid 99); 8 Apr 2013 17:33:32 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Apr 2013 17:33:32 +0000 X-ASF-Spam-Status: No, hits=2.2 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (athena.apache.org: local policy) Received: from [209.85.215.45] (HELO mail-la0-f45.google.com) (209.85.215.45) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Apr 2013 17:33:28 +0000 Received: by mail-la0-f45.google.com with SMTP id fn20so2177183lab.32 for ; Mon, 08 Apr 2013 10:33:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:content-type:x-gm-message-state; bh=K1ZMgRAmmkEXW3G0phmnbuSnHdpLRgE+DZ/EsUANC3c=; b=LtmkFA1L1N6HpIU0cDI+OAjYUs4LrLZZYKeXp7w/n8c5WAHjxjkgz1ChmrVQL2a9FS nr4io8akAZGL25YOfSfbYxLGXdE04JMvmbw3i0A7Edxqa8FFgh0eH/94bPWBChixKrXZ +yQamgMPoDkyKY4M4patHZSdWbC0wkjQyi8oqMlJEOcse7QGPLKUkUnYb/S1Faj0G4rj am/xa7L5fbEoavv4UTqgNrryt916iJ4ay5e52PS4lnHV+fhHsUl7AAEfgIUODooZBIom 8ZE46B7GjUo1BRq3lz9KCoPCkeqDBm3NhMbWUpBgIycgY0XMQh22YXsWo/m/GX0a1rR9 Dntg== MIME-Version: 1.0 X-Received: by 10.112.135.194 with SMTP id pu2mr2585337lbb.90.1365442385412; Mon, 08 Apr 2013 10:33:05 -0700 (PDT) Received: by 10.114.109.39 with HTTP; Mon, 8 Apr 2013 10:33:05 -0700 (PDT) In-Reply-To: References: <51535F0B.7060408@apache.org> <515F64E9.9050207@apache.org> Date: Mon, 8 Apr 2013 10:33:05 -0700 Message-ID: Subject: Re: Javascript Test Suite From: Traun Leyden To: dev@couchdb.apache.org Content-Type: multipart/alternative; boundary=089e01182e54581b3404d9dcd4a5 X-Gm-Message-State: ALoCoQmbrsy5wy7d2wYNN4ZV8DKj+4Ud1Keuwf0D8xn7F2aEmbt01F7cg65nKL/VdU0McGO68hyH X-Virus-Checked: Checked by ClamAV on apache.org --089e01182e54581b3404d9dcd4a5 Content-Type: text/plain; charset=ISO-8859-1 For unit testing modules written in Erlang, I'd argue that using Elixir would be the best bet. On Mon, Apr 8, 2013 at 7:26 AM, Paul Davis 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 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 > > > > > --089e01182e54581b3404d9dcd4a5--