rucio-clients 33.4.0.post1__tar.gz → 33.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rucio-clients might be problematic. Click here for more details.

Files changed (188) hide show
  1. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/PKG-INFO +1 -1
  2. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/bin/rucio +0 -44
  3. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/vcsversion.py +3 -3
  4. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/setuputil.py +2 -1
  5. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_replica_recoverer.py +92 -42
  6. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/AUTHORS.rst +0 -0
  7. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/ChangeLog +0 -0
  8. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/LICENSE +0 -0
  9. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/MANIFEST.in +0 -0
  10. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/README.rst +0 -0
  11. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/bin/rucio-admin +0 -0
  12. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/etc/rse-accounts.cfg.template +0 -0
  13. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/etc/rucio.cfg.atlas.client.template +0 -0
  14. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/etc/rucio.cfg.template +0 -0
  15. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/__init__.py +0 -0
  16. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/alembicrevision.py +0 -0
  17. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/__init__.py +0 -0
  18. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/accountclient.py +0 -0
  19. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/accountlimitclient.py +0 -0
  20. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/baseclient.py +0 -0
  21. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/client.py +0 -0
  22. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/configclient.py +0 -0
  23. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/credentialclient.py +0 -0
  24. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/didclient.py +0 -0
  25. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/diracclient.py +0 -0
  26. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/downloadclient.py +0 -0
  27. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/exportclient.py +0 -0
  28. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/fileclient.py +0 -0
  29. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/importclient.py +0 -0
  30. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/lifetimeclient.py +0 -0
  31. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/lockclient.py +0 -0
  32. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/metaclient.py +0 -0
  33. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/pingclient.py +0 -0
  34. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/replicaclient.py +0 -0
  35. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/requestclient.py +0 -0
  36. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/rseclient.py +0 -0
  37. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/ruleclient.py +0 -0
  38. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/scopeclient.py +0 -0
  39. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/subscriptionclient.py +0 -0
  40. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/touchclient.py +0 -0
  41. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/client/uploadclient.py +0 -0
  42. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/__init__.py +0 -0
  43. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/cache.py +0 -0
  44. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/config.py +0 -0
  45. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/constants.py +0 -0
  46. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/constraints.py +0 -0
  47. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/didtype.py +0 -0
  48. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/exception.py +0 -0
  49. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/extra.py +0 -0
  50. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/logging.py +0 -0
  51. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/pcache.py +0 -0
  52. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/policy.py +0 -0
  53. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/__init__.py +0 -0
  54. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/atlas.py +0 -0
  55. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/belleii.py +0 -0
  56. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/cms.py +0 -0
  57. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/domatpc.py +0 -0
  58. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/escape.py +0 -0
  59. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/generic.py +0 -0
  60. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  61. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/icecube.py +0 -0
  62. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/schema/lsst.py +0 -0
  63. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/stomp_utils.py +0 -0
  64. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/stopwatch.py +0 -0
  65. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/test_rucio_server.py +0 -0
  66. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/types.py +0 -0
  67. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/common/utils.py +0 -0
  68. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/__init__.py +0 -0
  69. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  70. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/cache.py +0 -0
  71. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  72. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  73. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/globus.py +0 -0
  74. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/gsiftp.py +0 -0
  75. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  76. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/mock.py +0 -0
  77. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  78. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/posix.py +0 -0
  79. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  80. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  81. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  82. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/srm.py +0 -0
  83. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  84. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/storm.py +0 -0
  85. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  86. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  87. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/rse/rsemanager.py +0 -0
  88. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio/version.py +0 -0
  89. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/lib/rucio_clients.egg-info/SOURCES.txt +0 -0
  90. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/pylintrc +0 -0
  91. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/pyproject.toml +0 -0
  92. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/requirements.txt +0 -0
  93. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/setup.cfg +0 -0
  94. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/setup.py +0 -0
  95. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_abacus_account.py +0 -0
  96. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_abacus_collection_replica.py +0 -0
  97. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_abacus_rse.py +0 -0
  98. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_account.py +0 -0
  99. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_account_limits.py +0 -0
  100. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_api_external_representation.py +0 -0
  101. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_archive.py +0 -0
  102. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_auditor.py +0 -0
  103. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_auditor_hdfs.py +0 -0
  104. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_auditor_srmdumps.py +0 -0
  105. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_authentication.py +0 -0
  106. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_automatix.py +0 -0
  107. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_bad_replica.py +0 -0
  108. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_bb8.py +0 -0
  109. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_belleii.py +0 -0
  110. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_bin_rucio.py +0 -0
  111. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_boolean.py +0 -0
  112. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_clients.py +0 -0
  113. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_common_types.py +0 -0
  114. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_config.py +0 -0
  115. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_conveyor.py +0 -0
  116. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_conveyor_submitter.py +0 -0
  117. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_counter.py +0 -0
  118. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_credential.py +0 -0
  119. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_curl.py +0 -0
  120. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_daemons.py +0 -0
  121. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_dataset_replicas.py +0 -0
  122. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_db.py +0 -0
  123. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_did.py +0 -0
  124. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_did_meta_plugins.py +0 -0
  125. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_didtype.py +0 -0
  126. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_download.py +0 -0
  127. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_dumper.py +0 -0
  128. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_dumper_consistency.py +0 -0
  129. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_dumper_data_model.py +0 -0
  130. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_dumper_path_parsing.py +0 -0
  131. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_filter_engine.py +0 -0
  132. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_heartbeat.py +0 -0
  133. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_hermes.py +0 -0
  134. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_identity.py +0 -0
  135. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_impl_upload_download.py +0 -0
  136. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_import_export.py +0 -0
  137. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_judge_cleaner.py +0 -0
  138. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_judge_evaluator.py +0 -0
  139. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_judge_injector.py +0 -0
  140. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_judge_repairer.py +0 -0
  141. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_lifetime.py +0 -0
  142. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_message.py +0 -0
  143. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_meta.py +0 -0
  144. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_meta_did.py +0 -0
  145. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_module_import.py +0 -0
  146. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_monitor.py +0 -0
  147. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_multi_vo.py +0 -0
  148. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_naming_convention.py +0 -0
  149. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_oauthmanager.py +0 -0
  150. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_oidc.py +0 -0
  151. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_permission.py +0 -0
  152. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_pfns.py +0 -0
  153. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_ping.py +0 -0
  154. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_preparer.py +0 -0
  155. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_qos.py +0 -0
  156. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_quarantined_replica.py +0 -0
  157. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_reaper.py +0 -0
  158. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_redirect.py +0 -0
  159. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_replica.py +0 -0
  160. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_replica_sorting.py +0 -0
  161. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_request.py +0 -0
  162. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_root_proxy.py +0 -0
  163. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse.py +0 -0
  164. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_expression_parser.py +0 -0
  165. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_lfn2path.py +0 -0
  166. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_gfal2.py +0 -0
  167. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  168. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_posix.py +0 -0
  169. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_rclone.py +0 -0
  170. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_rsync.py +0 -0
  171. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_srm.py +0 -0
  172. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_ssh.py +0 -0
  173. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_webdav.py +0 -0
  174. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_protocol_xrootd.py +0 -0
  175. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rse_selector.py +0 -0
  176. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rucio_server.py +0 -0
  177. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_rule.py +0 -0
  178. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_schema_cms.py +0 -0
  179. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_scope.py +0 -0
  180. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_subscription.py +0 -0
  181. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_throttler.py +0 -0
  182. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_tpc.py +0 -0
  183. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_trace.py +0 -0
  184. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_transfer.py +0 -0
  185. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_undertaker.py +0 -0
  186. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_upload.py +0 -0
  187. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tests/test_utils.py +0 -0
  188. {rucio-clients-33.4.0.post1 → rucio-clients-33.6.0}/tools/merge_rucio_configs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rucio-clients
