diff options
Diffstat (limited to 'src/mongo/dbtests/jstests.cpp')
-rw-r--r-- | src/mongo/dbtests/jstests.cpp | 171 |
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")); } }; |