|
1 | 1 | 'use strict';
|
| 2 | + |
| 3 | +var co = require('co'); |
2 | 4 | var f = require('util').format;
|
3 | 5 | var test = require('./shared').assert;
|
4 | 6 | var setupDatabase = require('./shared').setupDatabase;
|
@@ -168,4 +170,58 @@ describe('Sharding (Connection)', function() {
|
168 | 170 | );
|
169 | 171 | }
|
170 | 172 | });
|
| 173 | + |
| 174 | + /** |
| 175 | + * @ignore |
| 176 | + */ |
| 177 | + it('Should emit close event when mongos is stopped', { |
| 178 | + metadata: { requires: { topology: 'sharded' } }, |
| 179 | + |
| 180 | + // The actual test we wish to run |
| 181 | + test: function(done) { |
| 182 | + var configuration = this.configuration; |
| 183 | + var mongo = configuration.require; |
| 184 | + var MongoClient = mongo.MongoClient; |
| 185 | + var manager = configuration.manager; |
| 186 | + var mongos = manager.proxies; |
| 187 | + |
| 188 | + co(function*() { |
| 189 | + var url = f( |
| 190 | + 'mongodb://%s:%s,%s:%s/sharded_test_db', |
| 191 | + configuration.host, |
| 192 | + configuration.port, |
| 193 | + configuration.host, |
| 194 | + configuration.port + 1 |
| 195 | + ); |
| 196 | + |
| 197 | + var client = yield MongoClient.connect(url); |
| 198 | + |
| 199 | + var doc = { answer: 42 }; |
| 200 | + var db = client.db('Test'); |
| 201 | + var coll = db.collection('docs'); |
| 202 | + yield coll.insertOne(doc); |
| 203 | + |
| 204 | + doc = yield coll.findOne({ answer: 42 }); |
| 205 | + test.ok(!!doc); |
| 206 | + |
| 207 | + var waitForClose = new Promise(resolve => db.once('close', resolve)); |
| 208 | + |
| 209 | + yield mongos.map(p => p.stop()); |
| 210 | + yield waitForClose; |
| 211 | + yield mongos.map(p => p.start()); |
| 212 | + |
| 213 | + doc = yield coll.findOne({ answer: 42 }); |
| 214 | + test.ok(!!doc); |
| 215 | + |
| 216 | + waitForClose = new Promise(resolve => db.once('close', resolve)); |
| 217 | + |
| 218 | + yield mongos.map(p => p.stop()); |
| 219 | + yield waitForClose; |
| 220 | + yield mongos.map(p => p.start()); |
| 221 | + |
| 222 | + doc = yield coll.findOne({ answer: 42 }); |
| 223 | + test.ok(!!doc); |
| 224 | + }).then(() => done(), done); |
| 225 | + } |
| 226 | + }); |
171 | 227 | });
|
0 commit comments