summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests/jstests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/dbtests/jstests.cpp')
-rw-r--r--src/mongo/dbtests/jstests.cpp171
1 files changed, 87 insertions, 84 deletions
diff --git a/src/mongo/dbtests/jstests.cpp b/src/mongo/dbtests/jstests.cpp
index 7f06eea59f1..051bc478dbc 100644
--- a/src/mongo/dbtests/jstests.cpp
+++ b/src/mongo/dbtests/jstests.cpp
@@ -141,25 +141,25 @@ public:
void run() {
unique_ptr<Scope> s((getGlobalScriptEngine()->*scopeFactory)());
- s->invoke("x=5;", 0, 0);
+ s->invoke("x=5;", nullptr, nullptr);
ASSERT(5 == s->getNumber("x"));
- s->invoke("return 17;", 0, 0);
+ s->invoke("return 17;", nullptr, nullptr);
ASSERT(17 == s->getNumber("__returnValue"));
- s->invoke("function(){ return 18; }", 0, 0);
+ s->invoke("function(){ return 18; }", nullptr, nullptr);
ASSERT(18 == s->getNumber("__returnValue"));
s->setNumber("x", 1.76);
- s->invoke("return x == 1.76; ", 0, 0);
+ s->invoke("return x == 1.76; ", nullptr, nullptr);
ASSERT(s->getBoolean("__returnValue"));
s->setNumber("x", 1.76);
- s->invoke("return x == 1.79; ", 0, 0);
+ s->invoke("return x == 1.79; ", nullptr, nullptr);
ASSERT(!s->getBoolean("__returnValue"));
BSONObj obj = BSON("" << 11.0);
- s->invoke("function( z ){ return 5 + z; }", &obj, 0);
+ s->invoke("function( z ){ return 5 + z; }", &obj, nullptr);
ASSERT_EQUALS(16, s->getNumber("__returnValue"));
}
};
@@ -240,12 +240,12 @@ public:
unique_ptr<Scope> scope((getGlobalScriptEngine()->*scopeFactory)());
// No error is logged for a valid statement.
- ASSERT_EQUALS(0, scope->invoke("validStatement = true", 0, 0));
+ ASSERT_EQUALS(0, scope->invoke("validStatement = true", nullptr, nullptr));
ASSERT(!_logger.logged());
// An error is logged for an invalid statement.
try {
- scope->invoke("notAFunction()", 0, 0);
+ scope->invoke("notAFunction()", nullptr, nullptr);
} catch (const DBException&) {
// ignore the exception; just test that we logged something
}
@@ -276,48 +276,48 @@ public:
<< "sara");
s->setObject("blah", o);
- s->invoke("return blah.x;", 0, 0);
+ s->invoke("return blah.x;", nullptr, nullptr);
ASSERT_EQUALS(17, s->getNumber("__returnValue"));
- s->invoke("return blah.y;", 0, 0);
+ s->invoke("return blah.y;", nullptr, nullptr);
ASSERT_EQUALS("eliot", s->getString("__returnValue"));
- s->invoke("return this.z;", 0, &o);
+ s->invoke("return this.z;", nullptr, &o);
ASSERT_EQUALS("sara", s->getString("__returnValue"));
- s->invoke("return this.z == 'sara';", 0, &o);
+ s->invoke("return this.z == 'sara';", nullptr, &o);
ASSERT_EQUALS(true, s->getBoolean("__returnValue"));
- s->invoke("this.z == 'sara';", 0, &o);
+ s->invoke("this.z == 'sara';", nullptr, &o);
ASSERT_EQUALS(true, s->getBoolean("__returnValue"));
- s->invoke("this.z == 'asara';", 0, &o);
+ s->invoke("this.z == 'asara';", nullptr, &o);
ASSERT_EQUALS(false, s->getBoolean("__returnValue"));
- s->invoke("return this.x == 17;", 0, &o);
+ s->invoke("return this.x == 17;", nullptr, &o);
ASSERT_EQUALS(true, s->getBoolean("__returnValue"));
- s->invoke("return this.x == 18;", 0, &o);
+ s->invoke("return this.x == 18;", nullptr, &o);
ASSERT_EQUALS(false, s->getBoolean("__returnValue"));
- s->invoke("function(){ return this.x == 17; }", 0, &o);
+ s->invoke("function(){ return this.x == 17; }", nullptr, &o);
ASSERT_EQUALS(true, s->getBoolean("__returnValue"));
- s->invoke("function(){ return this.x == 18; }", 0, &o);
+ s->invoke("function(){ return this.x == 18; }", nullptr, &o);
ASSERT_EQUALS(false, s->getBoolean("__returnValue"));
- s->invoke("function (){ return this.x == 17; }", 0, &o);
+ s->invoke("function (){ return this.x == 17; }", nullptr, &o);
ASSERT_EQUALS(true, s->getBoolean("__returnValue"));
- s->invoke("function z(){ return this.x == 18; }", 0, &o);
+ s->invoke("function z(){ return this.x == 18; }", nullptr, &o);
ASSERT_EQUALS(false, s->getBoolean("__returnValue"));
- s->invoke("function (){ this.x == 17; }", 0, &o);
+ s->invoke("function (){ this.x == 17; }", nullptr, &o);
ASSERT_EQUALS(false, s->getBoolean("__returnValue"));
- s->invoke("function z(){ this.x == 18; }", 0, &o);
+ s->invoke("function z(){ this.x == 18; }", nullptr, &o);
ASSERT_EQUALS(false, s->getBoolean("__returnValue"));
- s->invoke("x = 5; for( ; x <10; x++){ a = 1; }", 0, &o);
+ s->invoke("x = 5; for( ; x <10; x++){ a = 1; }", nullptr, &o);
ASSERT_EQUALS(10, s->getNumber("x"));
}
};
@@ -328,12 +328,12 @@ public:
void run() {
unique_ptr<Scope> s((getGlobalScriptEngine()->*scopeFactory)());
- s->invoke("z = { num : 1 };", 0, 0);
+ s->invoke("z = { num : 1 };", nullptr, nullptr);
BSONObj out = s->getObject("z");
ASSERT_EQUALS(1, out["num"].number());
ASSERT_EQUALS(1, out.nFields());
- s->invoke("z = { x : 'eliot' };", 0, 0);
+ s->invoke("z = { x : 'eliot' };", nullptr, nullptr);
out = s->getObject("z");
ASSERT_EQUALS((string) "eliot", out["x"].valuestr());
ASSERT_EQUALS(1, out.nFields());
@@ -417,14 +417,15 @@ public:
BSONObj out;
- ASSERT_THROWS(s->invoke("blah.y = 'e'", 0, 0), mongo::AssertionException);
- ASSERT_THROWS(s->invoke("blah.a = 19;", 0, 0), mongo::AssertionException);
- ASSERT_THROWS(s->invoke("blah.zz.a = 19;", 0, 0), mongo::AssertionException);
- ASSERT_THROWS(s->invoke("blah.zz = { a : 19 };", 0, 0), mongo::AssertionException);
- ASSERT_THROWS(s->invoke("delete blah['x']", 0, 0), mongo::AssertionException);
+ ASSERT_THROWS(s->invoke("blah.y = 'e'", nullptr, nullptr), mongo::AssertionException);
+ ASSERT_THROWS(s->invoke("blah.a = 19;", nullptr, nullptr), mongo::AssertionException);
+ ASSERT_THROWS(s->invoke("blah.zz.a = 19;", nullptr, nullptr), mongo::AssertionException);
+ ASSERT_THROWS(s->invoke("blah.zz = { a : 19 };", nullptr, nullptr),
+ mongo::AssertionException);
+ ASSERT_THROWS(s->invoke("delete blah['x']", nullptr, nullptr), mongo::AssertionException);
// read-only object itself can be overwritten
- s->invoke("blah = {}", 0, 0);
+ s->invoke("blah = {}", nullptr, nullptr);
out = s->getObject("blah");
ASSERT(out.isEmpty());
@@ -456,13 +457,13 @@ public:
}
s->setObject("x", o);
- s->invoke("return x.d.getTime() != 12;", 0, 0);
+ s->invoke("return x.d.getTime() != 12;", nullptr, nullptr);
ASSERT_EQUALS(true, s->getBoolean("__returnValue"));
- s->invoke("z = x.d.getTime();", 0, 0);
+ s->invoke("z = x.d.getTime();", nullptr, nullptr);
ASSERT_EQUALS(123456789, s->getNumber("z"));
- s->invoke("z = { z : x.d }", 0, 0);
+ s->invoke("z = { z : x.d }", nullptr, nullptr);
BSONObj out = s->getObject("z");
ASSERT(out["z"].type() == Date);
}
@@ -477,16 +478,16 @@ public:
}
s->setObject("x", o);
- s->invoke("z = x.r.test( 'b' );", 0, 0);
+ s->invoke("z = x.r.test( 'b' );", nullptr, nullptr);
ASSERT_EQUALS(false, s->getBoolean("z"));
- s->invoke("z = x.r.test( 'a' );", 0, 0);
+ s->invoke("z = x.r.test( 'a' );", nullptr, nullptr);
ASSERT_EQUALS(true, s->getBoolean("z"));
- s->invoke("z = x.r.test( 'ba' );", 0, 0);
+ s->invoke("z = x.r.test( 'ba' );", nullptr, nullptr);
ASSERT_EQUALS(false, s->getBoolean("z"));
- s->invoke("z = { a : x.r };", 0, 0);
+ s->invoke("z = { a : x.r };", nullptr, nullptr);
BSONObj out = s->getObject("z");
ASSERT_EQUALS((string) "^a", out["a"].regex());
@@ -505,7 +506,7 @@ public:
" }"
" assert(threw);"
"}";
- ASSERT_EQUALS(s->invoke(code, &invalidRegex, NULL), 0);
+ ASSERT_EQUALS(s->invoke(code, &invalidRegex, nullptr), 0);
}
// array
@@ -559,7 +560,7 @@ public:
s->setObject("z", b.obj());
- ASSERT(s->invoke("y = { a : z.a , b : z.b , c : z.c , d: z.d }", 0, 0) == 0);
+ ASSERT(s->invoke("y = { a : z.a , b : z.b , c : z.c , d: z.d }", nullptr, nullptr) == 0);
BSONObj out = s->getObject("y");
ASSERT_EQUALS(bsonTimestamp, out["a"].type());
@@ -592,7 +593,7 @@ public:
ASSERT_EQUALS(NumberDouble, o["b"].type());
s->setObject("z", o);
- s->invoke("return z", 0, 0);
+ s->invoke("return z", nullptr, nullptr);
BSONObj out = s->getObject("__returnValue");
ASSERT_EQUALS(5, out["a"].number());
ASSERT_EQUALS(5.6, out["b"].number());
@@ -610,7 +611,7 @@ public:
}
s->setObject("z", o, false);
- s->invoke("return z", 0, 0);
+ s->invoke("return z", nullptr, nullptr);
out = s->getObject("__returnValue");
ASSERT_EQUALS(5, out["a"].number());
ASSERT_EQUALS(5.6, out["b"].number());
@@ -643,7 +644,7 @@ public:
ASSERT_EQUALS(NumberDouble, out["a"].embeddedObjectUserCheck()["0"].type());
ASSERT_EQUALS(NumberInt, out["a"].embeddedObjectUserCheck()["1"].type());
- s->invokeSafe("z.z = 5;", 0, 0);
+ s->invokeSafe("z.z = 5;", nullptr, nullptr);
out = s->getObject("z");
ASSERT_EQUALS(5, out["z"].number());
ASSERT_EQUALS(NumberDouble, out["a"].embeddedObjectUserCheck()["0"].type());
@@ -913,10 +914,10 @@ public:
for (int i = 5; i < 100; i += 10) {
s->setObject("a", build(i), false);
- s->invokeSafe("tojson( a )", 0, 0);
+ s->invokeSafe("tojson( a )", nullptr, nullptr);
s->setObject("a", build(5), true);
- s->invokeSafe("tojson( a )", 0, 0);
+ s->invokeSafe("tojson( a )", nullptr, nullptr);
}
}
};
@@ -970,8 +971,8 @@ public:
"function() { "
" while (true) { } "
"} ",
- 0,
- 0,
+ nullptr,
+ nullptr,
1);
} catch (const DBException&) {
caught = true;
@@ -1040,8 +1041,8 @@ public:
"function() { "
" for (var i=0; i<1; i++) { ; } "
"} ",
- 0,
- 0,
+ nullptr,
+ nullptr,
5 * 60 * 1000);
}
};
@@ -1111,8 +1112,8 @@ public:
s->setObject("x", in);
}
- s->invokeSafe("myb = x.b; print( myb ); printjson( myb );", 0, 0);
- s->invokeSafe("y = { c : myb };", 0, 0);
+ s->invokeSafe("myb = x.b; print( myb ); printjson( myb );", nullptr, nullptr);
+ s->invokeSafe("y = { c : myb };", nullptr, nullptr);
BSONObj out = s->getObject("y");
ASSERT_EQUALS(BinData, out["c"].type());
@@ -1121,7 +1122,7 @@ public:
ASSERT_EQUALS(0, in["b"].woCompare(out["c"], false));
// check that BinData js class is utilized
- s->invokeSafe("q = x.b.toString();", 0, 0);
+ s->invokeSafe("q = x.b.toString();", nullptr, nullptr);
stringstream expected;
expected << "BinData(" << BinDataGeneral << ",\"" << base64 << "\")";
ASSERT_EQUALS(expected.str(), s->getString("q"));
@@ -1130,12 +1131,12 @@ public:
scriptBuilder << "z = { c : new BinData( " << BinDataGeneral << ", \"" << base64
<< "\" ) };";
string script = scriptBuilder.str();
- s->invokeSafe(script.c_str(), 0, 0);
+ s->invokeSafe(script.c_str(), nullptr, nullptr);
out = s->getObject("z");
// pp( "out" , out["c"] );
ASSERT_EQUALS(0, in["b"].woCompare(out["c"], false));
- s->invokeSafe("a = { f: new BinData( 128, \"\" ) };", 0, 0);
+ s->invokeSafe("a = { f: new BinData( 128, \"\" ) };", nullptr, nullptr);
out = s->getObject("a");
int len = -1;
out["f"].binData(len);
@@ -1187,14 +1188,14 @@ public:
unique_ptr<Scope> s;
s.reset((getGlobalScriptEngine()->*scopeFactory)());
- s->invokeSafe("x = 5;", 0, 0);
+ s->invokeSafe("x = 5;", nullptr, nullptr);
{
BSONObjBuilder b;
s->append(b, "z", "x");
ASSERT_BSONOBJ_EQ(BSON("z" << 5), b.obj());
}
- s->invokeSafe("x = function(){ return 17; }", 0, 0);
+ s->invokeSafe("x = function(){ return 17; }", nullptr, nullptr);
BSONObj temp;
{
BSONObjBuilder b;
@@ -1202,7 +1203,7 @@ public:
temp = b.obj();
}
- s->invokeSafe("foo = this.z();", 0, &temp);
+ s->invokeSafe("foo = this.z();", nullptr, &temp);
ASSERT_EQUALS(17, s->getNumber("foo"));
}
};
@@ -1244,7 +1245,7 @@ public:
s->setObject("val", BSONObj(reinterpret_cast<char*>(bits)).getOwned());
- s->invoke("val[\"a\"];", 0, 0);
+ s->invoke("val[\"a\"];", nullptr, nullptr);
ASSERT_TRUE(std::isnan(s->getNumber("__returnValue")));
}
};
@@ -1255,43 +1256,43 @@ public:
void run() {
unique_ptr<Scope> s((getGlobalScriptEngine()->*scopeFactory)());
- s->invoke("x=5;", 0, 0);
+ s->invoke("x=5;", nullptr, nullptr);
ASSERT_EQUALS(5, s->getNumber("__returnValue"));
- s->invoke("x='test'", 0, 0);
+ s->invoke("x='test'", nullptr, nullptr);
ASSERT_EQUALS("test", s->getString("__returnValue"));
- s->invoke("x='return'", 0, 0);
+ s->invoke("x='return'", nullptr, nullptr);
ASSERT_EQUALS("return", s->getString("__returnValue"));
- s->invoke("return 'return'", 0, 0);
+ s->invoke("return 'return'", nullptr, nullptr);
ASSERT_EQUALS("return", s->getString("__returnValue"));
- s->invoke("x = ' return '", 0, 0);
+ s->invoke("x = ' return '", nullptr, nullptr);
ASSERT_EQUALS(" return ", s->getString("__returnValue"));
- s->invoke("x = \" return \"", 0, 0);
+ s->invoke("x = \" return \"", nullptr, nullptr);
ASSERT_EQUALS(" return ", s->getString("__returnValue"));
- s->invoke("x = \"' return '\"", 0, 0);
+ s->invoke("x = \"' return '\"", nullptr, nullptr);
ASSERT_EQUALS("' return '", s->getString("__returnValue"));
- s->invoke("x = '\" return \"'", 0, 0);
+ s->invoke("x = '\" return \"'", nullptr, nullptr);
ASSERT_EQUALS("\" return \"", s->getString("__returnValue"));
- s->invoke(";return 5", 0, 0);
+ s->invoke(";return 5", nullptr, nullptr);
ASSERT_EQUALS(5, s->getNumber("__returnValue"));
- s->invoke("String('return')", 0, 0);
+ s->invoke("String('return')", nullptr, nullptr);
ASSERT_EQUALS("return", s->getString("__returnValue"));
- s->invoke("String(' return ')", 0, 0);
+ s->invoke("String(' return ')", nullptr, nullptr);
ASSERT_EQUALS(" return ", s->getString("__returnValue"));
- s->invoke("String(\"'return\")", 0, 0);
+ s->invoke("String(\"'return\")", nullptr, nullptr);
ASSERT_EQUALS("'return", s->getString("__returnValue"));
- s->invoke("String('\"return')", 0, 0);
+ s->invoke("String('\"return')", nullptr, nullptr);
ASSERT_EQUALS("\"return", s->getString("__returnValue"));
}
};
@@ -1302,7 +1303,7 @@ public:
static BSONObj callback(const BSONObj& args, void* data) {
auto scope = static_cast<Scope*>(data);
- scope->invoke("x = 10;", 0, 0);
+ scope->invoke("x = 10;", nullptr, nullptr);
return BSONObj();
}
@@ -1311,7 +1312,7 @@ public:
unique_ptr<Scope> s((getGlobalScriptEngine()->*scopeFactory)());
s->injectNative("foo", callback, s.get());
- s->invoke("var x = 1; foo();", 0, 0);
+ s->invoke("var x = 1; foo();", nullptr, nullptr);
ASSERT_EQUALS(s->getNumberInt("x"), 10);
}
};
@@ -1325,7 +1326,7 @@ public:
{
bool threwException = false;
try {
- s->invoke("\"use strict\"; x = 10;", 0, 0);
+ s->invoke("\"use strict\"; x = 10;", nullptr, nullptr);
} catch (...) {
threwException = true;
@@ -1340,7 +1341,7 @@ public:
{
bool threwException = false;
try {
- s->invoke("UUID(1,2,3,4,5);", 0, 0);
+ s->invoke("UUID(1,2,3,4,5);", nullptr, nullptr);
} catch (...) {
threwException = true;
@@ -1368,7 +1369,9 @@ public:
s->injectNative("foo", sidecarThrowingFunc);
ASSERT_THROWS_WITH_CHECK(
- s->invoke("try { foo(); } catch (e) { throw e; } throw new Error(\"bar\");", 0, 0),
+ s->invoke("try { foo(); } catch (e) { throw e; } throw new Error(\"bar\");",
+ nullptr,
+ nullptr),
ExceptionFor<ErrorCodes::ForTestingErrorExtraInfo>,
[](const auto& ex) { ASSERT_EQ(ex->data, 123); });
}
@@ -1423,7 +1426,7 @@ class ConvertShardKeyToHashed {
public:
void check(shared_ptr<Scope> s, const mongo::BSONObj& o) {
s->setObject("o", o, true);
- s->invoke("return convertShardKeyToHashed(o);", 0, 0);
+ s->invoke("return convertShardKeyToHashed(o);", nullptr, nullptr);
const auto scopeShardKey = s->getNumber("__returnValue");
// Wrapping to form a proper element
@@ -1438,7 +1441,7 @@ public:
void checkWithSeed(shared_ptr<Scope> s, const mongo::BSONObj& o, int seed) {
s->setObject("o", o, true);
s->setNumber("seed", seed);
- s->invoke("return convertShardKeyToHashed(o, seed);", 0, 0);
+ s->invoke("return convertShardKeyToHashed(o, seed);", nullptr, nullptr);
const auto scopeShardKey = s->getNumber("__returnValue");
// Wrapping to form a proper element
@@ -1450,19 +1453,19 @@ public:
}
void checkNoArgs(shared_ptr<Scope> s) {
- s->invoke("return convertShardKeyToHashed();", 0, 0);
+ s->invoke("return convertShardKeyToHashed();", nullptr, nullptr);
}
void checkWithExtraArg(shared_ptr<Scope> s, const mongo::BSONObj& o, int seed) {
s->setObject("o", o, true);
s->setNumber("seed", seed);
- s->invoke("return convertShardKeyToHashed(o, seed, 1);", 0, 0);
+ s->invoke("return convertShardKeyToHashed(o, seed, 1);", nullptr, nullptr);
}
void checkWithBadSeed(shared_ptr<Scope> s, const mongo::BSONObj& o) {
s->setObject("o", o, true);
s->setString("seed", "sunflower");
- s->invoke("return convertShardKeyToHashed(o, seed);", 0, 0);
+ s->invoke("return convertShardKeyToHashed(o, seed);", nullptr, nullptr);
}
void run() {
@@ -1520,12 +1523,12 @@ public:
"let f = async function() { return 28; };"
"f().then(function(y){ x = y; });"
"return x;",
- 0,
- 0);
+ nullptr,
+ nullptr);
ASSERT(0 == scope->getNumber("__returnValue"));
/* When we return x the second time the value has been updated
* by the async function */
- scope->invoke("return x;", 0, 0);
+ scope->invoke("return x;", nullptr, nullptr);
ASSERT(28 == scope->getNumber("__returnValue"));
}
};