rabbitmq-amqp-python-client 0.6.0__tar.gz → 2.0.0a3__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 (157) hide show
  1. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/ca.p12 +0 -0
  2. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/ca_certificate.pem +21 -0
  3. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/ca_key.pem +28 -0
  4. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/client_localhost.p12 +0 -0
  5. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/client_localhost_certificate.pem +23 -0
  6. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/client_localhost_key.pem +28 -0
  7. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/server_localhost.p12 +0 -0
  8. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/server_localhost_certificate.pem +23 -0
  9. rabbitmq_amqp_python_client-2.0.0a3/.ci/certs/server_localhost_key.pem +28 -0
  10. rabbitmq_amqp_python_client-2.0.0a3/.ci/ubuntu/advanced.config +13 -0
  11. rabbitmq_amqp_python_client-2.0.0a3/.ci/ubuntu/enabled_plugins +1 -0
  12. rabbitmq_amqp_python_client-2.0.0a3/.ci/ubuntu/gha-log-check.sh +16 -0
  13. rabbitmq_amqp_python_client-2.0.0a3/.ci/ubuntu/gha-setup.sh +193 -0
  14. rabbitmq_amqp_python_client-2.0.0a3/.ci/ubuntu/rabbitmq.conf +33 -0
  15. rabbitmq_amqp_python_client-2.0.0a3/.github/release.yml +30 -0
  16. rabbitmq_amqp_python_client-2.0.0a3/.github/workflows/build-test.yaml +62 -0
  17. rabbitmq_amqp_python_client-2.0.0a3/.github/workflows/publish-pypi.yaml +40 -0
  18. rabbitmq_amqp_python_client-2.0.0a3/.github/workflows/publish_release.yaml +18 -0
  19. rabbitmq_amqp_python_client-2.0.0a3/.gitignore +135 -0
  20. rabbitmq_amqp_python_client-2.0.0a3/Makefile +40 -0
  21. rabbitmq_amqp_python_client-2.0.0a3/PKG-INFO +108 -0
  22. rabbitmq_amqp_python_client-2.0.0a3/README.md +92 -0
  23. rabbitmq_amqp_python_client-2.0.0a3/create_tag.sh +12 -0
  24. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/README.md +31 -0
  25. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/auto_reconnection.py +157 -0
  26. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/basic_connection.py +49 -0
  27. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/console_application.py +896 -0
  28. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/consumer_example.py +123 -0
  29. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/consumer_timeout_example.py +135 -0
  30. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/delayed_retry_context_example.py +101 -0
  31. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/delayed_retry_example.py +146 -0
  32. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/direct_reply_to_example.py +219 -0
  33. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/management_example.py +110 -0
  34. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/performance_test.py +1280 -0
  35. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/presettled_consumer_example.py +158 -0
  36. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/publisher_example.py +142 -0
  37. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/quorum_single_active_consumer.py +122 -0
  38. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/rejection_reason_example.py +118 -0
  39. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/stream_filtering.py +207 -0
  40. rabbitmq_amqp_python_client-2.0.0a3/docs/examples/tls_connection.py +91 -0
  41. rabbitmq_amqp_python_client-2.0.0a3/pyproject.toml +66 -0
  42. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/__init__.py +194 -0
  43. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/connection.py +1139 -0
  44. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/constants.py +57 -0
  45. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/consumer.py +1763 -0
  46. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/exceptions.py +47 -0
  47. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/link.py +999 -0
  48. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/logging_utils.py +26 -0
  49. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/management.py +1714 -0
  50. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/publisher.py +601 -0
  51. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/reconnection.py +465 -0
  52. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/session.py +543 -0
  53. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/wire/__init__.py +170 -0
  54. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/wire/delivery_state.py +270 -0
  55. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/wire/encoding.py +825 -0
  56. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/wire/frames.py +255 -0
  57. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/wire/message.py +586 -0
  58. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/wire/performatives.py +877 -0
  59. rabbitmq_amqp_python_client-2.0.0a3/rabbitmq_amqp_python_client/wire/sasl.py +317 -0
  60. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/__init__.py +0 -0
  61. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/conftest.py +99 -0
  62. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_client_interpolation_integration.py +234 -0
  63. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_client_stream_interpolation_integration.py +273 -0
  64. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_connection_integration.py +139 -0
  65. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_console_application_integration.py +164 -0
  66. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_consumer_integration.py +1159 -0
  67. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_management_integration.py +508 -0
  68. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_performance_test_integration.py +213 -0
  69. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_publisher_integration.py +307 -0
  70. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_reconnection_integration.py +370 -0
  71. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_session_link_integration.py +320 -0
  72. rabbitmq_amqp_python_client-2.0.0a3/tests/integration/test_tls_integration.py +89 -0
  73. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/__init__.py +0 -0
  74. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/conftest.py +109 -0
  75. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/fake_broker.py +476 -0
  76. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/empty_message.amqp +0 -0
  77. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/header_amqpvalue_message.amqp +0 -0
  78. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/message_body_250.amqp +0 -0
  79. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/message_body_700.amqp +0 -0
  80. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/message_from_version_1_0_0.amqp +0 -0
  81. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/message_random_application_properties_300.amqp +0 -0
  82. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/message_random_application_properties_500.amqp +0 -0
  83. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/message_random_application_properties_properties_900.amqp +0 -0
  84. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/message_unicode_message.amqp +0 -0
  85. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/nil_and_types.amqp +0 -0
  86. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/shovel_annotations.amqp +0 -0
  87. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/static_test_message_compare.amqp +0 -0
  88. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/resources/amqp10_validation/uuid_message.amqp +0 -0
  89. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_amqp10_validation.py +183 -0
  90. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_connection.py +378 -0
  91. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_console_application.py +805 -0
  92. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_consumer.py +1733 -0
  93. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_delivery_state.py +148 -0
  94. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_encoding.py +523 -0
  95. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_frames.py +298 -0
  96. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_link.py +608 -0
  97. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_management.py +524 -0
  98. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_management_builders.py +805 -0
  99. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_message.py +327 -0
  100. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_package_exports.py +50 -0
  101. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_performance_test.py +1111 -0
  102. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_performatives.py +457 -0
  103. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_publisher.py +576 -0
  104. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_reconnection.py +762 -0
  105. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_sasl.py +182 -0
  106. rabbitmq_amqp_python_client-2.0.0a3/tests/unit/test_session.py +391 -0
  107. rabbitmq_amqp_python_client-0.6.0/LICENSE +0 -201
  108. rabbitmq_amqp_python_client-0.6.0/PKG-INFO +0 -104
  109. rabbitmq_amqp_python_client-0.6.0/README.md +0 -82
  110. rabbitmq_amqp_python_client-0.6.0/pyproject.toml +0 -33
  111. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/__init__.py +0 -120
  112. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/address_helper.py +0 -178
  113. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/amqp_consumer_handler.py +0 -39
  114. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/asyncio/__init__.py +0 -13
  115. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/asyncio/connection.py +0 -317
  116. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/asyncio/consumer.py +0 -351
  117. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/asyncio/environment.py +0 -158
  118. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/asyncio/management.py +0 -375
  119. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/asyncio/publisher.py +0 -157
  120. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/common.py +0 -34
  121. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/connection.py +0 -496
  122. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/consumer.py +0 -262
  123. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/delivery_context.py +0 -219
  124. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/entities.py +0 -546
  125. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/environment.py +0 -139
  126. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/exceptions.py +0 -25
  127. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/management.py +0 -598
  128. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/options.py +0 -128
  129. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/publisher.py +0 -138
  130. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/__init__.py +0 -174
  131. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_common.py +0 -36
  132. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_condition.py +0 -110
  133. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_data.py +0 -1772
  134. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_delivery.py +0 -459
  135. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_endpoints.py +0 -1583
  136. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_events.py +0 -659
  137. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_exceptions.py +0 -132
  138. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_handler.py +0 -74
  139. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_handlers.py +0 -1440
  140. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_io.py +0 -170
  141. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_message.py +0 -654
  142. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_reactor.py +0 -1722
  143. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_selectable.py +0 -108
  144. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_tracing.py +0 -140
  145. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_transport.py +0 -1278
  146. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_url.py +0 -282
  147. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_utils.py +0 -767
  148. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/_wrapper.py +0 -141
  149. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/handlers.py +0 -48
  150. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/reactor.py +0 -58
  151. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/tracing.py +0 -22
  152. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/utils.py +0 -38
  153. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/queues.py +0 -44
  154. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/ssl_configuration.py +0 -57
  155. rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/utils.py +0 -38
  156. /rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/py.typed → /rabbitmq_amqp_python_client-2.0.0a3/.ci/ubuntu/log/.gitkeep +0 -0
  157. /rabbitmq_amqp_python_client-0.6.0/rabbitmq_amqp_python_client/qpid/proton/py.typed → /rabbitmq_amqp_python_client-2.0.0a3/tests/__init__.py +0 -0
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDhDCCAmygAwIBAgIUVSdILRBEvWFrrKJ3oVOjirCAtkkwDQYJKoZIhvcNAQEL
3
+ BQAwSzE6MDgGA1UEAwwxVExTR2VuU2VsZlNpZ25lZFJvb3RDQSAyMDI2LTA0LTEw
4
+ VDE0OjUxOjU0LjAxOTg3NzENMAsGA1UEBwwEJCQkJDAeFw0yNjA0MTAxMjUxNTRa
5
+ Fw0zNjA0MDcxMjUxNTRaMEsxOjA4BgNVBAMMMVRMU0dlblNlbGZTaWduZWRSb290
6
+ Q0EgMjAyNi0wNC0xMFQxNDo1MTo1NC4wMTk4NzcxDTALBgNVBAcMBCQkJCQwggEi
7
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtAW2jodtF2pqlOISLoTDz+k/Z
8
+ 8P+H/yoVmevY+DD0AOCoX5C7WTZ8e/ll8DkjCAX5bmN2HoIPptCQVa2RIuehkHcs
9
+ 57/xaG+FPaS2gRA8DyI4iTxtDXXt0CSxw2lFoDEgRX9IC2O7Ejsxa8O15b5+4iBh
10
+ ugpCrshw6thw0tcZc38cQ1ox6n2OteAGIuVov0BAVJZShM/UH6LYPaxSbQ7ThoI1
11
+ hEf0G9DOg58+IEdhB8OSRpMXUgaomsANlMdSjQO6leK0ddz6akcCVZATJAqs2HOB
12
+ zfFHkq2re84V6678AQfdM3hnUgaScXCPFPCGJCiCprb+pwN9q1fqnNHtwYRnAgMB
13
+ AAGjYDBeMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBRv
14
+ SBP34DFLHDoIx9C3femVwp/eIzAfBgNVHSMEGDAWgBRvSBP34DFLHDoIx9C3femV
15
+ wp/eIzANBgkqhkiG9w0BAQsFAAOCAQEArfpyyiPpbcy8lAGeyFJWvTwuuXwhNrum
16
+ sBqjitkION3xSCPATCE4iMAL+DbRIBel+4mqTzOzTgiNTd8bW/fmFC7kh/T3joxB
17
+ G9VjZ+AThfn5ldyMgNatcksd5RCxg55/p8Told2NXvgZyvWXRh+eWumgRgYupPkq
18
+ 4tui2AXdptWUkrRcuyKWlRuXoCKEgBb2buMWUc2GykxpvTk6ZKle8IM/x3rW7CSm
19
+ zc/GtO6QAg3zM/E2f9tzfW8n8RJ9OqpBh6KTtxVDD8wTMX+K1sn4Vq6VhGQ1C6Yt
20
+ KkNFS+8bqQ8L83HleM2SANDN1Ej98ZyBOFel9o9wvrt3AThXwMNOLA==
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDtAW2jodtF2pql
3
+ OISLoTDz+k/Z8P+H/yoVmevY+DD0AOCoX5C7WTZ8e/ll8DkjCAX5bmN2HoIPptCQ
4
+ Va2RIuehkHcs57/xaG+FPaS2gRA8DyI4iTxtDXXt0CSxw2lFoDEgRX9IC2O7Ejsx
5
+ a8O15b5+4iBhugpCrshw6thw0tcZc38cQ1ox6n2OteAGIuVov0BAVJZShM/UH6LY
6
+ PaxSbQ7ThoI1hEf0G9DOg58+IEdhB8OSRpMXUgaomsANlMdSjQO6leK0ddz6akcC
7
+ VZATJAqs2HOBzfFHkq2re84V6678AQfdM3hnUgaScXCPFPCGJCiCprb+pwN9q1fq
8
+ nNHtwYRnAgMBAAECggEABOk4qmFaN9JVzgKjzHjkmMmhCfUSdnD1IEl2N6K88PFr
9
+ tlF0oE0y8dVnz5LwvCcYaJi++t2a+FQOkk8UL6O3hQOHVKjgs1HkrbAfT6DRA02U
10
+ +fLuC5xxyyG7AOv5rHWrTu3hu05xHJk+HMIM5iICloJ9BUljmQoiISTco0nbJy3R
11
+ SQSjPg0i/0/T+sk5F+tDoAPU3gAjm4VAXB6NJnwaXi3U6zl5IMnLwj5LAjnIuUvL
12
+ jlSMGrRnDQewTBMjApgF+0Cf3uCAlyzoqA67Q/c1QbVr/sskc9zK3RsW+q8oHAX0
13
+ TG7gSBjul403Ah2pr/3KWUB/z+ZC7xgW9P39CJWPUQKBgQD48S7e+nYkyiIP1q38
14
+ cZrXKMDLlQiMuXRIYg0ejqsH41HGMRImTlz+UDTFWe/zTAGlvEPyc0AMtGJEOJnS
15
+ K8jR7mnjE1CsECH2cQiQtCATFXrIgMS1z7YtYmvraV0sUhuhh6Ccgw2HJqHj60nV
16
+ 1Z53XPFSmGHAmqCSk5jqd54MwwKBgQDzuZwpRbXAXX501F3vKNeVVwUcNZESiDjC
17
+ o6NOmy4SkqqJTAG2JWH4kMXBSXWFpVOfgkqOr0kRb77U2r4NVPIVR7jLUSVKnRYz
18
+ u0QTmV13++dWgoSpXr4zxLwre4SO4g+Q3XVQ9oNUueQuIfhiY7UiDu1eSrvd9zVd
19
+ dD63GCW/jQKBgQCE3SSo+YBIzmEzlt6xV2jO4P9VKKuxf+GiKELcRkTeJuMkJliL
20
+ fVOAoAoqMoAwmCZg8IRLSFus7DFuO89NLvU1pkt5WHu7+bhGsblikeB0jwhDLwbO
21
+ CpguzNLQiCGkYAZDRgHgxslXkrTg0llL+YFkL4TVEmNJyr1cvc3lhgYixQKBgAEZ
22
+ zYLCNdfwlCmi6+mwnYinI/bEpysWQmteodYxDTw4PVzxYvCXqqGcxcfhtQ4tePs3
23
+ c27Bi+rwPkRn2IPm5lECSethKnHz063YIq6T+sAX+yuA22iIbQN+1/q6TBb5Hmjh
24
+ Fy6ObnlrfYRX0u9e0+qbdqb+X2rZOvx5Ee9xxHnhAoGBAM+yjMKeQxSvUb78lCrp
25
+ qiC2mwXQ5GBC6FMfDpekzvcUY+A/wOjFSOendWRLnhnCRmEw9z6VuMnxMSv8Rx5E
26
+ Ox0bKokbXYRTvnKV+oIHS7hp41vW3O6GNMDP+lKSt5rKL+3Y3JCUIIR4v0YScU6L
27
+ mrToTo0O6Aot8Y3BbQ4MQJ/w
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,23 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDvjCCAqagAwIBAgIBAjANBgkqhkiG9w0BAQsFADBLMTowOAYDVQQDDDFUTFNH
3
+ ZW5TZWxmU2lnbmVkUm9vdENBIDIwMjYtMDQtMTBUMTQ6NTE6NTQuMDE5ODc3MQ0w
4
+ CwYDVQQHDAQkJCQkMB4XDTI2MDQxMDEyNTE1NFoXDTM2MDQwNzEyNTE1NFowJjET
5
+ MBEGA1UEAwwKRjIzTjA0OTJYVDEPMA0GA1UECgwGY2xpZW50MIIBIjANBgkqhkiG
6
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wERRA07/NVx6PKgpJEWAIycgSjCn/Vtk1oy
7
+ TBiYpYtpTahVo+wAQTUowTaAMARKvMGgA6rYgW6u+ShMg7lJARo4SLeFZury7P/Q
8
+ XbSBKE2Kpq9+1yTkeBLEfelaXsMsz/Jpt1wbWfAhrmp7/XCAzVlPQruLxRkcXhQZ
9
+ gchqxn9C3MfTeXIYzM7mbqNJI4sBGDEpxxpZpjXNB8YQ7pAcUrDR4gfK5rGfhbTX
10
+ pXrdSYK+g1fOnOix6+W8+lf4JMRaHaG1ilM4uI1YcG0riSo8iIELgqiNnWkMyfG2
11
+ 4j30Tgk5yqoN4NUzfLLkckrKjctF6YQ3ViKzWqJLO4mjWDEKVwIDAQABo4HRMIHO
12
+ MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMCMCwG
13
+ A1UdEQQlMCOCCkYyM04wNDkyWFSCCkYyM04wNDkyWFSCCWxvY2FsaG9zdDAxBgNV
14
+ HR8EKjAoMCagJKAihiBodHRwOi8vY3JsLXNlcnZlcjo4MDAwL2Jhc2ljLmNybDAd
15
+ BgNVHQ4EFgQUPMRAoK+FJRlJHSIATN6PU0IYHqQwHwYDVR0jBBgwFoAUb0gT9+Ax
16
+ Sxw6CMfQt33plcKf3iMwDQYJKoZIhvcNAQELBQADggEBAGQvhMBvRHB0ZizmSW8f
17
+ cRXBloE19ekk7pgGLHt4fyfO87XXCpVo6vVXCjr+am0fHdkeUNST+k5tXVBjLBQ7
18
+ vtFDzO25zF9FwX5tl6KXFoVvb04gH3DgsTSbSOsMYLyz79TYdxzlmYDLpyREjven
19
+ HSu40pNnH4zkWqaBwo0Ox4OVN8Rt0jF+xPB9xcQscw46P2J2EOTxn/eksoXDwBDL
20
+ nm+3HdNUrJ4TCDpJgkwm4rbhLkIPOepX2vNY5sI/4nC6Mph90zNqKV7GTwlfA4aG
21
+ XVZkIr4dqKbj8LqqNqN0U+DtU66IFcieQtteUyMmbAdnu03SMePgh0zeaPOeP/dn
22
+ Kqs=
23
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDXARFEDTv81XHo
3
+ 8qCkkRYAjJyBKMKf9W2TWjJMGJili2lNqFWj7ABBNSjBNoAwBEq8waADqtiBbq75
4
+ KEyDuUkBGjhIt4Vm6vLs/9BdtIEoTYqmr37XJOR4EsR96VpewyzP8mm3XBtZ8CGu
5
+ anv9cIDNWU9Cu4vFGRxeFBmByGrGf0Lcx9N5chjMzuZuo0kjiwEYMSnHGlmmNc0H
6
+ xhDukBxSsNHiB8rmsZ+FtNelet1Jgr6DV86c6LHr5bz6V/gkxFodobWKUzi4jVhw
7
+ bSuJKjyIgQuCqI2daQzJ8bbiPfROCTnKqg3g1TN8suRySsqNy0XphDdWIrNaoks7
8
+ iaNYMQpXAgMBAAECggEAUCybOiOvP2h+qi2zvrpFmJ3WjIldDhYQrtZ/FAZGAdFb
9
+ SrSfftl1/NrsYCRJJ96p2fpgB44RXy6de9bNtX8F3K3g2CjrS4YIYV1BX3f8g8Fq
10
+ lx6xL1wYADiLYiJ+6wBf+Qk957ymjGKxxJ77rnXh6fFIT6utAqoK/IAFRPKt8md6
11
+ DM1+hKivjV4qSbRcFi0DGCzq6mlUAu44zTaMZm5Dk64mWkwgSN+54dD8EVDkAFGi
12
+ oNmDgbALhQ+70Fj3ATbDRzqKp+GzY3rBswM4euObKZiNlmQVlzNbE7j9RveACpa7
13
+ pYF+/jg32ZcnFRW0+f/+VFOsbXiF1ODx6Wt7rduhRQKBgQD4nTflSYyl0WhK0xYB
14
+ /sAeO+VljYJnlRIKKU1igKRvjIf43A88yrkxT5CH7gV4PHOwuzJBn6PLBard2d1K
15
+ XFo/kT7s8PJFn+5EV/TBm/40WRQ0XvEa/gvKQIVBxKuSzNiVwqFCRHcP0zIOeKy7
16
+ L+IKxIeN0bS37dNqU6K+ep3FKwKBgQDdZDxW8DBS/sbdDvo1DXPcKN1nPjSRRHip
17
+ LzCxr/nZDbrAlG9UAhX+ihTkm+oN9m5HpbviBodcM0nmUTps0Dc7CZv0H+y1N4Lv
18
+ TxAnSBdbxUWOYlNUm51dnVTLOQT0QHiLuesyjeeG7C8ATZxB9Huj95pRUGDlNT/m
19
+ AjzlHQVRhQKBgDOBFphYsVuU019U9aU6KoDY9cAhHdfpqRAT2GVEs0wst+qVZE66
20
+ zLzrd8zBQb7T/z+ouFOiB+PCa9CEFvUVxtiOdZPOotJLvKfJ9Pm7IGGl5qqm1Jo7
21
+ 8SNYVIL4hHboGyKDbLb2yhesMB2RYG9zDwgeCNsXi7HjAj5vzzJY4qB7AoGBALSH
22
+ pRB7odw7t2vRZ8RVKPIRPKGQvwrqG75SJdHvHryZDn01TSbi4I6EiI72eMBUAA9a
23
+ nT+tdTmA9TTjbdIHY9I3fr1uPvZywslj3lc52RpTXenCUhM/Je6NefSRlXGbFPFT
24
+ dO/veSmzdIw5vT6nHx9Qq7y835ZoeqeTkZZ+uLSFAoGBALSmDq5C0eH2UVCGOTvK
25
+ LgINLoEqRCF/v2VVoglY/vxtjbk7SSswmmJABIBuiwgvZac+nNuwD0vRNlgPnPmA
26
+ jsWAYNVLKsZXtfJk/U9xEbs+gvaL/6jxRcgKJZT0P/vsUWaNoPrZhQIsIiZfRQm5
27
+ bin24Hpe2vdfx/0YVWbUnSVb
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,23 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDvjCCAqagAwIBAgIBATANBgkqhkiG9w0BAQsFADBLMTowOAYDVQQDDDFUTFNH
3
+ ZW5TZWxmU2lnbmVkUm9vdENBIDIwMjYtMDQtMTBUMTQ6NTE6NTQuMDE5ODc3MQ0w
4
+ CwYDVQQHDAQkJCQkMB4XDTI2MDQxMDEyNTE1NFoXDTM2MDQwNzEyNTE1NFowJjET
5
+ MBEGA1UEAwwKRjIzTjA0OTJYVDEPMA0GA1UECgwGc2VydmVyMIIBIjANBgkqhkiG
6
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyrfV3aRuzlpd5PaRJiyLdyxvvaI4wTzWoYKD
7
+ BBCb3KlSOmelcDKhKg9EzvrLBX7Vy0tCtLK+BfMq8ZuhN3oDljlJJgybwoYfV5YG
8
+ 4pnMnSeYkzsVWZztkD+LSzamFollR1ky0So8tqrWEZI0sFVzHYPediye8nQn5WHo
9
+ bvTJVlUYpX8Za45Wog0jXby0hE+GRylsToHrDE4nWGQc356HHfN7MKqoJTZmqgnt
10
+ Bn2ge/VH5pYYbEW2t0Xi53Z58i1DaZqzfj6z0oDd00RD8Kw5ktGg47bcGfe4M1id
11
+ ucgQExBDEvVu0NtxaJnEpWhC+vaqE1knr0QWH0Q+bEyqT6O2+QIDAQABo4HRMIHO
12
+ MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMCwG
13
+ A1UdEQQlMCOCCkYyM04wNDkyWFSCCkYyM04wNDkyWFSCCWxvY2FsaG9zdDAdBgNV
14
+ HQ4EFgQUcon+rS4kgJqLOPR0YJHySsytJoQwHwYDVR0jBBgwFoAUb0gT9+AxSxw6
15
+ CMfQt33plcKf3iMwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC1zZXJ2ZXI6
16
+ ODAwMC9iYXNpYy5jcmwwDQYJKoZIhvcNAQELBQADggEBAMupGt/VxwDrWR5ETNrR
17
+ Ig6IJATLil2pq8TEEsYr74EjLYk5GUuHCpFZkyoLG9TRHPmQlqceciqtqWIWyNLd
18
+ 73PPL0TkIB+rXwfS/EsD8Foi2CDsSiU8nb9j4pRxKY107l0KciR0wtp7N6rT1GxP
19
+ mP2Eq7rCafwm2efKEFN6L9RMYYHWgU/H6KTc3v7r4842dsEHdWA6Pb1wxAlXZkd6
20
+ 5EwsjhZhagrTBG854lRo+9DCk7N7ItD2d9+nRzogG3hqtwxblSPT645q5TNNv0BD
21
+ xPPM25ppjHeF1ulTZg7G+eWzOyFl2p8ueJgELOgmV0I6v3Mxrt33Zag+2OPt9JMr
22
+ rbA=
23
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKt9XdpG7OWl3k
3
+ 9pEmLIt3LG+9ojjBPNahgoMEEJvcqVI6Z6VwMqEqD0TO+ssFftXLS0K0sr4F8yrx
4
+ m6E3egOWOUkmDJvChh9XlgbimcydJ5iTOxVZnO2QP4tLNqYWiWVHWTLRKjy2qtYR
5
+ kjSwVXMdg952LJ7ydCflYehu9MlWVRilfxlrjlaiDSNdvLSET4ZHKWxOgesMTidY
6
+ ZBzfnocd83swqqglNmaqCe0GfaB79UfmlhhsRba3ReLndnnyLUNpmrN+PrPSgN3T
7
+ REPwrDmS0aDjttwZ97gzWJ25yBATEEMS9W7Q23FomcSlaEL69qoTWSevRBYfRD5s
8
+ TKpPo7b5AgMBAAECggEAAKwhLRfmZ7AQS2n/c4BWkpW+xaLf/BEY96Zsi5MIB1B2
9
+ 9btiBrgeRXrRPDwD+B/ScvcMELgejfu/XteIrnvMvv7v5YzJZ/jkqfhVC8OdlIBc
10
+ /tEFejt9ZLr3Oe/Dl4PLZpQOyXeRxbvVk6+X1eVkqTqGnn75pH164+WCHTsZ31vN
11
+ oSavzOl+TGXB6K3HPPFe6QX8YPxBPoCTZvuZGA7fdRpNl/D2wkRdRpDm/wn+qfI7
12
+ aFwWCNZMMLfT3FBRlp3h1r5BSbiTa02BUSkNbJKmP6xDSkA5GFo4NNInT79C8S7l
13
+ TIyqOsMmXF+t7YUjaS166WcrWlke14b0mra+rEDEcQKBgQD8CQoKVKbvrpO2zXGa
14
+ Zav14TBvCebi5ZglXG6kKIxnbV+1gVdNZ/rnfeD3fR+d0YhD7cSRUemEvKnHDDEl
15
+ qPj/jYFmPXs4NjPv4ZELigZ2hgYSphkFQM9eUT+Ot/WsBZy3QSwNN3RZQAEi3TAo
16
+ iSDqFPrv6+PWjbpv5YJIzQNQ6QKBgQDN6DFmHz5NnLOBiuuo8soDDZ8C5VmMCz9S
17
+ JS138UIYpv8BT91/RRw83MA3/3Dorcl9Km+cGPBB2/gF5yGGaetyrCUKvef5LWR9
18
+ R62G3TaIhaRLPlZULufNsMzLaDHa6sDaWPgDUpbK/gE9AIXpfi6PZ4dIYKDx0H0j
19
+ j/Kz83XrkQKBgDzrbmra1VL/7qJz/C6mvq77FHryeMWFW4ZEVlYFmxJw5H552gFS
20
+ zdngml0X+GlsOTS6JxY9J2W3OI5tSv/gXPdgW9O7rqoCqAEmk6mnXjKN6K/fSBL1
21
+ /Gm+188GdjJzVNMSxLQZIF1mVB/6OObDZppOIe2WJgc5UMQ1RI2WSGPpAoGBAIVG
22
+ 6dKkHnu2FiqfdPIiVMetJWOGeHPBQ/czwT6FlrbGQQDkZQZgAWsTqAeW+8pf0q+F
23
+ rEBpk/nNG7kWZgjOvmu3KTLOwTv0ObstjhBhV07+0d0yOEa9JaVp7uUqSDrfAH1U
24
+ YRQlfR1fVAXcNNFxr0l7RYF/qi1bOeSu4/W+fHFBAoGBAItMkrqZ4D23ZqpAArac
25
+ 4X48IqJDjwpHv45SMzQkMkpJm7gYNuokZyplDNit3Hncbs2rcJbcjL6Xq9lB9Cz5
26
+ FMfxoFx0gXh52UrzzVXgEE5CEKChcOJPA21OWhJgWf5K5NJryQmTRkQZGNuCgHEe
27
+ DO9eSq2QFLlQW7VT+t6EdNV+
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,13 @@
1
+ [
2
+ {rabbitmq_auth_backend_oauth2, [{key_config,
3
+ [{signing_keys,
4
+ #{<<"token-key">> =>
5
+ {map,
6
+ #{<<"alg">> => <<"HS256">>,
7
+ <<"k">> => <<"abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGH">>,
8
+ <<"kid">> => <<"token-key">>,
9
+ <<"kty">> => <<"oct">>,
10
+ <<"use">> => <<"sig">>,
11
+ <<"value">> => <<"token-key">>}}}}]},
12
+ {resource_server_id,<<"rabbitmq">>}]}
13
+ ].
@@ -0,0 +1 @@
1
+ [rabbitmq_auth_mechanism_ssl,rabbitmq_management,rabbitmq_stream,rabbitmq_stream_management,rabbitmq_top,rabbitmq_auth_backend_oauth2].
@@ -0,0 +1,16 @@
1
+ #!/bin/bash
2
+
3
+ set -o errexit
4
+ set -o pipefail
5
+ set -o xtrace
6
+ set -o nounset
7
+
8
+ readonly docker_name_prefix='rabbitmq-amqp-python-client'
9
+
10
+ declare -r rabbitmq_docker_name="$docker_name_prefix-rabbitmq"
11
+
12
+ if docker logs "$rabbitmq_docker_name" | grep -iF inet_error
13
+ then
14
+ echo '[ERROR] found inet_error in RabbitMQ logs' 1>&2
15
+ exit 1
16
+ fi
@@ -0,0 +1,193 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -o errexit
4
+ set -o pipefail
5
+ set -o xtrace
6
+
7
+ script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
8
+ readonly script_dir
9
+ echo "[INFO] script_dir: '$script_dir'"
10
+ readonly rabbitmq_image=rabbitmq:4.3-management
11
+
12
+
13
+ readonly docker_name_prefix='rabbitmq-amqp-python-client'
14
+ readonly docker_network_name="$docker_name_prefix-network"
15
+
16
+ readonly rabbitmq_docker_name="$docker_name_prefix-rabbitmq"
17
+ readonly toxiproxy_docker_name="$docker_name_prefix-toxiproxy"
18
+
19
+ if [[ ! -v GITHUB_ACTIONS ]]
20
+ then
21
+ GITHUB_ACTIONS='false'
22
+ fi
23
+
24
+ if [[ -d $GITHUB_WORKSPACE ]]
25
+ then
26
+ echo "[INFO] GITHUB_WORKSPACE is set: '$GITHUB_WORKSPACE'"
27
+ else
28
+ GITHUB_WORKSPACE="$(cd "$script_dir/../.." && pwd)"
29
+ echo "[INFO] set GITHUB_WORKSPACE to: '$GITHUB_WORKSPACE'"
30
+ fi
31
+
32
+ if [[ $1 == 'toxiproxy' ]]
33
+ then
34
+ readonly run_toxiproxy='true'
35
+ else
36
+ readonly run_toxiproxy='false'
37
+ fi
38
+
39
+ if [[ $2 == 'pull' ]]
40
+ then
41
+ readonly docker_pull_args='--pull always'
42
+ else
43
+ readonly docker_pull_args=''
44
+ fi
45
+
46
+ if [[ $1 == 'stop' ]]
47
+ then
48
+ docker stop "$rabbitmq_docker_name"
49
+ docker stop "$toxiproxy_docker_name"
50
+ exit 0
51
+ fi
52
+
53
+ set -o nounset
54
+
55
+ function start_toxiproxy
56
+ {
57
+ if [[ $run_toxiproxy == 'true' ]]
58
+ then
59
+ # sudo ss -4nlp
60
+ echo "[INFO] starting Toxiproxy server docker container"
61
+ docker rm --force "$toxiproxy_docker_name" 2>/dev/null || echo "[INFO] $toxiproxy_docker_name was not running"
62
+ # shellcheck disable=SC2086
63
+ docker run --detach $docker_pull_args \
64
+ --name "$toxiproxy_docker_name" \
65
+ --hostname "$toxiproxy_docker_name" \
66
+ --publish 8474:8474 \
67
+ --publish 55670-55680:55670-55680 \
68
+ --network "$docker_network_name" \
69
+ 'ghcr.io/shopify/toxiproxy:latest'
70
+ fi
71
+ }
72
+
73
+ function start_rabbitmq
74
+ {
75
+ echo "[INFO] starting RabbitMQ server docker container"
76
+ chmod 0777 "$GITHUB_WORKSPACE/.ci/ubuntu/log"
77
+ docker rm --force "$rabbitmq_docker_name" 2>/dev/null || echo "[INFO] $rabbitmq_docker_name was not running"
78
+ # shellcheck disable=SC2086
79
+ docker run --detach $docker_pull_args \
80
+ --name "$rabbitmq_docker_name" \
81
+ --hostname "$rabbitmq_docker_name" \
82
+ --publish 5671:5671 \
83
+ --publish 5672:5672 \
84
+ --publish 5552:5552 \
85
+ --publish 15672:15672 \
86
+ --network "$docker_network_name" \
87
+ --volume "$GITHUB_WORKSPACE/.ci/ubuntu/enabled_plugins:/etc/rabbitmq/enabled_plugins" \
88
+ --volume "$GITHUB_WORKSPACE/.ci/ubuntu/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro" \
89
+ --volume "$GITHUB_WORKSPACE/.ci/ubuntu/advanced.config:/etc/rabbitmq/advanced.config:ro" \
90
+ --volume "$GITHUB_WORKSPACE/.ci/certs:/etc/rabbitmq/certs:ro" \
91
+ --volume "$GITHUB_WORKSPACE/.ci/ubuntu/log:/var/log/rabbitmq" \
92
+ "$rabbitmq_image"
93
+ }
94
+
95
+ function wait_rabbitmq
96
+ {
97
+ set +o errexit
98
+ set +o xtrace
99
+
100
+ declare -i count=24
101
+ while (( count > 0 )) && [[ "$(docker inspect --format='{{.State.Running}}' "$rabbitmq_docker_name")" != 'true' ]]
102
+ do
103
+ echo '[WARNING] RabbitMQ container is not yet running...'
104
+ sleep 5
105
+ (( count-- ))
106
+ done
107
+
108
+ declare -i count=24
109
+ while (( count > 0 )) && ! docker exec "$rabbitmq_docker_name" epmd -names | grep -F 'name rabbit'
110
+ do
111
+ echo '[WARNING] epmd is not reporting rabbit name just yet...'
112
+ sleep 5
113
+ (( count-- ))
114
+ done
115
+
116
+ set -o xtrace
117
+
118
+ docker exec "$rabbitmq_docker_name" rabbitmqctl await_startup
119
+ docker exec "$rabbitmq_docker_name" rabbitmq-diagnostics erlang_version
120
+ docker exec "$rabbitmq_docker_name" rabbitmqctl version
121
+
122
+ set -o errexit
123
+ }
124
+
125
+ function provision_tls_auth_user
126
+ {
127
+ # SASL EXTERNAL (006_tls_auth) maps a client certificate's Common Name to a
128
+ # RabbitMQ user via ssl_cert_login_from=common_name (rabbitmq.conf); create
129
+ # that user here rather than hardcoding it, since it is derived from
130
+ # whatever CN client_localhost_certificate.pem was generated with.
131
+ local client_cn
132
+ client_cn="$(openssl x509 -in "$GITHUB_WORKSPACE/.ci/certs/client_localhost_certificate.pem" -noout -subject -nameopt multiline \
133
+ | awk -F' *= *' '/commonName/ {print $2}')"
134
+ echo "[INFO] provisioning SASL EXTERNAL user '$client_cn' from the client certificate's CN"
135
+ docker exec "$rabbitmq_docker_name" rabbitmqctl add_user "$client_cn" 'unused-external-auth-password' \
136
+ || echo "[INFO] user '$client_cn' already exists"
137
+ docker exec "$rabbitmq_docker_name" rabbitmqctl set_permissions -p / "$client_cn" '.*' '.*' '.*'
138
+ docker exec "$rabbitmq_docker_name" rabbitmqctl set_user_tags "$client_cn" ''
139
+ }
140
+
141
+ function get_rabbitmq_id
142
+ {
143
+ local rabbitmq_docker_id
144
+ rabbitmq_docker_id="$(docker inspect --format='{{.Id}}' "$rabbitmq_docker_name")"
145
+ echo "[INFO] '$rabbitmq_docker_name' docker id is '$rabbitmq_docker_id'"
146
+ if [[ -v GITHUB_OUTPUT ]]
147
+ then
148
+ if [[ -f $GITHUB_OUTPUT ]]
149
+ then
150
+ echo "[INFO] GITHUB_OUTPUT file: '$GITHUB_OUTPUT'"
151
+ fi
152
+ echo "id=$rabbitmq_docker_id" >> "$GITHUB_OUTPUT"
153
+ fi
154
+ }
155
+
156
+ function install_ca_certificate
157
+ {
158
+ set +o errexit
159
+ hostname
160
+ hostname -s
161
+ hostname -f
162
+ openssl version
163
+ openssl version -d
164
+ set -o errexit
165
+
166
+ if [[ $GITHUB_ACTIONS == 'true' ]]
167
+ then
168
+ readonly openssl_store_dir='/usr/lib/ssl/certs'
169
+ sudo cp -vf "$GITHUB_WORKSPACE/.ci/certs/ca_certificate.pem" "$openssl_store_dir"
170
+ sudo ln -vsf "$openssl_store_dir/ca_certificate.pem" "$openssl_store_dir/$(openssl x509 -hash -noout -in $openssl_store_dir/ca_certificate.pem).0"
171
+ else
172
+ echo "[WARNING] you must install '$GITHUB_WORKSPACE/.ci/certs/ca_certificate.pem' manually into your trusted root store"
173
+ fi
174
+
175
+ openssl s_client -connect localhost:5671 \
176
+ -CAfile "$GITHUB_WORKSPACE/.ci/certs/ca_certificate.pem" \
177
+ -cert "$GITHUB_WORKSPACE/.ci/certs/client_localhost_certificate.pem" \
178
+ -key "$GITHUB_WORKSPACE/.ci/certs/client_localhost_key.pem"
179
+ }
180
+
181
+ docker network create "$docker_network_name" || echo "[INFO] network '$docker_network_name' is already created"
182
+
183
+ start_toxiproxy
184
+
185
+ start_rabbitmq
186
+
187
+ wait_rabbitmq
188
+
189
+ provision_tls_auth_user
190
+
191
+ get_rabbitmq_id
192
+
193
+ install_ca_certificate
@@ -0,0 +1,33 @@
1
+ loopback_users = none
2
+ loopback_users.guest = true
3
+
4
+ log.console = true
5
+ log.console.level = debug
6
+ log.file = /var/log/rabbitmq/rabbitmq.log
7
+ log.file.level = debug
8
+ log.exchange = false
9
+
10
+ listeners.tcp.default = 5672
11
+ listeners.ssl.default = 5671
12
+ reverse_dns_lookups = false
13
+
14
+ stream.listeners.tcp.1 = 5552
15
+ stream.advertised_host = localhost
16
+
17
+ # deprecated_features.permit.amqp_address_v1 = false
18
+
19
+ ssl_options.cacertfile = /etc/rabbitmq/certs/ca_certificate.pem
20
+ ssl_options.certfile = /etc/rabbitmq/certs/server_localhost_certificate.pem
21
+ ssl_options.keyfile = /etc/rabbitmq/certs/server_localhost_key.pem
22
+ ssl_options.verify = verify_peer
23
+ ssl_options.depth = 1
24
+ ssl_options.fail_if_no_peer_cert = false
25
+ ssl_cert_login_from = common_name
26
+
27
+ auth_mechanisms.1 = PLAIN
28
+ auth_mechanisms.2 = ANONYMOUS
29
+ auth_mechanisms.3 = EXTERNAL
30
+
31
+
32
+ auth_backends.1 = internal
33
+ auth_backends.2 = rabbit_auth_backend_oauth2
@@ -0,0 +1,30 @@
1
+ # .github/release.yml
2
+
3
+ changelog:
4
+ exclude:
5
+ labels:
6
+ - ignore-for-release
7
+ - skip-changelog
8
+ categories:
9
+ - title: 🚨 Breaking Changes
10
+ labels:
11
+ - Semver-Major
12
+ - breaking-change
13
+ - title: ✨ Enhancements
14
+ labels:
15
+ - Semver-Minor
16
+ - enhancement
17
+ - title: 🐛 Bug Fixes
18
+ labels:
19
+ - Semver-Patch
20
+ - bug
21
+ - bug-fix
22
+ - title: 📚 Documentation
23
+ labels:
24
+ - documentation
25
+ - title: 🔄 Dependency Updates
26
+ labels:
27
+ - dependencies
28
+ - title: 🔧 Other Changes
29
+ labels:
30
+ - '*'
@@ -0,0 +1,62 @@
1
+ name: Test against a RabbitMQ broker
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - v2_main
7
+ pull_request:
8
+ branches:
9
+ - v2_main
10
+ types:
11
+ - opened
12
+ - synchronize
13
+
14
+ jobs:
15
+ ci:
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python-version: ["3.12"]
20
+ os: [ubuntu-24.04]
21
+ runs-on: ${{ matrix.os }}
22
+
23
+ steps:
24
+ - name: Checkout
25
+ uses: actions/checkout@v6
26
+
27
+ - uses: actions/setup-python@v6
28
+ with:
29
+ python-version: ${{ matrix.python-version }}
30
+ cache: pip
31
+ cache-dependency-path: pyproject.toml
32
+
33
+ - name: Install dependencies
34
+ run: pip install -e ".[dev]"
35
+
36
+ - name: Check formatting and lint
37
+ run: make lint PYTHON=python
38
+
39
+ - name: Type check
40
+ run: make typecheck PYTHON=python
41
+
42
+ - name: Run unit tests
43
+ run: make test-unit PYTHON=python
44
+
45
+ - name: Start RabbitMQ
46
+ id: start-rabbitmq
47
+ run: ${{ github.workspace }}/.ci/ubuntu/gha-setup.sh
48
+
49
+ - name: Run integration tests
50
+ run: make test-integration PYTHON=python
51
+
52
+ - name: Check RabbitMQ logs for errors
53
+ if: always()
54
+ run: ${{ github.workspace }}/.ci/ubuntu/gha-log-check.sh
55
+
56
+ - name: Upload RabbitMQ logs
57
+ if: failure()
58
+ uses: actions/upload-artifact@v4
59
+ with:
60
+ name: rabbitmq-logs-${{ matrix.python-version }}-${{ matrix.os }}
61
+ path: .ci/ubuntu/log/rabbitmq.log
62
+ if-no-files-found: ignore
@@ -0,0 +1,40 @@
1
+ name: publish-pypi
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ pypi_repository_url:
7
+ required: true
8
+ type: string
9
+ secrets:
10
+ pypi_api_login:
11
+ required: true
12
+ pypi_api_password:
13
+ required: true
14
+
15
+ jobs:
16
+ pypi-publish:
17
+ name: upload release to PyPI
18
+ runs-on: ubuntu-latest
19
+ # Specifying a GitHub environment is optional, but strongly encouraged
20
+ environment:
21
+ name: pypi
22
+ url: https://pypi.org/p/rabbitmq-amqp-python-client
23
+ permissions:
24
+ # IMPORTANT: this permission is mandatory for trusted publishing
25
+ id-token: write
26
+ steps:
27
+ - uses: actions/checkout@v3
28
+ - uses: actions/setup-python@v5
29
+ with:
30
+ python-version: "3.12"
31
+ - name: build
32
+ run: |
33
+ python3 -m pip install build
34
+ python3 -m build
35
+ # retrieve your distributions here
36
+ - name: Publish package distributions to PyPI
37
+ uses: pypa/gh-action-pypi-publish@release/v1
38
+ with:
39
+ verbose: true
40
+ attestations: false
@@ -0,0 +1,18 @@
1
+ name: publish-release
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - released
7
+ - prereleased
8
+
9
+ jobs:
10
+ call-publish-pypi:
11
+ permissions:
12
+ id-token: write
13
+ uses: ./.github/workflows/publish-pypi.yaml
14
+ with:
15
+ pypi_repository_url: https://upload.pypi.org/legacy/
16
+ secrets:
17
+ pypi_api_login: __token__
18
+ pypi_api_password: ${{ secrets.PYPI_TOKEN }}