@@ -1033,74 +1033,75 @@ exports['Fail command due to no support for collation'] = {
1033
1033
}
1034
1034
}
1035
1035
1036
- // exports['Successfully pass through collation to bulkWrite command'] = {
1037
- // metadata: { requires: { generators: true, topology: "single" } },
1038
- //
1039
- // test: function(configuration, test) {
1040
- // var MongoClient = configuration.require.MongoClient,
1041
- // co = require('co'),
1042
- // mockupdb = require('../mock');
1043
- //
1044
- // // Contain mock server
1045
- // var singleServer = null;
1046
- // var running = true;
1047
- //
1048
- // // Default message fields
1049
- // var defaultFields = {
1050
- // "ismaster" : true, "maxBsonObjectSize" : 16777216,
1051
- // "maxMessageSizeBytes" : 48000000, "maxWriteBatchSize" : 1000,
1052
- // "localTime" : new Date(), "maxWireVersion" : 5, "minWireVersion" : 0, "ok" : 1
1053
- // }
1054
- //
1055
- // // Primary server states
1056
- // var primary = [extend(defaultFields, {})];
1057
- //
1058
- // // Boot the mock
1059
- // co(function*() {
1060
- // singleServer = yield mockupdb.createServer(32000, 'localhost');
1061
- //
1062
- // // Primary state machine
1063
- // co(function*() {
1064
- // while(running) {
1065
- // var request = yield singleServer.receive();
1066
- // var doc = request.document;
1067
- // console.log("========================== cmd")
1068
- // console.dir(doc)
1069
- //
1070
- // if(doc.ismaster) {
1071
- // request.reply(primary[0]);
1072
- // } else if(doc.update) {
1073
- // commandResult = doc;
1074
- // request.reply({ok:1});
1075
- // }
1076
- // }
1077
- // }).catch(function(err) {
1078
- // console.log(err.stack);
1079
- // });
1080
- //
1081
- // var commandResult = null;
1082
- //
1083
- // // Connect to the mocks
1084
- // MongoClient.connect('mongodb://localhost:32000/test', {collation: { caseLevel: true }}, function(err, db) {
1085
- // test.equal(null, err);
1086
- //
1087
- // console.log("!!!!!!!!!!!!!!!!!!! 0")
1088
- // db.collection('test').bulkWrite([
1089
- // { updateOne: { q: {a:2}, u: {$set: {a:2}}, upsert:true } }
1090
- // , { deleteOne: { q: {c:1} } }
1091
- // ], {ordered:true}, function(err, r) {
1092
- // console.log("!!!!!!!!!!!!!!!!!!! 1")
1093
- // console.dir(err)
1094
- // singleServer.destroy();
1095
- // running = false;
1096
- //
1097
- // db.close();
1098
- // test.done();
1099
- // });
1100
- // });
1101
- // });
1102
- // }
1103
- // }
1036
+ exports [ 'Successfully pass through collation to bulkWrite command' ] = {
1037
+ metadata : { requires : { generators : true , topology : "single" } } ,
1038
+
1039
+ test : function ( configuration , test ) {
1040
+ var MongoClient = configuration . require . MongoClient ,
1041
+ co = require ( 'co' ) ,
1042
+ mockupdb = require ( '../mock' ) ;
1043
+
1044
+ // Contain mock server
1045
+ var singleServer = null ;
1046
+ var running = true ;
1047
+
1048
+ // Default message fields
1049
+ var defaultFields = {
1050
+ "ismaster" : true , "maxBsonObjectSize" : 16777216 ,
1051
+ "maxMessageSizeBytes" : 48000000 , "maxWriteBatchSize" : 1000 ,
1052
+ "localTime" : new Date ( ) , "maxWireVersion" : 5 , "minWireVersion" : 0 , "ok" : 1
1053
+ }
1054
+
1055
+ // Primary server states
1056
+ var primary = [ extend ( defaultFields , { } ) ] ;
1057
+
1058
+ // Boot the mock
1059
+ co ( function * ( ) {
1060
+ singleServer = yield mockupdb . createServer ( 32000 , 'localhost' ) ;
1061
+
1062
+ // Primary state machine
1063
+ co ( function * ( ) {
1064
+ while ( running ) {
1065
+ var request = yield singleServer . receive ( ) ;
1066
+ var doc = request . document ;
1067
+ // console.log("========================== cmd")
1068
+ // console.dir(doc)
1069
+
1070
+ if ( doc . ismaster ) {
1071
+ request . reply ( primary [ 0 ] ) ;
1072
+ } else if ( doc . update ) {
1073
+ commandResult = doc ;
1074
+ request . reply ( { ok :1 } ) ;
1075
+ } else if ( doc . delete ) {
1076
+ request . reply ( { ok :1 } ) ;
1077
+ }
1078
+ }
1079
+ } ) . catch ( function ( err ) {
1080
+ console . log ( err . stack ) ;
1081
+ } ) ;
1082
+
1083
+ var commandResult = null ;
1084
+
1085
+ // Connect to the mocks
1086
+ MongoClient . connect ( 'mongodb://localhost:32000/test' , function ( err , db ) {
1087
+ test . equal ( null , err ) ;
1088
+
1089
+ db . collection ( 'test' ) . bulkWrite ( [
1090
+ { updateOne : { q : { a :2 } , u : { $set : { a :2 } } , upsert :true , collation : { caseLevel : true } } }
1091
+ , { deleteOne : { q : { c :1 } } }
1092
+ ] , { ordered :true } , function ( err , r ) {
1093
+ test . ok ( commandResult ) ;
1094
+ test . deepEqual ( { caseLevel : true } , commandResult . updates [ 0 ] . collation ) ;
1095
+ singleServer . destroy ( ) ;
1096
+ running = false ;
1097
+
1098
+ db . close ( ) ;
1099
+ test . done ( ) ;
1100
+ } ) ;
1101
+ } ) ;
1102
+ } ) ;
1103
+ }
1104
+ }
1104
1105
1105
1106
exports [ 'Successfully fail bulkWrite due to unsupported collation' ] = {
1106
1107
metadata : { requires : { generators : true , topology : "single" } } ,
@@ -1480,3 +1481,72 @@ exports['Fail to create indexs with collation due to no capabilities'] = {
1480
1481
} ) ;
1481
1482
}
1482
1483
}
1484
+
1485
+ /******************************************************************************
1486
+ .___ __ __ .__
1487
+ | | _____/ |_ ____ ________________ _/ |_|__| ____ ____
1488
+ | |/ \ __\/ __ \ / ___\_ __ \__ \\ __\ |/ _ \ / \
1489
+ | | | \ | \ ___// /_/ > | \// __ \| | | ( <_> ) | \
1490
+ |___|___| /__| \___ >___ /|__| (____ /__| |__|\____/|___| /
1491
+ \/ \/_____/ \/ \/
1492
+ ******************************************************************************/
1493
+ exports [ 'Should correctly create index with collation' ] = {
1494
+ metadata : { requires : { topology : "single" , mongodb : ">=3.3.12" } } ,
1495
+
1496
+ test : function ( configuration , test ) {
1497
+ var MongoClient = configuration . require . MongoClient ,
1498
+ co = require ( 'co' ) ;
1499
+
1500
+ // Connect to the mocks
1501
+ MongoClient . connect ( configuration . url ( ) , function ( err , db ) {
1502
+ test . equal ( null , err ) ;
1503
+
1504
+ var col = db . collection ( 'collation_test' ) ;
1505
+ // Create collation index
1506
+ col . createIndexes ( [ { key : { a :1 } , collation : { locale : 'nn' } , name : 'collation_test' } ] , function ( err , r ) {
1507
+ test . equal ( null , err ) ;
1508
+
1509
+ col . listIndexes ( ) . toArray ( function ( err , r ) {
1510
+ var indexes = r . filter ( function ( i ) {
1511
+ return i . name == 'collation_test' ;
1512
+ } )
1513
+
1514
+ test . equal ( 1 , indexes . length ) ;
1515
+ test . ok ( indexes [ 0 ] . collation ) ;
1516
+
1517
+ db . close ( ) ;
1518
+ test . done ( ) ;
1519
+ } ) ;
1520
+ } ) ;
1521
+ } ) ;
1522
+ }
1523
+ }
1524
+
1525
+ exports [ 'Should correctly create collection with collation' ] = {
1526
+ metadata : { requires : { topology : "single" , mongodb : ">=3.3.12" } } ,
1527
+
1528
+ test : function ( configuration , test ) {
1529
+ var MongoClient = configuration . require . MongoClient ,
1530
+ co = require ( 'co' ) ;
1531
+
1532
+ // Connect to the mocks
1533
+ MongoClient . connect ( configuration . url ( ) , function ( err , db ) {
1534
+ test . equal ( null , err ) ;
1535
+
1536
+ // Simple findAndModify command returning the new document
1537
+ db . createCollection ( 'collation_test2' , { collation : { locale : 'nn' } } , function ( err , results ) {
1538
+ test . equal ( null , err ) ;
1539
+
1540
+ db . listCollections ( { name : 'collation_test2' } ) . toArray ( function ( err , collections ) {
1541
+ test . equal ( null , err ) ;
1542
+ test . equal ( 1 , collections . length ) ;
1543
+ test . equal ( 'collation_test2' , collections [ 0 ] . name ) ;
1544
+ test . ok ( collections [ 0 ] . options . collation ) ;
1545
+
1546
+ db . close ( ) ;
1547
+ test . done ( ) ;
1548
+ } ) ;
1549
+ } ) ;
1550
+ } ) ;
1551
+ }
1552
+ }
0 commit comments