testsyncjournaldb.cpp 5.2 KB

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