summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests/jsontests.cpp
diff options
context:
space:
mode:
authorShaun Verch <shaun.verch@10gen.com>2013-12-17 14:27:30 -0500
committerShaun Verch <shaun.verch@10gen.com>2013-12-19 12:01:56 -0500
commit597251304e2633e89d260a8c55a0ab11e0d0f6b2 (patch)
treed07a6653d31cdc00f02bfae380140140762bcd41 /src/mongo/dbtests/jsontests.cpp
parent9a34ccdde43942a4095c7a5b7285096993ed4860 (diff)
downloadmongo-597251304e2633e89d260a8c55a0ab11e0d0f6b2.tar.gz
SERVER-11813 Output date as string in jsonString strict mode
Diffstat (limited to 'src/mongo/dbtests/jsontests.cpp')
-rw-r--r--src/mongo/dbtests/jsontests.cpp69
1 files changed, 63 insertions, 6 deletions
diff --git a/src/mongo/dbtests/jsontests.cpp b/src/mongo/dbtests/jsontests.cpp
index 5f35de8092f..a1d9f077c43 100644
--- a/src/mongo/dbtests/jsontests.cpp
+++ b/src/mongo/dbtests/jsontests.cpp
@@ -334,16 +334,68 @@ namespace JsonTests {
}
};
+#ifdef _WIN32
+ char tzEnvString[] = "TZ=EST+5EDT";
+#else
+ char tzEnvString[] = "TZ=America/New_York";
+#endif
+
class Date {
public:
+ Date() {
+ char *_oldTimezonePtr = getenv("TZ");
+ _oldTimezone = std::string(_oldTimezonePtr ? _oldTimezonePtr : "");
+ if (-1 == putenv(tzEnvString)) {
+ FAIL(errnoWithDescription());
+ }
+ tzset();
+ }
+ ~Date() {
+ if (!_oldTimezone.empty()) {
+#ifdef _WIN32
+ errno_t ret = _putenv_s("TZ", _oldTimezone.c_str());
+ if (0 != ret) {
+ StringBuilder sb;
+ sb << "Error setting TZ environment variable to: " << _oldTimezone
+ << ". Error code: " << ret;
+ FAIL(sb.str());
+ }
+#else
+ if (-1 == setenv("TZ", _oldTimezone.c_str(), 1)) {
+ FAIL(errnoWithDescription());
+ }
+#endif
+ }
+ else {
+#ifdef _WIN32
+ errno_t ret = _putenv_s("TZ", "");
+ if (0 != ret) {
+ StringBuilder sb;
+ sb << "Error unsetting TZ environment variable. Error code: " << ret;
+ FAIL(sb.str());
+ }
+#else
+ if (-1 == unsetenv("TZ")) {
+ FAIL(errnoWithDescription());
+ }
+#endif
+ }
+ tzset();
+ }
+
void run() {
BSONObjBuilder b;
b.appendDate( "a", 0 );
BSONObj built = b.done();
- ASSERT_EQUALS( "{ \"a\" : { \"$date\" : 0 } }", built.jsonString( Strict ) );
+ ASSERT_EQUALS( "{ \"a\" : { \"$date\" : \"1969-12-31T19:00:00.000-0500\" } }",
+ built.jsonString( Strict ) );
ASSERT_EQUALS( "{ \"a\" : Date( 0 ) }", built.jsonString( TenGen ) );
ASSERT_EQUALS( "{ \"a\" : Date( 0 ) }", built.jsonString( JS ) );
}
+
+ private:
+ std::string _oldTimezone;
+
};
class DateNegative {
@@ -352,7 +404,8 @@ namespace JsonTests {
BSONObjBuilder b;
b.appendDate( "a", -1 );
BSONObj built = b.done();
- ASSERT_EQUALS( "{ \"a\" : { \"$date\" : -1 } }", built.jsonString( Strict ) );
+ ASSERT_EQUALS( "{ \"a\" : { \"$date\" : { \"$numberLong\" : \"-1\" } } }",
+ built.jsonString( Strict ) );
ASSERT_EQUALS( "{ \"a\" : Date( -1 ) }", built.jsonString( TenGen ) );
ASSERT_EQUALS( "{ \"a\" : Date( -1 ) }", built.jsonString( JS ) );
}
@@ -2626,7 +2679,9 @@ namespace JsonTests {
add< FromJsonTests::BinDataEmptyType >();
add< FromJsonTests::BinDataNoType >();
add< FromJsonTests::BinDataInvalidType >();
- add< FromJsonTests::Date >();
+ // TODO: The JSON parser doesn't yet support parsing our strict JSON format for dates.
+ // See SERVER-11814.
+ /*add< FromJsonTests::Date >();
add< FromJsonTests::DateNegZero >();
add< FromJsonTests::DateNonzero >();
add< FromJsonTests::DateStrictTooLong >();
@@ -2643,7 +2698,7 @@ namespace JsonTests {
add< FromJsonTests::DateStrictMaxUnsigned >();
add< FromJsonTests::DateMaxUnsigned >();
add< FromJsonTests::DateStrictNegative >();
- add< FromJsonTests::DateNegative >();
+ add< FromJsonTests::DateNegative >();*/
add< FromJsonTests::NumberLongTest >();
add< FromJsonTests::NumberLongMin >();
add< FromJsonTests::NumberIntTest >();
@@ -2746,9 +2801,11 @@ namespace JsonTests {
add< FromJsonTests::NumericLimitsBad >();
add< FromJsonTests::NumericLimitsBad1 >();
add< FromJsonTests::NegativeNumericTypes >();
- add< FromJsonTests::EmbeddedDatesFormat1 >();
+ // TODO: The JSON parser doesn't yet support parsing our strict JSON format for dates.
+ // See SERVER-11814.
+ /*add< FromJsonTests::EmbeddedDatesFormat1 >();
add< FromJsonTests::EmbeddedDatesFormat2 >();
- add< FromJsonTests::EmbeddedDatesFormat3 >();
+ add< FromJsonTests::EmbeddedDatesFormat3 >();*/
add< FromJsonTests::NullString >();
add< FromJsonTests::NullFieldUnquoted >();
}