1 | var should = require('./init.js');
|
2 | var assert = require('assert');
|
3 | var Schema = require('jugglingdb').Schema;
|
4 |
|
5 | var db, settings, adapter, DummyModel, odb;
|
6 |
|
7 | describe('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 |
|
53 | describe('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 |
|
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 |
|
90 | function 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 |
|
131 | function 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 |
|
139 | var query = function (sql, cb) {
|
140 | odb.adapter.query(sql, cb);
|
141 | };
|
142 |
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|