3
- Version: 33.4.0.post1
3
+ Version: 33.6.0
4
4
  Summary: Rucio Client Lite Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -20,7 +20,6 @@ import itertools
20
20
  import logging
21
21
  import math
22
22
  import os
23
- import re
24
23
  import signal
25
24
  import subprocess
26
25
  import sys
@@ -49,7 +48,6 @@ from rucio.common.test_rucio_server import TestRucioServer
49
48
  from rucio.common.utils import sizefmt, Color, detect_client_location, chunks, parse_did_filter_from_string, \
50
49
  parse_did_filter_from_string_fe, extract_scope, setup_logger, StoreAndDeprecateWarningAction
51
50
  from rucio.common.constants import ReplicaState
52
- from rucio.rse.protocols.protocol import RSEProtocol
53
51
 
54
52
  EXTRA_MODULES = import_extras(['argcomplete'])
55
53
 
@@ -868,44 +866,6 @@ def erase(args):
868
866
  return SUCCESS
869
867
 
870
868
 
871
- @exception_handler
872
- def list_impls(args):
873
- """
874
- %(prog)s list-impls
875
-
876
- List protocol implementations.
877
- """
878
-
879
- PROTOCOL_DIRECTORY = '/opt/rucio/lib/rucio/rse/protocols'
880
-
881
- for filename in os.listdir(PROTOCOL_DIRECTORY):
882
- if os.path.isdir(os.path.join(PROTOCOL_DIRECTORY, filename)) or filename in ["__init__.py", "cache.py", "http_cache.py", "dummy.py", "protocol.py"]:
883
- continue
884
- else:
885
- filename = re.sub(r".py", r"", filename)
886
- __import__("rucio.rse.protocols", fromlist=[filename])
887
-
888
- impls = []
889
-
890
- def get_subclasses(cls):
891
- for subclass in cls.__subclasses__():
892
- if (str(subclass)[28:-2]).endswith('Default'):
893
- class_name = str(subclass)[28:-10]
894
- else:
895
- class_name = str(subclass)[28:-2]
896
- impls.append([class_name, subclass.__doc__])
897
- get_subclasses(subclass)
898
-
899
- get_subclasses(RSEProtocol)
900
- impls = sorted(impls)
901
- table = []
902
- for impl in impls:
903
- table.append([impl[0], impl[1]])
904
-
905
- print(tabulate(table, tablefmt=tablefmt, headers=['impl', 'DESCRIPTION']))
906
- return SUCCESS
907
-
908
-
909
869
  @exception_handler
