blob: 9e49cf15caa6b5d78158497d551977b9b42951ac [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
/*
* Add global couchTests object required for existing tests.
*/
var couchTests = {};
var console = {
log: function(arg) {
var msg = (arg.toString()).replace(/\n/g, "\n ");
print(msg, true);
}
};
var fmtStack = function(stack) {
if(!stack) {
console.log("No stack information");
return;
}
console.log("Trace back (most recent call first):\n");
var re = new RegExp("(.*?)@([^:]*):(.*)$");
var lines = stack.split("\n");
for(var i = 0; i < lines.length; i++) {
var line = lines[i];
if(!line.length) continue;
var match = re.exec(line);
if(!match) continue
var match = re.exec(line);
if(!match) continue
var source = match[1].substr(0, 70);
var file = match[2];
var lnum = match[3];
while(lnum.length < 3) lnum = " " + lnum;
console.log(" " + lnum + ": " + file);
console.log(" " + source);
}
}
function T(arg1, arg2) {
if(!arg1) {
var result = (arg2 ? arg2 : arg1);
throw((result instanceof Error ? result : Error(result)));
}
}
function waitForSuccess(fun, tag) {
var start = new Date().getTime();
var complete = false;
while (!complete) {
var now = new Date().getTime();
if (now > start + 10000) {
complete = true;
throw(Error('\nFAIL ' + tag));
}
try {
while (new Date().getTime() < now + 500);
complete = fun();
} catch (e) {}
}
}
function getUptime() {
var url = "/_node/node1@127.0.0.1/_system"
var stats = JSON.parse(CouchDB.request("GET", url).responseText);
return stats['uptime'];
}
function restartNodeRequest(node) {
var url = "/_node/" + node +"/_restart"
var result = JSON.parse(CouchDB.request("POST", url).responseText);
if (result.ok != true) {
throw(Error('FAILED to restart: ' + node));
}
}
function restartServer() {
var olduptime = getUptime();
if (olduptime < 15) {
// handle quick-restarts, though this slows things down
sleep(15000);
olduptime = getUptime();
}
restartNodeRequest('node1@127.0.0.1');
/* Wait up to 15s for server to restart */
var start = new Date().getTime();
var complete = false;
while (1) {
sleep(500);
try {
if (getUptime() < olduptime) {
return;
}
} catch (e) {}
var now = new Date().getTime();
if (now > start + 15000) {
try {
uptime = getUptime();
throw(Error('FAILED to restart: ' + uptime + ' not < ' + olduptime));
} catch (e) {
throw(Error('FAILED to restart: server is unresponsive, waited 15s'));
}
}
}
}
/*
* If last_req is an object, we got something back. This might be an error, but
* CouchDB is up and running!
*/
CouchDB.isRunning = function() {
CouchDB.last_req = CouchDB.request("GET", "/");
return typeof CouchDB.last_req == 'object';
};