Skip to content

Commit f3bbf90

Browse files
author
Christopher Jones
committed
Fix testsuite concurrent resultset access. Add lob.close() tests
1 parent 1fcf9d8 commit f3bbf90

File tree

3 files changed

+245
-29
lines changed

3 files changed

+245
-29
lines changed

test/lobBind1.js

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -579,11 +579,11 @@ describe('71. lobBind1.js', function() {
579579

580580
}); // 71.1.6
581581

582-
it('71.1.7 BIND_INOUT, PL/SQL, A String', function(done) {
582+
it('71.1.7 BIND_INOUT, PL/SQL, A String. IN LOB value does not change.', function(done) {
583583

584584
var seq = 7;
585585
var inStr = "I love the sunshine today!",
586-
outStr = "A new day has come.";
586+
outStr = "A new day has come.";
587587

588588
var proc = "CREATE OR REPLACE PROCEDURE nodb_proc_clob_inout1 \n" +
589589
" (p_num IN NUMBER, p_inout IN OUT CLOB) \n" +
@@ -635,19 +635,45 @@ describe('71. lobBind1.js', function() {
635635

636636
var lobout = result2.outBinds.io;
637637

638-
lobout.setEncoding('utf8');
639-
var clobData = '';
640-
641-
lobout.on('data', function(chunk) {
642-
clobData += chunk;
643-
});
644-
645-
lobout.on('error', function(err) {
646-
should.not.exist(err, "lob.on 'error' event.");
647-
});
648-
649-
lobout.on('end', function() {
650-
should.strictEqual(clobData, outStr);
638+
async.parallel([
639+
function(callback) {
640+
lobout.setEncoding("utf8");
641+
var clobData = "";
642+
643+
lobout.on("data", function(chunk) {
644+
clobData += chunk;
645+
});
646+
647+
lobout.on("error", function(err) {
648+
should.not.exist(err, "lob.on 'error' event.");
649+
});
650+
651+
lobout.on("end", function() {
652+
should.strictEqual(clobData, outStr);
653+
654+
return callback();
655+
});
656+
},
657+
function(callback) {
658+
lob.setEncoding("utf8");
659+
var clobData = "";
660+
661+
lob.on("data", function(chunk) {
662+
clobData += chunk;
663+
});
664+
665+
lob.on("error", function(err) {
666+
should.not.exist(err, "lob.on 'error' event.");
667+
});
668+
669+
lob.on("end", function() {
670+
should.strictEqual(clobData, inStr);
671+
672+
return callback();
673+
});
674+
}
675+
], function(err) {
676+
should.not.exist(err);
651677
return cb();
652678
});
653679

@@ -1320,7 +1346,7 @@ describe('71. lobBind1.js', function() {
13201346
outBufID = 70;
13211347

13221348
var inBuf = assist.createBuffer(10),
1323-
outBuf = assist.createBuffer(100);
1349+
outBuf = assist.createBuffer(100);
13241350

13251351
var proc = "CREATE OR REPLACE PROCEDURE nodb_proc_blob_inout1 \n" +
13261352
" (p_in IN NUMBER, p_outbufid IN NUMBER, p_inout IN OUT BLOB) \n" +

test/lobBind2.js

Lines changed: 197 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,203 @@ describe("72. lobBind2.js", function() {
803803
return done();
804804
}
805805

806-
});
806+
}); // 72.2.5
807+
808+
it("72.2.6 Negative - createLob() without lob.close()", function(done) {
809+
810+
var seq = 6000;
811+
var connHandler, lobHandler;
812+
813+
async.series([
814+
function(cb) {
815+
oracledb.getConnection(
816+
dbConfig,
817+
function(err, conn) {
818+
should.not.exist(err);
819+
connHandler = conn;
820+
821+
cb();
822+
}
823+
);
824+
},
825+
function(cb) {
826+
connHandler.createLob(oracledb.BLOB, function(err, lob) {
827+
should.not.exist(err);
828+
829+
lobHandler = lob;
830+
831+
lob.on("error", function(err) {
832+
should.not.exist(err, "lob.on 'error' event.");
833+
});
834+
835+
lob.on("finish", function() {
836+
connHandler.execute(
837+
"insert into nodb_tab_blob72 (id, content) values (:id, :bindvar)",
838+
{ id: seq, bindvar: lob },
839+
function(err) {
840+
should.not.exist(err);
841+
842+
cb()
843+
}
844+
); // execute()
845+
}); // finish event
846+
847+
var inStream = fs.createReadStream(jpgFileName);
848+
inStream.on("error", function(err) {
849+
should.not.exist(err, "inStream.on 'error' event.");
850+
});
851+
852+
inStream.pipe(lob);
853+
854+
});
855+
},
856+
function(cb) {
857+
connHandler.close(function(err) {
858+
should.exist(err);
859+
(err.message).should.startWith('NJS-050:');
860+
// NJS-050: cannot release connection with active temporary LOBs created by createLob()
861+
cb();
862+
});
863+
},
864+
function(cb) {
865+
lobHandler.close(function(err) {
866+
should.not.exist(err);
867+
868+
});
869+
870+
lobHandler.on("close", function(err) {
871+
should.not.exist(err);
872+
873+
connHandler.commit(function(err) {
874+
should.not.exist(err);
875+
876+
return cb();
877+
});
878+
}); // close event
879+
}
880+
], done);
881+
882+
}); // 72.2.6
883+
884+
it.skip("72.2.7 Negative - call lob.close() twice", function(done) {
885+
886+
var seq = 7000;
887+
888+
async.series([
889+
function(cb) {
890+
connection.createLob(oracledb.BLOB, function(err, lob) {
891+
should.not.exist(err);
892+
893+
lob.on("close", function(err) {
894+
should.not.exist(err);
895+
896+
connection.commit(function(err) {
897+
should.not.exist(err);
898+
899+
return cb();
900+
});
901+
}); // close event
902+
903+
lob.on("error", function(err) {
904+
should.not.exist(err, "lob.on 'error' event.");
905+
});
906+
907+
lob.on("finish", function() {
908+
connection.execute(
909+
"insert into nodb_tab_blob72 (id, content) values (:id, :bindvar)",
910+
{ id: seq, bindvar: lob},
911+
function(err, result) {
912+
should.not.exist(err);
913+
914+
should.strictEqual(result.rowsAffected, 1);
915+
916+
lob.close(function(err) {
917+
should.not.exist(err);
918+
});
919+
920+
lob.close(function(err) {
921+
should.not.exist(err);
922+
});
923+
}
924+
);
925+
}); // finish event
926+
927+
var inStream = fs.createReadStream(jpgFileName);
928+
929+
inStream.on("error", function(err) {
930+
should.not.exist(err, "inStream.on 'error' event.");
931+
});
932+
933+
inStream.pipe(lob);
934+
935+
}); // createLob()
936+
},
937+
function(cb) {
938+
verifyBlobValue(seq, jpgFileName, cb);
939+
}
940+
], done);
941+
942+
}); // 72.2.7
943+
944+
it.skip("72.2.8 Negative - call lob.close() after closing lob", function(done) {
945+
946+
var seq = 8000;
947+
948+
async.series([
949+
function(cb) {
950+
connection.createLob(oracledb.BLOB, function(err, lob) {
951+
should.not.exist(err);
952+
953+
lob.on("close", function(err) {
954+
should.not.exist(err);
955+
956+
lob.close(function(err) {
957+
should.not.exist(err);
958+
});
959+
connection.commit(function(err) {
960+
should.not.exist(err);
961+
962+
return cb();
963+
});
964+
}); // close event
965+
966+
lob.on("error", function(err) {
967+
should.not.exist(err, "lob.on 'error' event.");
968+
});
969+
970+
lob.on("finish", function() {
971+
connection.execute(
972+
"insert into nodb_tab_blob72 (id, content) values (:id, :bindvar)",
973+
{ id: seq, bindvar: lob},
974+
function(err, result) {
975+
should.not.exist(err);
976+
977+
should.strictEqual(result.rowsAffected, 1);
978+
979+
lob.close(function(err) {
980+
should.not.exist(err);
981+
});
982+
983+
}
984+
);
985+
}); // finish event
986+
987+
var inStream = fs.createReadStream(jpgFileName);
988+
989+
inStream.on("error", function(err) {
990+
should.not.exist(err, "inStream.on 'error' event.");
991+
});
992+
993+
inStream.pipe(lob);
994+
995+
}); // createLob()
996+
},
997+
function(cb) {
998+
verifyBlobValue(seq, jpgFileName, cb);
999+
}
1000+
], done);
1001+
1002+
}); // 72.2.8
8071003

8081004
}); // 72.2
8091005

test/resultSet2.js

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -458,12 +458,9 @@
458458
},
459459
function(cb) {
460460

461-
setTimeout(function() {
462-
rset.close(function(err) {
463-
should.not.exist(err);
464-
return cb();
465-
});
466-
}, 100);
461+
rset.close(function() {
462+
return cb();
463+
});
467464

468465
}
469466
], done);
@@ -507,12 +504,9 @@
507504
},
508505
function(cb) {
509506

510-
setTimeout(function() {
511-
rcur.close(function(err) {
512-
should.not.exist(err);
513-
return cb();
514-
});
515-
}, 100);
507+
rcur.close(function() {
508+
return cb();
509+
});
516510

517511
}
518512
], done);

0 commit comments

Comments
 (0)