910
870
  def upload(args):
911
871
  """
@@ -2265,10 +2225,6 @@ You can filter by key/value, e.g.::
2265
2225
  list_content_history_parser.set_defaults(function=list_content_history)
2266
2226
  list_content_history_parser.add_argument(dest='dids', nargs='+', action='store', help='List of space separated data identifiers.')
2267
2227
 
2268
- # The list-impls command
2269
- list_impls_parser = subparsers.add_parser('list-impls', help='List all supported protocol implementations.')
2270
- list_impls_parser.set_defaults(function=list_impls)
2271
-
2272
2228
  # The upload subparser
2273
2229
  upload_parser = subparsers.add_parser('upload', help='Upload method.')
2274
2230
  upload_parser.set_defaults(function=upload)
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
4
4
  '''
5
5
  VERSION_INFO = {
6
6
  'final': True,
7
- 'version': '33.4.0.post1',
7
+ 'version': '33.6.0',
8
8
  'branch_nick': 'release-33',
9
- 'revision_id': 'c97a3d9dd1478ed7e74f21c1a7549c8ee6ec6035',
10
- 'revno': 12709
9
+ 'revision_id': '899edfbe2422bc415584854b849aad5bec2ee469',
10
+ 'revno': 12715
11
11
  }
@@ -112,8 +112,9 @@ def run_shell_command(cmd):
112
112
 
113
113
 
114
114
  def get_rucio_version():
115
+ python_executable = "'" + sys.executable + "'"
115
116
  ver = run_shell_command(
116
- "PYTHONPATH=lib " + sys.executable + " -c "
117
+ "PYTHONPATH=lib " + python_executable + " -c "
117
118
  '"from rucio import version; print(version.version_string())"'
118
119
  )
119
120
  if not ver:
@@ -55,12 +55,14 @@ class TestReplicaRecoverer:
55
55
  self.tmp_file8 = file_factory.file_generator()
56
56
  self.tmp_file9 = file_factory.file_generator()
57
57
  self.tmp_file10 = file_factory.file_generator()
58
- self.tmp_file11 = file_factory.file_generator()
58
+ self.tmp_file11 = file_factory.file_generator() # tmp_file11 shouldn't be declare as bad, as it doesn't have a data type.
59
+ self.tmp_file12 = file_factory.file_generator() # tmp_file12 is used to test the creation of rules by the daemon.
60
+ self.tmp_file13 = file_factory.file_generator()
59
61
 
60
62
  self.listdids_mock = [{'scope': mock_scope, 'name': f.name, 'type': DIDType.FILE}
61
- for f in [self.tmp_file1, self.tmp_file2, self.tmp_file3, self.tmp_file4, self.tmp_file5, self.tmp_file6]]
63
+ for f in [self.tmp_file1, self.tmp_file2, self.tmp_file3, self.tmp_file4, self.tmp_file5, self.tmp_file6, self.tmp_file12]]
62
64
  self.listdids_declarebad = [{'scope': self.scope_declarebad, 'name': f.name, 'type': DIDType.FILE}
63
- for f in [self.tmp_file7, self.tmp_file9, self.tmp_file11]]
65
+ for f in [self.tmp_file7, self.tmp_file9, self.tmp_file11, self.tmp_file13]]
64
66
  self.listdids_nopolicy = [{'scope': self.scope_nopolicy, 'name': f.name, 'type': DIDType.FILE}
65
67
  for f in [self.tmp_file8]]
66
68
  self.listdids_ignore = [{'scope': self.scope_ignore, 'name': f.name, 'type': DIDType.FILE}
@@ -68,14 +70,14 @@ class TestReplicaRecoverer:
68
70
 
69
71
  for rse in [self.rse4suspicious, self.rse4recovery]:
70
72
  # Upload files with scope "mock_scope"
71
- cmd = 'rucio -v upload --rse {0} --scope {1} {2} {3} {4} {5} {6} {7}'.format(rse, mock_scope.external, self.tmp_file1, self.tmp_file2, self.tmp_file3, self.tmp_file4, self.tmp_file5, self.tmp_file6)
73
+ cmd = 'rucio -v upload --rse {0} --scope {1} {2} {3} {4} {5} {6} {7} {8}'.format(rse, mock_scope.external, self.tmp_file1, self.tmp_file2, self.tmp_file3, self.tmp_file4, self.tmp_file5, self.tmp_file6, self.tmp_file12)
72
74
  exitcode, out, err = execute(cmd)
73
75
  print("mock_scope:", exitcode, out, err)
74
76
  # checking if Rucio upload went OK
75
77
  assert exitcode == 0
76
78
 
77
79
  # Upload files with scope "scope_declarebad"
78
- cmd = 'rucio -v upload --rse {0} --scope {1} {2} {3} {4}'.format(rse, self.scope_declarebad.external, self.tmp_file7, self.tmp_file9, self.tmp_file11)
80
+ cmd = 'rucio -v upload --rse {0} --scope {1} {2} {3} {4} {5}'.format(rse, self.scope_declarebad.external, self.tmp_file7, self.tmp_file9, self.tmp_file11, self.tmp_file13)
79
81
  exitcode, out, err = execute(cmd)
80
82
  print("scope_declarebad:", exitcode, out, err)
81
83
  # checking if Rucio upload went OK
@@ -109,7 +111,8 @@ class TestReplicaRecoverer:
109
111
  set_metadata(self.scope_nopolicy, self.tmp_file8.name, 'datatype', 'testtypenopolicy')
110
112
  set_metadata(self.scope_declarebad, self.tmp_file9.name, 'datatype', 'testtypeignore')
111
113
  set_metadata(self.scope_ignore, self.tmp_file10.name, 'datatype', 'testtypedeclarebad')
112
- # tmp_file11 doesn't have a datatype.
114
+ set_metadata(self.scope_declarebad, self.tmp_file13.name, 'datatype', 'testtypedryrun')
115
+ # tmp_file1, 2, 11 and 12 don't have a datatypes.
113
116
 
114
117
  # Allow for the RSEs to be affected by the suspicious file recovery daemon
115
118
  add_rse_attribute(self.rse4suspicious_id, "enable_suspicious_file_recovery", True)
@@ -127,15 +130,17 @@ class TestReplicaRecoverer:
127
130
  remove(self.tmp_file9)
128
131
  remove(self.tmp_file10)
129
132
  remove(self.tmp_file11)
133
+ remove(self.tmp_file12)
134
+ remove(self.tmp_file13)
130
135
 
131
136
  # Reset the cache to include the new RSEs
132
137
  rse_expression_parser.REGION.invalidate()
133
138
 
134
139
  # Gather replica info
135
- replicalist_mock = list(list_replicas(dids=self.listdids_mock))
136
- replicalist_declarebad = list(list_replicas(dids=self.listdids_declarebad))
137
- replicalist_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
138
- replicalist_ignore = list(list_replicas(dids=self.listdids_ignore))
140
+ replicalist_scope_mock = list(list_replicas(dids=self.listdids_mock))
141
+ replicalist_scope_declarebad = list(list_replicas(dids=self.listdids_declarebad))
142
+ replicalist_scope_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
143
+ replicalist_scope_ignore = list(list_replicas(dids=self.listdids_ignore))
139
144
 
140
145
  # Changing the replica statuses as follows:
141
146
  # ----------------------------------------------------------------------------------------------------------------------------------------------------
@@ -152,16 +157,26 @@ class TestReplicaRecoverer:
152
157
  # tmp_file9 unavailable suspicious (available) scope_declarebad testtypeignore
153
158
  # tmp_file10 unavailable suspicious (available) scope_ignore testtypedeclarebad
154
159
  # tmp_file11 unavailable suspicious (available) scope_declarebad <none>
160
+ # tmp_file12 unavailable suspicious (available) mock_scope <none>
161
+ # tmp_file13 unavailable suspicious (available) scope_declarebad testtypedryrun
155
162
  # ----------------------------------------------------------------------------------------------------------------------------------------------------
156
163
 
157
- for replica in replicalist_mock:
164
+ for replica in replicalist_scope_mock:
158
165
  suspicious_pfns = replica['rses'][self.rse4suspicious_id]
159
- # Declare each file as suspicious multiple times
160
- for i in range(3):
166
+ # Declare each file as suspicious multiple times, apart from tmp_file12, which
167
+ # should only be declared suspicious once. tmp_file12 is used to test the
168
+ # creation of rules by the daemon.
169
+ if replica['name'] == self.tmp_file12.name:
161
170
  print("Declaring suspicious file replica: " + suspicious_pfns[0])
162
171
  # The reason must contain the word "checksum", so that the replica can be declared bad.
163
172
  replica_client.declare_suspicious_file_replicas([suspicious_pfns[0], ], 'checksum')
164
173
  sleep(1)
174
+ else:
175
+ for i in range(3):
176
+ print("Declaring suspicious file replica: " + suspicious_pfns[0])
177
+ # The reason must contain the word "checksum", so that the replica can be declared bad.
178
+ replica_client.declare_suspicious_file_replicas([suspicious_pfns[0], ], 'checksum')
179
+ sleep(1)
165
180
  if replica['name'] == self.tmp_file2.name:
166
181
  print("Declaring bad file replica: " + suspicious_pfns[0])
167
182
  replica_client.declare_bad_file_replicas([suspicious_pfns[0], ], 'checksum')
@@ -177,8 +192,11 @@ class TestReplicaRecoverer:
177
192
  if replica['name'] == self.tmp_file6.name:
178
193
  print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
179
194
  update_replica_state(self.rse4recovery_id, mock_scope, self.tmp_file6.name, ReplicaState.UNAVAILABLE)
195
+ if replica['name'] == self.tmp_file12.name:
196
+ print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
197
+ update_replica_state(self.rse4recovery_id, mock_scope, self.tmp_file12.name, ReplicaState.UNAVAILABLE)
180
198
 
181
- for replica in replicalist_declarebad:
199
+ for replica in replicalist_scope_declarebad:
182
200
  suspicious_pfns = replica['rses'][self.rse4suspicious_id]
183
201
  # Declare each file as suspicious multiple times
184
202
  for i in range(3):
@@ -195,8 +213,11 @@ class TestReplicaRecoverer:
195
213
  if replica['name'] == self.tmp_file11.name:
196
214
  print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
197
215
  update_replica_state(self.rse4recovery_id, self.scope_declarebad, self.tmp_file11.name, ReplicaState.UNAVAILABLE)
216
+ if replica['name'] == self.tmp_file13.name:
217
+ print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
218
+ update_replica_state(self.rse4recovery_id, self.scope_declarebad, self.tmp_file13.name, ReplicaState.UNAVAILABLE)
198
219
 
199
- for replica in replicalist_nopolicy:
220
+ for replica in replicalist_scope_nopolicy:
200
221
  suspicious_pfns = replica['rses'][self.rse4suspicious_id]
201
222
  # Declare each file as suspicious multiple times
202
223
  for i in range(3):
@@ -208,7 +229,7 @@ class TestReplicaRecoverer:
208
229
  print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
209
230
  update_replica_state(self.rse4recovery_id, self.scope_nopolicy, self.tmp_file8.name, ReplicaState.UNAVAILABLE)
210
231
 
211
- for replica in replicalist_ignore:
232
+ for replica in replicalist_scope_ignore:
212
233
  suspicious_pfns = replica['rses'][self.rse4suspicious_id]
213
234
  # Declare each file as suspicious multiple times
214
235
  for i in range(3):
@@ -221,13 +242,13 @@ class TestReplicaRecoverer:
221
242
  update_replica_state(self.rse4recovery_id, self.scope_ignore, self.tmp_file10.name, ReplicaState.UNAVAILABLE)
222
243
 
223
244
  # Gather replica info after setting initial replica statuses
224
- replicalist_mock = list(list_replicas(dids=self.listdids_mock))
225
- replicalist_declarebad = list(list_replicas(dids=self.listdids_declarebad))
226
- replicalist_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
227
- replicalist_ignore = list(list_replicas(dids=self.listdids_ignore))
245
+ replicalist_scope_mock = list(list_replicas(dids=self.listdids_mock))
246
+ replicalist_scope_declarebad = list(list_replicas(dids=self.listdids_declarebad))
247
+ replicalist_scope_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
248
+ replicalist_scope_ignore = list(list_replicas(dids=self.listdids_ignore))
228
249
 
229
250
  # Checking if the status changes were effective
230
- for replica in replicalist_mock:
251
+ for replica in replicalist_scope_mock:
231
252
  if replica['name'] == self.tmp_file1.name:
232
253
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
233
254
  assert replica['states'][self.rse4recovery_id] == 'AVAILABLE'
@@ -246,8 +267,11 @@ class TestReplicaRecoverer:
246
267
  if replica['name'] == self.tmp_file6.name:
247
268
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
248
269
  assert (self.rse4recovery_id in replica['states']) is False
270
+ if replica['name'] == self.tmp_file12.name:
271
+ assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
272
+ assert (self.rse4recovery_id in replica['states']) is False
249
273
 
250
- for replica in replicalist_declarebad:
274
+ for replica in replicalist_scope_declarebad:
251
275
  if replica['name'] == self.tmp_file7.name:
252
276
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
253
277
  assert (self.rse4recovery_id in replica['states']) is False
@@ -255,16 +279,19 @@ class TestReplicaRecoverer:
255
279
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
256
280
  assert (self.rse4recovery_id in replica['states']) is False
257
281
  if replica['name'] == self.tmp_file11.name:
258
- # tmp_file11 should be ignored, as it doesn't have a datatype
282
+ # tmp_file11 should be ignored, as it doesn't have a datatype
283
+ assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
284
+ assert (self.rse4recovery_id in replica['states']) is False
285
+ if replica['name'] == self.tmp_file13.name:
259
286
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
260
287
  assert (self.rse4recovery_id in replica['states']) is False
261
288
 
262
- for replica in replicalist_nopolicy:
289
+ for replica in replicalist_scope_nopolicy:
263
290
  if replica['name'] == self.tmp_file8.name:
264
291
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
265
292
  assert (self.rse4recovery_id in replica['states']) is False
266
293
 
267
- for replica in replicalist_ignore:
294
+ for replica in replicalist_scope_ignore:
268
295
  if replica['name'] == self.tmp_file10.name:
269
296
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
270
297
  assert (self.rse4recovery_id in replica['states']) is False
@@ -285,6 +312,8 @@ class TestReplicaRecoverer:
285
312
  assert (self.tmp_file9.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
286
313
  assert (self.tmp_file10.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
287
314
  assert (self.tmp_file11.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
315
+ assert (self.tmp_file12.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
316
+ assert (self.tmp_file13.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
288
317
 
289
318
  bad_replicas_list = list_bad_replicas_status(rse_id=self.rse4recovery_id, younger_than=self.from_date, vo=vo)
290
319
  bad_checklist = [(badf['name'], badf['rse_id'], badf['state']) for badf in bad_replicas_list]
@@ -300,6 +329,8 @@ class TestReplicaRecoverer:
300
329
  assert (self.tmp_file9.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
301
330
  assert (self.tmp_file10.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
302
331
  assert (self.tmp_file11.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
332
+ assert (self.tmp_file12.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
333
+ assert (self.tmp_file13.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
303
334
 
304
335
  # Purposefully not checking for the 'SUSPICIOUS' status on rse4suspicious.
305
336
  # The only existing function (to date) gathering info about 'SUSPICIOUS' replicas
@@ -318,10 +349,11 @@ class TestReplicaRecoverer:
318
349
  # "datatype": [] and "scope": [] are wildcards; they stand for every datatype or scope.
319
350
  json_testentry1 = {"action": "ignore", "datatype": ["testtypedeclarebad"], "scope": [str(self.scope_ignore)]}
320
351
  json_testentry2 = {"action": "declare bad", "datatype": ["testtypeignore"], "scope": [str(self.scope_declarebad)]}
321
- json_testentry3 = {"action": "declare bad", "datatype": ["testtypedeclarebad"], "scope": []}
322
- json_testentry4 = {"action": "ignore", "datatype": ["testtypeignore"], "scope": []}
323
- json_testentry5 = {"action": "declare bad", "datatype": [], "scope": [str(self.scope_declarebad)]}
324
- json_testentry6 = {"action": "ignore", "datatype": [], "scope": [str(self.scope_ignore)]}
352
+ json_testentry3 = {"action": "dry run", "datatype": ["testtypedryrun"], "scope": [str(self.scope_declarebad)]}
353
+ json_testentry4 = {"action": "declare bad", "datatype": ["testtypedeclarebad"], "scope": []}
354
+ json_testentry5 = {"action": "ignore", "datatype": ["testtypeignore"], "scope": []}
355
+ json_testentry6 = {"action": "declare bad", "datatype": [], "scope": [str(self.scope_declarebad)]}
356
+ json_testentry7 = {"action": "ignore", "datatype": [], "scope": [str(self.scope_ignore)]}
325
357
  json_data.append(json_HITS)
326
358
  json_data.append(json_RAW)
327
359
  json_data.append(json_testentry1)
@@ -330,6 +362,7 @@ class TestReplicaRecoverer:
330
362
  json_data.append(json_testentry4)
331
363
  json_data.append(json_testentry5)
332
364
  json_data.append(json_testentry6)
365
+ json_data.append(json_testentry7)
333
366
  json.dump(json_data, json_file)
334
367
 
335
368
  def test_replica_recoverer(self, vo):
@@ -354,6 +387,9 @@ class TestReplicaRecoverer:
354
387
  # tmp_file8 unavailable suspicious (available) scope_nopolicy testtypenopolicy
355
388
  # tmp_file9 unavailable suspicious (available) scope_declarebad testtypeignore
356
389
  # tmp_file10 unavailable suspicious (available) scope_ignore testtypedeclarebad
390
+ # tmp_file11 unavailable suspicious (available) scope_declarebad <none>
391
+ # tmp_file12 unavailable suspicious (available) mock_scope <none>
392
+ # tmp_file13 unavailable suspicious (available) scope_declarebad testtypedryrun
357
393
  # ----------------------------------------------------------------------------------------------------------------------------------------------------
358
394
 
359
395
  - Explaination: Suspicious replicas that are the last remaining copy (unavailable on rse4recovery) are handeled differently depending
@@ -374,7 +410,7 @@ class TestReplicaRecoverer:
374
410
 
375
411
  Concluding:
376
412
 
377
- - checks that tmp_file1, tmp_file4, tmp_file7, tmp_file9 and tmp_file10 were declared as 'BAD' on rse4suspicious
413
+ - checks that tmp_file1, tmp_file4, tmp_file7, tmp_file9, tmp_file10 were declared as 'BAD' on rse4suspicious
378
414
 
379
415
  """
