sts-libs 2.2.0__tar.gz → 2.4.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.
Files changed (973) hide show
  1. sts_libs-2.4.0/.packit.yaml +52 -0
  2. sts_libs-2.4.0/.scripts/sync_sts.py +493 -0
  3. sts_libs-2.4.0/AGENTS.md +119 -0
  4. sts_libs-2.4.0/PKG-INFO +65 -0
  5. sts_libs-2.4.0/README.md +85 -0
  6. sts_libs-2.4.0/docs/contributing/writing-tests.md +317 -0
  7. sts_libs-2.4.0/docs/sts-libs/fixtures.md +89 -0
  8. sts_libs-2.4.0/docs/sts-libs/utils.md +83 -0
  9. sts_libs-2.4.0/plans/ahci/main.fmf +9 -0
  10. sts_libs-2.4.0/plans/block/virtual-hw.fmf +16 -0
  11. sts_libs-2.4.0/plans/block/virtual.fmf +13 -0
  12. sts_libs-2.4.0/plans/boom/tier2.fmf +42 -0
  13. sts_libs-2.4.0/plans/device-mapper/tier1.fmf +15 -0
  14. sts_libs-2.4.0/plans/dmpd/tier1.fmf +11 -0
  15. sts_libs-2.4.0/plans/image_mode/device-mapper.fmf +6 -0
  16. sts_libs-2.4.0/plans/image_mode/dmpd.fmf +5 -0
  17. sts_libs-2.4.0/plans/image_mode/lvm.fmf +6 -0
  18. sts_libs-2.4.0/plans/image_mode/multipath.fmf +6 -0
  19. sts_libs-2.4.0/plans/image_mode/stratis.fmf +8 -0
  20. sts_libs-2.4.0/plans/image_mode/udisks2.fmf +8 -0
  21. sts_libs-2.4.0/plans/iscsi/offload/main.fmf +6 -0
  22. sts_libs-2.4.0/plans/lio/core.fmf +7 -0
  23. sts_libs-2.4.0/plans/lvm/tier1.fmf +12 -0
  24. sts_libs-2.4.0/plans/main.fmf +63 -0
  25. sts_libs-2.4.0/plans/multipath/tier1.fmf +8 -0
  26. sts_libs-2.4.0/plans/scsi/main.fmf +4 -0
  27. sts_libs-2.4.0/plans/snapm/tier2.fmf +42 -0
  28. sts_libs-2.4.0/plans/stratis/tier1.fmf +12 -0
  29. sts_libs-2.4.0/plans/stratis/tier2-linear.fmf +18 -0
  30. sts_libs-2.4.0/plans/stratis/tier2-mdraid1.fmf +17 -0
  31. sts_libs-2.4.0/plans/stratis/tier2-raid1.fmf +18 -0
  32. sts_libs-2.4.0/plans/sts-ci/ci.fmf +16 -0
  33. sts_libs-2.4.0/plans/udisks2/tier1.fmf +12 -0
  34. sts_libs-2.4.0/plans/udisks2/tier2.fmf +12 -0
  35. sts_libs-2.4.0/plans/udisks2/tier3.fmf +18 -0
  36. sts_libs-2.4.0/plans/vdo/tier2-high-memory.fmf +13 -0
  37. sts_libs-2.4.0/pyproject.toml +245 -0
  38. sts_libs-2.4.0/sts_libs/src/sts/ahci.py +261 -0
  39. sts_libs-2.4.0/sts_libs/src/sts/base.py +158 -0
  40. sts_libs-2.4.0/sts_libs/src/sts/blockdevice.py +701 -0
  41. sts_libs-2.4.0/sts_libs/src/sts/fio/fio.py +214 -0
  42. sts_libs-2.4.0/sts_libs/src/sts/fio/parameters.py +126 -0
  43. sts_libs-2.4.0/sts_libs/src/sts/fixtures/ahci_fixtures.py +134 -0
  44. sts_libs-2.4.0/sts_libs/src/sts/fixtures/block_fixtures.py +624 -0
  45. sts_libs-2.4.0/sts_libs/src/sts/fixtures/common_fixtures.py +327 -0
  46. sts_libs-2.4.0/sts_libs/src/sts/fixtures/dm_fixtures.py +782 -0
  47. sts_libs-2.4.0/sts_libs/src/sts/fixtures/dmpd_fixtures.py +573 -0
  48. sts_libs-2.4.0/sts_libs/src/sts/fixtures/lvm_fixtures.py +783 -0
  49. sts_libs-2.4.0/sts_libs/src/sts/fixtures/module_fixtures.py +211 -0
  50. sts_libs-2.4.0/sts_libs/src/sts/fixtures/multipath_fixtures.py +346 -0
  51. sts_libs-2.4.0/sts_libs/src/sts/fixtures/service_fixtures.py +201 -0
  52. sts_libs-2.4.0/sts_libs/src/sts/fixtures/sg3_utils_fixtures.py +75 -0
  53. sts_libs-2.4.0/sts_libs/src/sts/fixtures/snapm_fixtures.py +430 -0
  54. sts_libs-2.4.0/sts_libs/src/sts/fixtures/stratis_fixtures.py +412 -0
  55. sts_libs-2.4.0/sts_libs/src/sts/fixtures/udisks2_fixtures.py +120 -0
  56. sts_libs-2.4.0/sts_libs/src/sts/hdparm.py +163 -0
  57. sts_libs-2.4.0/sts_libs/src/sts/loop.py +410 -0
  58. sts_libs-2.4.0/sts_libs/src/sts/lvm/options.py +170 -0
  59. sts_libs-2.4.0/sts_libs/src/sts/lvm/volume_group.py +185 -0
  60. sts_libs-2.4.0/sts_libs/src/sts/marks.py +89 -0
  61. sts_libs-2.4.0/sts_libs/src/sts/md.py +219 -0
  62. sts_libs-2.4.0/sts_libs/src/sts/multipath.py +345 -0
  63. sts_libs-2.4.0/sts_libs/src/sts/nbd.py +346 -0
  64. sts_libs-2.4.0/sts_libs/src/sts/null_blk.py +155 -0
  65. sts_libs-2.4.0/sts_libs/src/sts/scsi.py +346 -0
  66. sts_libs-2.4.0/sts_libs/src/sts/scsi_debug.py +235 -0
  67. sts_libs-2.4.0/sts_libs/src/sts/smartctl.py +191 -0
  68. sts_libs-2.4.0/sts_libs/src/sts/target.py +679 -0
  69. sts_libs-2.4.0/sts_libs/src/sts/utils/__init__.py +24 -0
  70. sts_libs-2.4.0/sts_libs/src/sts/utils/cmdline.py +157 -0
  71. sts_libs-2.4.0/sts_libs/src/sts/utils/errors.py +84 -0
  72. sts_libs-2.4.0/sts_libs/src/sts/utils/files.py +421 -0
  73. sts_libs-2.4.0/sts_libs/src/sts/utils/fmf_markers.py +200 -0
  74. sts_libs-2.4.0/sts_libs/src/sts/utils/fstab.py +227 -0
  75. sts_libs-2.4.0/sts_libs/src/sts/utils/modules.py +507 -0
  76. sts_libs-2.4.0/sts_libs/src/sts/utils/syscheck.py +275 -0
  77. sts_libs-2.4.0/sts_libs/src/sts/utils/system.py +453 -0
  78. sts_libs-2.4.0/sts_libs/src/sts/utils/teststate.py +82 -0
  79. sts_libs-2.4.0/sts_libs/src/sts/utils/version.py +114 -0
  80. sts_libs-2.4.0/sts_libs/src/sts/zram.py +213 -0
  81. sts_libs-2.4.0/sts_libs/tests/fio/test_fio.py +209 -0
  82. sts_libs-2.4.0/sts_libs/tests/fio/test_parameters.py +92 -0
  83. sts_libs-2.4.0/sts_libs/tests/fixtures/test_module_fixtures.py +156 -0
  84. sts_libs-2.4.0/sts_libs/tests/fixtures/test_multipath_fixtures.py +94 -0
  85. sts_libs-2.4.0/sts_libs/tests/fixtures/test_service_fixtures.py +152 -0
  86. sts_libs-2.4.0/sts_libs/tests/helpers/test_boom_boot.py +33 -0
  87. sts_libs-2.4.0/sts_libs/tests/helpers/test_root_lvm.py +209 -0
  88. sts_libs-2.4.0/sts_libs/tests/helpers/test_snapm_boot.py +59 -0
  89. sts_libs-2.4.0/sts_libs/tests/helpers/test_tmt_reboot.py +64 -0
  90. sts_libs-2.4.0/sts_libs/tests/lvm/test_logical_volume.py +507 -0
  91. sts_libs-2.4.0/sts_libs/tests/lvm/test_options.py +43 -0
  92. sts_libs-2.4.0/sts_libs/tests/lvm/test_volume_group.py +343 -0
  93. sts_libs-2.4.0/sts_libs/tests/stratis/__init__.py +0 -0
  94. sts_libs-2.4.0/sts_libs/tests/test_ahci.py +122 -0
  95. sts_libs-2.4.0/sts_libs/tests/test_base.py +75 -0
  96. sts_libs-2.4.0/sts_libs/tests/test_block_fixtures.py +1863 -0
  97. sts_libs-2.4.0/sts_libs/tests/test_blockdevice.py +936 -0
  98. sts_libs-2.4.0/sts_libs/tests/test_hdparm.py +190 -0
  99. sts_libs-2.4.0/sts_libs/tests/test_loop.py +682 -0
  100. sts_libs-2.4.0/sts_libs/tests/test_marks.py +162 -0
  101. sts_libs-2.4.0/sts_libs/tests/test_md.py +334 -0
  102. sts_libs-2.4.0/sts_libs/tests/test_module_fixtures.py +98 -0
  103. sts_libs-2.4.0/sts_libs/tests/test_multipath.py +613 -0
  104. sts_libs-2.4.0/sts_libs/tests/test_nbd.py +499 -0
  105. sts_libs-2.4.0/sts_libs/tests/test_null_blk.py +284 -0
  106. sts_libs-2.4.0/sts_libs/tests/test_scsi.py +585 -0
  107. sts_libs-2.4.0/sts_libs/tests/test_scsi_debug.py +245 -0
  108. sts_libs-2.4.0/sts_libs/tests/test_smartctl.py +187 -0
  109. sts_libs-2.4.0/sts_libs/tests/test_syscheck.py +452 -0
  110. sts_libs-2.4.0/sts_libs/tests/test_udisks2.py +95 -0
  111. sts_libs-2.4.0/sts_libs/tests/test_version.py +265 -0
  112. sts_libs-2.4.0/sts_libs/tests/test_zram.py +364 -0
  113. sts_libs-2.4.0/sts_libs/tests/utils/__init__.py +0 -0
  114. sts_libs-2.4.0/sts_libs/tests/utils/test_files.py +761 -0
  115. sts_libs-2.4.0/sts_libs/tests/utils/test_fmf_markers.py +111 -0
  116. sts_libs-2.4.0/sts_libs/tests/utils/test_modules.py +1216 -0
  117. sts_libs-2.4.0/tests/ahci/conftest.py +19 -0
  118. sts_libs-2.4.0/tests/ahci/main.fmf +39 -0
  119. sts_libs-2.4.0/tests/ahci/test_benchmarks.py +85 -0
  120. sts_libs-2.4.0/tests/ahci/test_detection.py +60 -0
  121. sts_libs-2.4.0/tests/ahci/test_error_recovery.py +105 -0
  122. sts_libs-2.4.0/tests/ahci/test_ncq.py +115 -0
  123. sts_libs-2.4.0/tests/ahci/test_sanity.py +39 -0
  124. sts_libs-2.4.0/tests/block/cgroup/main.fmf +7 -0
  125. sts_libs-2.4.0/tests/block/cgroup/test_blkio_throttle.py +299 -0
  126. sts_libs-2.4.0/tests/block/conftest.py +16 -0
  127. sts_libs-2.4.0/tests/block/cpu_hotplug/main.fmf +9 -0
  128. sts_libs-2.4.0/tests/block/cpu_hotplug/test_cpu_offline_io.py +324 -0
  129. sts_libs-2.4.0/tests/block/identity/main.fmf +7 -0
  130. sts_libs-2.4.0/tests/block/identity/test_diskstats.py +210 -0
  131. sts_libs-2.4.0/tests/block/io_scheduler/main.fmf +17 -0
  132. sts_libs-2.4.0/tests/block/io_scheduler/test_elevator_switch_race.py +976 -0
  133. sts_libs-2.4.0/tests/block/io_scheduler/test_scheduler_switch.py +73 -0
  134. sts_libs-2.4.0/tests/block/loop/main.fmf +7 -0
  135. sts_libs-2.4.0/tests/block/loop/test_partition_uevent.py +402 -0
  136. sts_libs-2.4.0/tests/block/main.fmf +7 -0
  137. sts_libs-2.4.0/tests/block/md/conftest.py +162 -0
  138. sts_libs-2.4.0/tests/block/md/main.fmf +21 -0
  139. sts_libs-2.4.0/tests/block/md/test_lvm_raid.py +459 -0
  140. sts_libs-2.4.0/tests/block/md/test_md_discard.py +96 -0
  141. sts_libs-2.4.0/tests/block/md/test_md_levels.py +98 -0
  142. sts_libs-2.4.0/tests/block/misc/main.fmf +7 -0
  143. sts_libs-2.4.0/tests/block/misc/test_scsi_state_transition.py +263 -0
  144. sts_libs-2.4.0/tests/block/nbd/main.fmf +7 -0
  145. sts_libs-2.4.0/tests/block/nbd/test_nbd_unix_socket.py +93 -0
  146. sts_libs-2.4.0/tests/block/null_blk/main.fmf +15 -0
  147. sts_libs-2.4.0/tests/block/null_blk/test_null_blk_basic.py +70 -0
  148. sts_libs-2.4.0/tests/block/null_blk/test_null_blk_configfs.py +171 -0
  149. sts_libs-2.4.0/tests/block/scsi_debug/main.fmf +31 -0
  150. sts_libs-2.4.0/tests/block/scsi_debug/test_delete_scan.py +102 -0
  151. sts_libs-2.4.0/tests/block/scsi_debug/test_dif_dix_stress.py +174 -0
  152. sts_libs-2.4.0/tests/block/scsi_debug/test_shared_host_tags.py +140 -0
  153. sts_libs-2.4.0/tests/block/scsi_debug/test_unmap.py +71 -0
  154. sts_libs-2.4.0/tests/block/zoned/main.fmf +9 -0
  155. sts_libs-2.4.0/tests/block/zoned/test_zoned_devices.py +506 -0
  156. sts_libs-2.4.0/tests/block/zram/main.fmf +7 -0
  157. sts_libs-2.4.0/tests/block/zram/test_zram_compression.py +246 -0
  158. sts_libs-2.4.0/tests/boom/boom_sanity.fmf +14 -0
  159. sts_libs-2.4.0/tests/boom/snapshot_boot.fmf +18 -0
  160. sts_libs-2.4.0/tests/boom/test_boom_snapshot_boot.py +278 -0
  161. sts_libs-2.4.0/tests/boom/upgrade/main.fmf +14 -0
  162. sts_libs-2.4.0/tests/boom/upgrade/test_boom_upgrade_boot.py +441 -0
  163. sts_libs-2.4.0/tests/bootc_additional_packages/main.fmf +21 -0
  164. sts_libs-2.4.0/tests/conftest.py +77 -0
  165. sts_libs-2.4.0/tests/dm/cache/main.fmf +20 -0
  166. sts_libs-2.4.0/tests/dm/delay/main.fmf +19 -0
  167. sts_libs-2.4.0/tests/dm/error/main.fmf +19 -0
  168. sts_libs-2.4.0/tests/dm/flakey/main.fmf +19 -0
  169. sts_libs-2.4.0/tests/dm/linear/main.fmf +19 -0
  170. sts_libs-2.4.0/tests/dm/main.fmf +15 -0
  171. sts_libs-2.4.0/tests/dm/thinp/main.fmf +20 -0
  172. sts_libs-2.4.0/tests/dm/vdo/main.fmf +24 -0
  173. sts_libs-2.4.0/tests/dm/zero/main.fmf +19 -0
  174. sts_libs-2.4.0/tests/dmpd/cache/main.fmf +17 -0
  175. sts_libs-2.4.0/tests/dmpd/cache/test_cache_metadata_size.py +66 -0
  176. sts_libs-2.4.0/tests/dmpd/conftest.py +15 -0
  177. sts_libs-2.4.0/tests/dmpd/thin/conftest.py +13 -0
  178. sts_libs-2.4.0/tests/dmpd/thin/main.fmf +17 -0
  179. sts_libs-2.4.0/tests/dmpd/thin/thin_check.fmf +8 -0
  180. sts_libs-2.4.0/tests/dmpd/thin/thin_restore.fmf +8 -0
  181. sts_libs-2.4.0/tests/dmpd/thin/thin_trim.fmf +8 -0
  182. sts_libs-2.4.0/tests/fc/full/online_offline/main.fmf +17 -0
  183. sts_libs-2.4.0/tests/fc/full/rescan_deleted_disk/main.fmf +16 -0
  184. sts_libs-2.4.0/tests/fc/main.fmf +5 -0
  185. sts_libs-2.4.0/tests/helpers/boom_boot.py +14 -0
  186. sts_libs-2.4.0/tests/helpers/root_lvm.py +137 -0
  187. sts_libs-2.4.0/tests/helpers/snapm_boot.py +31 -0
  188. sts_libs-2.4.0/tests/helpers/stratis_pool.py +60 -0
  189. sts_libs-2.4.0/tests/helpers/tmt_reboot.py +46 -0
  190. sts_libs-2.4.0/tests/iscsi/conftest.py +136 -0
  191. sts_libs-2.4.0/tests/iscsi/fio/conftest.py +16 -0
  192. sts_libs-2.4.0/tests/iscsi/fio/fio_multipath_basic.fmf +11 -0
  193. sts_libs-2.4.0/tests/iscsi/fio/fio_multipath_stress.fmf +9 -0
  194. sts_libs-2.4.0/tests/iscsi/fio/main.fmf +21 -0
  195. sts_libs-2.4.0/tests/iscsi/fio/test_fio.py +40 -0
  196. sts_libs-2.4.0/tests/iscsi/libiscsi/local/libiscsi-local.py +192 -0
  197. sts_libs-2.4.0/tests/iscsi/libiscsi/main.fmf +12 -0
  198. sts_libs-2.4.0/tests/iscsi/login-logout-stress/main.fmf +15 -0
  199. sts_libs-2.4.0/tests/iscsi/main.fmf +9 -0
  200. sts_libs-2.4.0/tests/iscsi/many-luns/main.fmf +11 -0
  201. sts_libs-2.4.0/tests/iscsi/parameters/iscsi_params.py +161 -0
  202. sts_libs-2.4.0/tests/iscsi/parameters/main.fmf +25 -0
  203. sts_libs-2.4.0/tests/iscsi/read_debugfs/main.fmf +17 -0
  204. sts_libs-2.4.0/tests/lsm/targetd/conftest.py +184 -0
  205. sts_libs-2.4.0/tests/lsm/targetd/main.fmf +33 -0
  206. sts_libs-2.4.0/tests/lsm/targetd/test_targetd.py +627 -0
  207. sts_libs-2.4.0/tests/lsscsi/conftest.py +10 -0
  208. sts_libs-2.4.0/tests/lsscsi/core/main.fmf +18 -0
  209. sts_libs-2.4.0/tests/lsscsi/core/test_lsscsi_basic.py +578 -0
  210. sts_libs-2.4.0/tests/lsscsi/main.fmf +6 -0
  211. sts_libs-2.4.0/tests/lsscsi/nvme_detection/main.fmf +13 -0
  212. sts_libs-2.4.0/tests/lvm/thinp/bugs/test_discard_corruption.py +214 -0
  213. sts_libs-2.4.0/tests/lvm/thinp/conftest.py +13 -0
  214. sts_libs-2.4.0/tests/lvm/thinp/main.fmf +179 -0
  215. sts_libs-2.4.0/tests/lvm/thinp/test_lvchange_thin.py +314 -0
  216. sts_libs-2.4.0/tests/lvm/thinp/test_lvconvert_thin_lv.py +322 -0
  217. sts_libs-2.4.0/tests/lvm/thinp/test_lvreduce_thinp.py +418 -0
  218. sts_libs-2.4.0/tests/lvm/thinp/test_lvresize_thinp.py +558 -0
  219. sts_libs-2.4.0/tests/lvm/thinp/test_lvscan_thinp.py +373 -0
  220. sts_libs-2.4.0/tests/lvm/thinp/test_pool_capacity.py +403 -0
  221. sts_libs-2.4.0/tests/lvm/thinp/test_thin_perf.py +161 -0
  222. sts_libs-2.4.0/tests/main.fmf +11 -0
  223. sts_libs-2.4.0/tests/multipath/basic.fmf +21 -0
  224. sts_libs-2.4.0/tests/multipath/service.fmf +10 -0
  225. sts_libs-2.4.0/tests/multipath/test_multipath_basic.py +165 -0
  226. sts_libs-2.4.0/tests/multipath/test_multipath_service.py +58 -0
  227. sts_libs-2.4.0/tests/pytest.ini +12 -0
  228. sts_libs-2.4.0/tests/rdma/bugs/customers/customer_1/main.fmf +17 -0
  229. sts_libs-2.4.0/tests/rdma/bugs/others/main.fmf +16 -0
  230. sts_libs-2.4.0/tests/rdma/main.fmf +7 -0
  231. sts_libs-2.4.0/tests/rdma/pyverbs-tests/core/main.fmf +22 -0
  232. sts_libs-2.4.0/tests/rdma/sriov/core/main.fmf +15 -0
  233. sts_libs-2.4.0/tests/scsi/conftest.py +14 -0
  234. sts_libs-2.4.0/tests/scsi/main.fmf +19 -0
  235. sts_libs-2.4.0/tests/scsi/test_hotplug.py +67 -0
  236. sts_libs-2.4.0/tests/scsi/test_io.py +151 -0
  237. sts_libs-2.4.0/tests/sg3_utils/main.fmf +5 -0
  238. sts_libs-2.4.0/tests/sg3_utils/regression/test_rescan_deletes_dev_null/test_rescan_deletes_dev_null.py +36 -0
  239. sts_libs-2.4.0/tests/sg3_utils/regression/test_rescan_ignore_rev/test_rescan_ignore_rev.py +33 -0
  240. sts_libs-2.4.0/tests/sg3_utils/regression/test_rescan_syntax_error/test_rescan_syntax_error.py +35 -0
  241. sts_libs-2.4.0/tests/sg3_utils/sanity/test_sginfo/test_sginfo.py +194 -0
  242. sts_libs-2.4.0/tests/snapm/conftest.py +13 -0
  243. sts_libs-2.4.0/tests/snapm/snapm_sanity/conftest.py +28 -0
  244. sts_libs-2.4.0/tests/snapm/snapm_sanity/main.fmf +87 -0
  245. sts_libs-2.4.0/tests/snapm/snapm_sanity/test_snapm_diff.py +648 -0
  246. sts_libs-2.4.0/tests/snapm/snapm_sanity/test_snapm_schedule.py +1924 -0
  247. sts_libs-2.4.0/tests/snapm/snapm_sanity/test_snapm_snapset.py +971 -0
  248. sts_libs-2.4.0/tests/snapm/snapshot_boot/main.fmf +18 -0
  249. sts_libs-2.4.0/tests/snapm/snapshot_boot/test_snapm_snapshot_boot.py +278 -0
  250. sts_libs-2.4.0/tests/snapm/upgrade/main.fmf +14 -0
  251. sts_libs-2.4.0/tests/snapm/upgrade/test_snapm_upgrade.py +191 -0
  252. sts_libs-2.4.0/tests/snapm/upgrade/test_snapm_upgrade_boot.fmf +15 -0
  253. sts_libs-2.4.0/tests/snapm/upgrade/test_snapm_upgrade_boot.py +427 -0
  254. sts_libs-2.4.0/tests/stratis/basic/conftest.py +269 -0
  255. sts_libs-2.4.0/tests/stratis/basic/test_filesystem.fmf +18 -0
  256. sts_libs-2.4.0/tests/stratis/basic/test_filesystem.py +451 -0
  257. sts_libs-2.4.0/tests/stratis/basic/test_pool.fmf +13 -0
  258. sts_libs-2.4.0/tests/stratis/basic/test_pool.py +125 -0
  259. sts_libs-2.4.0/tests/stratis/basic/test_pool_advanced.fmf +14 -0
  260. sts_libs-2.4.0/tests/stratis/basic/test_pool_advanced.py +337 -0
  261. sts_libs-2.4.0/tests/stratis/basic/test_pool_encryption.py +507 -0
  262. sts_libs-2.4.0/tests/stratis/basic/test_pool_operations.fmf +18 -0
  263. sts_libs-2.4.0/tests/stratis/basic/test_pool_operations.py +398 -0
  264. sts_libs-2.4.0/tests/stratis/conftest.py +13 -0
  265. sts_libs-2.4.0/tests/stratis/main.fmf +6 -0
  266. sts_libs-2.4.0/tests/stratis/multihost/main.fmf +13 -0
  267. sts_libs-2.4.0/tests/stratis/multihost/test_stratis_multihost.py +485 -0
  268. sts_libs-2.4.0/tests/stratis/persistence/main.fmf +18 -0
  269. sts_libs-2.4.0/tests/stratis/persistence/test_stratis_fstab_persistence.py +237 -0
  270. sts_libs-2.4.0/tests/stratis/upgrade/main.fmf +11 -0
  271. sts_libs-2.4.0/tests/stratis/upgrade/test_stratis_upgrade.py +150 -0
  272. sts_libs-2.4.0/tests/sts-prepare/runtest.sh +58 -0
  273. sts_libs-2.4.0/tests/target/core/config_mgmt/config_management.py +121 -0
  274. sts_libs-2.4.0/tests/target/core/global_config/main.fmf +52 -0
  275. sts_libs-2.4.0/tests/target/core/global_config/test_global_parameters_sanity.py +193 -0
  276. sts_libs-2.4.0/tests/target/core/iscsi/iscsi_target.py +49 -0
  277. sts_libs-2.4.0/tests/target/core/iscsi/main.fmf +9 -0
  278. sts_libs-2.4.0/tests/target/core/target_modules/main.fmf +6 -0
  279. sts_libs-2.4.0/tests/target/core/target_modules/target_core_mod.py +15 -0
  280. sts_libs-2.4.0/tests/target/core/target_service/main.fmf +8 -0
  281. sts_libs-2.4.0/tests/target/core/target_service/target_service.py +24 -0
  282. sts_libs-2.4.0/tests/target/full/loopback/main.fmf +10 -0
  283. sts_libs-2.4.0/tests/target/full/main.fmf +2 -0
  284. sts_libs-2.4.0/tests/target/full/persistent-reservation/iscsi_pr.fmf +30 -0
  285. sts_libs-2.4.0/tests/target/full/persistent-reservation/loopback_pr.fmf +30 -0
  286. sts_libs-2.4.0/tests/target/full/persistent-reservation/test_loopback_pr.py +275 -0
  287. sts_libs-2.4.0/tests/target/full/restoreconfig/main.fmf +12 -0
  288. sts_libs-2.4.0/tests/target/isns/main.fmf +27 -0
  289. sts_libs-2.4.0/tests/target/main.fmf +7 -0
  290. sts_libs-2.4.0/tests/udisks2/core/main.fmf +2 -0
  291. sts_libs-2.4.0/tests/udisks2/core/test_encrypted/main.fmf +4 -0
  292. sts_libs-2.4.0/tests/udisks2/core/test_filesystem/main.fmf +2 -0
  293. sts_libs-2.4.0/tests/udisks2/core/test_partition/main.fmf +4 -0
  294. sts_libs-2.4.0/tests/udisks2/hardware/main.fmf +4 -0
  295. sts_libs-2.4.0/tests/udisks2/main.fmf +11 -0
  296. sts_libs-2.4.0/tests/udisks2/sanity/version_help/main.fmf +2 -0
  297. sts_libs-2.4.0/tests/vdo/data/main.fmf +11 -0
  298. sts_libs-2.4.0/tests/vdo/main.fmf +6 -0
  299. sts_libs-2.4.0/tests/vdo/module_signature/main.fmf +9 -0
  300. sts_libs-2.4.0/tests/vdo/multihost/main.fmf +12 -0
  301. sts_libs-2.4.0/tests/vdo/multihost/test_vdo_multihost.py +507 -0
  302. sts_libs-2.4.0/tests/vdo/upgrade/main.fmf +10 -0
  303. sts_libs-2.4.0/tests/vdo/upgrade/test_vdo_upgrade.py +158 -0
  304. sts_libs-2.4.0/tests/vdo/vdo_high_memory/main.fmf +15 -0
  305. sts_libs-2.4.0/tests/vdo/vdo_sanity/main.fmf +15 -0
  306. sts_libs-2.4.0/tests/zstd/conftest.py +10 -0
  307. sts_libs-2.4.0/tests/zstd/main.fmf +11 -0
  308. sts_libs-2.4.0/tests/zstd/test_zstd_cli.py +134 -0
  309. sts_libs-2.4.0/uv.lock +1107 -0
  310. sts_libs-2.2.0/.packit.yaml +0 -44
  311. sts_libs-2.2.0/.scripts/sync_sts.py +0 -232
  312. sts_libs-2.2.0/AGENTS.md +0 -113
  313. sts_libs-2.2.0/PKG-INFO +0 -65
  314. sts_libs-2.2.0/README.md +0 -84
  315. sts_libs-2.2.0/docs/contributing/writing-tests.md +0 -262
  316. sts_libs-2.2.0/docs/sts-libs/fixtures.md +0 -85
  317. sts_libs-2.2.0/docs/sts-libs/utils.md +0 -67
  318. sts_libs-2.2.0/plans/boom/tier2.fmf +0 -38
  319. sts_libs-2.2.0/plans/device-mapper/tier1.fmf +0 -15
  320. sts_libs-2.2.0/plans/dmpd/tier1.fmf +0 -11
  321. sts_libs-2.2.0/plans/image_mode/device-mapper.fmf +0 -6
  322. sts_libs-2.2.0/plans/image_mode/dmpd.fmf +0 -5
  323. sts_libs-2.2.0/plans/image_mode/lvm.fmf +0 -6
  324. sts_libs-2.2.0/plans/image_mode/multipath.fmf +0 -6
  325. sts_libs-2.2.0/plans/image_mode/stratis.fmf +0 -8
  326. sts_libs-2.2.0/plans/image_mode/udisks2.fmf +0 -8
  327. sts_libs-2.2.0/plans/iscsi/offload/main.fmf +0 -6
  328. sts_libs-2.2.0/plans/lio/core.fmf +0 -8
  329. sts_libs-2.2.0/plans/lvm/tier1.fmf +0 -12
  330. sts_libs-2.2.0/plans/main.fmf +0 -62
  331. sts_libs-2.2.0/plans/module/tier1.fmf +0 -6
  332. sts_libs-2.2.0/plans/module/tier2.fmf +0 -6
  333. sts_libs-2.2.0/plans/multipath/tier1.fmf +0 -8
  334. sts_libs-2.2.0/plans/service/tier1.fmf +0 -6
  335. sts_libs-2.2.0/plans/snapm/tier2.fmf +0 -38
  336. sts_libs-2.2.0/plans/stratis/tier1.fmf +0 -12
  337. sts_libs-2.2.0/plans/stratis/tier2-linear.fmf +0 -16
  338. sts_libs-2.2.0/plans/stratis/tier2-mdraid1.fmf +0 -15
  339. sts_libs-2.2.0/plans/stratis/tier2-raid1.fmf +0 -16
  340. sts_libs-2.2.0/plans/sts-ci/basic.fmf +0 -5
  341. sts_libs-2.2.0/plans/udisks2/tier3.fmf +0 -17
  342. sts_libs-2.2.0/plans/vdo/tier2-high-memory.fmf +0 -13
  343. sts_libs-2.2.0/pyproject.toml +0 -241
  344. sts_libs-2.2.0/sts_libs/src/sts/base.py +0 -129
  345. sts_libs-2.2.0/sts_libs/src/sts/blockdevice.py +0 -405
  346. sts_libs-2.2.0/sts_libs/src/sts/fio/fio.py +0 -179
  347. sts_libs-2.2.0/sts_libs/src/sts/fio/parameters.py +0 -123
  348. sts_libs-2.2.0/sts_libs/src/sts/fixtures/common_fixtures.py +0 -346
  349. sts_libs-2.2.0/sts_libs/src/sts/fixtures/dm_fixtures.py +0 -782
  350. sts_libs-2.2.0/sts_libs/src/sts/fixtures/dmpd_fixtures.py +0 -573
  351. sts_libs-2.2.0/sts_libs/src/sts/fixtures/lvm_fixtures.py +0 -783
  352. sts_libs-2.2.0/sts_libs/src/sts/fixtures/module_fixtures.py +0 -72
  353. sts_libs-2.2.0/sts_libs/src/sts/fixtures/multipath_fixtures.py +0 -288
  354. sts_libs-2.2.0/sts_libs/src/sts/fixtures/service_fixtures.py +0 -77
  355. sts_libs-2.2.0/sts_libs/src/sts/fixtures/sg3_utils_fixtures.py +0 -111
  356. sts_libs-2.2.0/sts_libs/src/sts/fixtures/snapm_fixtures.py +0 -430
  357. sts_libs-2.2.0/sts_libs/src/sts/fixtures/stratis_fixtures.py +0 -387
  358. sts_libs-2.2.0/sts_libs/src/sts/fixtures/udisks2_fixtures.py +0 -117
  359. sts_libs-2.2.0/sts_libs/src/sts/loop.py +0 -369
  360. sts_libs-2.2.0/sts_libs/src/sts/lvm/options.py +0 -143
  361. sts_libs-2.2.0/sts_libs/src/sts/lvm/volume_group.py +0 -120
  362. sts_libs-2.2.0/sts_libs/src/sts/multipath.py +0 -340
  363. sts_libs-2.2.0/sts_libs/src/sts/scsi.py +0 -295
  364. sts_libs-2.2.0/sts_libs/src/sts/scsi_debug.py +0 -146
  365. sts_libs-2.2.0/sts_libs/src/sts/target.py +0 -676
  366. sts_libs-2.2.0/sts_libs/src/sts/utils/__init__.py +0 -4
  367. sts_libs-2.2.0/sts_libs/src/sts/utils/cmdline.py +0 -155
  368. sts_libs-2.2.0/sts_libs/src/sts/utils/errors.py +0 -72
  369. sts_libs-2.2.0/sts_libs/src/sts/utils/files.py +0 -371
  370. sts_libs-2.2.0/sts_libs/src/sts/utils/fstab.py +0 -184
  371. sts_libs-2.2.0/sts_libs/src/sts/utils/modules.py +0 -228
  372. sts_libs-2.2.0/sts_libs/src/sts/utils/syscheck.py +0 -275
  373. sts_libs-2.2.0/sts_libs/src/sts/utils/system.py +0 -453
  374. sts_libs-2.2.0/sts_libs/src/sts/utils/teststate.py +0 -80
  375. sts_libs-2.2.0/sts_libs/src/sts/utils/version.py +0 -93
  376. sts_libs-2.2.0/sts_libs/tests/fio/test_fio.py +0 -105
  377. sts_libs-2.2.0/sts_libs/tests/fio/test_parameters.py +0 -76
  378. sts_libs-2.2.0/sts_libs/tests/lvm/test_logical_volume.py +0 -487
  379. sts_libs-2.2.0/sts_libs/tests/lvm/test_options.py +0 -37
  380. sts_libs-2.2.0/sts_libs/tests/lvm/test_volume_group.py +0 -93
  381. sts_libs-2.2.0/sts_libs/tests/test_blockdevice.py +0 -402
  382. sts_libs-2.2.0/sts_libs/tests/test_loop.py +0 -574
  383. sts_libs-2.2.0/sts_libs/tests/test_multipath.py +0 -602
  384. sts_libs-2.2.0/sts_libs/tests/test_scsi.py +0 -417
  385. sts_libs-2.2.0/sts_libs/tests/test_syscheck.py +0 -451
  386. sts_libs-2.2.0/sts_libs/tests/test_version.py +0 -232
  387. sts_libs-2.2.0/sts_libs/tests/utils/test_files.py +0 -584
  388. sts_libs-2.2.0/sts_libs/tests/utils/test_modules.py +0 -497
  389. sts_libs-2.2.0/tests/boom/boom_sanity.fmf +0 -12
  390. sts_libs-2.2.0/tests/boom/snapshot_boot.fmf +0 -14
  391. sts_libs-2.2.0/tests/boom/test_boom_snapshot_boot.py +0 -339
  392. sts_libs-2.2.0/tests/bootc_additional_packages/main.fmf +0 -18
  393. sts_libs-2.2.0/tests/conftest.py +0 -160
  394. sts_libs-2.2.0/tests/dm/cache/main.fmf +0 -18
  395. sts_libs-2.2.0/tests/dm/delay/main.fmf +0 -16
  396. sts_libs-2.2.0/tests/dm/error/main.fmf +0 -17
  397. sts_libs-2.2.0/tests/dm/flakey/main.fmf +0 -17
  398. sts_libs-2.2.0/tests/dm/linear/main.fmf +0 -17
  399. sts_libs-2.2.0/tests/dm/main.fmf +0 -12
  400. sts_libs-2.2.0/tests/dm/thinp/main.fmf +0 -18
  401. sts_libs-2.2.0/tests/dm/vdo/main.fmf +0 -18
  402. sts_libs-2.2.0/tests/dm/zero/main.fmf +0 -17
  403. sts_libs-2.2.0/tests/dmpd/cache/main.fmf +0 -16
  404. sts_libs-2.2.0/tests/dmpd/cache/test_cache_metadata_size.py +0 -61
  405. sts_libs-2.2.0/tests/dmpd/conftest.py +0 -12
  406. sts_libs-2.2.0/tests/dmpd/thin/main.fmf +0 -16
  407. sts_libs-2.2.0/tests/dmpd/thin/thin_check.fmf +0 -6
  408. sts_libs-2.2.0/tests/dmpd/thin/thin_restore.fmf +0 -6
  409. sts_libs-2.2.0/tests/dmpd/thin/thin_trim.fmf +0 -6
  410. sts_libs-2.2.0/tests/fc/full/online_offline/main.fmf +0 -18
  411. sts_libs-2.2.0/tests/fc/full/rescan_deleted_disk/main.fmf +0 -18
  412. sts_libs-2.2.0/tests/fc/main.fmf +0 -2
  413. sts_libs-2.2.0/tests/iscsi/fio/conftest.py +0 -16
  414. sts_libs-2.2.0/tests/iscsi/fio/fio_multipath_basic.fmf +0 -11
  415. sts_libs-2.2.0/tests/iscsi/fio/fio_multipath_stress.fmf +0 -11
  416. sts_libs-2.2.0/tests/iscsi/fio/main.fmf +0 -21
  417. sts_libs-2.2.0/tests/iscsi/fio/test_fio.py +0 -40
  418. sts_libs-2.2.0/tests/iscsi/libiscsi/local/libiscsi-local.py +0 -189
  419. sts_libs-2.2.0/tests/iscsi/libiscsi/main.fmf +0 -11
  420. sts_libs-2.2.0/tests/iscsi/login-logout-stress/main.fmf +0 -15
  421. sts_libs-2.2.0/tests/iscsi/main.fmf +0 -4
  422. sts_libs-2.2.0/tests/iscsi/many-luns/main.fmf +0 -13
  423. sts_libs-2.2.0/tests/iscsi/parameters/iscsi_params.py +0 -161
  424. sts_libs-2.2.0/tests/iscsi/parameters/main.fmf +0 -28
  425. sts_libs-2.2.0/tests/iscsi/read_debugfs/main.fmf +0 -18
  426. sts_libs-2.2.0/tests/lsscsi/core/main.fmf +0 -18
  427. sts_libs-2.2.0/tests/lsscsi/core/test_lsscsi_basic.py +0 -544
  428. sts_libs-2.2.0/tests/lsscsi/main.fmf +0 -4
  429. sts_libs-2.2.0/tests/lsscsi/nvme_detection/main.fmf +0 -12
  430. sts_libs-2.2.0/tests/lvm/thinp/bugs/test_discard_corruption.py +0 -214
  431. sts_libs-2.2.0/tests/lvm/thinp/main.fmf +0 -150
  432. sts_libs-2.2.0/tests/lvm/thinp/test_lvchange_thin.py +0 -310
  433. sts_libs-2.2.0/tests/lvm/thinp/test_lvconvert_thin_lv.py +0 -322
  434. sts_libs-2.2.0/tests/lvm/thinp/test_lvreduce_thinp.py +0 -418
  435. sts_libs-2.2.0/tests/lvm/thinp/test_lvresize_thinp.py +0 -558
  436. sts_libs-2.2.0/tests/lvm/thinp/test_lvscan_thinp.py +0 -369
  437. sts_libs-2.2.0/tests/lvm/thinp/test_pool_capacity.py +0 -403
  438. sts_libs-2.2.0/tests/lvm/thinp/test_thin_perf.py +0 -157
  439. sts_libs-2.2.0/tests/main.fmf +0 -6
  440. sts_libs-2.2.0/tests/module/module_load_unload/main.fmf +0 -1340
  441. sts_libs-2.2.0/tests/module/module_load_unload/test_module_load_unload.py +0 -104
  442. sts_libs-2.2.0/tests/module/module_parameter_config/main.fmf +0 -351
  443. sts_libs-2.2.0/tests/module/module_parameter_config/test_module_parameter_config.py +0 -161
  444. sts_libs-2.2.0/tests/module/module_parameter_validation/main.fmf +0 -610
  445. sts_libs-2.2.0/tests/module/module_parameter_validation/test_module_parameter_validation.py +0 -101
  446. sts_libs-2.2.0/tests/multipath/main.fmf +0 -22
  447. sts_libs-2.2.0/tests/multipath/test_multipath_basic.py +0 -193
  448. sts_libs-2.2.0/tests/pytest.ini +0 -10
  449. sts_libs-2.2.0/tests/rdma/bugs/customers/customer_1/main.fmf +0 -19
  450. sts_libs-2.2.0/tests/rdma/bugs/others/main.fmf +0 -18
  451. sts_libs-2.2.0/tests/rdma/main.fmf +0 -3
  452. sts_libs-2.2.0/tests/rdma/pyverbs-tests/core/main.fmf +0 -24
  453. sts_libs-2.2.0/tests/rdma/sriov/core/main.fmf +0 -17
  454. sts_libs-2.2.0/tests/service/main.fmf +0 -86
  455. sts_libs-2.2.0/tests/service/test_service_lifecycle.py +0 -68
  456. sts_libs-2.2.0/tests/sg3_utils/main.fmf +0 -3
  457. sts_libs-2.2.0/tests/sg3_utils/regression/test_rescan_deletes_dev_null/test_rescan_deletes_dev_null.py +0 -40
  458. sts_libs-2.2.0/tests/sg3_utils/regression/test_rescan_ignore_rev/test_rescan_ignore_rev.py +0 -38
  459. sts_libs-2.2.0/tests/sg3_utils/regression/test_rescan_syntax_error/test_rescan_syntax_error.py +0 -40
  460. sts_libs-2.2.0/tests/sg3_utils/sanity/test_sginfo/test_sginfo.py +0 -190
  461. sts_libs-2.2.0/tests/snapm/snapm_sanity/main.fmf +0 -75
  462. sts_libs-2.2.0/tests/snapm/snapm_sanity/test_snapm_diff.py +0 -641
  463. sts_libs-2.2.0/tests/snapm/snapm_sanity/test_snapm_schedule.py +0 -1927
  464. sts_libs-2.2.0/tests/snapm/snapm_sanity/test_snapm_snapset.py +0 -964
  465. sts_libs-2.2.0/tests/snapm/snapshot_boot/main.fmf +0 -15
  466. sts_libs-2.2.0/tests/snapm/snapshot_boot/test_snapm_snapshot_boot.py +0 -350
  467. sts_libs-2.2.0/tests/stratis/basic/conftest.py +0 -276
  468. sts_libs-2.2.0/tests/stratis/basic/test_filesystem.fmf +0 -16
  469. sts_libs-2.2.0/tests/stratis/basic/test_filesystem.py +0 -447
  470. sts_libs-2.2.0/tests/stratis/basic/test_pool.fmf +0 -15
  471. sts_libs-2.2.0/tests/stratis/basic/test_pool.py +0 -381
  472. sts_libs-2.2.0/tests/stratis/basic/test_pool_encryption.py +0 -489
  473. sts_libs-2.2.0/tests/stratis/basic/test_pool_operations.fmf +0 -17
  474. sts_libs-2.2.0/tests/stratis/basic/test_pool_operations.py +0 -467
  475. sts_libs-2.2.0/tests/stratis/main.fmf +0 -3
  476. sts_libs-2.2.0/tests/stratis/multihost/main.fmf +0 -15
  477. sts_libs-2.2.0/tests/stratis/multihost/test_stratis_multihost.py +0 -485
  478. sts_libs-2.2.0/tests/stratis/persistence/main.fmf +0 -17
  479. sts_libs-2.2.0/tests/stratis/persistence/test_stratis_fstab_persistence.py +0 -237
  480. sts_libs-2.2.0/tests/stratis/upgrade/main.fmf +0 -9
  481. sts_libs-2.2.0/tests/stratis/upgrade/test_stratis_upgrade.py +0 -150
  482. sts_libs-2.2.0/tests/sts-prepare/runtest.sh +0 -47
  483. sts_libs-2.2.0/tests/target/core/config_mgmt/config_management.py +0 -118
  484. sts_libs-2.2.0/tests/target/core/global_config/main.fmf +0 -40
  485. sts_libs-2.2.0/tests/target/core/global_config/test_global_parameters_sanity.py +0 -183
  486. sts_libs-2.2.0/tests/target/core/iscsi/iscsi_target.py +0 -49
  487. sts_libs-2.2.0/tests/target/core/iscsi/main.fmf +0 -11
  488. sts_libs-2.2.0/tests/target/core/main.fmf +0 -1
  489. sts_libs-2.2.0/tests/target/core/target_modules/main.fmf +0 -9
  490. sts_libs-2.2.0/tests/target/core/target_modules/target_core_mod.py +0 -55
  491. sts_libs-2.2.0/tests/target/core/target_service/main.fmf +0 -10
  492. sts_libs-2.2.0/tests/target/core/target_service/target_service.py +0 -59
  493. sts_libs-2.2.0/tests/target/full/loopback/main.fmf +0 -15
  494. sts_libs-2.2.0/tests/target/full/main.fmf +0 -1
  495. sts_libs-2.2.0/tests/target/full/persistent-reservation/iscsi_pr.fmf +0 -32
  496. sts_libs-2.2.0/tests/target/full/persistent-reservation/loopback_pr.fmf +0 -34
  497. sts_libs-2.2.0/tests/target/full/persistent-reservation/test_loopback_pr.py +0 -269
  498. sts_libs-2.2.0/tests/target/full/restoreconfig/main.fmf +0 -13
  499. sts_libs-2.2.0/tests/target/isns/main.fmf +0 -26
  500. sts_libs-2.2.0/tests/target/main.fmf +0 -6
  501. sts_libs-2.2.0/tests/udisks2/core/test_encrypted/main.fmf +0 -2
  502. sts_libs-2.2.0/tests/udisks2/core/test_filesystem/main.fmf +0 -2
  503. sts_libs-2.2.0/tests/udisks2/core/test_partition/main.fmf +0 -2
  504. sts_libs-2.2.0/tests/udisks2/hardware/main.fmf +0 -2
  505. sts_libs-2.2.0/tests/udisks2/main.fmf +0 -6
  506. sts_libs-2.2.0/tests/udisks2/sanity/version_help/main.fmf +0 -2
  507. sts_libs-2.2.0/tests/vdo/data/main.fmf +0 -10
  508. sts_libs-2.2.0/tests/vdo/main.fmf +0 -3
  509. sts_libs-2.2.0/tests/vdo/module_signature/main.fmf +0 -8
  510. sts_libs-2.2.0/tests/vdo/multihost/main.fmf +0 -16
  511. sts_libs-2.2.0/tests/vdo/multihost/test_vdo_multihost.py +0 -507
  512. sts_libs-2.2.0/tests/vdo/upgrade/main.fmf +0 -9
  513. sts_libs-2.2.0/tests/vdo/upgrade/test_vdo_upgrade.py +0 -158
  514. sts_libs-2.2.0/tests/vdo/vdo_high_memory/main.fmf +0 -17
  515. sts_libs-2.2.0/tests/vdo/vdo_sanity/main.fmf +0 -13
  516. sts_libs-2.2.0/uv.lock +0 -927
  517. {sts_libs-2.2.0 → sts_libs-2.4.0}/.fmf/version +0 -0
  518. {sts_libs-2.2.0 → sts_libs-2.4.0}/.gitignore +0 -0
  519. {sts_libs-2.2.0 → sts_libs-2.4.0}/.gitlab-ci.yml +0 -0
  520. {sts_libs-2.2.0 → sts_libs-2.4.0}/.markdownlint.json +0 -0
  521. {sts_libs-2.2.0 → sts_libs-2.4.0}/.pre-commit-config.yaml +0 -0
  522. {sts_libs-2.2.0 → sts_libs-2.4.0}/CLAUDE.md +0 -0
  523. {sts_libs-2.2.0 → sts_libs-2.4.0}/LICENSE +0 -0
  524. {sts_libs-2.2.0 → sts_libs-2.4.0}/dev-container/Containerfile +0 -0
  525. {sts_libs-2.2.0 → sts_libs-2.4.0}/dev-container/README.md +0 -0
  526. {sts_libs-2.2.0 → sts_libs-2.4.0}/dev-container/build.sh +0 -0
  527. {sts_libs-2.2.0 → sts_libs-2.4.0}/dev-container/ci.Containerfile +0 -0
  528. {sts_libs-2.2.0 → sts_libs-2.4.0}/dev-container/run.sh +0 -0
  529. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/contributing/docstrings.md +0 -0
  530. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/contributing/image-mode-testing.md +0 -0
  531. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/contributing.md +0 -0
  532. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/index.md +0 -0
  533. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/index.md +0 -0
  534. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/base.md +0 -0
  535. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/blockdevice.md +0 -0
  536. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/boom.md +0 -0
  537. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/devicemapper.md +0 -0
  538. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/dmpd.md +0 -0
  539. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/fc.md +0 -0
  540. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/fio.md +0 -0
  541. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/iscsi.md +0 -0
  542. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/isns.md +0 -0
  543. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/loop.md +0 -0
  544. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/lvm.md +0 -0
  545. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/multipath.md +0 -0
  546. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/network.md +0 -0
  547. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/nvme.md +0 -0
  548. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/pr.md +0 -0
  549. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/qemu.md +0 -0
  550. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/rdma.md +0 -0
  551. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/scsi.md +0 -0
  552. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/scsi_debug.md +0 -0
  553. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/sg3_utils.md +0 -0
  554. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/snapm.md +0 -0
  555. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/stratis.md +0 -0
  556. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/target.md +0 -0
  557. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/udevadm.md +0 -0
  558. {sts_libs-2.2.0 → sts_libs-2.4.0}/docs/sts-libs/libraries/vdo.md +0 -0
  559. {sts_libs-2.2.0 → sts_libs-2.4.0}/mkdocs.yml +0 -0
  560. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/boom/tier1.fmf +0 -0
  561. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/boom/tier2-st76.fmf +0 -0
  562. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/fc/full_lpfc.fmf +0 -0
  563. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/fc/full_qla2xxx.fmf +0 -0
  564. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/fc/main.fmf +0 -0
  565. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/image_mode/iscsi.fmf +0 -0
  566. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/image_mode/main.fmf +0 -0
  567. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/image_mode/vdo.fmf +0 -0
  568. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/iscsi/libiscsi/main.fmf +0 -0
  569. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/iscsi/local.fmf +0 -0
  570. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/iscsi/offload/be2iscsi.fmf +0 -0
  571. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/iscsi/offload/bnx2i.fmf +0 -0
  572. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/iscsi/offload/cxgb4i.fmf +0 -0
  573. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/iscsi/offload/intel.fmf +0 -0
  574. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/iscsi/offload/qedi.fmf +0 -0
  575. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/iscsi/tier0.fmf +0 -0
  576. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/isns-utils/full.fmf +0 -0
  577. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/lio/full.fmf +0 -0
  578. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/lsscsi/tier1.fmf +0 -0
  579. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/lsscsi/tier2.fmf +0 -0
  580. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/rdma/main.fmf +0 -0
  581. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/rdma/regression.fmf +0 -0
  582. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/rdma/test_case_vars.yaml +0 -0
  583. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/sg3_utils/tier1.fmf +0 -0
  584. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/snapm/tier1.fmf +0 -0
  585. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/snapm/tier2-st76.fmf +0 -0
  586. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/stratis/multihost/main.fmf +0 -0
  587. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/stratis/multihost/nfs.fmf +0 -0
  588. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/stratis/tier2-fstab-stqe.fmf +0 -0
  589. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/stratis/tier2-fstab.fmf +0 -0
  590. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/vdo/multihost/main.fmf +0 -0
  591. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/vdo/multihost/multihost-aarch64.fmf +0 -0
  592. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/vdo/multihost/multihost-ppc64le.fmf +0 -0
  593. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/vdo/multihost/multihost-s390x.fmf +0 -0
  594. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/vdo/multihost/multihost-stqe.fmf +0 -0
  595. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/vdo/tier1.fmf +0 -0
  596. {sts_libs-2.2.0 → sts_libs-2.4.0}/plans/vdo/vdo_smoke.fmf +0 -0
  597. {sts_libs-2.2.0 → sts_libs-2.4.0}/python-sts-libs.spec +0 -0
  598. {sts_libs-2.2.0 → sts_libs-2.4.0}/renovate.json +0 -0
  599. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/README.md +0 -0
  600. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/__init__.py +0 -0
  601. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/__init__.py +0 -0
  602. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/__init__.py +0 -0
  603. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/boom/__init__.py +0 -0
  604. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/boom/base.py +0 -0
  605. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/boom/entry.py +0 -0
  606. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/boom/errors.py +0 -0
  607. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/boom/host.py +0 -0
  608. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/boom/profile.py +0 -0
  609. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/__init__.py +0 -0
  610. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/base.py +0 -0
  611. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/cache.py +0 -0
  612. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/delay.py +0 -0
  613. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/error.py +0 -0
  614. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/errors.py +0 -0
  615. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/flakey.py +0 -0
  616. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/linear.py +0 -0
  617. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/thin.py +0 -0
  618. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/vdo.py +0 -0
  619. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dm/zero.py +0 -0
  620. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/dmpd.py +0 -0
  621. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fc.py +0 -0
  622. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fio/__init__.py +0 -0
  623. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fio/errors.py +0 -0
  624. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fixtures/__init__.py +0 -0
  625. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fixtures/boom_fixtures.py +0 -0
  626. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fixtures/fc_fixtures.py +0 -0
  627. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fixtures/iscsi_fixtures.py +0 -0
  628. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fixtures/nvme_fixtures.py +0 -0
  629. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fixtures/rdma_fixtures.py +0 -0
  630. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fixtures/target_fixtures.py +0 -0
  631. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/fixtures/vdo_fixtures.py +0 -0
  632. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/iscsi/__init__.py +0 -0
  633. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/iscsi/config.py +0 -0
  634. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/iscsi/device.py +0 -0
  635. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/iscsi/iscsiadm.py +0 -0
  636. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/iscsi/node.py +0 -0
  637. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/iscsi/parameters.py +0 -0
  638. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/iscsi/session.py +0 -0
  639. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/isns.py +0 -0
  640. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/lvm/__init__.py +0 -0
  641. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/lvm/base.py +0 -0
  642. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/lvm/errors.py +0 -0
  643. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/lvm/logical_volume.py +0 -0
  644. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/lvm/lvconf.py +0 -0
  645. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/lvm/physical_volume.py +0 -0
  646. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/lvm/reports.py +0 -0
  647. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/lvm/thin_pool.py +0 -0
  648. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/models.py +0 -0
  649. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/network/__init__.py +0 -0
  650. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/network/errors.py +0 -0
  651. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/network/interface.py +0 -0
  652. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/network/nm.py +0 -0
  653. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/nvme.py +0 -0
  654. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/pr.py +0 -0
  655. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/py.typed +0 -0
  656. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/qemu.py +0 -0
  657. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/rdma.py +0 -0
  658. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/sg3_utils.py +0 -0
  659. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/snapm/__init__.py +0 -0
  660. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/snapm/base.py +0 -0
  661. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/snapm/errors.py +0 -0
  662. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/snapm/plugin.py +0 -0
  663. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/snapm/schedule.py +0 -0
  664. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/snapm/snapset.py +0 -0
  665. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/snapm/snapshot.py +0 -0
  666. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/stratis/__init__.py +0 -0
  667. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/stratis/base.py +0 -0
  668. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/stratis/errors.py +0 -0
  669. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/stratis/filesystem.py +0 -0
  670. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/stratis/pool.py +0 -0
  671. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/udevadm.py +0 -0
  672. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/udisks2.py +0 -0
  673. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/cli.py +0 -0
  674. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/config.py +0 -0
  675. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/nfs.py +0 -0
  676. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/packages.py +0 -0
  677. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/processes.py +0 -0
  678. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/size.py +0 -0
  679. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/string_extras.py +0 -0
  680. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/sync.py +0 -0
  681. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/utils/tmt_pytest.py +0 -0
  682. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/src/sts/vdo.py +0 -0
  683. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/__init__.py +0 -0
  684. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/boom/__init__.py +0 -0
  685. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/boom/test_base.py +0 -0
  686. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/boom/test_entry.py +0 -0
  687. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/boom/test_host.py +0 -0
  688. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/boom/test_profile.py +0 -0
  689. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/conftest.py +0 -0
  690. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/data/lvs_report_multi.json +0 -0
  691. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/data/lvs_report_single.json +0 -0
  692. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/data/multipathd_show_map.json +0 -0
  693. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/data/nvme_list.json +0 -0
  694. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/dm/__init__.py +0 -0
  695. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/dm/test_base.py +0 -0
  696. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/dm/test_cache_vdo.py +0 -0
  697. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/dm/test_delay_flakey.py +0 -0
  698. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/dm/test_linear.py +0 -0
  699. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/dm/test_thin.py +0 -0
  700. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/fio/__init__.py +0 -0
  701. {sts_libs-2.2.0/sts_libs/tests/iscsi → sts_libs-2.4.0/sts_libs/tests/fixtures}/__init__.py +0 -0
  702. {sts_libs-2.2.0/sts_libs/tests/lvm → sts_libs-2.4.0/sts_libs/tests/helpers}/__init__.py +0 -0
  703. {sts_libs-2.2.0/sts_libs/tests/network → sts_libs-2.4.0/sts_libs/tests/iscsi}/__init__.py +0 -0
  704. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/iscsi/conftest.py +0 -0
  705. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/iscsi/test_config.py +0 -0
  706. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/iscsi/test_device.py +0 -0
  707. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/iscsi/test_iscsiadm.py +0 -0
  708. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/iscsi/test_parameters.py +0 -0
  709. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/iscsi/test_session.py +0 -0
  710. {sts_libs-2.2.0/sts_libs/tests/snapm → sts_libs-2.4.0/sts_libs/tests/lvm}/__init__.py +0 -0
  711. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/lvm/test_base.py +0 -0
  712. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/lvm/test_lvconf.py +0 -0
  713. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/lvm/test_physical_volume.py +0 -0
  714. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/lvm/test_reports.py +0 -0
  715. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/lvm/test_thin_pool.py +0 -0
  716. {sts_libs-2.2.0/sts_libs/tests/stratis → sts_libs-2.4.0/sts_libs/tests/network}/__init__.py +0 -0
  717. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/network/test_interface.py +0 -0
  718. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/network/test_nm.py +0 -0
  719. {sts_libs-2.2.0/sts_libs/tests/utils → sts_libs-2.4.0/sts_libs/tests/snapm}/__init__.py +0 -0
  720. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/snapm/test_base.py +0 -0
  721. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/snapm/test_plugin.py +0 -0
  722. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/snapm/test_schedule.py +0 -0
  723. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/snapm/test_snapset.py +0 -0
  724. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/snapm/test_snapshot.py +0 -0
  725. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/stratis/test_base.py +0 -0
  726. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/stratis/test_filesystem.py +0 -0
  727. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/stratis/test_pool.py +0 -0
  728. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_cmdline.py +0 -0
  729. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_fc.py +0 -0
  730. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_models.py +0 -0
  731. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_multipath_report.py +0 -0
  732. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_nvme.py +0 -0
  733. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_packages.py +0 -0
  734. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_pr.py +0 -0
  735. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_rdma.py +0 -0
  736. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_sg3_utils.py +0 -0
  737. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_string_extras.py +0 -0
  738. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_system.py +0 -0
  739. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_target.py +0 -0
  740. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/test_vdo.py +0 -0
  741. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/utils/test_cli.py +0 -0
  742. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/utils/test_fstab.py +0 -0
  743. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/utils/test_nfs.py +0 -0
  744. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/utils/test_processes.py +0 -0
  745. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/utils/test_size.py +0 -0
  746. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/utils/test_sync.py +0 -0
  747. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/utils/test_teststate.py +0 -0
  748. {sts_libs-2.2.0 → sts_libs-2.4.0}/sts_libs/tests/utils/test_tmt_pytest.py +0 -0
  749. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/boom/boom_sanity.py +0 -0
  750. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/bootc_additional_packages/Containerfile +0 -0
  751. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/bootc_additional_packages/Containerfile.iscsi +0 -0
  752. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/bootc_additional_packages/Containerfile.stratis +0 -0
  753. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/bootc_additional_packages/Containerfile.udisks2 +0 -0
  754. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/bootc_additional_packages/common-setup.sh +0 -0
  755. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/bootc_additional_packages/runtest.sh +0 -0
  756. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dm/cache/test_dm_cache.py +0 -0
  757. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dm/delay/test_dm_delay.py +0 -0
  758. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dm/error/test_dm_error.py +0 -0
  759. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dm/flakey/test_dm_flakey.py +0 -0
  760. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dm/linear/test_linear_target.py +0 -0
  761. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dm/thinp/test_dm_thin.py +0 -0
  762. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dm/vdo/test_dm_vdo.py +0 -0
  763. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dm/zero/test_dm_zero.py +0 -0
  764. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/cache_check.fmf +0 -0
  765. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/cache_dump.fmf +0 -0
  766. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/cache_metadata_size.fmf +0 -0
  767. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/cache_repair.fmf +0 -0
  768. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/cache_restore.fmf +0 -0
  769. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/test_cache_check.py +0 -0
  770. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/test_cache_dump.py +0 -0
  771. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/test_cache_repair.py +0 -0
  772. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/cache/test_cache_restore.py +0 -0
  773. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/test_thin_check.py +0 -0
  774. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/test_thin_delta.py +0 -0
  775. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/test_thin_dump.py +0 -0
  776. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/test_thin_ls.py +0 -0
  777. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/test_thin_metadata_size.py +0 -0
  778. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/test_thin_repair.py +0 -0
  779. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/test_thin_restore.py +0 -0
  780. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/test_thin_trim.py +0 -0
  781. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/thin_delta.fmf +0 -0
  782. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/thin_ls.fmf +0 -0
  783. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/thin_metadata_size.fmf +0 -0
  784. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/dmpd/thin/thin_repair.fmf +0 -0
  785. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/fc/conftest.py +0 -0
  786. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/fc/full/online_offline/basic.fmf +0 -0
  787. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/fc/full/online_offline/online_offline.py +0 -0
  788. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/fc/full/online_offline/stress.fmf +0 -0
  789. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/fc/full/rescan_deleted_disk/rescan_deleted_disk.py +0 -0
  790. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/helpers/__init__.py +0 -0
  791. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/helpers/vdo.py +0 -0
  792. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/iscsi/fio/fio_basic.fmf +0 -0
  793. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/iscsi/fio/fio_stress.fmf +0 -0
  794. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/iscsi/libiscsi/local/main.fmf +0 -0
  795. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/iscsi/login-logout-stress/login-logout-stress.py +0 -0
  796. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/iscsi/many-luns/many-luns-local.py +0 -0
  797. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/iscsi/read_debugfs/read_debugfs.py +0 -0
  798. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lsscsi/nvme_detection/test_nvme_detection.py +0 -0
  799. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/conftest.py +0 -0
  800. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/bugs/test_stripe_blkdiscard.py +0 -0
  801. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/bugs/test_thinpool_error_target_meta.py +0 -0
  802. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_discard_perf.py +0 -0
  803. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvconf_thinp.py +0 -0
  804. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvconvert_thinpool.py +0 -0
  805. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvcreate_linear.py +0 -0
  806. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvcreate_mirror.py +0 -0
  807. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvcreate_poolmetadataspare.py +0 -0
  808. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvcreate_stripe.py +0 -0
  809. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvextend.py +0 -0
  810. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvm_thinp_misc.py +0 -0
  811. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvm_thinp_modules.py +0 -0
  812. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvremove_thinp.py +0 -0
  813. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvrename_thinp.py +0 -0
  814. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/lvm/thinp/test_lvs_thinp.py +0 -0
  815. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/rdma/bugs/customers/customer_1/issue_23967_verify_speed.py +0 -0
  816. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/rdma/bugs/customers/main.fmf +0 -0
  817. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/rdma/bugs/main.fmf +0 -0
  818. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/rdma/bugs/others/reproducers.py +0 -0
  819. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/rdma/pyverbs-tests/core/pyverbs-tests.py +0 -0
  820. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/rdma/sriov/core/sriov.py +0 -0
  821. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/conftest.py +0 -0
  822. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/main.fmf +0 -0
  823. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_documentation_check/main.fmf +0 -0
  824. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_documentation_check/test_documentation_check.py +0 -0
  825. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_deletes_dev_null/main.fmf +0 -0
  826. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_ignore_rev/main.fmf +0 -0
  827. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_lun_scanning/main.fmf +0 -0
  828. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_lun_scanning/test_rescan_lun_scanning.py +0 -0
  829. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_removes_readds/main.fmf +0 -0
  830. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_removes_readds/test_rescan_removes_readds.py +0 -0
  831. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_syntax_error/main.fmf +0 -0
  832. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_too_many_args/main.fmf +0 -0
  833. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_rescan_too_many_args/test_rescan_too_many_args.py +0 -0
  834. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_sg_map26_32_devices/main.fmf +0 -0
  835. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_sg_map26_32_devices/test_sg_map26_32_devices.py +0 -0
  836. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_sginfo_dev_snapshot/main.fmf +0 -0
  837. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/regression/test_sginfo_dev_snapshot/test_sginfo_dev_snapshot.py +0 -0
  838. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/main.fmf +0 -0
  839. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg3_dd/main.fmf +0 -0
  840. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg3_dd/test_sg3_dd.py +0 -0
  841. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_get_config/main.fmf +0 -0
  842. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_get_config/test_sg_get_config.py +0 -0
  843. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_ident/main.fmf +0 -0
  844. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_ident/test_sg_ident.py +0 -0
  845. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_inq/main.fmf +0 -0
  846. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_inq/test_sg_inq.py +0 -0
  847. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_logs/main.fmf +0 -0
  848. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_logs/test_sg_logs.py +0 -0
  849. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_luns/main.fmf +0 -0
  850. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_luns/test_sg_luns.py +0 -0
  851. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_map/main.fmf +0 -0
  852. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_map/test_sg_map.py +0 -0
  853. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_modes/main.fmf +0 -0
  854. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_modes/test_sg_modes.py +0 -0
  855. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_opcodes/main.fmf +0 -0
  856. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_opcodes/test_sg_opcodes.py +0 -0
  857. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_persist/main.fmf +0 -0
  858. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_persist/test_sg_persist.py +0 -0
  859. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_rbuf/main.fmf +0 -0
  860. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_rbuf/test_sg_rbuf.py +0 -0
  861. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_read/main.fmf +0 -0
  862. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_read/test_sg_read.py +0 -0
  863. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_read_buffer/main.fmf +0 -0
  864. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_read_buffer/test_sg_read_buffer.py +0 -0
  865. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_read_long/main.fmf +0 -0
  866. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_read_long/test_sg_read_long.py +0 -0
  867. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_readcap/main.fmf +0 -0
  868. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_readcap/test_sg_readcap.py +0 -0
  869. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_safte/main.fmf +0 -0
  870. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_safte/test_sg_safte.py +0 -0
  871. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_sat_identify/main.fmf +0 -0
  872. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_sat_identify/test_sg_sat_identify.py +0 -0
  873. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_scan/main.fmf +0 -0
  874. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_scan/test_sg_scan.py +0 -0
  875. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_senddiag/main.fmf +0 -0
  876. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_senddiag/test_sg_senddiag.py +0 -0
  877. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_ses/main.fmf +0 -0
  878. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_ses/test_sg_ses.py +0 -0
  879. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_start/main.fmf +0 -0
  880. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_start/test_sg_start.py +0 -0
  881. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_sync/main.fmf +0 -0
  882. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_sync/test_sg_sync.py +0 -0
  883. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_turs/main.fmf +0 -0
  884. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_turs/test_sg_turs.py +0 -0
  885. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_verify/main.fmf +0 -0
  886. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_verify/test_sg_verify.py +0 -0
  887. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_vpd/main.fmf +0 -0
  888. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_vpd/test_sg_vpd.py +0 -0
  889. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_write_buffer/main.fmf +0 -0
  890. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sg_write_buffer/test_sg_write_buffer.py +0 -0
  891. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/test_sginfo/main.fmf +0 -0
  892. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/version_help/main.fmf +0 -0
  893. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sg3_utils/sanity/version_help/test_version_help.py +0 -0
  894. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/snapm/snapm_sanity/test_snapm_mount.py +0 -0
  895. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/snapm/snapm_sanity/test_snapm_sanity.py +0 -0
  896. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/stratis/basic/test_blockdev.fmf +0 -0
  897. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/stratis/basic/test_blockdev.py +0 -0
  898. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/stratis/basic/test_daemon.fmf +0 -0
  899. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/stratis/basic/test_daemon.py +0 -0
  900. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/stratis/basic/test_key.fmf +0 -0
  901. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/stratis/basic/test_key.py +0 -0
  902. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/stratis/basic/test_pool_encryption.fmf +0 -0
  903. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/sts-prepare/main.fmf +0 -0
  904. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/core/backstores/backstores.py +0 -0
  905. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/core/backstores/main.fmf +0 -0
  906. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/core/config_mgmt/main.fmf +0 -0
  907. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/core/global_config/test_auto_use_daemon.py +0 -0
  908. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/core/global_config/test_global_parameters.py +0 -0
  909. {sts_libs-2.2.0/tests/udisks2 → sts_libs-2.4.0/tests/target}/core/main.fmf +0 -0
  910. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/full/auth/chap.py +0 -0
  911. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/full/auth/main.fmf +0 -0
  912. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/full/loopback/test_loopback.py +0 -0
  913. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/full/persistent-reservation/conftest.py +0 -0
  914. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/full/persistent-reservation/main.fmf +0 -0
  915. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/full/persistent-reservation/test_iscsi_pr.py +0 -0
  916. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/full/restoreconfig/restoreconfig.py +0 -0
  917. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/target/isns/isns-sanity.py +0 -0
  918. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_block_format/main.fmf +0 -0
  919. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_block_format/test_block_format.py +0 -0
  920. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_encrypted/test_encrypted.py +0 -0
  921. /sts_libs-2.2.0/tests/udisks2/core/test_filesystem/test_filesystem.py → /sts_libs-2.4.0/tests/udisks2/core/test_filesystem/test_udisks2_filesystem.py +0 -0
  922. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_loop_dbus/main.fmf +0 -0
  923. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_loop_dbus/test_loop_dbus.py +0 -0
  924. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_manager/main.fmf +0 -0
  925. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_manager/test_manager.py +0 -0
  926. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_partition/test_partition.py +0 -0
  927. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_swapspace/main.fmf +0 -0
  928. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/core/test_swapspace/test_swapspace.py +0 -0
  929. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/hardware/test_drive/main.fmf +0 -0
  930. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/hardware/test_drive/test_drive.py +0 -0
  931. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/main.fmf +0 -0
  932. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_block_secret_config/main.fmf +0 -0
  933. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_block_secret_config/test_block_secret_config.py +0 -0
  934. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_bug_regressions/main.fmf +0 -0
  935. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_bug_regressions/test_bug_regressions.py +0 -0
  936. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_encrypted_advanced/main.fmf +0 -0
  937. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_encrypted_advanced/test_encrypted_advanced.py +0 -0
  938. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_encrypted_regression/main.fmf +0 -0
  939. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_encrypted_regression/test_encrypted_regression.py +0 -0
  940. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_error_handling/main.fmf +0 -0
  941. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_error_handling/test_error_handling.py +0 -0
  942. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_filesystem_regression/main.fmf +0 -0
  943. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_filesystem_regression/test_filesystem_regression.py +0 -0
  944. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_luks_convert/main.fmf +0 -0
  945. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_luks_convert/test_luks_convert.py +0 -0
  946. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_manager_regression/main.fmf +0 -0
  947. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_manager_regression/test_manager_regression.py +0 -0
  948. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_vfat_capabilities/main.fmf +0 -0
  949. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/regression/test_vfat_capabilities/test_vfat_capabilities.py +0 -0
  950. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/main.fmf +0 -0
  951. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_dump/main.fmf +0 -0
  952. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_dump/test_dump.py +0 -0
  953. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_info/main.fmf +0 -0
  954. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_info/test_info.py +0 -0
  955. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_lock/main.fmf +0 -0
  956. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_lock/test_lock.py +0 -0
  957. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_loop/main.fmf +0 -0
  958. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_loop/test_loop.py +0 -0
  959. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_mount/main.fmf +0 -0
  960. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_mount/test_mount.py +0 -0
  961. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_status/main.fmf +0 -0
  962. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/udisks2/sanity/test_status/test_status.py +0 -0
  963. /sts_libs-2.2.0/tests/udisks2/sanity/version_help/test_version_help.py → /sts_libs-2.4.0/tests/udisks2/sanity/version_help/test_udisks2_version_help.py +0 -0
  964. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/data/vdo_xfs_stress.py +0 -0
  965. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/module_signature/test_signatures.py +0 -0
  966. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/upgrade/lvm_vdo.fmf +0 -0
  967. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/upgrade/vdo_manager.fmf +0 -0
  968. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/upgrade/vdo_on_lv.fmf +0 -0
  969. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/vdo_ack_threads/vdo_ack_threads.py +0 -0
  970. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/vdo_calculate_size/main.fmf +0 -0
  971. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/vdo_calculate_size/test_vdo_calculate_size.py +0 -0
  972. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/vdo_high_memory/test_vdo_high_memory.py +0 -0
  973. {sts_libs-2.2.0 → sts_libs-2.4.0}/tests/vdo/vdo_sanity/test_vdo_sanity.py +0 -0
