@@ -46,6 +46,7 @@ describe('217. aq1.js', function() {
4646
4747 const rawQueueName = "NODB_RAW_QUEUE" ;
4848 const RAW_TABLE = 'NODB_RAW_QUEUE_TAB' ;
49+ let credential ;
4950
5051 before ( async function ( ) {
5152 if ( ! dbConfig . test . DBA_PRIVILEGE || oracledb . thin ) {
@@ -56,7 +57,7 @@ describe('217. aq1.js', function() {
5657 this . skip ( ) ;
5758 } else {
5859 await testsUtil . createAQtestUser ( AQ_USER , AQ_USER_PWD ) ;
59- const credential = {
60+ credential = {
6061 user : AQ_USER ,
6162 password : AQ_USER_PWD ,
6263 connectString : dbConfig . connectString
@@ -251,7 +252,7 @@ describe('217. aq1.js', function() {
251252 const message = {
252253 payload : messageString // the message itself
253254 } ;
254- const myMsg = await queue1 . enqOne ( message ) ;
255+ await queue1 . enqOne ( message ) ;
255256
256257 // Get the deliveryMode attribute in enqOptions
257258 assert . strictEqual ( queue1 . enqOptions . deliveryMode ,
@@ -265,7 +266,7 @@ describe('217. aq1.js', function() {
265266 visibility : oracledb . AQ_VISIBILITY_IMMEDIATE , // Change the visibility so that no explicit commit is required
266267 }
267268 ) ;
268- queue2 . deqOptions . deliveryMode = myMsg . deliveryMode ;
269+ queue2 . deqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_PERSISTENT ;
269270 const msg = await queue2 . deqOne ( ) ;
270271 if ( msg ) {
271272 assert . strictEqual ( msg . payload . toString ( ) , messageString ) ;
@@ -499,4 +500,103 @@ describe('217. aq1.js', function() {
499500 assert . strictEqual ( msg . payload . length , largeMessage . length ) ;
500501 assert . strictEqual ( msg . payload . toString ( ) , largeMessage . toString ( ) ) ;
501502 } ) ; // 217.17
503+
504+ it ( '217.18 test enqueue/dequeue with BUFFERED delivery mode' , async function ( ) {
505+ const queue = await conn . getQueue ( rawQueueName ) ;
506+ queue . enqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
507+ queue . enqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_BUFFERED ;
508+
509+ const messageString = 'This is a buffered message' ;
510+ await queue . enqOne ( messageString ) ;
511+
512+ const conn2 = await oracledb . getConnection ( credential ) ;
513+ const queue2 = await conn2 . getQueue ( rawQueueName ) ;
514+ queue2 . deqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
515+ queue2 . deqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_BUFFERED ;
516+
517+ const msg = await queue2 . deqOne ( ) ;
518+ await conn2 . close ( ) ;
519+
520+ assert ( msg ) ;
521+ assert . strictEqual ( msg . payload . toString ( ) , messageString ) ;
522+ assert . strictEqual ( msg . deliveryMode , oracledb . AQ_MSG_DELIV_MODE_BUFFERED ) ;
523+ } ) ; // 217.18
524+
525+ it ( '217.19 test enqueue/dequeue with PERSISTENT delivery mode' , async function ( ) {
526+ const queue = await conn . getQueue ( rawQueueName ) ;
527+ queue . enqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
528+ queue . enqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_PERSISTENT ;
529+
530+ const messageString = 'This is a persistent message' ;
531+ await queue . enqOne ( messageString ) ;
532+
533+ const conn2 = await oracledb . getConnection ( credential ) ;
534+ const queue2 = await conn2 . getQueue ( rawQueueName ) ;
535+ queue2 . deqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
536+ queue2 . deqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_PERSISTENT ;
537+
538+ const msg = await queue2 . deqOne ( ) ;
539+ await conn2 . commit ( ) ;
540+ await conn2 . close ( ) ;
541+
542+ assert ( msg ) ;
543+ assert . strictEqual ( msg . payload . toString ( ) , messageString ) ;
544+ assert . strictEqual ( msg . deliveryMode , oracledb . AQ_MSG_DELIV_MODE_PERSISTENT ) ;
545+ } ) ; // 217.19
546+
547+ it ( '217.20 test enqueue/dequeue with PERSISTENT_OR_BUFFERED delivery mode' , async function ( ) {
548+ const queue = await conn . getQueue ( rawQueueName ) ;
549+ queue . enqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
550+ queue . enqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_PERSISTENT_OR_BUFFERED ;
551+
552+ const messageString = 'This is a persistent or buffered message' ;
553+ await queue . enqOne ( messageString ) ;
554+
555+ const conn2 = await oracledb . getConnection ( credential ) ;
556+ const queue2 = await conn2 . getQueue ( rawQueueName ) ;
557+ queue2 . deqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
558+ queue2 . deqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_PERSISTENT_OR_BUFFERED ;
559+
560+ const msg = await queue2 . deqOne ( ) ;
561+ await conn2 . commit ( ) ;
562+ await conn2 . close ( ) ;
563+
564+ assert ( msg ) ;
565+ assert . strictEqual ( msg . payload . toString ( ) , messageString ) ;
566+ } ) ; // 217.20
567+
568+ it ( '217.21 test enqueue/dequeue with mismatched delivery modes' , async function ( ) {
569+ const queue = await conn . getQueue ( rawQueueName ) ;
570+ // queue.deqOptions.wait = oracledb.AQ_DEQ_NO_WAIT;
571+ // queue.deqOptions.visibility = oracledb.AQ_VISIBILITY_IMMEDIATE;
572+ // queue.deqOptions.deliveryMode = oracledb.AQ_MSG_DELIV_MODE_PERSISTENT_OR_BUFFERED;
573+ // let myMsg = await queue.deqOne();
574+ // while (myMsg) {
575+ // myMsg = await queue.deqOne();
576+ // }
577+ queue . enqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
578+ queue . enqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_BUFFERED ;
579+
580+ const messageString = 'This should not be dequeued with persistent mode' ;
581+ await queue . enqOne ( messageString ) ;
582+
583+ const conn2 = await oracledb . getConnection ( credential ) ;
584+ const queue2 = await conn2 . getQueue ( rawQueueName ) ;
585+ queue2 . deqOptions . navigation = oracledb . AQ_DEQ_NAV_FIRST_MSG ;
586+ queue2 . deqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
587+ queue2 . deqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_PERSISTENT ;
588+ queue2 . deqOptions . wait = oracledb . AQ_DEQ_NO_WAIT ;
589+
590+ const msg = await queue2 . deqOne ( ) ;
591+ await conn2 . close ( ) ;
592+
593+ assert . strictEqual ( msg , undefined ) ;
594+
595+ // Cleanup: dequeue properly with matching mode
596+ const cleanupQueue = await conn . getQueue ( rawQueueName ) ;
597+ cleanupQueue . deqOptions . visibility = oracledb . AQ_VISIBILITY_IMMEDIATE ;
598+ cleanupQueue . deqOptions . deliveryMode = oracledb . AQ_MSG_DELIV_MODE_BUFFERED ;
599+ await cleanupQueue . deqOne ( ) ;
600+ } ) ; // 217.21
601+
502602} ) ;
0 commit comments