380
416
 
@@ -384,12 +420,12 @@ class TestReplicaRecoverer:
384
420
  stop()
385
421
 
386
422
  # Checking the outcome:
387
- # We expect to see four changes: tmp_file1, tmp_file4, tmp_file7 and tmp_file9 should be declared as bad on rse4suspicious
423
+ # We expect to see four changes: tmp_file1, tmp_file4, tmp_file7, tmp_file9, tmp_file10 should be declared as bad on rse4suspicious
388
424
  # ----------------------------------------------------------------------------------------------------------------------------------------------------
389
425
  # Name State(s) declared on rse4recovery State(s) declared on rse4suspicious Scope Metadata "datatype"
390
426
  # ----------------------------------------------------------------------------------------------------------------------------------------------------
391
- # tmp_file1 available suspicious + bad (unavailable) mock_scope
392
- # tmp_file2 available suspicious + bad (unavailable) mock_scope
427
+ # tmp_file1 available suspicious + bad (unavailable) mock_scope <none>
428
+ # tmp_file2 available suspicious + bad (unavailable) mock_scope <none>
393
429
  # tmp_file3 unavailable suspicious (available) mock_scope RAW
394
430
  # tmp_file4 unavailable suspicious + bad (unavailable) mock_scope testtypedeclarebad
