quarchpy 2.2.9.dev3__py2.py3-none-any.whl → 2.2.9.dev4__py2.py3-none-any.whl

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 (499) hide show
  1. quarchpy/.idea/.name +1 -0
  2. quarchpy/.idea/inspectionProfiles/Project_Default.xml +50 -0
  3. quarchpy/.idea/inspectionProfiles/profiles_settings.xml +6 -0
  4. quarchpy/.idea/misc.xml +7 -0
  5. quarchpy/.idea/modules.xml +8 -0
  6. quarchpy/.idea/quarchpy.iml +12 -0
  7. quarchpy/.idea/vcs.xml +7 -0
  8. quarchpy/.idea/workspace.xml +273 -0
  9. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  10. quarchpy/__pycache__/__init__.cpython-312.pyc +0 -0
  11. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  12. quarchpy/__pycache__/_version.cpython-312.pyc +0 -0
  13. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  14. quarchpy/__pycache__/connection.cpython-312.pyc +0 -0
  15. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  16. quarchpy/__pycache__/run.cpython-312.pyc +0 -0
  17. quarchpy/_version.py +1 -1
  18. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  19. quarchpy/config_files/__pycache__/__init__.cpython-312.pyc +0 -0
  20. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  21. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-312.pyc +0 -0
  22. quarchpy/connection_specific/QPS/win-amd64/app.jar +0 -0
  23. quarchpy/connection_specific/QPS/win-amd64/app.properties +1 -1
  24. quarchpy/connection_specific/QPS/win-amd64/qis/qis.jar +0 -0
  25. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/CInterface-2.3.jar +0 -0
  26. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.0.jar +0 -0
  27. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/{TorridonCommon-1.3.jar → TorridonCommon-1.1.jar} +0 -0
  28. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.5.9.jar +0 -0
  29. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar +0 -0
  30. quarchpy/connection_specific/QPS/win-amd64/qps-command-reference.html +3 -11
  31. quarchpy/connection_specific/QPS/win-amd64/qps.jar +0 -0
  32. quarchpy/connection_specific/QPS/win-amd64/qps_lib/JFXUtilities-1.0.jar +0 -0
  33. quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.0.jar +0 -0
  34. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-base-21.0.6-linux-aarch64.jar +0 -0
  35. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-controls-21.0.6-linux-aarch64.jar +0 -0
  36. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-fxml-21.0.6-linux-aarch64.jar +0 -0
  37. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-graphics-21.0.6-linux-aarch64.jar +0 -0
  38. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-swing-21.0.6-linux-aarch64.jar +0 -0
  39. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-base-21.0.5-linux.jar → javafx-base-21.0.6-linux.jar} +0 -0
  40. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-controls-21.0.5-linux.jar → javafx-controls-21.0.6-linux.jar} +0 -0
  41. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-fxml-21.0.5-linux.jar → javafx-fxml-21.0.6-linux.jar} +0 -0
  42. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-graphics-21.0.5-linux.jar → javafx-graphics-21.0.6-linux.jar} +0 -0
  43. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-swing-21.0.5-linux.jar → javafx-swing-21.0.6-linux.jar} +0 -0
  44. quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-x64/javafx-base-21.0.5-mac.jar → mac-arm64/javafx-base-21.0.6-mac-aarch64.jar} +0 -0
  45. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-controls-21.0.5-mac-aarch64.jar → javafx-controls-21.0.6-mac-aarch64.jar} +0 -0
  46. quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-x64/javafx-fxml-21.0.5-mac.jar → mac-arm64/javafx-fxml-21.0.6-mac-aarch64.jar} +0 -0
  47. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-graphics-21.0.5-mac-aarch64.jar → javafx-graphics-21.0.6-mac-aarch64.jar} +0 -0
  48. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-swing-21.0.5-mac-aarch64.jar → javafx-swing-21.0.6-mac-aarch64.jar} +0 -0
  49. quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-arm64/javafx-base-21.0.5-mac-aarch64.jar → mac-x64/javafx-base-21.0.6-mac.jar} +0 -0
  50. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-controls-21.0.5-mac.jar → javafx-controls-21.0.6-mac.jar} +0 -0
  51. quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-arm64/javafx-fxml-21.0.5-mac-aarch64.jar → mac-x64/javafx-fxml-21.0.6-mac.jar} +0 -0
  52. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-graphics-21.0.5-mac.jar → javafx-graphics-21.0.6-mac.jar} +0 -0
  53. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-swing-21.0.5-mac.jar → javafx-swing-21.0.6-mac.jar} +0 -0
  54. quarchpy/connection_specific/QPS/win-amd64/qps_lib/qutils-1.0.jar +0 -0
  55. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-base-21.0.5-win.jar → javafx-base-21.0.6-win.jar} +0 -0
  56. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-controls-21.0.5-win.jar → javafx-controls-21.0.6-win.jar} +0 -0
  57. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-fxml-21.0.5-win.jar → javafx-fxml-21.0.6-win.jar} +0 -0
  58. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-graphics-21.0.5-win.jar → javafx-graphics-21.0.6-win.jar} +0 -0
  59. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-swing-21.0.5-win.jar → javafx-swing-21.0.6-win.jar} +0 -0
  60. quarchpy/connection_specific/QPS/win-amd64/scriptCommands.txt +1 -23
  61. quarchpy/connection_specific/QPS/win-amd64/whats-new.txt +1 -1
  62. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
  63. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-312.pyc +0 -0
  64. quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
  65. quarchpy/connection_specific/__pycache__/__init__.cpython-312.pyc +0 -0
  66. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  67. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-312.pyc +0 -0
  68. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  69. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-312.pyc +0 -0
  70. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  71. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-312.pyc +0 -0
  72. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
  73. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-312.pyc +0 -0
  74. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
  75. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-312.pyc +0 -0
  76. quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
  77. quarchpy/connection_specific/__pycache__/connection_USB.cpython-312.pyc +0 -0
  78. quarchpy/connection_specific/__pycache__/mDNS.cpython-311.pyc +0 -0
  79. quarchpy/connection_specific/__pycache__/mDNS.cpython-312.pyc +0 -0
  80. quarchpy/connection_specific/connection_QIS.py +6 -3
  81. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-311.pyc +0 -0
  82. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-312.pyc +0 -0
  83. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-311.pyc +0 -0
  84. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-312.pyc +0 -0
  85. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/java +0 -0
  86. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/jfr +0 -0
  87. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/jrunscript +0 -0
  88. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/jwebserver +0 -0
  89. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/keytool +0 -0
  90. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/rmiregistry +0 -0
  91. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/jaxp.properties +180 -200
  92. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/logging.properties +63 -63
  93. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/management/management.properties +327 -326
  94. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/net.properties +164 -162
  95. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/security/java.policy +46 -0
  96. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/security/java.security +1509 -1517
  97. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/asm.md +36 -36
  98. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/cldr.md +109 -100
  99. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/icu.md +518 -93
  100. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/public_suffix.md +399 -399
  101. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/unicode.md +103 -269
  102. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.desktop/freetype.md +649 -649
  103. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.desktop/giflib.md +50 -46
  104. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.smartcardio/pcsclite.md +57 -57
  105. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/xalan.md +255 -255
  106. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +72 -76
  107. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ADDITIONAL_LICENSE_INFO +37 -0
  108. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ASSEMBLY_EXCEPTION +27 -0
  109. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/LICENSE +347 -0
  110. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ADDITIONAL_LICENSE_INFO +37 -0
  111. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ASSEMBLY_EXCEPTION +27 -0
  112. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/LICENSE +347 -0
  113. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.localedata/cldr.md +109 -100
  114. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/classlist +1502 -1587
  115. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jexec +0 -0
  116. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jfr/default.jfc +1126 -1152
  117. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jfr/profile.jfc +1126 -1151
  118. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jrt-fs.jar +0 -0
  119. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jspawnhelper +0 -0
  120. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libawt.so +0 -0
  121. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libawt_headless.so +0 -0
  122. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libawt_xawt.so +0 -0
  123. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libdt_socket.so +0 -0
  124. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libextnet.so +0 -0
  125. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libfontmanager.so +0 -0
  126. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libfreetype.so +0 -0
  127. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libinstrument.so +0 -0
  128. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libj2gss.so +0 -0
  129. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libj2pcsc.so +0 -0
  130. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libj2pkcs11.so +0 -0
  131. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjaas.so +0 -0
  132. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjava.so +0 -0
  133. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjavajpeg.so +0 -0
  134. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjawt.so +0 -0
  135. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjdwp.so +0 -0
  136. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjimage.so +0 -0
  137. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjli.so +0 -0
  138. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjsig.so +0 -0
  139. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjsound.so +0 -0
  140. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjsvml.so +0 -0
  141. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/liblcms.so +0 -0
  142. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libmanagement.so +0 -0
  143. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libmanagement_agent.so +0 -0
  144. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libmanagement_ext.so +0 -0
  145. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libmlib_image.so +0 -0
  146. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libnet.so +0 -0
  147. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libnio.so +0 -0
  148. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libprefs.so +0 -0
  149. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/librmi.so +0 -0
  150. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libsctp.so +0 -0
  151. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libsplashscreen.so +0 -0
  152. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libsyslookup.so +0 -0
  153. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libverify.so +0 -0
  154. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libzip.so +0 -0
  155. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/modules +0 -0
  156. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/psfontj2d.properties +323 -323
  157. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/security/default.policy +235 -0
  158. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/security/public_suffix_list.dat +0 -0
  159. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/server/libjsig.so +0 -0
  160. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/server/libjvm.so +0 -0
  161. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/tzdb.dat +0 -0
  162. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/release +2 -2
  163. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/java +0 -0
  164. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/jfr +0 -0
  165. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/jrunscript +0 -0
  166. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/jwebserver +0 -0
  167. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/keytool +0 -0
  168. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/rmiregistry +0 -0
  169. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/jaxp.properties +180 -200
  170. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/logging.properties +63 -63
  171. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/management/management.properties +327 -326
  172. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/net.properties +164 -162
  173. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/security/java.policy +46 -0
  174. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/security/java.security +1510 -1518
  175. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/asm.md +36 -36
  176. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/cldr.md +109 -100
  177. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/icu.md +518 -93
  178. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/public_suffix.md +399 -399
  179. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/unicode.md +103 -269
  180. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.desktop/freetype.md +649 -649
  181. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.desktop/giflib.md +50 -46
  182. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.smartcardio/pcsclite.md +57 -57
  183. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/xalan.md +255 -255
  184. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +72 -76
  185. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ADDITIONAL_LICENSE_INFO +37 -0
  186. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ASSEMBLY_EXCEPTION +27 -0
  187. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/LICENSE +347 -0
  188. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ADDITIONAL_LICENSE_INFO +37 -0
  189. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ASSEMBLY_EXCEPTION +27 -0
  190. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/LICENSE +347 -0
  191. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.localedata/cldr.md +109 -100
  192. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/classlist +1497 -1589
  193. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/jfr/default.jfc +1126 -1152
  194. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/jfr/profile.jfc +1126 -1151
  195. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/jrt-fs.jar +0 -0
  196. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/jspawnhelper +0 -0
  197. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libawt.dylib +0 -0
  198. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libawt_lwawt.dylib +0 -0
  199. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libdt_socket.dylib +0 -0
  200. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libextnet.dylib +0 -0
  201. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libfontmanager.dylib +0 -0
  202. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libfreetype.dylib +0 -0
  203. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libinstrument.dylib +0 -0
  204. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libj2gss.dylib +0 -0
  205. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libj2pcsc.dylib +0 -0
  206. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libj2pkcs11.dylib +0 -0
  207. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjaas.dylib +0 -0
  208. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjava.dylib +0 -0
  209. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjavajpeg.dylib +0 -0
  210. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjawt.dylib +0 -0
  211. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjdwp.dylib +0 -0
  212. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjimage.dylib +0 -0
  213. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjli.dylib +0 -0
  214. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjsig.dylib +0 -0
  215. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjsound.dylib +0 -0
  216. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/liblcms.dylib +0 -0
  217. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libmanagement.dylib +0 -0
  218. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libmanagement_agent.dylib +0 -0
  219. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libmanagement_ext.dylib +0 -0
  220. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libmlib_image.dylib +0 -0
  221. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libnet.dylib +0 -0
  222. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libnio.dylib +0 -0
  223. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosx.dylib +0 -0
  224. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosxapp.dylib +0 -0
  225. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosxkrb5.dylib +0 -0
  226. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosxsecurity.dylib +0 -0
  227. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosxui.dylib +0 -0
  228. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libprefs.dylib +0 -0
  229. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/librmi.dylib +0 -0
  230. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libsplashscreen.dylib +0 -0
  231. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libsyslookup.dylib +0 -0
  232. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libverify.dylib +0 -0
  233. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libzip.dylib +0 -0
  234. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/modules +0 -0
  235. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/psfontj2d.properties +323 -323
  236. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/security/default.policy +235 -0
  237. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/security/public_suffix_list.dat +0 -0
  238. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/server/libjsig.dylib +0 -0
  239. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/server/libjvm.dylib +0 -0
  240. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/shaders.metallib +0 -0
  241. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/tzdb.dat +0 -0
  242. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/release +2 -2
  243. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-console-l1-1-0.dll +0 -0
  244. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-datetime-l1-1-0.dll +0 -0
  245. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-debug-l1-1-0.dll +0 -0
  246. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
  247. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-file-l1-1-0.dll +0 -0
  248. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-file-l1-2-0.dll +0 -0
  249. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-file-l2-1-0.dll +0 -0
  250. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-handle-l1-1-0.dll +0 -0
  251. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-heap-l1-1-0.dll +0 -0
  252. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
  253. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
  254. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-localization-l1-2-0.dll +0 -0
  255. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-memory-l1-1-0.dll +0 -0
  256. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
  257. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
  258. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
  259. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
  260. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-profile-l1-1-0.dll +0 -0
  261. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
  262. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-string-l1-1-0.dll +0 -0
  263. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-synch-l1-1-0.dll +0 -0
  264. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-synch-l1-2-0.dll +0 -0
  265. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
  266. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-timezone-l1-1-0.dll +0 -0
  267. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-util-l1-1-0.dll +0 -0
  268. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-conio-l1-1-0.dll +0 -0
  269. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-convert-l1-1-0.dll +0 -0
  270. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-environment-l1-1-0.dll +0 -0
  271. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
  272. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-heap-l1-1-0.dll +0 -0
  273. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-locale-l1-1-0.dll +0 -0
  274. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-math-l1-1-0.dll +0 -0
  275. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-multibyte-l1-1-0.dll +0 -0
  276. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-private-l1-1-0.dll +0 -0
  277. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-process-l1-1-0.dll +0 -0
  278. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
  279. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
  280. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-string-l1-1-0.dll +0 -0
  281. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-time-l1-1-0.dll +0 -0
  282. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-utility-l1-1-0.dll +0 -0
  283. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/awt.dll +0 -0
  284. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/dt_socket.dll +0 -0
  285. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/extnet.dll +0 -0
  286. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/fontmanager.dll +0 -0
  287. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/freetype.dll +0 -0
  288. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/instrument.dll +0 -0
  289. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/j2gss.dll +0 -0
  290. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/j2pcsc.dll +0 -0
  291. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/j2pkcs11.dll +0 -0
  292. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jaas.dll +0 -0
  293. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jabswitch.exe +0 -0
  294. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jaccessinspector.exe +0 -0
  295. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jaccesswalker.exe +0 -0
  296. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/java.dll +0 -0
  297. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/java.exe +0 -0
  298. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/javaaccessbridge.dll +0 -0
  299. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/javajpeg.dll +0 -0
  300. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/javaw.exe +0 -0
  301. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jawt.dll +0 -0
  302. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jdwp.dll +0 -0
  303. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jfr.exe +0 -0
  304. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jimage.dll +0 -0
  305. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jli.dll +0 -0
  306. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jrunscript.exe +0 -0
  307. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jsound.dll +0 -0
  308. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jsvml.dll +0 -0
  309. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jwebserver.exe +0 -0
  310. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/keytool.exe +0 -0
  311. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/kinit.exe +0 -0
  312. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/klist.exe +0 -0
  313. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/ktab.exe +0 -0
  314. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/lcms.dll +0 -0
  315. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/management.dll +0 -0
  316. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/management_agent.dll +0 -0
  317. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/management_ext.dll +0 -0
  318. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/mlib_image.dll +0 -0
  319. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/msvcp140.dll +0 -0
  320. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/net.dll +0 -0
  321. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/nio.dll +0 -0
  322. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/prefs.dll +0 -0
  323. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/rmi.dll +0 -0
  324. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/rmiregistry.exe +0 -0
  325. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/server/jvm.dll +0 -0
  326. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/splashscreen.dll +0 -0
  327. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/sspi_bridge.dll +0 -0
  328. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/syslookup.dll +0 -0
  329. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/ucrtbase.dll +0 -0
  330. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/vcruntime140.dll +0 -0
  331. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/vcruntime140_1.dll +0 -0
  332. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/verify.dll +0 -0
  333. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/w2k_lsa_auth.dll +0 -0
  334. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/windowsaccessbridge-64.dll +0 -0
  335. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/zip.dll +0 -0
  336. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/jaxp.properties +180 -200
  337. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/logging.properties +63 -63
  338. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/management/management.properties +327 -326
  339. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/net.properties +168 -166
  340. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/security/java.policy +46 -0
  341. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/security/java.security +59 -67
  342. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/asm.md +36 -36
  343. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/cldr.md +109 -100
  344. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/icu.md +518 -93
  345. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/public_suffix.md +399 -399
  346. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/unicode.md +103 -269
  347. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.desktop/freetype.md +649 -649
  348. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.desktop/giflib.md +50 -46
  349. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/xalan.md +255 -255
  350. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +72 -76
  351. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ADDITIONAL_LICENSE_INFO +1 -0
  352. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ASSEMBLY_EXCEPTION +1 -0
  353. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/LICENSE +1 -0
  354. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ADDITIONAL_LICENSE_INFO +1 -0
  355. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ASSEMBLY_EXCEPTION +1 -0
  356. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/LICENSE +1 -0
  357. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/classlist +222 -313
  358. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jawt.lib +0 -0
  359. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jfr/default.jfc +1126 -1152
  360. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jfr/profile.jfc +1126 -1151
  361. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jrt-fs.jar +0 -0
  362. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jvm.lib +0 -0
  363. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/modules +0 -0
  364. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/psfontj2d.properties +323 -323
  365. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/security/default.policy +251 -0
  366. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/security/public_suffix_list.dat +0 -0
  367. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/tzdb.dat +0 -0
  368. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/tzmappings +146 -1
  369. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/release +2 -2
  370. quarchpy/connection_specific/mDNS.py +3 -1
  371. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
  372. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-312.pyc +0 -0
  373. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
  374. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-312.pyc +0 -0
  375. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
  376. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-312.pyc +0 -0
  377. quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
  378. quarchpy/connection_specific/serial/__pycache__/win32.cpython-312.pyc +0 -0
  379. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
  380. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  381. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
  382. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-312.pyc +0 -0
  383. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
  384. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-312.pyc +0 -0
  385. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
  386. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-312.pyc +0 -0
  387. quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-312.pyc +0 -0
  388. quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-312.pyc +0 -0
  389. quarchpy/connection_specific/usb_libs/usb1.py +2360 -2360
  390. quarchpy/debug/SystemTest.py +17 -38
  391. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  392. quarchpy/debug/__pycache__/SystemTest.cpython-312.pyc +0 -0
  393. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  394. quarchpy/debug/__pycache__/__init__.cpython-312.pyc +0 -0
  395. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  396. quarchpy/debug/__pycache__/module_debug.cpython-312.pyc +0 -0
  397. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  398. quarchpy/debug/__pycache__/simple_terminal.cpython-312.pyc +0 -0
  399. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  400. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-312.pyc +0 -0
  401. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  402. quarchpy/debug/__pycache__/versionCompare.cpython-312.pyc +0 -0
  403. quarchpy/debug/module_debug.py +1 -0
  404. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  405. quarchpy/device/__pycache__/__init__.cpython-312.pyc +0 -0
  406. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  407. quarchpy/device/__pycache__/device.cpython-312.pyc +0 -0
  408. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  409. quarchpy/device/__pycache__/quarchArray.cpython-312.pyc +0 -0
  410. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  411. quarchpy/device/__pycache__/quarchPPM.cpython-312.pyc +0 -0
  412. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  413. quarchpy/device/__pycache__/quarchQPS.cpython-312.pyc +0 -0
  414. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  415. quarchpy/device/__pycache__/scanDevices.cpython-312.pyc +0 -0
  416. quarchpy/device/device.py +0 -1
  417. quarchpy/device/quarchPPM.py +5 -4
  418. quarchpy/device/quarchQPS.py +67 -95
  419. quarchpy/device/scanDevices.py +3 -3
  420. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  421. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-312.pyc +0 -0
  422. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  423. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-312.pyc +0 -0
  424. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  425. quarchpy/disk_test/__pycache__/__init__.cpython-312.pyc +0 -0
  426. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  427. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-312.pyc +0 -0
  428. quarchpy/fio/FIO_interface.py +1 -0
  429. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  430. quarchpy/fio/__pycache__/FIO_interface.cpython-312.pyc +0 -0
  431. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  432. quarchpy/fio/__pycache__/__init__.cpython-312.pyc +0 -0
  433. quarchpy/fio/test_performance_class.py +533 -0
  434. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  435. quarchpy/iometer/__pycache__/__init__.cpython-312.pyc +0 -0
  436. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  437. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-312.pyc +0 -0
  438. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  439. quarchpy/iometer/__pycache__/iometerFuncs.cpython-312.pyc +0 -0
  440. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  441. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-312.pyc +0 -0
  442. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  443. quarchpy/qis/__pycache__/__init__.cpython-312.pyc +0 -0
  444. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  445. quarchpy/qis/__pycache__/qisFuncs.cpython-312.pyc +0 -0
  446. quarchpy/qis/qisFuncs.py +50 -45
  447. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  448. quarchpy/qps/__pycache__/__init__.cpython-312.pyc +0 -0
  449. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  450. quarchpy/qps/__pycache__/qpsFuncs.cpython-312.pyc +0 -0
  451. quarchpy/qps/qpsFuncs.py +17 -10
  452. quarchpy/run.py +3 -3
  453. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  454. quarchpy/user_interface/__pycache__/__init__.cpython-312.pyc +0 -0
  455. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  456. quarchpy/user_interface/__pycache__/user_interface.cpython-312.pyc +0 -0
  457. quarchpy/utilities/TestCenter.py +2 -2
  458. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  459. quarchpy/utilities/__pycache__/TestCenter.cpython-312.pyc +0 -0
  460. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  461. quarchpy/utilities/__pycache__/TimeValue.cpython-312.pyc +0 -0
  462. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  463. quarchpy/utilities/__pycache__/Version.cpython-312.pyc +0 -0
  464. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  465. quarchpy/utilities/__pycache__/__init__.cpython-312.pyc +0 -0
  466. {quarchpy-2.2.9.dev3.dist-info → quarchpy-2.2.9.dev4.dist-info}/METADATA +1 -1
  467. {quarchpy-2.2.9.dev3.dist-info → quarchpy-2.2.9.dev4.dist-info}/RECORD +469 -401
  468. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/CInterface-2.5.jar +0 -0
  469. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/jaxp-strict.properties.template +0 -123
  470. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/schema10part1.md +0 -51
  471. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/schema10part2.md +0 -50
  472. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/xhtml10.md +0 -57
  473. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/xhtml10schema.md +0 -150
  474. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/xhtml11.md +0 -68
  475. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/xhtml11schema.md +0 -60
  476. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/xmlspec.md +0 -63
  477. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/xmlxsd.md +0 -43
  478. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.incubator.vector/sleef.md +0 -439
  479. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libsimdsort.so +0 -0
  480. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/jaxp-strict.properties.template +0 -123
  481. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/schema10part1.md +0 -51
  482. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/schema10part2.md +0 -50
  483. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/xhtml10.md +0 -57
  484. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/xhtml10schema.md +0 -150
  485. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/xhtml11.md +0 -68
  486. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/xhtml11schema.md +0 -60
  487. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/xmlspec.md +0 -63
  488. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/xmlxsd.md +0 -43
  489. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/jaxp-strict.properties.template +0 -123
  490. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/schema10part1.md +0 -51
  491. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/schema10part2.md +0 -50
  492. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/xhtml10.md +0 -57
  493. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/xhtml10schema.md +0 -150
  494. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/xhtml11.md +0 -68
  495. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/xhtml11schema.md +0 -60
  496. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/xmlspec.md +0 -63
  497. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/xmlxsd.md +0 -43
  498. {quarchpy-2.2.9.dev3.dist-info → quarchpy-2.2.9.dev4.dist-info}/WHEEL +0 -0
  499. {quarchpy-2.2.9.dev3.dist-info → quarchpy-2.2.9.dev4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,533 @@
1
+ import unittest
2
+ import subprocess
3
+ from unittest.mock import Mock
4
+ from performanceClass import FioPerformance
5
+
6
+ class TestFioClass(unittest.TestCase):
7
+
8
+ ####################################################################################################################
9
+ # Necessary class variables for tests
10
+ ####################################################################################################################
11
+
12
+ testFile = "fio_tests_file.fio"
13
+ test_dummy_output = "live_fio_output.txt"
14
+
15
+ ####################################################################################################################
16
+ # Testing no parameters
17
+ ####################################################################################################################
18
+
19
+ @unittest.mock.patch('subprocess.call')
20
+ def test_no_parameters(self, os_system):
21
+ # Testing only passing end callback
22
+
23
+ x = FioPerformance()
24
+ self.assertTrue(x.start_workload())
25
+
26
+
27
+ ####################################################################################################################
28
+ # Testing Callbacks
29
+ ####################################################################################################################
30
+
31
+ def test_callbacks_assigned(self):
32
+ # Test to check program assigns callbacks
33
+
34
+ newClass = Mock()
35
+
36
+ callbacks = {"workload_start_callback": newClass.a(),
37
+ "workload_end_callback": newClass.b(),
38
+ "stream_data_callback": newClass.c()}
39
+
40
+ x = FioPerformance()
41
+
42
+ self.assertFalse(x.start_workload(output_data={"stream_workload_callbacks": callbacks}))
43
+
44
+ def test_none_callback_function(self):
45
+ # Test to check the program doesn't fail with bad parameters assigned for callbacks
46
+
47
+ callbacks = {"workload_start_callback": "test",
48
+ "workload_end_callback": "test",
49
+ "stream_data_callback": "test"}
50
+
51
+ x = FioPerformance()
52
+
53
+ command = " ".join(x.command)
54
+
55
+ self.assertEqual(command,"fio")
56
+
57
+ self.assertFalse(x.start_workload(output_data={"stream_workload_callbacks": callbacks}))
58
+
59
+ ####################################################################################################################
60
+ # Testing File parsing
61
+ ####################################################################################################################
62
+
63
+ def test_workload_file_param_parsing(self):
64
+ # Testing
65
+ x = FioPerformance()
66
+
67
+ f = open(self.testFile, "w")
68
+ f.write("[global]\r"
69
+ "write_iops_log=test\r"
70
+ "write_lat_log=test\r"
71
+ "[job1]")
72
+ f.close()
73
+
74
+ self.assertFalse(x.start_workload(workload_file_path=self.testFile))
75
+
76
+ self.assertEqual(x.iops_log_output_file,"test_iops.1.log" )
77
+ self.assertEqual(x.lat_log_output_file, "test_lat.1.log")
78
+ self.assertEqual(x.clat_log_output_file, "test_clat.1.log")
79
+ self.assertEqual(x.slat_log_output_file, "test_slat.1.log")
80
+ # Check job1 is in one of the items of job name
81
+ self.assertTrue("job1" in x.job_name)
82
+
83
+ def test_workload_file_checking_multiple_jobs(self):
84
+ # Testing
85
+ x = FioPerformance()
86
+
87
+ f = open(self.testFile, "w")
88
+ f.write("[global]\r"
89
+ "write_iops_log=test\r"
90
+ "[job1]\r"
91
+ "[job2]")
92
+ f.close()
93
+
94
+ self.assertFalse(x.start_workload(workload_file_path=self.testFile))
95
+
96
+ # Check job1 is in one of the items of job name
97
+ self.assertTrue("job1" in x.job_name)
98
+ self.assertTrue("job2" in x.job_name)
99
+
100
+ def test_workload_file_none_existant(self):
101
+ # Testing
102
+ x = FioPerformance()
103
+
104
+ self.assertFalse(x.start_workload(workload_file_path="test_test.txt"))
105
+
106
+ # Check job1 is in one of the items of job name
107
+ self.assertFalse("test_test.txt" in x.command)
108
+
109
+ ####################################################################################################################
110
+ # Testing workload arguments
111
+ ####################################################################################################################
112
+
113
+ @unittest.mock.patch('subprocess.call')
114
+ def test_workload_args_assignment(self, os_system):
115
+ # Testing
116
+ x = FioPerformance()
117
+
118
+ workload_dict = { "read_percentage": 1,
119
+ "sequential": True,
120
+ "workload_file_size": "128kb",
121
+ "blocksize": "8k",
122
+ "runtime": 10,
123
+ "rampup_time": 10,
124
+ }
125
+
126
+ self.assertTrue(x.start_workload(workload_args_dict=workload_dict))
127
+
128
+ execution_string_contents = [ "--size=128kb", "--blocksize=8k", "--runtime=10", "--ramp_time=10",
129
+ "--time_based", "--rw=rw", "--rwmixread=1" ]
130
+
131
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
132
+
133
+ @unittest.mock.patch('subprocess.call')
134
+ def test_workload_args_random_read(self, os_system):
135
+ # Testing
136
+ x = FioPerformance()
137
+
138
+ workload_dict = {"read_percentage": 100,
139
+ "sequential": False
140
+ }
141
+
142
+ self.assertFalse(x.start_workload(workload_args_dict=workload_dict))
143
+
144
+ execution_string_contents = ["--rw=randread"]
145
+
146
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
147
+
148
+ @unittest.mock.patch('subprocess.call')
149
+ def test_workload_args_sequential_read(self, os_system):
150
+ # Testing
151
+ x = FioPerformance()
152
+
153
+ workload_dict = {"read_percentage": 100,
154
+ "sequential": True
155
+ }
156
+
157
+ self.assertFalse(x.start_workload(workload_args_dict=workload_dict))
158
+
159
+ execution_string_contents = ["--rw=read"]
160
+
161
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
162
+
163
+ @unittest.mock.patch('subprocess.call')
164
+ def test_workload_args_random_write(self, os_system):
165
+ # Testing
166
+ x = FioPerformance()
167
+
168
+ workload_dict = {"read_percentage": 0,
169
+ "sequential": False
170
+ }
171
+
172
+ self.assertFalse(x.start_workload(workload_args_dict=workload_dict))
173
+
174
+ execution_string_contents = ["--rw=randwrite"]
175
+
176
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
177
+
178
+ @unittest.mock.patch('subprocess.call')
179
+ def test_workload_args_sequential_write(self, os_system):
180
+ # Testing
181
+ x = FioPerformance()
182
+
183
+ workload_dict = {"read_percentage": 0,
184
+ "sequential": True
185
+ }
186
+
187
+ self.assertFalse(x.start_workload(workload_args_dict=workload_dict))
188
+
189
+ execution_string_contents = ["--rw=write"]
190
+
191
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
192
+
193
+ @unittest.mock.patch('subprocess.call')
194
+ def test_workload_args_sequential_rw(self, os_system):
195
+ # Testing
196
+ x = FioPerformance()
197
+
198
+ workload_dict = {"read_percentage": 1,
199
+ "sequential": True
200
+ }
201
+
202
+ self.assertFalse(x.start_workload(workload_args_dict=workload_dict))
203
+
204
+ execution_string_contents = ["--rw=rw"]
205
+
206
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
207
+
208
+ @unittest.mock.patch('subprocess.call')
209
+ def test_workload_args_random_rw(self, os_system):
210
+ # Testing
211
+ x = FioPerformance()
212
+
213
+ workload_dict = {"read_percentage": 1,
214
+ "sequential": False
215
+ }
216
+
217
+ self.assertFalse(x.start_workload(workload_args_dict=workload_dict))
218
+
219
+ execution_string_contents = ["--rw=randrw"]
220
+
221
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
222
+
223
+ ####################################################################################################################
224
+ # Testing output arguments
225
+ ####################################################################################################################
226
+
227
+ @unittest.mock.patch('subprocess.call')
228
+ def test_output_args_parse_high_res_data(self, os_system):
229
+ # Testing
230
+ x = FioPerformance()
231
+
232
+ output_dict = {"high_res_data":
233
+ ["high_res_lat", "high_res_iops"]
234
+ }
235
+
236
+ self.assertFalse(x.start_workload(output_data=output_dict))
237
+
238
+ execution_string_contents = ["--write_iops_log="+x.iops_file_prefix, "--write_lat_log="+x.latency_file_prefix]
239
+
240
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
241
+
242
+ @unittest.mock.patch('subprocess.call')
243
+ def test_output_args_parse_stream_resolutions(self, os_system):
244
+ # Testing
245
+ x = FioPerformance()
246
+
247
+ output_dict = {"stream_resolution": {"high_res_data_res": 1, "stream_data_res": 1}}
248
+
249
+ self.assertFalse(x.start_workload(output_data=output_dict))
250
+
251
+ execution_string_contents = ["--log_avg_msec=1",
252
+ "--status-interval=1"]
253
+
254
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
255
+
256
+ @unittest.mock.patch('subprocess.call')
257
+ def test_output_args_parse_stream_resolutions_default_status_interval(self, os_system):
258
+ # Testing
259
+ x = FioPerformance()
260
+
261
+ output_dict = {"stream_resolution": {"stream_data_res": 0}}
262
+
263
+ self.assertFalse(x.start_workload(output_data=output_dict))
264
+
265
+ execution_string_contents = ["--status-interval=1"]
266
+
267
+ self.assertTrue(all(arg in x.command for arg in execution_string_contents))
268
+
269
+ ####################################################################################################################
270
+ # Testing executing FIO
271
+ ####################################################################################################################
272
+
273
+ # couldn't get the file to work as required
274
+ # f = open(self.testFile, "w")
275
+ # f.write("[global]\r"
276
+ # "size=64mb\r"
277
+ # "rw=read\r"
278
+ # "runtime=10\r"
279
+ # "directory=D\\:\\\r"
280
+ # "[job1]\r")
281
+ # f.close()
282
+
283
+ @unittest.mock.patch('subprocess.call')
284
+ def test_execution_without_FIO_installed(self, sub_process):
285
+ # Testing execution - No Output - simple args
286
+ x = FioPerformance()
287
+
288
+ # Missing FIO from system raises a file not found error
289
+ sub_process.side_effect = FileNotFoundError
290
+
291
+ workload_args = {"read_percentage": 100,
292
+ "sequential": True,
293
+ "runtime": 10,
294
+ "workload_file_size": "64k"}
295
+
296
+ # Assert that the program raised the error and exited with it
297
+ with self.assertRaises(Exception):
298
+ x.start_workload(workload_args_dict=workload_args)
299
+
300
+ @unittest.mock.patch('subprocess.call')
301
+ def test_execution(self, os_system):
302
+ # Testing execution - No Output - simple args
303
+ x = FioPerformance()
304
+
305
+ workload_args = {"read_percentage": 100,
306
+ "sequential": True,
307
+ "runtime": 10,
308
+ "workload_file_size": "64k"}
309
+
310
+ x.start_workload(workload_args_dict=workload_args)
311
+ # os.system was called once - Sufficient arguments passed
312
+ self.assertTrue(os_system.called_once)
313
+
314
+ @unittest.mock.patch('subprocess.call')
315
+ def test_execution_returns_true(self, os_system):
316
+ # Testing execution - No Output - simple args
317
+ x = FioPerformance()
318
+
319
+ workload_args = {"read_percentage": 100,
320
+ "sequential": True,
321
+ "runtime": 10,
322
+ "workload_file_size": "64k"}
323
+
324
+ # function returned true
325
+ self.assertTrue(x.start_workload(workload_args_dict=workload_args))
326
+
327
+
328
+ def test_execution_async_returns_fio_process(self):
329
+ # Testing that asynv returns a subprocess
330
+ # TEST WILL MAKE A 64KB FILE IN CURRENT WORKING DIRECTORY
331
+
332
+ # Testing execution - No Output - simple args
333
+ x = FioPerformance()
334
+
335
+ workload_args = {"read_percentage": 100,
336
+ "sequential": True,
337
+ "runtime": 10,
338
+ "workload_file_size": "64k"}
339
+
340
+ ret_val = x.start_workload(workload_args_dict=workload_args, run_async=True)
341
+
342
+ # checking is of type subprocess.Popen
343
+ self.assertTrue(isinstance(ret_val, subprocess.Popen))
344
+
345
+ ret_val.kill()
346
+ ret_val.wait(3)
347
+
348
+ @unittest.mock.patch('subprocess.Popen')
349
+ def test_execution_async_process_called_once(self, sub_process):
350
+ # Testing execution - No Output - simple args
351
+ x = FioPerformance()
352
+
353
+ workload_args = {"read_percentage": 100,
354
+ "sequential": True,
355
+ "runtime": 10,
356
+ "workload_file_size": "64k"}
357
+
358
+ ret_val = x.start_workload(workload_args_dict=workload_args, run_async=True)
359
+
360
+ self.assertTrue(sub_process.called_once)
361
+
362
+ ret_val.kill()
363
+ ret_val.wait(3)
364
+
365
+ @unittest.mock.patch('subprocess.Popen')
366
+ def test_execution_async_process_called_once(self, sub_process):
367
+ # Testing execution - No Output - simple args
368
+ x = FioPerformance()
369
+
370
+ workload_args = {"read_percentage": 100,
371
+ "sequential": True,
372
+ "runtime": 10,
373
+ "workload_file_size": "64k"}
374
+
375
+ ret_val = x.start_workload(workload_args_dict=workload_args, run_async=True)
376
+
377
+ self.assertTrue(sub_process.called_once)
378
+
379
+ ret_val.kill()
380
+ ret_val.wait(3)
381
+
382
+ @unittest.mock.patch('subprocess.Popen')
383
+ def test_execution_non_sync_process_called_once(self, sub_process):
384
+ # Testing execution - No Output - simple args
385
+ x = FioPerformance()
386
+ new_var = Mock()
387
+
388
+ workload_args = {"read_percentage": 100,
389
+ "sequential": True,
390
+ "runtime": 10,
391
+ "workload_file_size": "64k"}
392
+
393
+ callbacks = {"workload_start_callback": new_var.b()}
394
+ x = FioPerformance()
395
+
396
+ # Starting the function with a callback to go into the second tree
397
+ ret_val = x.start_workload(workload_args_dict=workload_args,
398
+ output_data={"stream_workload_callbacks": callbacks} )
399
+
400
+ self.assertTrue(sub_process.called_once)
401
+
402
+ ####################################################################################################################
403
+ # Testing outputs
404
+ ####################################################################################################################
405
+
406
+ @unittest.mock.patch('subprocess.call')
407
+ def test_results_simple_outputs(self, os_system):
408
+ # Testing execution - No Output - simple args
409
+ x = FioPerformance()
410
+
411
+ workload_args = {"read_percentage": 100,
412
+ "sequential": True,
413
+ "runtime": 10,
414
+ "workload_file_size": "64k"}
415
+
416
+ output = {"summary_data": ["read_iops", "write_iops"]}
417
+
418
+ ret_val = x.start_workload(workload_args_dict=workload_args, output_data=output)
419
+ # os.system was called once - Sufficient arguments passed
420
+ self.assertTrue(os_system.called)
421
+ # check the output included a dictionary format
422
+ self.assertTrue(isinstance(ret_val, dict))
423
+ # check the output contains 2 keys - 'read_iops' and 'write_iops'
424
+ self.assertTrue(all(key in output["summary_data"] for key in ret_val.keys()))
425
+
426
+ @unittest.mock.patch('subprocess.call')
427
+ def test_results_custom_outputs(self, os_system):
428
+ # Testing execution - No Output - simple args
429
+ x = FioPerformance()
430
+
431
+ workload_args = {"read_percentage": 100,
432
+ "sequential": True,
433
+ "runtime": 10,
434
+ "workload_file_size": "64k"}
435
+
436
+ output = {"summary_data": ["find:jobs:jobname"]}
437
+
438
+ ret_val = x.start_workload(workload_args_dict=workload_args, output_data=output)
439
+ # os.system was called once - Sufficient arguments passed
440
+ self.assertTrue(os_system.called)
441
+ # check the output included a dictionary format
442
+ self.assertTrue(isinstance(ret_val, dict))
443
+ # check the output contains correct key output
444
+ self.assertTrue("jobs:jobname" in ret_val.keys())
445
+
446
+ @unittest.mock.patch('subprocess.call')
447
+ def test_results_bad_custom_output(self, os_system):
448
+ # Testing execution - No Output - simple args
449
+ x = FioPerformance()
450
+
451
+ workload_args = {"read_percentage": 100,
452
+ "sequential": True,
453
+ "runtime": 10,
454
+ "workload_file_size": "64k"}
455
+
456
+ output = {"summary_data": ["find:jobs:jobname1"]}
457
+
458
+ ret_val = x.start_workload(workload_args_dict=workload_args, output_data=output)
459
+ # os.system was called once - Sufficient arguments passed
460
+ self.assertTrue(os_system.called)
461
+ # check the output included a dictionary format
462
+ self.assertTrue(isinstance(ret_val, dict))
463
+ # check the output contains correct key output
464
+ self.assertEqual(ret_val["jobs:jobname1"], "Not Found")
465
+
466
+ @unittest.mock.patch('subprocess.call')
467
+ def test_results_bad_custom_search(self, os_system):
468
+ # Testing execution - No Output - simple args
469
+ x = FioPerformance()
470
+
471
+ workload_args = {"read_percentage": 100,
472
+ "sequential": True,
473
+ "runtime": 10,
474
+ "workload_file_size": "64k"}
475
+
476
+ output = {"summary_data": ["afind:jobs:jobname"]}
477
+
478
+ ret_val = x.start_workload(workload_args_dict=workload_args, output_data=output)
479
+ # os.system was called once - Sufficient arguments passed
480
+ self.assertTrue(os_system.called)
481
+ # check the output included a dictionary format
482
+ self.assertTrue(isinstance(ret_val, dict))
483
+ # check the output contains correct key output
484
+ self.assertEqual(ret_val["afind:jobs:jobname"], "Invalid Summary Data Value")
485
+
486
+ def test_results_callbacks(self):
487
+ # Testing execution - No Output - simple args
488
+ x = FioPerformance()
489
+
490
+ workload_args = {"read_percentage": 100,
491
+ "sequential": True,
492
+ "runtime": 1,
493
+ "workload_file_size": "4k"}
494
+
495
+ # Create a new mock
496
+ mock_callback = Mock()
497
+ # Assign some methods to the mocks
498
+ callbacks = {"workload_start_callback": mock_callback.a(),
499
+ "workload_end_callback": mock_callback.b(),
500
+ "stream_data_callback": mock_callback.c()}
501
+
502
+ x.start_workload(workload_args_dict=workload_args, output_file_path=self.test_dummy_output,
503
+ output_data={"stream_workload_callbacks": callbacks})
504
+
505
+ mock_callback.a.assert_called_once()
506
+ mock_callback.b.assert_called_once()
507
+ mock_callback.c.assert_called()
508
+
509
+
510
+ def test_results_high_res_arrays(self):
511
+ # Testing execution - No Output - simple args
512
+ x = FioPerformance()
513
+
514
+ workload_args = {"read_percentage": 100,
515
+ "sequential": True,
516
+ "runtime": 10,
517
+ "workload_file_size": "64k"}
518
+
519
+ output = {"high_res_data": ["high_res_lat"]}
520
+
521
+ ret_val = x.start_workload(workload_args_dict=workload_args, output_data=output)
522
+ # check the output included a dictionary format
523
+ self.assertTrue(isinstance(ret_val, dict))
524
+ key_list = ["time_lat_mS", "lat_log", "time_clat_mS", "clat_log", "time_slat_mS", "slat_log",
525
+ "time_iops_mS", "iops_log"]
526
+
527
+ self.assertTrue(all(item in key_list for item in ret_val["high_res_data"]))
528
+
529
+
530
+
531
+
532
+ if __name__ == "__main__":
533
+ unittest.main()