diff options
Diffstat (limited to 'LayoutTests/storage/read-and-write-transactions-dont-run-together.html')
-rw-r--r-- | LayoutTests/storage/read-and-write-transactions-dont-run-together.html | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/LayoutTests/storage/read-and-write-transactions-dont-run-together.html b/LayoutTests/storage/read-and-write-transactions-dont-run-together.html new file mode 100644 index 0000000..a7565b5 --- /dev/null +++ b/LayoutTests/storage/read-and-write-transactions-dont-run-together.html @@ -0,0 +1,103 @@ +<html> +<head> +<script> + +function log(message) +{ + document.body.innerHTML += message + "<br>"; +} + +function terminateTest() +{ + if (window.layoutTestController) + layoutTestController.notifyDone(); +} + +function openTestDatabase() +{ + return openDatabase("ReadAndWriteTransactionsDontRunTogetherTest", + "1.0", + "Test to make sure that read and write transactions on different DB handles to the same DB don't run at the same time.", + 32768); +} + +var readTransactionsInProgress = 0; +var writeTransactionsInProgress = 0; +var totalTransactions = 0; +var finishedTransactions = 0; + +function runTransaction(db, readOnly) +{ + var transactionFunction = (readOnly ? db.readTransaction : db.transaction); + transactionFunction.call(db, function(tx) { + if (readOnly) { + if (writeTransactionsInProgress != 0) { + log("Read transaction starting while write transaction in progress."); + terminateTest(); + } + readTransactionsInProgress++; + } else { + if ((readTransactionsInProgress != 0) || (writeTransactionsInProgress != 0)) { + log("Write transaction starting while another transaction in progress."); + terminateTest(); + } + writeTransactionsInProgress++; + } + tx.executeSql("SELECT * FROM Test;"); + }, function(error) { + log((readOnly ? "Read" : "Write") + " transaction failed: " + error.message); + terminateTest(); + }, function() { + finishedTransactions++; + if (readOnly) + readTransactionsInProgress--; + else + writeTransactionsInProgress--; + log("Transaction successful."); + if ((finishedTransactions == totalTransactions) && (readTransactionsInProgress == 0) && (writeTransactionsInProgress == 0)) + terminateTest(); + }); +} + +function runReadAndWriteTransactions(db1, db2, db3) +{ + totalTransactions = 10; + finishedTransactions = 0; + runTransaction(db1, true); + runTransaction(db2, true); + runTransaction(db1, false); + runTransaction(db1, true); + runTransaction(db2, true); + runTransaction(db3, true); + runTransaction(db1, false); + runTransaction(db2, false); + runTransaction(db1, true); + runTransaction(db3, true); +} + +function runTest() { + if (window.layoutTestController) { + layoutTestController.dumpAsText(); + layoutTestController.waitUntilDone(); + } + + try { + var db1 = openTestDatabase(); + var db2 = openTestDatabase(); + var db3 = openTestDatabase(); + db1.transaction(function(tx) { + tx.executeSql("CREATE TABLE IF NOT EXISTS Test (Foo int);"); + }, function(error) { + log("Cannot create the Test table: " + error.message); + terminateTest(); + }, function() { + runReadAndWriteTransactions(db1, db2, db3); + }); + } catch(err) {} +} +</script> +</head> +<body onload="runTest();"> +This test tests that read and write transactions on different handles to the same database don't run together.<br> +</body> +</html> |