test_repo_create.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. import pytest
  2. from flexmock import flexmock
  3. from borgmatic.actions import repo_create as module
  4. def test_run_repo_create_with_encryption_mode_argument_does_not_raise():
  5. flexmock(module.logger).answer = lambda message: None
  6. flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
  7. flexmock(module.borgmatic.borg.repo_create).should_receive('create_repository')
  8. arguments = flexmock(
  9. encryption_mode=flexmock(),
  10. source_repository=flexmock(),
  11. repository=flexmock(),
  12. copy_crypt_key=flexmock(),
  13. append_only=flexmock(),
  14. storage_quota=flexmock(),
  15. make_parent_directories=flexmock(),
  16. )
  17. module.run_repo_create(
  18. repository={'path': 'repo'},
  19. config={},
  20. local_borg_version=None,
  21. repo_create_arguments=arguments,
  22. global_arguments=flexmock(dry_run=False),
  23. local_path=None,
  24. remote_path=None,
  25. )
  26. def test_run_repo_create_with_encryption_mode_option_does_not_raise():
  27. flexmock(module.logger).answer = lambda message: None
  28. flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
  29. flexmock(module.borgmatic.borg.repo_create).should_receive('create_repository')
  30. arguments = flexmock(
  31. encryption_mode=None,
  32. source_repository=flexmock(),
  33. repository=flexmock(),
  34. copy_crypt_key=flexmock(),
  35. append_only=flexmock(),
  36. storage_quota=flexmock(),
  37. make_parent_directories=flexmock(),
  38. )
  39. module.run_repo_create(
  40. repository={'path': 'repo', 'encryption': flexmock()},
  41. config={},
  42. local_borg_version=None,
  43. repo_create_arguments=arguments,
  44. global_arguments=flexmock(dry_run=False),
  45. local_path=None,
  46. remote_path=None,
  47. )
  48. def test_run_repo_create_without_encryption_mode_raises():
  49. flexmock(module.logger).answer = lambda message: None
  50. flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
  51. flexmock(module.borgmatic.borg.repo_create).should_receive('create_repository')
  52. arguments = flexmock(
  53. encryption_mode=None,
  54. source_repository=flexmock(),
  55. repository=flexmock(),
  56. copy_crypt_key=flexmock(),
  57. append_only=flexmock(),
  58. storage_quota=flexmock(),
  59. make_parent_directories=flexmock(),
  60. )
  61. with pytest.raises(ValueError):
  62. module.run_repo_create(
  63. repository={'path': 'repo'},
  64. config={},
  65. local_borg_version=None,
  66. repo_create_arguments=arguments,
  67. global_arguments=flexmock(dry_run=False),
  68. local_path=None,
  69. remote_path=None,
  70. )
  71. def test_run_repo_create_bails_if_repository_does_not_match():
  72. flexmock(module.logger).answer = lambda message: None
  73. flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(
  74. False
  75. )
  76. flexmock(module.borgmatic.borg.repo_create).should_receive('create_repository').never()
  77. arguments = flexmock(
  78. encryption_mode=flexmock(),
  79. source_repository=flexmock(),
  80. repository=flexmock(),
  81. copy_crypt_key=flexmock(),
  82. append_only=flexmock(),
  83. storage_quota=flexmock(),
  84. make_parent_directories=flexmock(),
  85. )
  86. module.run_repo_create(
  87. repository={'path': 'repo'},
  88. config={},
  89. local_borg_version=None,
  90. repo_create_arguments=arguments,
  91. global_arguments=flexmock(dry_run=False),
  92. local_path=None,
  93. remote_path=None,
  94. )
  95. def test_run_repo_create_favors_flags_over_config():
  96. flexmock(module.logger).answer = lambda message: None
  97. flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
  98. flexmock(module.borgmatic.borg.repo_create).should_receive('create_repository').with_args(
  99. object,
  100. object,
  101. object,
  102. object,
  103. object,
  104. object,
  105. object,
  106. object,
  107. append_only=False,
  108. storage_quota=0,
  109. make_parent_directories=False,
  110. local_path=object,
  111. remote_path=object,
  112. ).once()
  113. arguments = flexmock(
  114. encryption_mode=flexmock(),
  115. source_repository=flexmock(),
  116. repository=flexmock(),
  117. copy_crypt_key=flexmock(),
  118. append_only=False,
  119. storage_quota=0,
  120. make_parent_directories=False,
  121. )
  122. module.run_repo_create(
  123. repository={
  124. 'path': 'repo',
  125. 'append_only': True,
  126. 'storage_quota': '10G',
  127. 'make_parent_directories': True,
  128. },
  129. config={},
  130. local_borg_version=None,
  131. repo_create_arguments=arguments,
  132. global_arguments=flexmock(dry_run=False),
  133. local_path=None,
  134. remote_path=None,
  135. )
  136. def test_run_repo_create_defaults_to_config():
  137. flexmock(module.logger).answer = lambda message: None
  138. flexmock(module.borgmatic.config.validate).should_receive('repositories_match').and_return(True)
  139. flexmock(module.borgmatic.borg.repo_create).should_receive('create_repository').with_args(
  140. object,
  141. object,
  142. object,
  143. object,
  144. object,
  145. object,
  146. object,
  147. object,
  148. append_only=True,
  149. storage_quota='10G',
  150. make_parent_directories=True,
  151. local_path=object,
  152. remote_path=object,
  153. ).once()
  154. arguments = flexmock(
  155. encryption_mode=flexmock(),
  156. source_repository=flexmock(),
  157. repository=flexmock(),
  158. copy_crypt_key=flexmock(),
  159. append_only=None,
  160. storage_quota=None,
  161. make_parent_directories=None,
  162. )
  163. module.run_repo_create(
  164. repository={
  165. 'path': 'repo',
  166. 'append_only': True,
  167. 'storage_quota': '10G',
  168. 'make_parent_directories': True,
  169. },
  170. config={},
  171. local_borg_version=None,
  172. repo_create_arguments=arguments,
  173. global_arguments=flexmock(dry_run=False),
  174. local_path=None,
  175. remote_path=None,
  176. )