UNPKG

4.73 kBJavaScriptView Raw
1var should = require('./init.js');
2var assert = require('assert');
3var Schema = require('jugglingdb').Schema;
4
5var db, settings, adapter, DummyModel, odb;
6
7describe('migrations', function() {
8
9 before(function() {
10 require('./init.js');
11
12 odb = getSchema({collation: 'utf8mb4_general_ci'});
13 db = odb;
14 });
15
16
17 it('should use utf8mb4 charset', function(done) {
18
19 var test_set = /utf8mb4/;
20 var test_collo = /utf8mb4_general_ci/;
21 var test_set_str = 'utf8mb4';
22 var test_set_collo = 'utf8mb4_general_ci';
23 charsetTest(test_set, test_collo, test_set_str, test_set_collo, done);
24
25 });
26
27 it('should disconnect first db', function(done) {
28 db.client.end(function(){
29 odb = getSchema();
30 done()
31 });
32 });
33
34 it('should use latin1 charset', function(done) {
35
36 var test_set = /latin1/;
37 var test_collo = /latin1_general_ci/;
38 var test_set_str = 'latin1';
39 var test_set_collo = 'latin1_general_ci';
40 charsetTest(test_set, test_collo, test_set_str, test_set_collo, done);
41
42 });
43
44 it('should drop db and disconnect all', function(done) {
45 db.adapter.query('DROP DATABASE IF EXISTS ' + db.settings.database, function(err) {
46 db.client.end(function(){
47 done();
48 });
49 });
50 });
51});
52
53describe('dropped connections', function() {
54
55 before(function() {
56 require('./init.js');
57 db = getSchema();
58 });
59
60 it('should reconnect', function(done) {
61 db.client.on('error', function(err) {
62 if(err.code == 'PROTOCOL_CONNECTION_LOST') {
63 db.connect(function() {
64 done();
65 });
66 return;
67 }
68 throw err;
69 });
70 // Simulate a disconnect in socket
71 db.client._socket.on('timeout', function() {
72 db.client._socket.emit('error', {
73 message: 'Test error',
74 stack: '',
75 code: 'PROTOCOL_CONNECTION_LOST'
76 });
77 });
78 db.client._socket.setTimeout(100);
79 });
80
81 it('should use the new connection', function(done) {
82 db.adapter.query('SHOW TABLES', function(err) {
83 should.not.exist(err);
84 done();
85 });
86 });
87});
88
89
90function charsetTest(test_set, test_collo, test_set_str, test_set_collo, done){
91
92 query('DROP DATABASE IF EXISTS ' + odb.settings.database, function(err) {
93 assert.ok(!err);
94 odb.client.end(function(){
95
96 db = getSchema({collation: test_set_collo});
97 DummyModel = db.define('DummyModel', {string: String});
98 db.automigrate(function(){
99 var q = 'SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ' + db.client.escape(db.settings.database) + ' LIMIT 1';
100 db.client.query(q, function(err, r) {
101 assert.ok(!err);
102 assert.ok(r[0].DEFAULT_COLLATION_NAME.match(test_collo));
103 db.client.query('SHOW VARIABLES LIKE "character_set%"', function(err, r){
104 assert.ok(!err);
105 var hit_all = 0;
106 for (var result in r) {
107 hit_all += matchResult(r[result], 'character_set_connection', test_set);
108 hit_all += matchResult(r[result], 'character_set_database', test_set);
109 hit_all += matchResult(r[result], 'character_set_results', test_set);
110 hit_all += matchResult(r[result], 'character_set_client', test_set);
111 }
112 assert.equal(hit_all, 4);
113 });
114 db.client.query('SHOW VARIABLES LIKE "collation%"', function(err, r){
115 assert.ok(!err);
116 var hit_all = 0;
117 for (var result in r) {
118 hit_all += matchResult(r[result], 'collation_connection', test_set);
119 hit_all += matchResult(r[result], 'collation_database', test_set);
120 }
121 assert.equal(hit_all, 2);
122 done();
123 });
124 });
125 });
126 });
127 });
128
129}
130
131function matchResult(result, variable_name, match) {
132 if(result.Variable_name == variable_name){
133 assert.ok(result.Value.match(match));
134 return 1;
135 }
136 return 0;
137}
138
139var query = function (sql, cb) {
140 odb.adapter.query(sql, cb);
141};
142
143
144
145
146
147