/** @short Helper: verify that values recorded in the cache are valid */ void LibMailboxSync::helperCheckCache(bool ignoreUidNext) { using namespace Imap::Mailbox; // Check the cache SyncState syncState = model->cache()->mailboxSyncState(QLatin1String("a")); QCOMPARE(syncState.exists(), existsA); QCOMPARE(syncState.isUsableForSyncing(), true); if (!ignoreUidNext) { QCOMPARE(syncState.uidNext(), uidNextA); } QCOMPARE(syncState.uidValidity(), uidValidityA); QCOMPARE(model->cache()->uidMapping(QLatin1String("a")), uidMapA); QCOMPARE(static_cast<uint>(uidMapA.size()), existsA); SyncState ssFromTree = model->findMailboxByName(QLatin1String("a"))->syncState; SyncState ssFromCache = syncState; if (ignoreUidNext) { ssFromTree.setUidNext(0); ssFromCache.setUidNext(0); } QCOMPARE(ssFromCache, ssFromTree); if (model->isNetworkAvailable()) { // when offline, calling cEmpty would assert fail cEmpty(); } QVERIFY(errorSpy->isEmpty()); }
/** @short Check that the STATUS processing does not break offline "sync" */ void OfflineTest::testStatusVsExistsCached() { QString mailbox = QLatin1String("a"); // Push the data to the cache existsA = 10; uidNextA = 11; uidValidityA = 666; SyncState sync; sync.setExists(existsA); sync.setUidValidity(uidValidityA); sync.setUidNext(uidNextA); for (uint i = 1; i <= existsA; ++i) uidMapA << i; model->cache()->setMailboxSyncState(mailbox, sync); model->cache()->setUidMapping(mailbox, uidMapA); // Request the STATUS command to see how many messages are in there. This is not a synchronization, though // -- Trojita is *not* opening that mailbox, so the previously cached data remain. QCOMPARE(idxA.data(RoleTotalMessageCount).toInt(), 0); cClient(t.mk("STATUS a (MESSAGES UNSEEN RECENT)\r\n")); cServer("* STATUS a (MESSAGES 42 UNSEEN 2 RECENT 3)\r\n" + t.last("OK status\r\n")); QCOMPARE(idxA.data(RoleTotalMessageCount).toInt(), 42); LibMailboxSync::setModelNetworkPolicy(model, NETWORK_OFFLINE); cClient(t.mk("LOGOUT\r\n")); cServer(t.last("OK logged out\r\n") + "* BYE see ya\r\n"); model->resyncMailbox(idxA); for (int i = 0; i < 10; ++i) QCoreApplication::processEvents(); QCOMPARE(model->rowCount(msgListA), static_cast<int>(existsA)); helperVerifyUidMapA(); helperCheckCache(); }