@@ -0,0 +1,52 @@
1
+ specfile_path: python-sts-libs.spec
2
+
3
+ upstream_package_name: sts-libs
4
+ downstream_package_name: sts-libs
5
+
6
+ upstream_project_url: https://gitlab.com/rh-kernel-stqe/sts
7
+
8
+ srpm_build_deps:
9
+ - uv
10
+
11
+ actions:
12
+ create-archive:
13
+ - uv build --sdist --no-sources
14
+ - bash -c "ls dist/sts_libs-*.tar.gz"
15
+
16
+ jobs:
17
+ # Build pull requests
18
+ - job: copr_build
19
+ trigger: pull_request
20
+ require:
21
+ label:
22
+ present:
23
+ - packit-test
24
+ targets:
25
+ - fedora-latest-stable
26
+ - epel-10
27
+
28
+ # Release to copr
29
+ - job: copr_build
30
+ trigger: release
31
+ preserve_project: true
32
+ targets:
33
+ - fedora-all
34
+ - fedora-all-aarch64
35
+ - fedora-all-ppc64le
36
+ - fedora-all-s390x
37
+ - epel-10
38
+ - epel-10-aarch64
39
+ - epel-10-ppc64le
40
+ - epel-10-s390x
41
+
42
+ # Run tests on pull requests
43
+ - job: tests
44
+ trigger: pull_request
45
+ require:
46
+ label:
47
+ present:
48
+ - packit-test
49
+ targets:
50
+ - fedora-latest-stable
51
+ - epel-10
52
+ tmt_plan: /plans/sts-ci/
@@ -0,0 +1,493 @@
1
+ #!/usr/bin/env python3
2
+ # Copyright: Contributors to the sts project
3
+ # SPDX-License-Identifier: GPL-3.0-or-later
4
+
5
+ """Sync sts-libs and tests to remote hosts for development.
6
+
7
+ Builds a wheel from the local tree, installs it via uv on the remote
8
+ host, and rsyncs tests/, plans/ and .fmf/ so you can run::
9
+
10
+ ssh root@HOST 'cd /root/sts && pytest tests/ -m ci'
11
+
12
+ Alternatively, --mr N installs python3-sts-libs from the packit copr
13
+ repo for a merge request (Fedora and RHEL/EPEL 10+ x86_64 only).
14
+
15
+ Steps within a single host are pipelined with asyncio: the wheel
16
+ builds locally while distro detection, uv/python setup, and test
17
+ syncing proceed on the remote host in parallel. Multiple hosts
18
+ are synced concurrently.
19
+
20
+ Examples::
21
+
22
+ sync_sts.py 10.0.186.174
23
+ sync_sts.py 10.0.186.174 my-beaker-host.example.com
24
+ sync_sts.py -n 10.0.186.174 # tests only, no wheel
25
+ sync_sts.py --mr 190 10.0.186.174
26
+ """
27
+
28
+ # ruff: noqa: T201, D102, D103
29
+ from __future__ import annotations
30
+
31
+ import argparse
32
+ import asyncio
33
+ import contextlib
34
+ import shutil
35
+ import subprocess
36
+ import sys
37
+ import tempfile
38
+ from dataclasses import dataclass
39
+ from pathlib import Path
40
+
41
+ REPO_ROOT = Path(__file__).resolve().parent.parent
42
+ REMOTE_DIR = '/root/sts'
43
+ _SSH_BASE = ('-o', 'StrictHostKeyChecking=no', '-o', 'ConnectTimeout=10')
44
+ _ssh_mux: list[str] = []
45
+
46
+
47
+ def _ssh_opts() -> tuple[str, ...]:
48
+ return _SSH_BASE + tuple(_ssh_mux)
49
+
50
+
51
+ _RED = '\033[0;31m'
52
+ _GREEN = '\033[0;32m'
53
+ _YELLOW = '\033[1;33m'
54
+ _BLUE = '\033[0;34m'
55
+ _NC = '\033[0m'
56
+
57
+
58
+ def info(msg: str, host: str | None = None) -> None:
59
+ tag = f'[{host}] ' if host else ''
60
+ print(f'{_BLUE}[INFO]{_NC} {tag}{msg}')
61
+
62
+
63
+ def ok(msg: str, host: str | None = None) -> None:
64
+ tag = f'[{host}] ' if host else ''
65
+ print(f'{_GREEN}[OK]{_NC} {tag}{msg}')
66
+
67
+
68
+ def warn(msg: str, host: str | None = None) -> None:
69
+ tag = f'[{host}] ' if host else ''
70
+ print(f'{_YELLOW}[WARN]{_NC} {tag}{msg}')
71
+
72
+
73
+ def err(msg: str, host: str | None = None) -> None:
74
+ tag = f'[{host}] ' if host else ''
75
+ print(f'{_RED}[ERROR]{_NC} {tag}{msg}', file=sys.stderr)
76
+
77
+
78
+ # ── Async subprocess helpers ────────────────────────────────────────
79
+
80
+
81
+ async def run_cmd(
82
+ cmd: list[str],
83
+ *,
84
+ check: bool = True,
85
+ cwd: Path | None = None,
86
+ ) -> subprocess.CompletedProcess[str]:
87
+ """Run a local command asynchronously."""
88
+ proc = await asyncio.create_subprocess_exec(
89
+ *cmd,
90
+ stdout=asyncio.subprocess.PIPE,
91
+ stderr=asyncio.subprocess.PIPE,
92
+ cwd=cwd,
93
+ )
94
+ stdout_bytes, stderr_bytes = await proc.communicate()
95
+ result = subprocess.CompletedProcess(
96
+ cmd,
97
+ proc.returncode or 0,
98
+ stdout_bytes.decode(),
99
+ stderr_bytes.decode(),
100
+ )
101
+ if check and result.returncode != 0:
102
+ raise subprocess.CalledProcessError(result.returncode, cmd, result.stdout, result.stderr)
103
+ return result
104
+
105
+
106
+ async def ssh(
107
+ host: str,
108
+ command: str,
109
+ *,
110
+ check: bool = True,
111
+ ) -> subprocess.CompletedProcess[str]:
112
+ return await run_cmd(
113
+ ['ssh', *_ssh_opts(), f'root@{host}', command],
114
+ check=check,
115
+ )
116
+
117
+
118
+ async def scp_to(src: Path, host: str, dst: str) -> None:
119
+ await run_cmd(['scp', *_ssh_opts(), str(src), f'root@{host}:{dst}'])
120
+
121
+
122
+ async def rsync_to(src: Path, host: str, dst: str) -> None:
123
+ await run_cmd(
124
+ [
125
+ 'rsync',
126
+ '-az',
127
+ '--delete',
128
+ '-e',
129
+ f'ssh {" ".join(_ssh_opts())}',
130
+ f'{src}/',
131
+ f'root@{host}:{dst}/',
132
+ ]
133
+ )
134
+
135
+
136
+ # ── Distro detection ────────────────────────────────────────────────
137
+
138
+
139
+ @dataclass
140
+ class Distro:
141
+ """Linux distribution detected on the remote host."""
142
+
143
+ id: str
144
+ version_id: str
145
+
146
+ @property
147
+ def major(self) -> int:
148
+ return int(self.version_id.split('.')[0])
149
+
150
+ @property
151
+ def has_modern_python(self) -> bool:
152
+ """System python3 is >= 3.12 (Fedora, RHEL/CentOS 10+)."""
153
+ if self.id == 'fedora':
154
+ return True
155
+ return self.id in ('rhel', 'centos') and self.major >= 10
156
+
157
+ @property
158
+ def needs_uv_python(self) -> bool:
159
+ """No python3.12 dnf package — uv must install it (RHEL 8.8, 9.2)."""
160
+ return self.id == 'rhel' and self.version_id in ('8.8', '9.2')
161
+
162
+ @property
163
+ def python_bin(self) -> str:
164
+ """Python binary name for shell commands."""
165
+ return 'python3' if self.has_modern_python else 'python3.12'
166
+
167
+ @property
168
+ def copr_chroot(self) -> str | None:
169
+ """Copr chroot name, or None if copr builds are unavailable."""
170
+ if self.id == 'fedora':
171
+ return f'fedora-{self.version_id}-x86_64'
172
+ if self.id in ('rhel', 'centos') and self.major >= 10:
173
+ return f'epel-{self.major}-x86_64'
174
+ return None
175
+
176
+ def __str__(self) -> str:
177
+ return f'{self.id}-{self.version_id}'
178
+
179
+
180
+ async def detect_distro(host: str) -> Distro:
181
+ """Parse /etc/os-release on the remote host."""
182
+ result = await ssh(host, 'cat /etc/os-release', check=False)
183
+ if result.returncode != 0:
184
+ raise RuntimeError(f'Cannot read /etc/os-release on {host}')
185
+
186
+ props: dict[str, str] = {}
187
+ for line in result.stdout.splitlines():
188
+ if '=' in line:
189
+ key, _, value = line.partition('=')
190
+ props[key] = value.strip('"')
191
+
192
+ return Distro(
193
+ id=props.get('ID', 'unknown'),
194
+ version_id=props.get('VERSION_ID', '0'),
195
+ )
196
+
197
+
198
+ # ── Wheel build ─────────────────────────────────────────────────────
199
+
200
+
201
+ async def _warn_untracked() -> None:
202
+ """Warn if sts_libs/src has untracked files."""
203
+ result = await run_cmd(
204
+ ['git', 'ls-files', '--others', '--exclude-standard', 'sts_libs/src/'],
205
+ cwd=REPO_ROOT,
206
+ check=False,
207
+ )
208
+ if result.stdout.strip():
209
+ warn('Untracked files in sts_libs/src/ — they may end up in the wheel')
210
+
211
+
212
+ async def build_wheel() -> Path:
213
+ """Build an sts-libs wheel and return its path."""
214
+ await _warn_untracked()
215
+ info('Building wheel')
216
+ await run_cmd(
217
+ ['uv', 'build', '--wheel', '--out-dir', 'dist/'],
218
+ cwd=REPO_ROOT,
219
+ )
220
+ wheels = sorted((REPO_ROOT / 'dist').glob('sts_libs-*-py3-none-any.whl'))
221
+ if not wheels:
222
+ err(f'No wheel found in {REPO_ROOT / "dist"} after build')
223
+ sys.exit(1)
224
+ ok(f'Built {wheels[-1].name}')
225
+ return wheels[-1]
226
+
227
+
228
+ # ── Wheel install ────────────────────────────────────────────────────
229
+
230
+
231
+ async def setup_uv_and_python(host: str, distro: Distro) -> None:
232
+ """Ensure uv and Python >= 3.12 are available on the remote host."""
233
+ steps: list[str] = []
234
+
235
+ if distro.has_modern_python:
236
+ steps.append(
237
+ 'command -v uv >/dev/null 2>&1'
238
+ ' || dnf install -y uv 2>/dev/null'
239
+ ' || (dnf install -y python3-pip && pip3 install uv)',
240
+ )
241
+ elif distro.needs_uv_python and distro.major == 8:
242
+ steps.extend(
243
+ [
244
+ 'dnf install -y python3.11-pip',
245
+ 'python3.11 -m pip install uv',
246
+ 'uv python install 3.12',
247
+ ]
248
+ )
249
+ elif distro.needs_uv_python:
250
+ steps.extend(
251
+ [
252
+ 'dnf install -y python3-pip',
253
+ 'python3 -m pip install uv',
254
+ 'uv python install 3.12',
255
+ ]
256
+ )
257
+ else:
258
+ steps.extend(
259
+ [
260
+ 'dnf install -y python3.12-pip',
261
+ 'python3.12 -m pip install uv',
262
+ ]
263
+ )
264
+
265
+ if not distro.has_modern_python:
266
+ steps.append("dnf remove -y 'python3*-pytest' 2>/dev/null || true")
267
+
268
+ info('Setting up Python environment', host=host)
269
+ await ssh(host, ' && '.join(steps))
270
+
271
+
272
+ async def ensure_pytest_on_path(host: str) -> None:
273
+ """Symlink pytest to /usr/local/bin if it is not already on PATH."""
274
+ await ssh(
275
+ host,
276
+ 'command -v pytest >/dev/null 2>&1 && exit 0; '
277
+ 'for d in /usr/local/bin /root/.local/bin; do '
278
+ ' [ -f "$d/pytest" ] && ln -sf "$d/pytest" /usr/local/bin/pytest && exit 0; '
279
+ 'done; '
280
+ 'py=$(uv python find 3.12 2>/dev/null) && '
281
+ ' [ -f "$(dirname "$py")/pytest" ] && '
282
+ ' ln -sf "$(dirname "$py")/pytest" /usr/local/bin/pytest; '
283
+ 'true',
284
+ check=False,
285
+ )
286
+
287
+
288
+ async def copy_and_install_wheel(host: str, distro: Distro, wheel: Path) -> None:
289
+ """Copy the wheel to the host and install via uv pip.
290
+
291
+ Assumes setup_uv_and_python has already run.
292
+ """
293
+ remote_wheel = f'/tmp/{wheel.name}'
294
+
295
+ info(f'Copying {wheel.name}', host=host)
296
+ await scp_to(wheel, host, remote_wheel)
297
+
298
+ info('Installing sts-libs', host=host)
299
+ if distro.has_modern_python:
300
+ await ssh(host, f'uv pip install --system {remote_wheel} pytest fmf')
301
+ elif distro.needs_uv_python:
302
+ await ssh(
303
+ host,
304
+ f'uv tool install pytest --with {remote_wheel} --with fmf --python 3.12',
305
+ )
306
+ await ensure_pytest_on_path(host)
307
+ else:
308
+ await ssh(host, f'uv pip install --system --python 3.12 {remote_wheel} pytest fmf')
309
+ await ensure_pytest_on_path(host)
310
+
311
+ await ssh(host, f'rm -f {remote_wheel}')
312
+
313
+
314
+ # ── Copr MR mode ─────────────────────────────────────────────────────
315
+
316
+
317
+ async def install_copr(host: str, distro: Distro, mr: int) -> None:
318
+ """Enable the packit copr repo for a merge request and dnf-install."""
319
+ chroot = distro.copr_chroot
320
+ if chroot is None:
321
+ err(f'Copr MR install not supported on {distro}', host=host)
322
+ err('Only Fedora and RHEL/EPEL 10+ (x86_64) have copr builds', host=host)
323
+ raise SystemExit(1)
324
+
325
+ copr_repo = f'packit/gitlab.com-rh-kernel-stqe-sts-{mr}'
326
+ info(f'Enabling copr: {copr_repo} ({chroot})', host=host)
327
+
328
+ await ssh(
329
+ host,
330
+ ' && '.join(
331
+ [
332
+ "dnf install -y 'dnf*-command(copr)'",
333
+ f'dnf copr enable -y {copr_repo} {chroot}',
334
+ 'dnf install -y python3-sts-libs python3-pytest',
335
+ ]
336
+ ),
337
+ )
338
+ ok(f'Installed python3-sts-libs from MR #{mr}', host=host)
339
+
340
+
341
+ # ── Common ───────────────────────────────────────────────────────────
342
+
343
+
344
+ async def sync_tests(host: str) -> None:
345
+ """Sync tests, plans, and .fmf metadata to the remote host."""
346
+ info('Syncing tests, plans, .fmf', host=host)
347
+ await ssh(host, f'mkdir -p {REMOTE_DIR}', check=False)
348
+ await asyncio.gather(
349
+ rsync_to(REPO_ROOT / 'tests', host, f'{REMOTE_DIR}/tests'),
350
+ rsync_to(REPO_ROOT / 'plans', host, f'{REMOTE_DIR}/plans'),
351
+ rsync_to(REPO_ROOT / '.fmf', host, f'{REMOTE_DIR}/.fmf'),
352
+ )
353
+
354
+
355
+ async def verify(host: str, distro: Distro) -> None:
356
+ """Print versions and test file count as a sanity check."""
357
+ python = distro.python_bin
358
+ info('Verifying', host=host)
359
+ result = await ssh(
360
+ host,
361
+ (
362
+ f'set -e; cd {REMOTE_DIR}; '
363
+ f'echo " python: $({python} --version 2>&1)"; '
364
+ f'echo " pytest: $(pytest --version 2>&1 | head -1)"; '
365
+ f"echo \" sts: $({python} -c 'import sts; print(sts.__version__)' 2>/dev/null"
366
+ f" || echo 'installed (pytest env)')\"; "
367
+ f'echo " tests: $(find tests -name \'test_*.py\' | wc -l) test files"'
368
+ ),
369
+ )
370
+ for line in result.stdout.splitlines():
371
+ print(f' {line}')
372
+
373
+
374
+ async def sync_one(
375
+ host: str,
376
+ *,
377
+ mr: int | None = None,
378
+ wheel_task: asyncio.Task[Path] | None = None,
379
+ ) -> bool:
380
+ """Sync to a single host. Returns True on success.
381
+
382
+ Pipeline within a single host::
383
+
384
+ build_wheel (local) ──────────────────────────────┐
385
+ │ connectivity ─→ detect_distro ─→ setup_uv ──────┤
386
+ │ │ sync tests/plans/.fmf ─────────┤
387
+ └─→ scp + install wheel ───────→ │
388
+ verify ──→ done
389
+ """
390
+ try:
391
+ if (await ssh(host, 'true', check=False)).returncode != 0:
392
+ err(f'Cannot reach {host} — skipping', host=host)
393
+ return False
394
+
395
+ # Start syncing tests immediately — no dependency on distro or wheel
396
+ sync_task = asyncio.create_task(sync_tests(host))
397
+
398
+ distro = await detect_distro(host)
399
+ info(f'══ {distro} @ {host} ══')
400
+
401
+ if mr is not None:
402
+ await asyncio.gather(install_copr(host, distro, mr), sync_task)
403
+ elif wheel_task is not None:
404
+ # Run uv/python setup while wheel builds locally
405
+ _, wheel = await asyncio.gather(
406
+ setup_uv_and_python(host, distro),
407
+ wheel_task,
408
+ )
409
+ await asyncio.gather(
410
+ copy_and_install_wheel(host, distro, wheel),
411
+ sync_task,
412
+ )
413
+ else:
414
+ await sync_task
415
+
416
+ await verify(host, distro)
417
+
418
+ except subprocess.CalledProcessError as exc:
419
+ err(f'Command failed on {host}: {exc.cmd}', host=host)
420
+ return False
421
+ except RuntimeError as exc:
422
+ err(str(exc), host=host)
423
+ return False
424
+ else:
425
+ ok(f'Done: {distro} @ {host}', host=host)
426
+ info(f" ssh root@{host} 'cd {REMOTE_DIR} && pytest tests/ -m ci'")
427
+ return True
428
+
429
+
430
+ # ── CLI ──────────────────────────────────────────────────────────────
431
+
432
+
433
+ async def async_main(args: argparse.Namespace) -> int:
434
+ """Async entry point — fans out to all hosts concurrently."""
435
+ ctrl_dir = tempfile.mkdtemp(prefix='sts-sync-')
436
+ _ssh_mux[:] = [
437
+ '-o',
438
+ 'ControlMaster=auto',
439
+ '-o',
440
+ f'ControlPath={ctrl_dir}/%C',
441
+ '-o',
442
+ 'ControlPersist=10',
443
+ ]
444
+ try:
445
+ wheel_task: asyncio.Task[Path] | None = None
446
+ if not args.mr and not args.no_lib:
447
+ wheel_task = asyncio.create_task(build_wheel())
448
+
449
+ results = await asyncio.gather(
450
+ *(sync_one(host, mr=args.mr, wheel_task=wheel_task) for host in args.hosts),
451
+ )
452
+
453
+ if wheel_task is not None and not wheel_task.done():
454
+ wheel_task.cancel()
455
+ with contextlib.suppress(asyncio.CancelledError):
456
+ await wheel_task
457
+
458
+ print('════════════════════════════════════════════')
459
+ total = len(args.hosts)
460
+ failed = sum(not r for r in results)
461
+ if failed == 0:
462
+ ok(f'All {total} host{"s" if total > 1 else ""} synced successfully')
463
+ return 0
464
+ warn(f'{failed}/{total} hosts failed')
465
+ return 1
466
+ finally:
467
+ _ssh_mux.clear()
468
+ shutil.rmtree(ctrl_dir, ignore_errors=True)
469
+
470
+
471
+ def main() -> int:
472
+ """Entry point."""
473
+ parser = argparse.ArgumentParser(
474
+ description='Sync sts-libs and tests to remote hosts for development',
475
+ epilog=(
476
+ 'examples:\n'
477
+ ' %(prog)s 10.0.186.174\n'
478
+ ' %(prog)s 10.0.186.174 my-beaker-host.example.com\n'
479
+ ' %(prog)s -n 10.0.186.174 # tests only\n'
480
+ ' %(prog)s --mr 190 10.0.186.174\n'
481
+ ),
482
+ formatter_class=argparse.RawDescriptionHelpFormatter,
483
+ )
484
+ parser.add_argument('hosts', nargs='+', metavar='HOST', help='IP addresses or hostnames')
485
+ parser.add_argument('--mr', type=int, metavar='N', help='install from copr MR repo instead of local wheel')
486
+ parser.add_argument('-n', '--no-lib', action='store_true', help='sync tests only, skip wheel build and install')
487
+
488
+ args = parser.parse_args()
489
+ return asyncio.run(async_main(args))
490
+
491
+
492
+ if __name__ == '__main__':
493
+ sys.exit(main())
@@ -0,0 +1,119 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ **sts** is a monorepo for Linux storage testing:
8
+
9
+ - **sts-libs** (`sts_libs/`) — Python library published to PyPI as `sts-libs`, importable as `sts.*`. Contains device models, CLI wrappers, pytest fixtures, and utilities for storage subsystems (LVM, iSCSI, multipath, NVMe, device-mapper, Stratis, etc.).
10
+ - **Storage tests** (`tests/`) — Pytest-based Linux storage tests that run on real hardware/VMs via tmt. These consume sts-libs and its fixtures. Each test directory has a `main.fmf` metadata file for test management. Tests should work both when run directly with pytest and when executed through tmt.
11
+ - **tmt plans** (`plans/`) — Test plan definitions (`.fmf` files) for test discovery, provisioning, and execution.
12
+
13
+ The library source lives in `sts_libs/src/sts/`, unit tests in `sts_libs/tests/`, and storage tests in `tests/`.
14
+
15
+ ## Commands
16
+
17
+ ```bash
18
+ # Install all dependencies (dev + docs groups)
19
+ uv sync --all-groups
20
+
21
+ # Lint and format
22
+ uv run ruff check # lint
23
+ uv run ruff check --fix # lint with auto-fix
24
+ uv run ruff format # format (also formats docstrings)
25
+
26
+ # Type check (basedpyright, not standard pyright)
27
+ uv run basedpyright
28
+
29
+ # Unit tests
30
+ uv run pytest # all unit tests
31
+ uv run pytest -k test_lvm # specific tests
32
+ dev-container/run.sh test # fallback if tests skip/fail due to environment
33
+
34
+ # Build docs
35
+ uv run --group docs mkdocs build # build (check for griffe warnings)
36
+
37
+ # Pre-commit (uses prek, not pre-commit)
38
+ prek install # one-time setup
39
+ prek run -a --skip tmt-lint # run all hooks (skip tmt-lint, slow on full repo)
40
+ ```
41
+
42
+ ## Architecture
43
+
44
+ ### Model Hierarchy
45
+
46
+ All models are Pydantic v2. Two base classes in `sts.models`:
47
+
48
+ - **`StsBaseModel`** — mutable, `extra='forbid'` (catches typos). For device objects.
49
+ - **`ReportModel`** — immutable (`frozen=True`), `extra='ignore'` (tolerates unknown CLI output keys). For parsed CLI snapshots.
50
+
51
+ The device hierarchy: `StsBaseModel` -> `Device` (path, name) -> `StorageDevice` (size, model) -> subsystem classes. Device construction is cheap and side-effect-free — `Device(path='/dev/nonexistent')` succeeds; existence checks happen via `discover()` or subsystem methods.
52
+
53
+ ### CLI Execution Pattern
54
+
55
+ `run(cmd)` and `run_argv(argv)` in `sts.utils.cmdline` return `CommandResult` (frozen model with `rc`, `stdout`, `stderr`). Device methods return `CommandResult` for chaining:
56
+
57
+ ```python
58
+ lv.create(size='1G').assert_ok() # raises STSError on failure
59
+ result = lv.remove() # check result.succeeded / result.failed
60
+ ```
61
+
62
+ `build_options(**kwargs)` converts keyword arguments to CLI flags (`True` -> `--flag`, strings -> `--key=value`).
63
+
64
+ ### Report Pattern
65
+
66
+ Subsystem reports (`LVReport`, `PVReport`, etc.) are frozen `ReportModel` subclasses parsed from CLI JSON output. Mutable device wrappers hold a `.report` field and call `refresh_report()` after state-changing operations.
67
+
68
+ ### Fixture Conventions
69
+
70
+ - Storage test fixtures are registered via `pytest_plugins` list in `tests/conftest.py`.
71
+ - Indirect parametrization for device count: `@pytest.mark.parametrize('loop_devices', [2], indirect=True)`.
72
+ - Fixtures yield `list[LoopDevice]`, `VolumeGroup`, etc. — not raw strings.
73
+ - Private/internal fixtures are prefixed with `_` (e.g., `_lvm_test`).
74
+ - Files use `# pyright: reportUnusedFunction=false` because fixtures look unused to static analysis.
75
+
76
+ ### Error Hierarchy
77
+
78
+ `STSError` is the base. Each subsystem defines `<Module>Error(STSError)` (e.g., `LvmError`, `StratisError`). `CommandResult.assert_ok()` raises `STSError` on failure.
79
+
80
+ ## Code Conventions
81
+
82
+ ### Imports
83
+
84
+ Every source file uses `from __future__ import annotations`. Types needed only for static analysis go in `if TYPE_CHECKING:` blocks. Pydantic field types that must exist at runtime are imported normally with `# noqa: TC001`.
85
+
86
+ ### Docstrings
87
+
88
+ Keep docstrings lean. Remove `Attributes:` sections from Pydantic models — field names and type annotations are self-documenting. Remove `Args:` sections where parameter names and types are obvious (e.g. `device: str | Path`). Only keep `Args:` when documenting non-obvious valid values (e.g. listing valid policy strings for a `str` parameter). Remove trivial `Example:` blocks. One-line docstrings are preferred for methods. Don't repeat type annotations in docstrings.
89
+
90
+ ### Typed Kwargs
91
+
92
+ PEP 692 `Unpack[TypedDict]` is used for typed CLI options (e.g., `**options: Unpack[LvCreateOptions]`). TypedDict definitions live in per-subsystem `options.py` files.
93
+
94
+ ### Class Variables
95
+
96
+ Use `ClassVar` for constants that should not become Pydantic fields (e.g., `DEV_PATH`, `TOOL_NAME`, `SUBCOMMAND`).
97
+
98
+ ### Field Derivation
99
+
100
+ `model_validator(mode='after')` is used to derive fields (e.g., computing `path` from `name` + `vg`, or `name` from `path`).
101
+
102
+ ## Testing
103
+
104
+ - **Unit tests** (`sts_libs/tests/`) — mock-based, patch `subprocess.run`. Run with `uv run pytest`. If tests are skipped or fail due to environment issues, use `dev-container/run.sh test` (may need `dev-container/build.sh` first).
105
+ - **Storage tests** (`tests/`) — actual Linux storage tests, require real hardware/VMs and root. Run via tmt, not in CI.
106
+ - Tests marked `@pytest.mark.destructive` are auto-skipped without root.
107
+ - **Package installation** — use `ensure_installed()` in fixtures rather than tmt `require:` blocks. This lets tests run directly with pytest without tmt.
108
+
109
+ ### TMT / FMF Conventions
110
+
111
+ - `component:` should match the subsystem name (e.g. `ahci`, `scsi`, `lvm`). Never use `component: kernel`.
112
+ - Don't add `require:` for packages that fixtures install via `ensure_installed()`.
113
+
114
+ ## Tools
115
+
116
+ - **ruff** — linting + formatting (120-char lines, single quotes, Google docstrings)
117
+ - **basedpyright** — strict mode on library source, standard on storage tests, unit tests excluded
118
+ - **prek** — pre-commit hook runner (drop-in replacement for pre-commit)
119
+ - **mkdocs** + mkdocstrings + griffe-pydantic — API docs from docstrings