Skip to content

Commit 0a47eed

Browse files
committed
Merge branch 'master' into pr/jeroen-plug/274
2 parents 61932b1 + 9bd61b9 commit 0a47eed

File tree

23 files changed

+2081
-98
lines changed

23 files changed

+2081
-98
lines changed

.eslintrc.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,4 @@ module.exports = {
4848
jasmine: true,
4949
jest: true,
5050
},
51-
globals: {
52-
Class: true,
53-
Iterator: true,
54-
},
5551
};

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,33 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
# [6.4.0](https://github.com/nodkz/mongodb-memory-server/compare/v6.3.3...v6.4.0) (2020-03-19)
7+
8+
9+
### Bug Fixes
10+
11+
* set timeout per test ([b3f9a10](https://github.com/nodkz/mongodb-memory-server/commit/b3f9a10))
12+
13+
14+
### Features
15+
16+
* add try/catch for reinit of repl set ([ab7f5f6](https://github.com/nodkz/mongodb-memory-server/commit/ab7f5f6))
17+
18+
19+
20+
21+
22+
## [6.3.3](https://github.com/nodkz/mongodb-memory-server/compare/v6.3.2...v6.3.3) (2020-03-11)
23+
24+
25+
### Bug Fixes
26+
27+
* update Dependencies ([#281](https://github.com/nodkz/mongodb-memory-server/issues/281)) ([054cbe5](https://github.com/nodkz/mongodb-memory-server/commit/054cbe5)), closes [#280](https://github.com/nodkz/mongodb-memory-server/issues/280)
28+
29+
30+
31+
32+
633
## [6.3.2](https://github.com/nodkz/mongodb-memory-server/compare/v6.3.1...v6.3.2) (2020-03-03)
734

835

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ const opts = { useMongoClient: true }; // remove this option if you use mongoose
396396
before(async () => {
397397
mongoServer = new MongoMemoryServer();
398398
const mongoUri = await mongoServer.getUri();
399-
await mongoose.connect(mongouri, opts);
399+
await mongoose.connect(mongoUri, opts);
400400
});
401401

402402
after(async () => {

lerna.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "6.3.2",
2+
"version": "6.4.0",
33
"command": {
44
"publish": {
55
"allowBranch": [

packages/mongodb-memory-server-core/CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,33 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
# [6.4.0](https://github.com/nodkz/mongodb-memory-server/compare/v6.3.3...v6.4.0) (2020-03-19)
7+
8+
9+
### Bug Fixes
10+
11+
* set timeout per test ([b3f9a10](https://github.com/nodkz/mongodb-memory-server/commit/b3f9a10))
12+
13+
14+
### Features
15+
16+
* add try/catch for reinit of repl set ([ab7f5f6](https://github.com/nodkz/mongodb-memory-server/commit/ab7f5f6))
17+
18+
19+
20+
21+
22+
## [6.3.3](https://github.com/nodkz/mongodb-memory-server/compare/v6.3.2...v6.3.3) (2020-03-11)
23+
24+
25+
### Bug Fixes
26+
27+
* update Dependencies ([#281](https://github.com/nodkz/mongodb-memory-server/issues/281)) ([054cbe5](https://github.com/nodkz/mongodb-memory-server/commit/054cbe5)), closes [#280](https://github.com/nodkz/mongodb-memory-server/issues/280)
28+
29+
30+
31+
32+
633
## [6.3.2](https://github.com/nodkz/mongodb-memory-server/compare/v6.3.1...v6.3.2) (2020-03-03)
734

835

packages/mongodb-memory-server-core/package.json

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mongodb-memory-server-core",
3-
"version": "6.3.2",
3+
"version": "6.4.0",
44
"description": "MongoDB Server for testing (core package, without autodownload). The server will allow you to connect your favourite ODM or client library to the MongoDB Server and run parallel integration tests isolated from each other.",
55
"main": "lib/index",
66
"types": "lib/index.d.ts",
@@ -31,40 +31,52 @@
3131
},
3232
"homepage": "https://github.com/nodkz/mongodb-memory-server",
3333
"devDependencies": {
34+
"@types/jest": "25.1.4",
35+
"@types/mongodb": "3.5.2",
3436
"@types/tar-stream": "^2.1.0",
3537
"@types/yauzl": "^2.9.1",
36-
"rimraf": "^3.0.0"
38+
"@typescript-eslint/eslint-plugin": "2.23.0",
39+
"@typescript-eslint/parser": "2.23.0",
40+
"cross-env": "^7.0.2",
41+
"eslint": "6.8.0",
42+
"eslint-config-prettier": "6.10.0",
43+
"jest": "^25.1.0",
44+
"lerna": "3.20.2",
45+
"mongodb": "3.5.4",
46+
"rimraf": "^3.0.2",
47+
"ts-jest": "^25.2.1",
48+
"typescript": "^3.8.3"
3749
},
3850
"dependencies": {
3951
"@types/cross-spawn": "^6.0.1",
4052
"@types/debug": "^4.1.5",
4153
"@types/dedent": "^0.7.0",
42-
"@types/find-cache-dir": "^2.0.0",
43-
"@types/find-package-json": "^1.1.0",
54+
"@types/find-cache-dir": "^3.2.0",
55+
"@types/find-package-json": "^1.1.1",
4456
"@types/get-port": "^4.0.1",
4557
"@types/lockfile": "^1.0.1",
46-
"@types/md5-file": "^4.0.0",
47-
"@types/mkdirp": "^0.5.2",
58+
"@types/md5-file": "^4.0.1",
59+
"@types/mkdirp": "^1.0.0",
4860
"@types/tmp": "0.1.0",
49-
"@types/uuid": "3.4.6",
61+
"@types/uuid": "7.0.0",
5062
"camelcase": "^5.3.1",
5163
"cross-spawn": "^7.0.1",
5264
"debug": "^4.1.1",
5365
"dedent": "^0.7.0",
54-
"find-cache-dir": "3.2.0",
66+
"find-cache-dir": "3.3.1",
5567
"find-package-json": "^1.2.0",
56-
"get-port": "5.0.0",
57-
"https-proxy-agent": "4.0.0",
68+
"get-port": "5.1.1",
69+
"https-proxy-agent": "5.0.0",
5870
"lockfile": "^1.0.4",
5971
"md5-file": "^4.0.0",
60-
"mkdirp": "^0.5.1",
72+
"mkdirp": "^1.0.3",
6173
"tar-stream": "^2.1.1",
62-
"tmp": "^0.1.0",
63-
"uuid": "^3.3.3",
64-
"yauzl": "^2.10.0"
74+
"uuid": "^7.0.2",
75+
"yauzl": "^2.10.0",
76+
"tmp": "^0.1.0"
6577
},
6678
"optionalDependencies": {
67-
"mongodb": "^3.2.7"
79+
"mongodb": "^3.5.4"
6880
},
6981
"scripts": {
7082
"cleanup": "rimraf tmp lib coverage node_modules/.cache",

packages/mongodb-memory-server-core/src/MongoMemoryReplSet.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
StorageEngineT,
1212
} from './types';
1313
import debug from 'debug';
14+
import { MongoError } from 'mongodb';
1415

1516
const log = debug('MongoMS:MongoMemoryReplSet');
1617

@@ -259,7 +260,21 @@ export default class MongoMemoryReplSet extends EventEmitter {
259260
...(this.opts.replSet.configSettings || {}),
260261
},
261262
};
262-
await admin.command({ replSetInitiate: rsConfig });
263+
try {
264+
await admin.command({ replSetInitiate: rsConfig });
265+
} catch (e) {
266+
if (e instanceof MongoError && e.errmsg == 'already initialized') {
267+
log(`${e.errmsg}: trying to set old config`);
268+
const { config: oldConfig } = await admin.command({ replSetGetConfig: 1 });
269+
log('got old config:\n', oldConfig);
270+
await admin.command({
271+
replSetReconfig: oldConfig,
272+
force: true,
273+
});
274+
} else {
275+
throw e;
276+
}
277+
}
263278
log('Waiting for replica set to have a PRIMARY member.');
264279
await this._waitForPrimary();
265280
this.emit((this._state = 'running'));

packages/mongodb-memory-server-core/src/MongoMemoryServer.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export default class MongoMemoryServer {
9898
this.runningInstance = this._startUpInstance()
9999
.catch((err) => {
100100
if (err.message === 'Mongod shutting down' || err === 'Mongod shutting down') {
101-
log(`Mongodb does not started. Trying to start on another port one more time...`);
101+
log(`Mongodb did not start. Trying to start on another port one more time...`);
102102
if (this.opts.instance && this.opts.instance.port) {
103103
this.opts.instance.port = null;
104104
}
@@ -136,6 +136,10 @@ export default class MongoMemoryServer {
136136
tmpDir: undefined,
137137
};
138138

139+
if (instOpts.port && instOpts.port != data.port) {
140+
log(`starting with port ${data.port}, since ${instOpts.port} was locked:`, data.port);
141+
}
142+
139143
data.uri = await getUriBase(data.ip, data.port, data.dbName);
140144
if (!data.dbPath) {
141145
data.tmpDir = tmp.dirSync({
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import MongoMemoryReplSet from '../MongoMemoryReplSet';
2+
import * as tmp from 'tmp';
3+
4+
let tmpDir: tmp.DirResult;
5+
beforeEach(() => {
6+
tmpDir = tmp.dirSync({ prefix: 'reuse-mongo-mem-', unsafeCleanup: true });
7+
});
8+
9+
afterEach(() => {
10+
tmpDir.removeCallback();
11+
});
12+
13+
const sleep = (ms: number) => {
14+
return new Promise((resolve) => setTimeout(resolve, ms));
15+
};
16+
17+
describe('single-member replica set', () => {
18+
it('should start multiple times', async () => {
19+
const opts: any = {
20+
replSet: {
21+
storageEngine: 'wiredTiger',
22+
},
23+
instanceOpts: [
24+
{
25+
port: 27017,
26+
dbPath: tmpDir.name,
27+
},
28+
],
29+
};
30+
31+
const replSetBefore = new MongoMemoryReplSet(opts);
32+
await replSetBefore.waitUntilRunning();
33+
await replSetBefore.stop();
34+
/**
35+
* get-port has a portlocking-feature that keeps ports locked for
36+
* "a minimum of 15 seconds and a maximum of 30 seconds before being released again"
37+
* https://github.com/sindresorhus/get-port#beware
38+
*/
39+
await sleep(30000);
40+
41+
const replSetAfter = new MongoMemoryReplSet(opts);
42+
await replSetAfter.waitUntilRunning();
43+
await replSetAfter.stop();
44+
}, 600000);
45+
});

packages/mongodb-memory-server-core/src/util/MongoBinary.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,7 @@ export default class MongoBinary {
5454
static async getDownloadPath(options: any): Promise<string> {
5555
const { downloadDir, platform, arch, version } = options;
5656
// create downloadDir if not exists
57-
await new Promise((resolve, reject) => {
58-
mkdirp(downloadDir, (err: any) => {
59-
if (err) reject(err);
60-
else resolve();
61-
});
62-
});
57+
await mkdirp(downloadDir);
6358

6459
const lockfile = path.resolve(downloadDir, `${version}.lock`);
6560
// wait lock

0 commit comments

Comments
 (0)