Merge branch '3057-add-couch-js-sleep-test-suite-helper'
diff --git a/priv/couch_js/help.h b/priv/couch_js/help.h
index f4ddb24..7601e9d 100644
--- a/priv/couch_js/help.h
+++ b/priv/couch_js/help.h
@@ -48,6 +48,8 @@
" -V display version information and exit\n"
" -H enable %s cURL bindings (only avaiable\n"
" if package was built with cURL available)\n"
+ " -T enable test suite specific functions (these\n"
+ " should not be enabled for production systems)\n"
" -S SIZE specify that the runtime should allow at\n"
" most SIZE bytes of memory to be allocated\n"
" -u FILE path to a .uri file containing the address\n"
diff --git a/priv/couch_js/main.c b/priv/couch_js/main.c
index 1f1bb1d..b2cd210 100644
--- a/priv/couch_js/main.c
+++ b/priv/couch_js/main.c
@@ -14,6 +14,13 @@
#include <stdio.h>
#include <string.h>
+#ifdef XP_WIN
+#include <windows.h>
+#include <mapiwin.h>
+#else
+#include <unistd.h>
+#endif
+
#include <jsapi.h>
#include "config.h"
#include "http.h"
@@ -275,6 +282,25 @@
}
+static JSBool
+js_sleep(JSContext* cx, uintN argc, jsval* vp)
+{
+ jsval* argv = JS_ARGV(cx, vp);
+ int duration = 0;
+ if(!JS_ConvertArguments(cx, argc, argv, "/i", &duration)) {
+ return JS_FALSE;
+ }
+
+#ifdef XP_WIN
+ Sleep(duration);
+#else
+ usleep(duration * 1000);
+#endif
+
+ return JS_TRUE;
+}
+
+
JSClass CouchHTTPClass = {
"CouchHTTP",
JSCLASS_HAS_PRIVATE
@@ -307,6 +333,12 @@
};
+JSFunctionSpec TestSuiteFunctions[] = {
+ JS_FS("sleep", js_sleep, 1, 0),
+ JS_FS_END
+};
+
+
static JSFunctionSpec global_functions[] = {
JS_FS("evalcx", evalcx, 0, 0),
JS_FS("gc", gc, 0, 0),
@@ -387,6 +419,11 @@
}
}
+ if(args->use_test_funs) {
+ if(couch_load_funcs(cx, global, TestSuiteFunctions) != JS_TRUE)
+ return 1;
+ }
+
for(i = 0 ; args->scripts[i] ; i++) {
// Convert script source to jschars.
scriptsrc = couch_readfile(cx, args->scripts[i]);
diff --git a/priv/couch_js/util.c b/priv/couch_js/util.c
index b4700de..2f2a2a7 100644
--- a/priv/couch_js/util.c
+++ b/priv/couch_js/util.c
@@ -88,6 +88,8 @@
exit(0);
} else if(strcmp("-H", argv[i]) == 0) {
args->use_http = 1;
+ } else if(strcmp("-T", argv[i]) == 0) {
+ args->use_test_funs = 1;
} else if(strcmp("-S", argv[i]) == 0) {
args->stack_size = atoi(argv[++i]);
if(args->stack_size <= 0) {
diff --git a/priv/couch_js/util.h b/priv/couch_js/util.h
index 65a2a06..3c71f69 100644
--- a/priv/couch_js/util.h
+++ b/priv/couch_js/util.h
@@ -17,6 +17,7 @@
typedef struct {
int use_http;
+ int use_test_funs;
int stack_size;
const char** scripts;
const char* uri_file;