395
431
  # tmp_file5 unavailable suspicious (available) mock_scope testtypenopolicy
@@ -398,15 +434,18 @@ class TestReplicaRecoverer:
398
434
  # tmp_file8 unavailable suspicious (available) scope_nopolicy testtypenopolicy
399
435
  # tmp_file9 unavailable suspicious + bad (unavailable) scope_declarebad testtypeignore
400
436
  # tmp_file10 unavailable suspicious (available) scope_ignore testtypedeclarebad
437
+ # tmp_file11 unavailable suspicious (available) scope_declarebad <none>
438
+ # tmp_file12 unavailable suspicious (available) mock_scope <none>
439
+ # tmp_file13 unavailable suspicious (available) scope_declarebad testtypedryrun
401
440
  # ----------------------------------------------------------------------------------------------------------------------------------------------------
402
441
 
403
442
  # Gather replica info after replica_recoverer has run.
404
- replicalist_mock = list(list_replicas(dids=self.listdids_mock))
405
- replicalist_declarebad = list(list_replicas(dids=self.listdids_declarebad))
406
- replicalist_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
407
- replicalist_ignore = list(list_replicas(dids=self.listdids_ignore))
443
+ replicalist_scope_mock = list(list_replicas(dids=self.listdids_mock))
444
+ replicalist_scope_declarebad = list(list_replicas(dids=self.listdids_declarebad))
445
+ replicalist_scope_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
446
+ replicalist_scope_ignore = list(list_replicas(dids=self.listdids_ignore))
408
447
 
