test_collection.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. import pytest
  2. import os
  3. import duplitab
  4. import datetime
  5. project_root_path = os.path.realpath(os.path.join(__file__, '..', '..'))
  6. test_data_dir_path = os.path.join(project_root_path, 'tests', 'data')
  7. test_collections_dir_path = os.path.join(test_data_dir_path, 'collections')
  8. @pytest.mark.parametrize(('init_kwargs', 'expected_attr'), [
  9. [
  10. {
  11. 'url': 'file://media/backup/a',
  12. },
  13. {
  14. 'url': 'file://media/backup/a',
  15. },
  16. ],
  17. [
  18. {
  19. 'url': 'sftp://user@server//media/backup/阿',
  20. },
  21. {
  22. 'url': 'sftp://user@server//media/backup/阿',
  23. },
  24. ],
  25. ])
  26. def test_collection_init(init_kwargs, expected_attr):
  27. c = duplitab.Collection(**init_kwargs)
  28. for name, value in expected_attr.items():
  29. assert getattr(c, name) == value
  30. @pytest.mark.parametrize(('init_kwargs', 'ex_class'), [
  31. [
  32. {
  33. },
  34. TypeError,
  35. ],
  36. ])
  37. def test_collection_init_fail(init_kwargs, ex_class):
  38. with pytest.raises(ex_class):
  39. duplitab.Collection(**init_kwargs)
  40. @pytest.mark.parametrize(('url', 'expected_status_attr'), [
  41. [
  42. 'file://{}'.format(os.path.join(test_collections_dir_path, 'empty', 'only-full')),
  43. {
  44. 'primary_chain': duplitab._ChainStatus(
  45. sets=[
  46. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  47. ]),
  48. },
  49. ],
  50. [
  51. 'file://{}'.format(os.path.join(test_collections_dir_path, 'empty', 'single-full')),
  52. {
  53. 'primary_chain': duplitab._ChainStatus(
  54. sets=[
  55. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  56. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35)),
  57. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39)),
  58. ]),
  59. },
  60. ],
  61. [
  62. 'file://{}'.format(os.path.join(test_collections_dir_path, 'empty', 'multiple-full')),
  63. {
  64. 'primary_chain': duplitab._ChainStatus(
  65. sets=[
  66. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 47)),
  67. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 54)),
  68. ]),
  69. },
  70. ],
  71. [
  72. 'file://{}'.format(os.path.join(test_collections_dir_path, 'none')),
  73. {
  74. 'primary_chain': None,
  75. },
  76. ],
  77. ])
  78. def test_collection_request_status(url, expected_status_attr):
  79. c = duplitab.Collection(url=url)
  80. s = c.request_status()
  81. assert not s.archive_dir_path is None
  82. for name, value in expected_status_attr.items():
  83. assert value == getattr(s, name)
  84. @pytest.mark.parametrize(('chain_status', 'expected_time'), [
  85. [
  86. duplitab._ChainStatus(
  87. sets=[
  88. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  89. ]),
  90. datetime.datetime(2016, 10, 27, 19, 57, 33),
  91. ],
  92. [
  93. duplitab._ChainStatus(
  94. sets=[
  95. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  96. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35)),
  97. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39)),
  98. ]),
  99. datetime.datetime(2016, 10, 27, 19, 57, 39),
  100. ],
  101. ])
  102. def test_chain_status_get_last_backup_time(chain_status, expected_time):
  103. assert expected_time == chain_status.last_backup_time
  104. @pytest.mark.parametrize(('chain_status', 'expected_time'), [
  105. [
  106. duplitab._ChainStatus(
  107. sets=[
  108. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  109. ]),
  110. None,
  111. ],
  112. [
  113. duplitab._ChainStatus(
  114. sets=[
  115. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  116. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35)),
  117. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39)),
  118. ]),
  119. datetime.datetime(2016, 10, 27, 19, 57, 39),
  120. ],
  121. ])
  122. def test_chain_status_get_last_incremental_backup_time(
  123. chain_status, expected_time):
  124. assert expected_time == chain_status.last_incremental_backup_time
  125. @pytest.mark.parametrize(('chain_status', 'expected_time'), [
  126. [
  127. duplitab._ChainStatus(
  128. sets=[
  129. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  130. ]),
  131. datetime.datetime(2016, 10, 27, 19, 57, 33),
  132. ],
  133. [
  134. duplitab._ChainStatus(
  135. sets=[
  136. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  137. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35)),
  138. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39)),
  139. ]),
  140. datetime.datetime(2016, 10, 27, 19, 57, 33),
  141. ],
  142. ])
  143. def test_chain_status_get_first_backup_time(chain_status, expected_time):
  144. assert expected_time == chain_status.first_backup_time
  145. @pytest.mark.parametrize(('collection_status', 'expected_time'), [
  146. [
  147. duplitab._CollectionStatus(
  148. archive_dir_path='/tmp/none',
  149. primary_chain=duplitab._ChainStatus(
  150. sets=[
  151. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  152. ]),
  153. ),
  154. None,
  155. ],
  156. [
  157. duplitab._CollectionStatus(
  158. archive_dir_path='/tmp/none',
  159. primary_chain=duplitab._ChainStatus(
  160. sets=[
  161. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  162. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35)),
  163. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39)),
  164. ]),
  165. ),
  166. datetime.datetime(2016, 10, 27, 19, 57, 39),
  167. ],
  168. [
  169. duplitab._CollectionStatus(
  170. archive_dir_path='/tmp/none',
  171. primary_chain=None,
  172. ),
  173. None,
  174. ],
  175. ])
  176. def test_collection_status_get_last_incremental_backup_time(
  177. collection_status, expected_time):
  178. assert expected_time == collection_status.last_incremental_backup_time
  179. @pytest.mark.parametrize(('collection_status', 'expected_time'), [
  180. [
  181. duplitab._CollectionStatus(
  182. archive_dir_path='/tmp/none',
  183. primary_chain=duplitab._ChainStatus(
  184. sets=[
  185. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  186. ]),
  187. ),
  188. datetime.datetime(2016, 10, 27, 19, 57, 33),
  189. ],
  190. [
  191. duplitab._CollectionStatus(
  192. archive_dir_path='/tmp/none',
  193. primary_chain=duplitab._ChainStatus(
  194. sets=[
  195. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33)),
  196. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35)),
  197. duplitab._SetStatus(backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39)),
  198. ]),
  199. ),
  200. datetime.datetime(2016, 10, 27, 19, 57, 33),
  201. ],
  202. [
  203. duplitab._CollectionStatus(
  204. archive_dir_path='/tmp/none',
  205. primary_chain=None,
  206. ),
  207. None,
  208. ],
  209. ])
  210. def test_collection_status_get_incremental_backup_time(
  211. collection_status, expected_time):
  212. assert expected_time == collection_status.last_full_backup_time