21
21
* DESCRIPTION
22
22
* Test Continuous Query Notification (CQN).
23
23
*
24
- * To keep it simple, this test only run on Linux . Because the database
24
+ * To keep it simple, this test will not run on my macOS . Because the database
25
25
* must be able to connect to the node-oracledb machine for notifications
26
26
* to be received. Typically this means that the machine running node-oracledb
27
27
* needs a fixed IP address.
@@ -41,10 +41,9 @@ describe('185. runCQN.js', function() {
41
41
42
42
let isRunnable = true ;
43
43
let conn , connAsDBA ;
44
- const TABLE = 'nodb_tab_cqn_1' ;
45
44
46
45
before ( async function ( ) {
47
- if ( ( ! dbconfig . test . DBA_PRIVILEGE ) || ( process . platform ! == 'linux ' ) ) {
46
+ if ( ( ! dbconfig . test . DBA_PRIVILEGE ) || ( process . platform == 'darwin ' ) ) {
48
47
isRunnable = false ;
49
48
}
50
49
@@ -71,13 +70,6 @@ describe('185. runCQN.js', function() {
71
70
events : true
72
71
} ) ;
73
72
74
- sql =
75
- `CREATE TABLE ${ TABLE } (
76
- k NUMBER
77
- )` ;
78
- let plsql = testsUtil . sqlCreateTable ( TABLE , sql ) ;
79
- await conn . execute ( plsql ) ;
80
-
81
73
} catch ( err ) {
82
74
should . not . exist ( err ) ;
83
75
}
@@ -90,10 +82,8 @@ describe('185. runCQN.js', function() {
90
82
return ;
91
83
} else {
92
84
try {
93
- let sql = `DROP TABLE ${ TABLE } PURGE` ;
94
- await conn . execute ( sql ) ;
95
85
96
- sql = `REVOKE CHANGE NOTIFICATION FROM ${ dbconfig . user } ` ;
86
+ let sql = `REVOKE CHANGE NOTIFICATION FROM ${ dbconfig . user } ` ;
97
87
await connAsDBA . execute ( sql ) ;
98
88
99
89
await conn . close ( ) ;
@@ -107,6 +97,13 @@ describe('185. runCQN.js', function() {
107
97
it ( '185.1 examples/cqn1.js' , async ( ) => {
108
98
109
99
try {
100
+ const TABLE = 'nodb_tab_cqn_1' ;
101
+ let sql =
102
+ `CREATE TABLE ${ TABLE } (
103
+ k NUMBER
104
+ )` ;
105
+ let plsql = testsUtil . sqlCreateTable ( TABLE , sql ) ;
106
+ await conn . execute ( plsql ) ;
110
107
111
108
const myCallback = async function ( message ) {
112
109
// console.log(message);
@@ -128,19 +125,34 @@ describe('185. runCQN.js', function() {
128
125
129
126
await conn . subscribe ( 'mysub' , options ) ;
130
127
131
- let sql = `INSERT INTO ${ TABLE } VALUES (101)` ;
128
+ sql = `INSERT INTO ${ TABLE } VALUES (101)` ;
132
129
await conn . execute ( sql ) ;
130
+
131
+ plsql = `BEGIN DBMS_SESSION.SLEEP(2); END;` ;
132
+ await conn . execute ( plsql ) ;
133
133
await conn . commit ( ) ;
134
134
135
135
await conn . unsubscribe ( 'mysub' ) ;
136
+
137
+ sql = `DROP TABLE ${ TABLE } PURGE` ;
138
+ await conn . execute ( sql ) ;
136
139
} catch ( err ) {
137
140
should . not . exist ( err ) ;
138
141
}
139
142
140
143
} ) ; // 185.1
141
144
142
- it . skip ( '185.2 SQL Delete operation' , async ( ) => {
145
+ it ( '185.2 SQL Delete operation' , async ( ) => {
143
146
try {
147
+
148
+ const TABLE = 'nodb_tab_cqn_2' ;
149
+ let sql =
150
+ `CREATE TABLE ${ TABLE } (
151
+ k NUMBER
152
+ )` ;
153
+ let plsql = testsUtil . sqlCreateTable ( TABLE , sql ) ;
154
+ await conn . execute ( plsql ) ;
155
+
144
156
const myCallback = async function ( message ) {
145
157
console . log ( message ) ;
146
158
should . strictEqual ( message . type , oracledb . SUBSCR_EVENT_TYPE_QUERY_CHANGE ) ;
@@ -159,26 +171,42 @@ describe('185. runCQN.js', function() {
159
171
} ;
160
172
await conn . subscribe ( 'sub2' , options ) ;
161
173
162
- let sql = `DELETE FROM ${ TABLE } WHERE k > :bv` ;
174
+ sql = `DELETE FROM ${ TABLE } WHERE k > :bv` ;
163
175
await conn . execute ( sql , { bv : 100 } ) ;
176
+
177
+ plsql = `BEGIN DBMS_SESSION.SLEEP(2); END;` ;
178
+ await conn . execute ( plsql ) ;
164
179
await conn . commit ( ) ;
165
180
166
181
await conn . unsubscribe ( 'sub2' ) ;
182
+
183
+ sql = `DROP TABLE ${ TABLE } PURGE` ;
184
+ await conn . execute ( sql ) ;
167
185
} catch ( err ) {
168
186
should . not . exist ( err ) ;
169
187
}
170
188
} ) ; // 185.2
171
189
172
- it . skip ( '185.3 Specify the notification only for INSERT operation' , async ( ) => {
190
+ it ( '185.3 Specify the notification only for INSERT operation' , async ( ) => {
173
191
try {
192
+
193
+ const TABLE = 'nodb_tab_cqn_3' ;
194
+ let sql =
195
+ `CREATE TABLE ${ TABLE } (
196
+ k NUMBER
197
+ )` ;
198
+ let plsql = testsUtil . sqlCreateTable ( TABLE , sql ) ;
199
+ await conn . execute ( plsql ) ;
200
+
174
201
const myCallback = async function ( message ) {
175
202
// console.log(message);
176
203
should . strictEqual ( message . type , oracledb . SUBSCR_EVENT_TYPE_QUERY_CHANGE ) ;
177
204
should . strictEqual ( message . registered , true ) ;
178
205
const table = message . queries [ 0 ] . tables [ 0 ] ;
179
206
const tableName = dbconfig . user . toUpperCase ( ) + '.' + TABLE . toUpperCase ( ) ;
180
207
should . strictEqual ( table . name , tableName ) ;
181
- should . strictEqual ( table . operation , oracledb . CQN_OPCODE_INSERT ) ;
208
+ let expect = oracledb . CQN_OPCODE_INSERT | oracledb . CQN_OPCODE_ALL_ROWS ;
209
+ should . strictEqual ( table . operation , expect ) ;
182
210
} ;
183
211
184
212
const options = {
@@ -191,21 +219,36 @@ describe('185. runCQN.js', function() {
191
219
192
220
await conn . subscribe ( 'sub3' , options ) ;
193
221
194
- let sql = `DELETE FROM ${ TABLE } WHERE k > :bv` ;
222
+ sql = `DELETE FROM ${ TABLE } WHERE k > :bv` ;
195
223
await conn . execute ( sql , { bv : 100 } ) ;
196
224
197
225
sql = `INSERT INTO ${ TABLE } VALUES (103)` ;
198
226
await conn . execute ( sql ) ;
227
+
228
+ plsql = `BEGIN DBMS_SESSION.SLEEP(2); END;` ;
229
+ await conn . execute ( plsql ) ;
199
230
await conn . commit ( ) ;
200
231
201
232
await conn . unsubscribe ( 'sub3' ) ;
233
+
234
+ sql = `DROP TABLE ${ TABLE } PURGE` ;
235
+ await conn . execute ( sql ) ;
202
236
} catch ( err ) {
203
237
should . not . exist ( err ) ;
204
238
}
205
239
} ) ; // 185.3
206
240
207
241
it . skip ( '185.4 Negative - provide invalid SQL in CQN option' , async ( ) => {
208
242
try {
243
+
244
+ const TABLE = 'nodb_tab_cqn_4' ;
245
+ let sql =
246
+ `CREATE TABLE ${ TABLE } (
247
+ k NUMBER
248
+ )` ;
249
+ let plsql = testsUtil . sqlCreateTable ( TABLE , sql ) ;
250
+ await conn . execute ( plsql ) ;
251
+
209
252
const myCallback = async function ( message ) {
210
253
console . log ( message ) ;
211
254
} ;
@@ -220,11 +263,17 @@ describe('185. runCQN.js', function() {
220
263
221
264
await conn . subscribe ( 'sub4' , options ) ;
222
265
223
- let sql = `INSERT INTO ${ TABLE } VALUES (103)` ;
266
+ sql = `INSERT INTO ${ TABLE } VALUES (103)` ;
224
267
await conn . execute ( sql ) ;
268
+
269
+ plsql = `BEGIN DBMS_SESSION.SLEEP(2); END;` ;
270
+ await conn . execute ( plsql ) ;
225
271
await conn . commit ( ) ;
226
272
227
273
await conn . unsubscribe ( 'sub4' ) ;
274
+
275
+ sql = `DROP TABLE ${ TABLE } PURGE` ;
276
+ await conn . execute ( sql ) ;
228
277
} catch ( err ) {
229
278
should . not . exist ( err ) ;
230
279
}
@@ -233,6 +282,14 @@ describe('185. runCQN.js', function() {
233
282
it ( '185.5 examples/cqn2.js' , async ( ) => {
234
283
try {
235
284
285
+ const TABLE = 'nodb_tab_cqn_5' ;
286
+ let sql =
287
+ `CREATE TABLE ${ TABLE } (
288
+ k NUMBER
289
+ )` ;
290
+ let plsql = testsUtil . sqlCreateTable ( TABLE , sql ) ;
291
+ await conn . execute ( plsql ) ;
292
+
236
293
const myCallback = async function ( message ) {
237
294
// console.log(message);
238
295
should . strictEqual ( message . type , oracledb . SUBSCR_EVENT_TYPE_OBJ_CHANGE ) ;
@@ -253,15 +310,20 @@ describe('185. runCQN.js', function() {
253
310
254
311
await conn . subscribe ( 'sub5' , options ) ;
255
312
256
- let sql = `INSERT INTO ${ TABLE } VALUES (:1)` ;
313
+ sql = `INSERT INTO ${ TABLE } VALUES (:1)` ;
257
314
let bindArr = [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ] , [ 6 ] , [ 7 ] ] ;
258
315
for ( let i = 0 ; i < bindArr . length ; i ++ ) {
259
316
await conn . execute ( sql , bindArr [ i ] , { autoCommit : true } ) ;
260
- await testsUtil . sleep ( ) ;
261
317
}
318
+
319
+ plsql = `BEGIN DBMS_SESSION.SLEEP(2); END;` ;
320
+ await conn . execute ( plsql ) ;
262
321
await conn . commit ( ) ;
263
322
264
323
await conn . unsubscribe ( 'sub5' ) ;
324
+
325
+ sql = `DROP TABLE ${ TABLE } PURGE` ;
326
+ await conn . execute ( sql ) ;
265
327
} catch ( err ) {
266
328
should . not . exist ( err ) ;
267
329
}
0 commit comments