409
- for replica in replicalist_mock:
448
+ for replica in replicalist_scope_mock:
410
449
  if replica['name'] == self.tmp_file1.name or replica['name'] == self.tmp_file2.name:
411
450
  assert (self.rse4suspicious_id in replica['states']) is False
412
451
  assert replica['states'][self.rse4recovery_id] == 'AVAILABLE'
@@ -419,24 +458,31 @@ class TestReplicaRecoverer:
419
458
  if replica['name'] == self.tmp_file5.name:
420
459
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
421
460
  assert (self.rse4recovery_id in replica['states']) is False
461
+ if replica['name'] == self.tmp_file12.name:
462
+ assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
463
+ assert (self.rse4recovery_id in replica['states']) is False
422
464
 
423
- for replica in replicalist_declarebad:
465
+ for replica in replicalist_scope_declarebad:
424
466
  if replica['name'] == self.tmp_file7.name:
425
467
  # The 'states' key doesn't exist if the replica isn't available on at least one RSE
426
468
  assert not replica.get('states')
427
469
  if replica['name'] == self.tmp_file9.name:
428
470
  assert not replica.get('states')
429
471
  if replica['name'] == self.tmp_file11.name:
430
- # tmp_file11 should have been ignored, as it doesn't have a datatype
472
+ # tmp_file11 should have been ignored, as it doesn't have a datatype
473
+ assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
474
+ assert (self.rse4recovery_id in replica['states']) is False
475
+ if replica['name'] == self.tmp_file13.name:
476
+ # tmp_file13 should have been ignored, as it is running as a dry run
431
477
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
432
478
  assert (self.rse4recovery_id in replica['states']) is False
