test_collection.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  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,
  43. 'empty', 'only-full')),
  44. {
  45. 'primary_chain': duplitab._ChainStatus(
  46. sets=[
  47. duplitab._SetStatus(
  48. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  49. ),
  50. ]),
  51. },
  52. ],
  53. [
  54. 'file://{}'.format(os.path.join(test_collections_dir_path,
  55. 'empty', 'single-full')),
  56. {
  57. 'primary_chain': duplitab._ChainStatus(
  58. sets=[
  59. duplitab._SetStatus(
  60. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  61. ),
  62. duplitab._SetStatus(
  63. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35),
  64. ),
  65. duplitab._SetStatus(
  66. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39),
  67. ),
  68. ]),
  69. },
  70. ],
  71. [
  72. 'file://{}'.format(os.path.join(test_collections_dir_path,
  73. 'empty', 'multiple-full')),
  74. {
  75. 'primary_chain': duplitab._ChainStatus(
  76. sets=[
  77. duplitab._SetStatus(
  78. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 47),
  79. ),
  80. duplitab._SetStatus(
  81. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 54),
  82. ),
  83. ]),
  84. },
  85. ],
  86. [
  87. 'file://{}'.format(os.path.join(test_collections_dir_path, 'none')),
  88. {
  89. 'primary_chain': None,
  90. },
  91. ],
  92. ])
  93. def test_collection_request_status(url, expected_status_attr):
  94. c = duplitab.Collection(url=url)
  95. s = c.request_status()
  96. assert not s.archive_dir_path is None
  97. for name, value in expected_status_attr.items():
  98. assert value == getattr(s, name)
  99. @pytest.mark.parametrize(('chain_status', 'expected_time'), [
  100. [
  101. duplitab._ChainStatus(
  102. sets=[
  103. duplitab._SetStatus(
  104. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  105. ),
  106. ]),
  107. datetime.datetime(2016, 10, 27, 19, 57, 33),
  108. ],
  109. [
  110. duplitab._ChainStatus(
  111. sets=[
  112. duplitab._SetStatus(
  113. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  114. ),
  115. duplitab._SetStatus(
  116. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35),
  117. ),
  118. duplitab._SetStatus(
  119. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39),
  120. ),
  121. ]),
  122. datetime.datetime(2016, 10, 27, 19, 57, 39),
  123. ],
  124. ])
  125. def test_chain_status_get_last_backup_time(chain_status, expected_time):
  126. assert expected_time == chain_status.last_backup_time
  127. @pytest.mark.parametrize(('chain_status', 'expected_time'), [
  128. [
  129. duplitab._ChainStatus(
  130. sets=[
  131. duplitab._SetStatus(
  132. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  133. ),
  134. ]),
  135. None,
  136. ],
  137. [
  138. duplitab._ChainStatus(
  139. sets=[
  140. duplitab._SetStatus(
  141. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  142. ),
  143. duplitab._SetStatus(
  144. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35),
  145. ),
  146. duplitab._SetStatus(
  147. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39),
  148. ),
  149. ]),
  150. datetime.datetime(2016, 10, 27, 19, 57, 39),
  151. ],
  152. ])
  153. def test_chain_status_get_last_incremental_backup_time(
  154. chain_status, expected_time):
  155. assert expected_time == chain_status.last_incremental_backup_time
  156. @pytest.mark.parametrize(('chain_status', 'expected_time'), [
  157. [
  158. duplitab._ChainStatus(
  159. sets=[
  160. duplitab._SetStatus(
  161. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  162. ),
  163. ]),
  164. datetime.datetime(2016, 10, 27, 19, 57, 33),
  165. ],
  166. [
  167. duplitab._ChainStatus(
  168. sets=[
  169. duplitab._SetStatus(
  170. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  171. ),
  172. duplitab._SetStatus(
  173. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35),
  174. ),
  175. duplitab._SetStatus(
  176. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39),
  177. ),
  178. ]),
  179. datetime.datetime(2016, 10, 27, 19, 57, 33),
  180. ],
  181. ])
  182. def test_chain_status_get_first_backup_time(chain_status, expected_time):
  183. assert expected_time == chain_status.first_backup_time
  184. @pytest.mark.parametrize(('collection_status', 'expected_time'), [
  185. [
  186. duplitab._CollectionStatus(
  187. archive_dir_path='/tmp/none',
  188. primary_chain=duplitab._ChainStatus(
  189. sets=[
  190. duplitab._SetStatus(
  191. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  192. ),
  193. ]),
  194. ),
  195. None,
  196. ],
  197. [
  198. duplitab._CollectionStatus(
  199. archive_dir_path='/tmp/none',
  200. primary_chain=duplitab._ChainStatus(
  201. sets=[
  202. duplitab._SetStatus(
  203. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  204. ),
  205. duplitab._SetStatus(
  206. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35),
  207. ),
  208. duplitab._SetStatus(
  209. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39),
  210. ),
  211. ]),
  212. ),
  213. datetime.datetime(2016, 10, 27, 19, 57, 39),
  214. ],
  215. [
  216. duplitab._CollectionStatus(
  217. archive_dir_path='/tmp/none',
  218. primary_chain=None,
  219. ),
  220. None,
  221. ],
  222. ])
  223. def test_collection_status_get_last_incremental_backup_time(
  224. collection_status, expected_time):
  225. assert expected_time == collection_status.last_incremental_backup_time
  226. @pytest.mark.parametrize(('collection_status', 'expected_time'), [
  227. [
  228. duplitab._CollectionStatus(
  229. archive_dir_path='/tmp/none',
  230. primary_chain=duplitab._ChainStatus(
  231. sets=[
  232. duplitab._SetStatus(
  233. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  234. ),
  235. ]),
  236. ),
  237. datetime.datetime(2016, 10, 27, 19, 57, 33),
  238. ],
  239. [
  240. duplitab._CollectionStatus(
  241. archive_dir_path='/tmp/none',
  242. primary_chain=duplitab._ChainStatus(
  243. sets=[
  244. duplitab._SetStatus(
  245. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 33),
  246. ),
  247. duplitab._SetStatus(
  248. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 35),
  249. ),
  250. duplitab._SetStatus(
  251. backup_time=datetime.datetime(2016, 10, 27, 19, 57, 39),
  252. ),
  253. ]),
  254. ),
  255. datetime.datetime(2016, 10, 27, 19, 57, 33),
  256. ],
  257. [
  258. duplitab._CollectionStatus(
  259. archive_dir_path='/tmp/none',
  260. primary_chain=None,
  261. ),
  262. None,
  263. ],
  264. ])
  265. def test_collection_status_get_incremental_backup_time(
  266. collection_status, expected_time):
  267. assert expected_time == collection_status.last_full_backup_time