UNPKG

3.54 kBJavaScriptView Raw
1'use strict';
2
3var path = require('path');
4var basename = path.basename(__filename, '.js')
5var debug = require('debug')('castor:' + basename)
6var assert = require('assert');
7var process = require('process');
8var request = require('supertest');
9var starter = require('../starter.js');
10
11/**
12 * Test https://github.com/castorjs/castor-core/issues/21
13 *
14 * This bug was due the presence of a connectionURI within
15 * castor.config.js
16 *
17 * To make app1 should return the number of films in data fail,
18 * create a test/castor.config.js containing:
19 *
20 * module.exports = {
21 * connectionURI: 'mongodb://localhost:27017/bug21'
22 * };
23 *
24 */
25
26
27/**
28 * query /-/v3/status.json until the initial synchronisation is done
29 *
30 * @param {Object} server server to query
31 * @param {Function} cb Callback to call (err)
32 */
33var untilSync = function untilSync (server, cb) {
34 // delay between two queries, in ms
35 var delay = 1000;
36
37 request(server)
38 .get('/-/v3/status.json')
39 .end(function(err, res) {
40 if (err) { cb(err); }
41
42 var status = JSON.parse(res.res.text);
43 if (status.hotfolder.first.syncOver) {
44 cb();
45 }
46 else {
47 setTimeout(untilSync, delay, server, cb)
48 }
49 });
50};
51
52
53// Reproduce issue #21: castor 3.12 side by side applications use the same database
54describe('Side by side', function () {
55
56 var server1 = null;
57 var server2 = null;
58
59 before(function(done) {
60 // Synchronisation may take time - you may increase the value (ms)
61 this.timeout(10000);
62
63 // Launch data
64 process.chdir(__dirname);
65
66 starter(function(config, start) {
67 config.set('dataPath', path.join(__dirname, 'data'));
68 var routes = config.get('routes');
69 routes.push('status.js');
70 config.set('routes', routes);
71 // Reduce the heartrate to be ready quicker (in milliseconds)
72 config.set('heartrate',100);
73
74 start(function(err, serv) {
75 if (err) { return done(err); }
76 server1 = serv;
77 debug('server1',server1._connectionKey);
78
79 untilSync(server1, function (err) {
80
81 // Launch data 2
82 starter(function(config, start) {
83 config.set('dataPath', path.join(__dirname, 'data2'));
84
85 start(function(err, serv) {
86 // Because some module removes console.log
87 console.log = console.info;
88 if (err) { return done(err); }
89 server2 = serv;
90 debug('server2',server2._connectionKey);
91 untilSync(server2, done);
92 });
93 });
94
95 });
96 });
97 })
98
99 });
100
101 //////////////////////////////////
102
103 describe('app1', function () {
104
105 it('should return the number of films in data', function (done) {
106 debug('app1, test');
107 request(server1)
108 .get('/hotfolder/$count')
109 .expect(200)
110 .expect('[{"_id":"_wid","value":29}]', done);
111 debug('app1, fin');
112 });
113
114 });
115
116 describe('app2', function () {
117
118 it('should return the number of films in data2', function (done) {
119 debug('app2, test');
120 request(server2)
121 .get('/hotfolder/$count')
122 .expect(200)
123 .expect('[{"_id":"_wid","value":12}]', done);
124 debug('app2, fin');
125 });
126
127 });
128
129 //////////////////////////////////
130 after(function(done) {
131 server1.close(function(err) {
132 if (err) { return done(err); }
133 debug('server 1 closed');
134 server2.close(function(err) {
135 debug('server 2 closed');
136 done(err);
137 });
138 });
139 });
140
141});