433
479
 
434
- for replica in replicalist_nopolicy:
480
+ for replica in replicalist_scope_nopolicy:
435
481
  if replica['name'] == self.tmp_file8.name:
436
482
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
437
483
  assert (self.rse4recovery_id in replica['states']) is False
438
484
 
439
- for replica in replicalist_ignore:
485
+ for replica in replicalist_scope_ignore:
440
486
  if replica['name'] == self.tmp_file10.name:
441
487
  assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
442
488
  assert (self.rse4recovery_id in replica['states']) is False
@@ -456,6 +502,8 @@ class TestReplicaRecoverer:
456
502
  assert (self.tmp_file9.name, self.rse4suspicious_id, BadFilesStatus.BAD) in bad_checklist
457
503
  assert (self.tmp_file10.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
458
504
  assert (self.tmp_file11.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
505
+ assert (self.tmp_file12.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
506
+ assert (self.tmp_file13.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
459
507
 
460
508
  bad_replicas_list = list_bad_replicas_status(rse_id=self.rse4recovery_id, younger_than=self.from_date, vo=vo)
461
509
  bad_checklist = [(badf['name'], badf['rse_id'], badf['state']) for badf in bad_replicas_list]
@@ -471,3 +519,5 @@ class TestReplicaRecoverer:
471
519
  assert (self.tmp_file9.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
472
520
  assert (self.tmp_file10.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
473
521
  assert (self.tmp_file11.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
522
+ assert (self.tmp_file12.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
523
+ assert (self.tmp_file13.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist