couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Lehnardt <...@apache.org>
Subject Re: [2/7] git commit: COUCHDB-1338 - run js tests with port=0
Date Thu, 26 Apr 2012 20:55:56 GMT

On Apr 26, 2012, at 22:26 , Jan Lehnardt wrote:

> 
> On Apr 26, 2012, at 19:38 , Paul Davis wrote:
> 
>> Reproduces for me. Also looks related to the vpath build because it
>> only reproduces in distcheck and runs fine otherwise. Looking into it.
> 
> one more interesting point, if you cd into the distcheck build dir,
> currently apache-couchdb-1.3.0a-eb3d5d8-git/_build after the test fails
> and then run ./test/javascript/run it all succeeds as well.
> 
> Maybe we are digging in the wrong place?

This however reproduces the failure:

> ./apache-couchdb-1.3.0a-eb3d5d8-git/_build/test/javascript/run cookie_auth

*keeps digging*

> 
> 
>> On Thu, Apr 26, 2012 at 6:56 AM, Jan Lehnardt <jan@apache.org> wrote:
>>> Actually, no.
>>> 
>>> I can now repeatedly get make distcheck to fail at
>>> 
>>> not ok 18 cookie_auth
>>> 
>>> on two different machines. I don't know if this was introduced in the "fixing"
commit or one of Paul's others.
>>> 
>>> Full log:
>>> 
>>> not ok 18 cookie_auth
>>> Reason: false
>>> Trace back (most recent call first):
>>> 
>>> 46: /Users/jan/Work/couchdb/apache-couchdb-1.3.0a-0250310-git/_build/../test/javascript/cli_runner.js
>>>     T(false)
>>> 133: /Users/jan/Work/couchdb/apache-couchdb-1.3.0a-0250310-git/_build/../share/www/script/test/cookie_auth.js
>>>     ()
>>> "jchris@apache.org"}, "eh, Boo-Boo?");try {usersDb.save(duplicateJchrisDoc);T(false
&& "Can't create duplicate user names. Should have thrown an error.");} catch (e)
{T(e.error == "conflict");T(usersDb.last_req.status == 409);}var underscoreUserDoc = CouchDB.prepareUserDoc({name:
"_why"}, "copperfield");try {usersDb.save(underscoreUserDoc);T(false && "Can't create
underscore user names. Should have thrown an error.");} catch (e) {T(e.error == "forbidden");T(usersDb.last_req.status
== 403);}var badIdDoc = CouchDB.prepareUserDoc({name: "foo"}, "bar");badIdDoc._id = "org.apache.couchdb:w00x";try
{usersDb.save(badIdDoc);T(false && "Can't create malformed docids. Should have thrown
an error.");} catch (e) {T(e.error == "forbidden");T(usersDb.last_req.status == 403);}T(CouchDB.login("Jason
Davies", password).ok);T(CouchDB.session().userCtx.name == "Jason Davies");var xhr = CouchDB.request("POST",
"/_session", {headers: {'Content-Type': "application/json"}, body: JSON.stringify({name: "Jason
Davies", password: password})});T(JSON.parse(xhr.responseText).ok);T(CouchDB.session().userCtx.name
== "Jason Davies");jasonUserDoc.foo = 2;T(usersDb.save(jasonUserDoc).ok);T(CouchDB.session().userCtx.roles.indexOf("_admin")
== -1);try {usersDb.deleteDoc(jchrisUserDoc);T(false && "Can't delete other users
docs. Should have thrown an error.");} catch (e) {T(e.error == "forbidden");T(usersDb.last_req.status
== 403);}T(!CouchDB.login("Jason Davies", "2.71828").ok);T(!CouchDB.login("Robert Allen Zimmerman",
"d00d").ok);T(CouchDB.session().userCtx.name != "Jason Davies");xhr = CouchDB.request("POST",
"/_session?next=/", {headers: {'Content-Type': "application/x-www-form-urlencoded"}, body:
"name=Jason%20Davies&password=" + encodeURIComponent(password)});if (xhr.status == 200)
{T(/Welcome/.test(xhr.responseText));}xhr = CouchDB.request("POST", "/_session?fail=/", {headers:
{'Content-Type': "application/x-www-form-urlencoded"}, body: "name=Jason%20Davies&password=foobar"});if
(xhr.status == 200) {T(/Welcome/.test(xhr.responseText));}T(CouchDB.login("jchris@apache.org",
"funnybone").ok);T(CouchDB.session().userCtx.name == "jchris@apache.org");T(CouchDB.session().userCtx.roles.length
== 0);jasonUserDoc.foo = 3;try {usersDb.save(jasonUserDoc);T(false && "Can't update
someone else's user doc. Should have thrown an error.");} catch (e) {T(e.error == "forbidden");T(usersDb.last_req.status
== 403);}jchrisUserDoc.roles = ["foo"];try {usersDb.save(jchrisUserDoc);T(false &&
"Can't set roles unless you are admin. Should have thrown an error.");} catch (e) {T(e.error
== "forbidden");T(usersDb.last_req.status == 403);}T(CouchDB.logout().ok);jchrisUserDoc.foo
= ["foo"];T(save_as(usersDb, jchrisUserDoc, "jan"));jchrisUserDoc.roles = ["_bar"];var res
= save_as(usersDb, jchrisUserDoc, "jan");T(res.error == "forbidden");T(usersDb.last_req.status
== 403);T(CouchDB.login("jchris@apache.org", "funnybone").ok);T(CouchDB.session().userCtx.name
== "jchris@apache.org");T(CouchDB.session().userCtx.roles.indexOf("_admin") == -1);T(CouchDB.session().userCtx.roles.indexOf("foo")
!= -1);T(CouchDB.logout().ok);TEquals(true, CouchDB.login("jan", "apple").ok);run_on_modified_server([{section:
"admins", key: "jchris@apache.org", value: "funnybone"}], function () {T(CouchDB.login("jchris@apache.org",
"funnybone").ok);T(CouchDB.session().userCtx.name == "jchris@apache.org");T(CouchDB.session().userCtx.roles.indexOf("_admin")
!= -1);T(CouchDB.session().userCtx.roles.indexOf("foo") != -1);jchrisUserDoc = usersDb.open(jchrisUserDoc._id);delete
jchrisUserDoc.salt;delete jchrisUserDoc.password_sha;T(usersDb.save(jchrisUserDoc).ok);T(CouchDB.logout().ok);T(CouchDB.login("jchris@apache.org",
"funnybone").ok);var s = CouchDB.session();T(s.userCtx.name == "jchris@apache.org");T(s.userCtx.roles.indexOf("_admin")
!= -1);T(s.info.authenticated == "cookie");T(s.info.authentication_db == "test_suite_users");T(CouchDB.session().userCtx.roles.indexOf("foo")
!= -1);});} finally {T(CouchDB.logout().ok);}TEquals(true, CouchDB.login("jan", "apple").ok);}))@/Users/jan/Work/couchdb/apache-couchdb-1.3.0a-0250310-git/_build/../share/www/script/couch_test_runner.js:380:
apache.org"}, "funnybone");T(usersDb.save(jchrisUserDoc).ok);var duplicateJchrisDoc = CouchDB.prepareUserDoc({name
>>>     run_on_modified_server([object Array],(function () {try {var ddoc = op
>>> 286: /Users/jan/Work/couchdb/apache-couchdb-1.3.0a-0250310-git/_build/../share/www/script/test/cookie_auth.js
>>>     ()
>>> "jchris@apache.org"}, "eh, Boo-Boo?");try {usersDb.save(duplicateJchrisDoc);T(false
&& "Can't create duplicate user names. Should have thrown an error.");} catch (e)
{T(e.error == "conflict");T(usersDb.last_req.status == 409);}var underscoreUserDoc = CouchDB.prepareUserDoc({name:
"_why"}, "copperfield");try {usersDb.save(underscoreUserDoc);T(false && "Can't create
underscore user names. Should have thrown an error.");} catch (e) {T(e.error == "forbidden");T(usersDb.last_req.status
== 403);}var badIdDoc = CouchDB.prepareUserDoc({name: "foo"}, "bar");badIdDoc._id = "org.apache.couchdb:w00x";try
{usersDb.save(badIdDoc);T(false && "Can't create malformed docids. Should have thrown
an error.");} catch (e) {T(e.error == "forbidden");T(usersDb.last_req.status == 403);}T(CouchDB.login("Jason
Davies", password).ok);T(CouchDB.session().userCtx.name == "Jason Davies");var xhr = CouchDB.request("POST",
"/_session", {headers: {'Content-Type': "application/json"}, body: JSON.stringify({name: "Jason
Davies", password: password})});T(JSON.parse(xhr.responseText).ok);T(CouchDB.session().userCtx.name
== "Jason Davies");jasonUserDoc.foo = 2;T(usersDb.save(jasonUserDoc).ok);T(CouchDB.session().userCtx.roles.indexOf("_admin")
== -1);try {usersDb.deleteDoc(jchrisUserDoc);T(false && "Can't delete other users
docs. Should have thrown an error.");} catch (e) {T(e.error == "forbidden");T(usersDb.last_req.status
== 403);}T(!CouchDB.login("Jason Davies", "2.71828").ok);T(!CouchDB.login("Robert Allen Zimmerman",
"d00d").ok);T(CouchDB.session().userCtx.name != "Jason Davies");xhr = CouchDB.request("POST",
"/_session?next=/", {headers: {'Content-Type': "application/x-www-form-urlencoded"}, body:
"name=Jason%20Davies&password=" + encodeURIComponent(password)});if (xhr.status == 200)
{T(/Welcome/.test(xhr.responseText));}xhr = CouchDB.request("POST", "/_session?fail=/", {headers:
{'Content-Type': "application/x-www-form-urlencoded"}, body: "name=Jason%20Davies&password=foobar"});if
(xhr.status == 200) {T(/Welcome/.test(xhr.responseText));}T(CouchDB.login("jchris@apache.org",
"funnybone").ok);T(CouchDB.session().userCtx.name == "jchris@apache.org");T(CouchDB.session().userCtx.roles.length
== 0);jasonUserDoc.foo = 3;try {usersDb.save(jasonUserDoc);T(false && "Can't update
someone else's user doc. Should have thrown an error.");} catch (e) {T(e.error == "forbidden");T(usersDb.last_req.status
== 403);}jchrisUserDoc.roles = ["foo"];try {usersDb.save(jchrisUserDoc);T(false &&
"Can't set roles unless you are admin. Should have thrown an error.");} catch (e) {T(e.error
== "forbidden");T(usersDb.last_req.status == 403);}T(CouchDB.logout().ok);jchrisUserDoc.foo
= ["foo"];T(save_as(usersDb, jchrisUserDoc, "jan"));jchrisUserDoc.roles = ["_bar"];var res
= save_as(usersDb, jchrisUserDoc, "jan");T(res.error == "forbidden");T(usersDb.last_req.status
== 403);T(CouchDB.login("jchris@apache.org", "funnybone").ok);T(CouchDB.session().userCtx.name
== "jchris@apache.org");T(CouchDB.session().userCtx.roles.indexOf("_admin") == -1);T(CouchDB.session().userCtx.roles.indexOf("foo")
!= -1);T(CouchDB.logout().ok);TEquals(true, CouchDB.login("jan", "apple").ok);run_on_modified_server([{section:
"admins", key: "jchris@apache.org", value: "funnybone"}], function () {T(CouchDB.login("jchris@apache.org",
"funnybone").ok);T(CouchDB.session().userCtx.name == "jchris@apache.org");T(CouchDB.session().userCtx.roles.indexOf("_admin")
!= -1);T(CouchDB.session().userCtx.roles.indexOf("foo") != -1);jchrisUserDoc = usersDb.open(jchrisUserDoc._id);delete
jchrisUserDoc.salt;delete jchrisUserDoc.password_sha;T(usersDb.save(jchrisUserDoc).ok);T(CouchDB.logout().ok);T(CouchDB.login("jchris@apache.org",
"funnybone").ok);var s = CouchDB.session();T(s.userCtx.name == "jchris@apache.org");T(s.userCtx.roles.indexOf("_admin")
!= -1);T(s.info.authenticated == "cookie");T(s.info.authentication_db == "test_suite_users");T(CouchDB.session().userCtx.roles.indexOf("foo")
!= -1);});} finally {T(CouchDB.logout().ok);}TEquals(true, CouchDB.login("jan", "apple").ok);};var
usersDb = new CouchDB("test_suite_users", {'X-Couch-Full-Commit': "false"});usersDb.deleteDb();usersDb.createDb();run_on_modified_server([{section:
"couch_httpd_auth", key: "authentication_db", value: "test_suite_users"}, {section: "couch_httpd_auth",
key: "iterations", value: "1"}, {section: "admins", key: "jan", value: "apple"}], testFun);}))@/Users/jan/Work/couchdb/apache-couchdb-1.3.0a-0250310-git/_build/../test/javascript/cli_runner.js:53:
apache.org"}, "funnybone");T(usersDb.save(jchrisUserDoc).ok);var duplicateJchrisDoc = CouchDB.prepareUserDoc({name
>>>     var testFun = function () {try {var ddoc = open_as(usersDb, "_design/_
>>> 72: /Users/jan/Work/couchdb/apache-couchdb-1.3.0a-0250310-git/_build/../test/javascript/cli_runner.js
>>>     runAllTestsConsole()
>>> 85: /Users/jan/Work/couchdb/apache-couchdb-1.3.0a-0250310-git/_build/../test/javascript/cli_runner.js
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Apr 26, 2012, at 13:27 , Jan Lehnardt wrote:
>>> 
>>>> Paul fixed this in http://git-wip-us.apache.org/repos/asf/couchdb/commit/02503102
>>>> 
>>>> Cheers!
>>>> 
>>>> On Apr 24, 2012, at 20:39 , Jan Lehnardt wrote:
>>>> 
>>>>> Thanks for the replies!
>>>>> 
>>>>> ./test/javascript/run.tpl, line 15:
>>>>> 
>>>>> SRC_DIR=%abs_top_srcdir%
>>>>> 
>>>>> What now? :)
>>>>> 
>>>>> Jan
>>>>> --
>>>>> 
>>>>> 
>>>>> On Apr 24, 2012, at 20:25 , Paul Davis wrote:
>>>>> 
>>>>>> Yeah. We'll need an $(abs_top_srcdir) or $(abs_top_builddir) here
>>>>>> depending on how they're used. It can be a bit of a PITA if one of
>>>>>> those needs to support write backs by one of the tests. Basic solution
>>>>>> is to name them foo.ini.tpl and then "build" foo.ini and use
>>>>>> $(abs_top_builddir) in that case. Where by "build" I mean `cp $<
$@`
>>>>>> or so.
>>>>>> 
>>>>>> On Tue, Apr 24, 2012 at 12:04 PM, Randall Leeds <randall@apache.org>
wrote:
>>>>>>> On Tue, Apr 24, 2012 at 08:08, Jan Lehnardt <jan@apache.org>
wrote:
>>>>>>>> 
>>>>>>>> On Apr 24, 2012, at 17:05 , Jan Lehnardt wrote:
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Jan 27, 2012, at 02:37 , randall@apache.org wrote:
>>>>>>>>> 
>>>>>>>>>> COUCHDB-1338 - run js tests with port=0
>>>>>>>>>> 
>>>>>>>>>> When the JS tests POST to /_restart, the server comes
back up on a
>>>>>>>>>> different port. To work around this, add a getter
property for the
>>>>>>>>>> CouchHTTP.prototype.base_url property, using a reserved
slot on the
>>>>>>>>>> object to store the value.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
>>>>>>>>>> Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/d20e7926
>>>>>>>>>> Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/d20e7926
>>>>>>>>>> Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/d20e7926
>>>>>>>>>> 
>>>>>>>>>> Branch: refs/heads/master
>>>>>>>>>> Commit: d20e792617db738dd5ad0e046ae847cd740f586f
>>>>>>>>>> Parents: 257eb52
>>>>>>>>>> Author: Randall Leeds <randall@apache.org>
>>>>>>>>>> Authored: Sat Jan 7 14:21:29 2012 -0800
>>>>>>>>>> Committer: Randall Leeds <randall@apache.org>
>>>>>>>>>> Committed: Thu Jan 26 17:03:10 2012 -0800
>>>>>>>>>> 
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>> src/couchdb/priv/couch_js/help.h  |    2 +
>>>>>>>>>> src/couchdb/priv/couch_js/http.c  |   60 +++++++++++++++++++++++++++++++-
>>>>>>>>>> src/couchdb/priv/couch_js/http.h  |    3 ++
>>>>>>>>>> src/couchdb/priv/couch_js/sm170.c |    8 ++++
>>>>>>>>>> src/couchdb/priv/couch_js/sm180.c |    8 ++++
>>>>>>>>>> src/couchdb/priv/couch_js/sm185.c |    8 ++++
>>>>>>>>>> src/couchdb/priv/couch_js/util.c  |    3 +-
>>>>>>>>>> src/couchdb/priv/couch_js/util.h  |    2 +
>>>>>>>>>> test/Makefile.am                  |    1 +
>>>>>>>>>> test/etap/Makefile.am             |    1 -
>>>>>>>>>> test/etap/random_port.ini         |   19 ----------
>>>>>>>>>> test/etap/test_util.erl.in        |    2 +-
>>>>>>>>>> test/javascript/Makefile.am       |    1 +
>>>>>>>>>> test/javascript/couch_http.js     |    9 ++---
>>>>>>>>>> test/javascript/run.tpl           |    9 ++++-
>>>>>>>>>> test/random_port.ini              |   19 ++++++++++
>>>>>>>>>> 16 files changed, 125 insertions(+), 30 deletions(-)
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> [...]
>>>>>>>>>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/d20e7926/test/javascript/run.tpl
>>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>>> diff --git a/test/javascript/run.tpl b/test/javascript/run.tpl
>>>>>>>>>> index 47d2f6e..ac78b50 100644
>>>>>>>>>> --- a/test/javascript/run.tpl
>>>>>>>>>> +++ b/test/javascript/run.tpl
>>>>>>>>>> @@ -17,6 +17,7 @@ SCRIPT_DIR=$SRC_DIR/share/www/script
>>>>>>>>>> JS_TEST_DIR=$SRC_DIR/test/javascript
>>>>>>>>>> 
>>>>>>>>>> COUCHJS=%abs_top_builddir%/src/couchdb/priv/couchjs
>>>>>>>>>> +COUCH_URI_FILE=%localstaterundir%/couch.uri
>>>>>>>>>> 
>>>>>>>>>> if [ "$#" -eq 0 ];
>>>>>>>>>> then
>>>>>>>>>> @@ -48,11 +49,15 @@ abort() {
>>>>>>>>>> if [ -z $COUCHDB_NO_START ]; then
>>>>>>>>>>     make dev
>>>>>>>>>>   trap 'abort' 0 1 2 3 4 6 8 15
>>>>>>>>>> -    ./utils/run -b -r 1
>>>>>>>>>> +    ./utils/run -b -r 1 -n \
>>>>>>>>>> +            -a $SRC_DIR/etc/couchdb/default_dev.ini
\
>>>>>>>>>> +            -a $SRC_DIR/test/random_port.ini \
>>>>>>>>>> +            -a $SRC_DIR/etc/couchdb/local_dev.ini
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Randall, this breaks vpath builds. removing the -n option
and the -n lines makes it work for me.
>>>>>>>> 
>>>>>>>> … and the -a lines …
>>>>>>> 
>>>>>>> Hmm. Maybe it should be "$(abs_top_builddir)" instead of SRC_DIR?
>>>>>>> The -a ...random_port.ini is the crucial one, because that's
the point
>>>>>>> of the patch. I can't remember at this moment why I needed to
specify
>>>>>>> exactly all the configs and use the -n to reset the config chain,
but
>>>>>>> I'm sure there was a reason (like random_port.ini not getting
>>>>>>> preference over default_dev.ini or something).
>>>>>>> 
>>>>>>> -R
>>>>> 
>>>> 
>>> 
> 


Mime
View raw message