michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: MARIONETTE_TIMEOUT = 60000; michael@0: MARIONETTE_HEAD_JS = 'mmdb_head.js'; michael@0: michael@0: const DBNAME = "test_mmdb_full_storage:" + newUUID(); michael@0: michael@0: let gIsDiskFull = true; michael@0: michael@0: function newSavableMessage() { michael@0: return { michael@0: type: "sms", michael@0: sender: "+0987654321", michael@0: receiver: "+1234567890", michael@0: body: "quick fox jump over the lazy dog", michael@0: deliveryStatusRequested: false, michael@0: messageClass: "normal", michael@0: timestamp: Date.now(), michael@0: iccId: "1029384756" michael@0: }; michael@0: } michael@0: michael@0: function isFileNoDeviceSpaceError(aErrorResult) { michael@0: is(aErrorResult, Cr.NS_ERROR_FILE_NO_DEVICE_SPACE, "Database error code"); michael@0: } michael@0: michael@0: function isCallbackStorageFullError(aErrorCode) { michael@0: is(aErrorCode, Ci.nsIMobileMessageCallback.STORAGE_FULL_ERROR, michael@0: "nsIMobileMessageCallback error code"); michael@0: } michael@0: michael@0: function testSaveSendingMessage(aMmdb) { michael@0: log("testSaveSendingMessage()"); michael@0: michael@0: gIsDiskFull = true; michael@0: return saveSendingMessage(aMmdb, newSavableMessage()) michael@0: // Resolved/rejected results are both [, ], michael@0: // and we need only the error code in both cases. michael@0: .then((aValue) => aValue[0], michael@0: (aValue) => aValue[0]) michael@0: .then(isFileNoDeviceSpaceError); michael@0: } michael@0: michael@0: function testSaveReceivedMessage(aMmdb) { michael@0: log("testSaveReceivedMessage()"); michael@0: michael@0: gIsDiskFull = true; michael@0: return saveReceivedMessage(aMmdb, newSavableMessage()) michael@0: // Resolved/rejected results are both [, ], michael@0: // and we need only the error code in both cases. michael@0: .then((aValue) => aValue[0], michael@0: (aValue) => aValue[0]) michael@0: .then(isFileNoDeviceSpaceError); michael@0: } michael@0: michael@0: function testGetMessageRecordById(aMmdb) { michael@0: log("testGetMessageRecordById()"); michael@0: michael@0: gIsDiskFull = false; michael@0: return saveReceivedMessage(aMmdb, newSavableMessage()) michael@0: // Resolved result is [, ], michael@0: .then(function(aValue) { michael@0: let domMessage = aValue[1]; michael@0: michael@0: gIsDiskFull = true; michael@0: return getMessageRecordById(aMmdb, domMessage.id); michael@0: }); michael@0: } michael@0: michael@0: function testMarkMessageRead(aMmdb) { michael@0: log("testMarkMessageRead()"); michael@0: michael@0: gIsDiskFull = false; michael@0: return saveReceivedMessage(aMmdb, newSavableMessage()) michael@0: // Resolved/rejected results are both [, ]. michael@0: .then(function(aValue) { michael@0: let domMessage = aValue[1]; michael@0: michael@0: gIsDiskFull = true; michael@0: return markMessageRead(aMmdb, domMessage.id, true) michael@0: .then(null, (aValue) => aValue) michael@0: .then(isCallbackStorageFullError); michael@0: }); michael@0: } michael@0: michael@0: function testCreateMessageCursor(aMmdb) { michael@0: log("testCreateMessageCursor()"); michael@0: michael@0: gIsDiskFull = true; michael@0: return createMessageCursor(aMmdb, {}, false); michael@0: } michael@0: michael@0: function testCreateThreadCursor(aMmdb) { michael@0: log("testCreateThreadCursor()"); michael@0: michael@0: gIsDiskFull = true; michael@0: return createThreadCursor(aMmdb); michael@0: } michael@0: michael@0: startTestBase(function testCaseMain() { michael@0: michael@0: let mmdb = newMobileMessageDB(); michael@0: return initMobileMessageDB(mmdb, DBNAME, 0) michael@0: .then(function() { michael@0: mmdb.isDiskFull = function() { michael@0: return gIsDiskFull; michael@0: }; michael@0: }) michael@0: michael@0: .then(() => testSaveSendingMessage(mmdb)) michael@0: .then(() => testSaveReceivedMessage(mmdb)) michael@0: .then(() => testGetMessageRecordById(mmdb)) michael@0: .then(() => testMarkMessageRead(mmdb)) michael@0: .then(() => testCreateMessageCursor(mmdb)) michael@0: .then(() => testCreateThreadCursor(mmdb)) michael@0: michael@0: .then(() => closeMobileMessageDB(mmdb)); michael@0: });