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 264C3F83B for ; Mon, 8 Apr 2013 19:51:26 +0000 (UTC) Received: (qmail 26593 invoked by uid 500); 8 Apr 2013 19:51:25 -0000 Delivered-To: apmail-couchdb-dev-archive@couchdb.apache.org Received: (qmail 26457 invoked by uid 500); 8 Apr 2013 19:51:25 -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 26449 invoked by uid 99); 8 Apr 2013 19:51:25 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Apr 2013 19:51:25 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of wendallc@83864.com designates 209.85.214.180 as permitted sender) Received: from [209.85.214.180] (HELO mail-ob0-f180.google.com) (209.85.214.180) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Apr 2013 19:51:19 +0000 Received: by mail-ob0-f180.google.com with SMTP id un3so1936584obb.39 for ; Mon, 08 Apr 2013 12:50:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=83864.com; s=google; h=x-received:sender:message-id:date:from:user-agent:mime-version:to :subject:references:in-reply-to:content-type :content-transfer-encoding; bh=hX024MumyVPUB1fEgV3LY8yYkT1RFhC6zrE2QHYTjNk=; b=NPvBsCYDQ+WwIjnSsOaEWbXd/FU1rWWiJLBy0UowLftxFPTKBU6+4bENqcI3Jskzzy kcMRPAYRrLajOT16jOSRqJOqn4KOSKVx8okIzOMoHa+iBiFOzT2YoWUC6lRjwzv55nC0 NPkCoeBYdxfTz1gSxrQ7/O5IFLiawBjMFtDTU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:sender:message-id:date:from:user-agent:mime-version:to :subject:references:in-reply-to:content-type :content-transfer-encoding:x-gm-message-state; bh=hX024MumyVPUB1fEgV3LY8yYkT1RFhC6zrE2QHYTjNk=; b=TLyYozbn8T5BLAkVjPMedqR+kEy99O+FuNvTKYRodoN5rqQnTGi4N7cx4wJ9PEJ028 CQHaqdXdqtqXsslyaB3wmZkPSwuMbbub0fKm93R/+8tOPB7DtB6fC8sNnZ7P4R16jGL0 K7V4IZHRxOg/wGMdxLvAz13qsIjmixESq52rsxn9iGt+7Yzz5D0iZ0sx236UPG9OOh5/ DIzuU76zjvSKuGgTPQpD6+IRzRt7cmY5vlKrKTS8lNKpfJwnkWAcgDk8hgiZQs/DdOaz fKZOFYzIaOlMgexkarPNcy7eTMTYA/SFh/d+WJs0X+qR2EgYSqdFj+19rqjkOf4reVeQ h24Q== X-Received: by 10.60.62.70 with SMTP id w6mr17107020oer.38.1365450657988; Mon, 08 Apr 2013 12:50:57 -0700 (PDT) Received: from wlaptop.localdomain (c-67-170-178-212.hsd1.or.comcast.net. [67.170.178.212]) by mx.google.com with ESMTPS id it9sm25589556obb.6.2013.04.08.12.50.55 (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 08 Apr 2013 12:50:56 -0700 (PDT) Sender: Wendall Cada Message-ID: <51631F9F.4020501@apache.org> Date: Mon, 08 Apr 2013 12:50:55 -0700 From: Wendall Cada User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130311 Thunderbird/17.0.4 MIME-Version: 1.0 To: dev@couchdb.apache.org Subject: Re: Javascript Test Suite References: <51535F0B.7060408@apache.org> <515F64E9.9050207@apache.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Gm-Message-State: ALoCoQk+wvyYHphjrXvBKPOgo6uOsh4OKj6mJtCcsq9kl/41pP8BhPS+SzjuZheJGCrVc8RQowCs X-Virus-Checked: Checked by ClamAV on apache.org Thanks for the feedback on this Paul. There are a few other comments in this thread around the same issue. I believe we have a consensus that using couchjs isn't the way forward because of limitations. I'm going to start a new thread with a proposal around the ideas here so we can discuss where this all fits into the roadmap. I'll merge this with master when I get a chance. I also will need to pull the relevant parts into 1.3.x. Wendall On 04/08/2013 07: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 >>