testsyncjournaldb.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /*
  2. * This software is in the public domain, furnished "as is", without technical
  3. * support, and with no warranty, express or implied, as to its usefulness for
  4. * any purpose.
  5. * */
  6. #include <QtTest>
  7. #include <sqlite3.h>
  8. #include "libsync/syncjournaldb.h"
  9. #include "libsync/syncjournalfilerecord.h"
  10. using namespace OCC;
  11. namespace {
  12. const char testdbC[] = "/tmp";
  13. }
  14. class TestSyncJournalDB : public QObject
  15. {
  16. Q_OBJECT
  17. public:
  18. TestSyncJournalDB()
  19. : _db(testdbC)
  20. {
  21. }
  22. QDateTime dropMsecs(QDateTime time)
  23. {
  24. return Utility::qDateTimeFromTime_t(Utility::qDateTimeToTime_t(time));
  25. }
  26. private slots:
  27. void initTestCase()
  28. {
  29. }
  30. void cleanupTestCase()
  31. {
  32. }
  33. void testFileRecord()
  34. {
  35. SyncJournalFileRecord record = _db.getFileRecord("nonexistant");
  36. QVERIFY(!record.isValid());
  37. record._path = "foo";
  38. record._inode = 1234;
  39. record._modtime = dropMsecs(QDateTime::currentDateTime());
  40. record._type = 5;
  41. record._etag = "789789";
  42. record._fileId = "abcd";
  43. record._remotePerm = "744";
  44. record._fileSize = 213089055;
  45. record._contentChecksum = "mychecksum";
  46. record._contentChecksumType = "MD5";
  47. QVERIFY(_db.setFileRecord(record));
  48. SyncJournalFileRecord storedRecord = _db.getFileRecord("foo");
  49. QVERIFY(storedRecord == record);
  50. // Update checksum
  51. record._contentChecksum = "newchecksum";
  52. record._contentChecksumType = "Adler32";
  53. _db.updateFileRecordChecksum("foo", record._contentChecksum, record._contentChecksumType);
  54. storedRecord = _db.getFileRecord("foo");
  55. QVERIFY(storedRecord == record);
  56. // Update metadata
  57. record._inode = 12345;
  58. record._modtime = dropMsecs(QDateTime::currentDateTime().addDays(1));
  59. record._type = 7;
  60. record._etag = "789FFF";
  61. record._fileId = "efg";
  62. record._remotePerm = "777";
  63. record._fileSize = 289055;
  64. _db.setFileRecordMetadata(record);
  65. storedRecord = _db.getFileRecord("foo");
  66. QVERIFY(storedRecord == record);
  67. QVERIFY(_db.deleteFileRecord("foo"));
  68. record = _db.getFileRecord("foo");
  69. QVERIFY(!record.isValid());
  70. }
  71. void testFileRecordChecksum()
  72. {
  73. // Try with and without a checksum
  74. {
  75. SyncJournalFileRecord record;
  76. record._path = "foo-checksum";
  77. record._remotePerm = "744";
  78. record._contentChecksum = "mychecksum";
  79. record._contentChecksumType = "MD5";
  80. record._modtime = QDateTime::currentDateTimeUtc();
  81. QVERIFY(_db.setFileRecord(record));
  82. SyncJournalFileRecord storedRecord = _db.getFileRecord("foo-checksum");
  83. QVERIFY(storedRecord._path == record._path);
  84. QVERIFY(storedRecord._remotePerm == record._remotePerm);
  85. QVERIFY(storedRecord._contentChecksum == record._contentChecksum);
  86. QVERIFY(storedRecord._contentChecksumType == record._contentChecksumType);
  87. // qDebug()<< "OOOOO " << storedRecord._modtime.toTime_t() << record._modtime.toTime_t();
  88. // Attention: compare time_t types here, as QDateTime seem to maintain
  89. // milliseconds internally, which disappear in sqlite. Go for full seconds here.
  90. QVERIFY(storedRecord._modtime.toTime_t() == record._modtime.toTime_t());
  91. QVERIFY(storedRecord == record);
  92. }
  93. {
  94. SyncJournalFileRecord record;
  95. record._path = "foo-nochecksum";
  96. record._remotePerm = "744";
  97. record._modtime = QDateTime::currentDateTimeUtc();
  98. QVERIFY(_db.setFileRecord(record));
  99. SyncJournalFileRecord storedRecord = _db.getFileRecord("foo-nochecksum");
  100. QVERIFY(storedRecord == record);
  101. }
  102. }
  103. void testDownloadInfo()
  104. {
  105. typedef SyncJournalDb::DownloadInfo Info;
  106. Info record = _db.getDownloadInfo("nonexistant");
  107. QVERIFY(!record._valid);
  108. record._errorCount = 5;
  109. record._etag = "ABCDEF";
  110. record._valid = true;
  111. record._tmpfile = "/tmp/foo";
  112. _db.setDownloadInfo("foo", record);
  113. Info storedRecord = _db.getDownloadInfo("foo");
  114. QVERIFY(storedRecord == record);
  115. _db.setDownloadInfo("foo", Info());
  116. Info wipedRecord = _db.getDownloadInfo("foo");
  117. QVERIFY(!wipedRecord._valid);
  118. }
  119. void testUploadInfo()
  120. {
  121. typedef SyncJournalDb::UploadInfo Info;
  122. Info record = _db.getUploadInfo("nonexistant");
  123. QVERIFY(!record._valid);
  124. record._errorCount = 5;
  125. record._chunk = 12;
  126. record._transferid = 812974891;
  127. record._size = 12894789147;
  128. record._modtime = dropMsecs(QDateTime::currentDateTime());
  129. record._valid = true;
  130. _db.setUploadInfo("foo", record);
  131. Info storedRecord = _db.getUploadInfo("foo");
  132. QVERIFY(storedRecord == record);
  133. _db.setUploadInfo("foo", Info());
  134. Info wipedRecord = _db.getUploadInfo("foo");
  135. QVERIFY(!wipedRecord._valid);
  136. }
  137. private:
  138. SyncJournalDb _db;
  139. };
  140. QTEST_APPLESS_MAIN(TestSyncJournalDB)
  141. #include "testsyncjournaldb.moc"