test_collection.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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'), [
  41. [
  42. 'file://{}'.format(os.path.join(test_collections_dir_path, 'empty', 'only-full')),
  43. duplitab._CollectionStatus(
  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. duplitab._CollectionStatus(
  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. duplitab._CollectionStatus(
  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. duplitab._CollectionStatus(
  74. primary_chain=None,
  75. ),
  76. ],
  77. ])
  78. def test_collection_request_status(url, expected_status):
  79. c = duplitab.Collection(url=url)
  80. assert expected_status == c.request_status()