testsyncjournaldb.h 5.2 KB

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