{"id":23654857,"url":"https://github.com/apache/qpid-dispatch","last_synced_at":"2025-12-18T08:07:17.346Z","repository":{"id":13841482,"uuid":"16538531","full_name":"apache/qpid-dispatch","owner":"apache","description":"Mirror of Apache Qpid Dispatch","archived":false,"fork":false,"pushed_at":"2025-03-19T18:28:38.000Z","size":42807,"stargazers_count":66,"open_issues_count":26,"forks_count":87,"subscribers_count":20,"default_branch":"main","last_synced_at":"2025-03-28T15:07:39.681Z","etag":null,"topics":["amqp","amqp10","amqps","apache","c","messaging","network-server","python","python3","qpid","qpid-dispatch-router"],"latest_commit_sha":null,"homepage":"https://qpid.apache.org/components/dispatch-router","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apache.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-02-05T08:00:07.000Z","updated_at":"2025-03-19T18:27:25.000Z","dependencies_parsed_at":"2023-10-16T04:01:24.800Z","dependency_job_id":"cbc9cc8d-3d89-4134-bbed-95bc854dc6ea","html_url":"https://github.com/apache/qpid-dispatch","commit_stats":null,"previous_names":[],"tags_count":95,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fqpid-dispatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fqpid-dispatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fqpid-dispatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fqpid-dispatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apache","download_url":"https://codeload.github.com/apache/qpid-dispatch/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246983719,"owners_count":20864301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amqp","amqp10","amqps","apache","c","messaging","network-server","python","python3","qpid","qpid-dispatch-router"],"created_at":"2024-12-28T19:33:40.626Z","updated_at":"2025-12-18T08:07:12.300Z","avatar_url":"https://github.com/apache.png","language":"Python","readme":"// Licensed to the Apache Software Foundation (ASF) under one\n// or more contributor license agreements.  See the NOTICE file\n// distributed with this work for additional information\n// regarding copyright ownership.  The ASF licenses this file\n// to you under the Apache License, Version 2.0 (the\n// \"License\"); you may not use this file except in compliance\n// with the License.  You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing,\n// software distributed under the License is distributed on an\n// \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n// KIND, either express or implied.  See the License for the\n// specific language governing permissions and limitations\n// under the License.\n\n= Qpid Dispatch\n\nimage:https://github.com/apache/qpid-dispatch/actions/workflows/build.yaml/badge.svg[\n\"GitHub Actions\"\nlink=\"https://github.com/apache/qpid-dispatch/actions/workflows/build.yaml\"]\nimage:https://img.shields.io/github/license/apache/qpid-dispatch.svg[\n\"License\",\nlink=\"https://github.com/apache/qpid-dispatch/blob/main/LICENSE\"]\n\nQpid Dispatch is a high-performance, lightweight AMQP 1.0 message router.\nIt provides flexible and scalable interconnect between any AMQP endpoints,\nwhether they be clients, brokers or other AMQP-enabled services.\n\n== Building and testing\n\nNOTE: Dispatch will not build on Windows.\n\n=== Dependencies\n\nTo build dispatch on a yum-based Linux system, you will need the following\npackages installed:\n\n- qpid-proton-c-devel\n- python3-qpid-proton\n- cmake\n- make\n- gcc\n- python3-devel\n- cyrus-sasl-plain\n- cyrus-sasl-devel\n- asciidoc (for building docs)\n- asciidoctor (for building docs)\n\nTo build formatted documentation (man pages, HTML, PDF) see the requirements in `doc/README.adoc`\n\n=== Build\n\nFrom the `qpid-dispatch` directory:\n\n[source,shell script]\n----\n$ mkdir my_build    # or directory of your choice.\n$ cd my_build\n$ cmake ..\n$ make\n----\n\n=== Running The Tests\n\nFrom the `\u003cbuild\u003e` directory you can run all the system- and unit-tests with:\n[source,shell script]\n----\n$ ctest -VV\n----\n\nctest uses the script `\u003cbuild\u003e/test/run.py` to set up the correct environment for\ntests. You can use it to run tests individually from the `\u003cbuild\u003e/tests`\ndirectory.\n\n.Example\n[source,shell script]\n----\n$ ./run.py unit_tests_size 3\n$ ./run.py -m unittest system_tests_qdstat\n----\n\nRun it without arguments to get a summary of how it can be used:\n[source,shell script]\n----\n$ ./run.py\n----\n\n=== Test-only dependencies\n\nWebsocket system tests use the Python websockets asyncio module.\n\n.Install websockets\n[source,shell script]\n----\npip3 install --user websockets\n----\n\nThe system tests are implemented using Python's unittest library. This library is\nused to run the tests by default. The tests can be also run using `xmlrunner` or `pytest`.\nPytest can generate a JUnit-compatible XML report containing an entry for each Python test method.\nAfter running the tests, all XML reports will be found under tests/junitxmls in your build directory:\n\n[source,shell script]\n----\ncmake .. -DPYTHON_TEST_COMMAND='-m;pytest;-vs;--junit-xml=junitxmls/${py_test_module}.xml;--pyargs;${py_test_module}'\n----\n\n=== Runner for `skrouterd` in tests\n\nSystem tests can be configured to run `skrouterd` processes with an arbitrary wrapper.\nTo do this, set the `QDROUTERD_RUNNER` CMake option to a string that will be prepended before all `skrouterd` invocations during testing.\nThe following example illustrates how to run the router under `gdb`, to obtain a backtrace if the router crashes.\n\n[source,shell script]\n----\ncmake .. -DQDROUTERD_RUNNER=\"gdb -quiet -iex 'set pagination off' -iex 'set debuginfod enabled on' -ex run -ex 'thread apply all bt' -ex 'quit $_exitcode' --batch --args\"\n----\n\n=== Test Suite Code Coverage (GNU tools only)\n\nUse coverage analysis to ensure that all code paths are exercised by\nthe test suite. To run the tests and perform code coverage analysis:\n\n1. install the lcov package\n[source,shell script]\n$ yum install lcov\n\n2. configure and build for the Coverage build type (from the \u003cbuild\u003e directory):\n[source,shell script]\n$ cmake -DCMAKE_BUILD_TYPE=Coverage .. \u0026\u0026 make\n\n3. run the test suite and generate the coverage html output\n[source,shell script]\n$ ctest \u0026\u0026 make coverage\n\n4. then point your browser at `\u003cbuild\u003e/coverage_results/html/index.html`\n\n=== Clean build, install and test\n[source]\n----\n$ source config.sh; test.sh\n----\n\nWARNING: Any preexisting directories 'build' and 'install' will be deleted.\n\nThis script then does the following:\n\n- Do a fresh cmake and make in directory 'build'\n- Run unit tests (not system tests) in 'build'\n- Do 'make install' into the directory 'install'\n- Run system tests on the installation in 'install'.\n\n=== Run Time Validation\n\nThe CTest test suite can be configured to enable extra run time\nvalidation checks against the dispatch router.\n\nSince run time validation slows down qdrouter considerably it is\ndisabled by default.  It can be enabled by setting the RUNTIME_CHECK\nbuild flag via the cmake command.\n\nNOTE: Depending on your environment the ctest suite may time out\nif validation is enabled due to the additional run time overhead it\nadds.  You can extend the default test time via the ctest `--timeout`\noption.\n\n.Example\n[source,shell script]\n----\nctest --timeout 1500 -VV\n----\n\nThe Qpid Dispatch Router test suite supports the following run time\nvalidation tools:\n\n==== Valgrind Memcheck\nRuns qdrouterd under Valgrind's memcheck leak checker during the CTest\nsuite.  This will cause tests to fail if a memory error is\nencountered.  Use the grinder tool (in the bin directory) to create a\nsummary of the errors found during the test run.\n\nThe valgrind toolset must be installed in order to use memcheck.\n\nTo enable memcheck set the RUNTIME_CHECK build flag to \"memcheck\":\n\n[source,shell script]\n----\ncmake .. -DRUNTIME_CHECK=memcheck\n----\n\nIf valgrind detects errors the qdrouterd process will exit with an\nexit code of 42. This will be displayed in the CTest output. For\nexample:\n\n[source]\n----\nRuntimeError: Errors during teardown:\nProcess XXXX error: exit code 42, expected 0\n----\n\n==== GCC/Clang Thread Sanitizer (TSAN)\nThis option turns on extra run time threading verification.\n\nNOTE: Applicable only to GCC versions \u003e= 7.4 and Clang versions \u003e= 6.0.\n\nTo enable the thread sanitizer set the RUNTIME_CHECK build flag to \"tsan\":\n\n[source,shell script]\n----\ncmake .. -DRUNTIME_CHECK=tsan\n----\n\nThe TSAN library (libtsan) must be installed in order to use this\noption.\n\nIf threading violations are detected during the CTest suite the\nqdrouterd process will exit with an exit code of 66. This will be\ndisplayed in the CTest output. For example:\n\n[source]\n----\nRuntimeError: Errors during teardown:\nProcess XXXX error: exit code 66, expected 0\n----\n\nFalse positives can be suppressed via the `tsan.supp` file in the tests\ndirectory.\n\n==== GCC/Clang Address Sanitizer (ASAN)\n\nThis option turns on extra run time memory verification, including\nleak checks.\n\nNOTE: Applicable only to GCC versions \u003e= 5.4 and Clang versions \u003e= 6.0.\n\nTo enable the address sanitizer set the RUNTIME_CHECK build flag to \"asan\":\n\n[source,shell script]\n----\ncmake .. -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG -DRUNTIME_CHECK=asan\n----\n\nOn Aarch64, a hardware-assisted address sanitizer is enabled with \"hwasan\":\n\n[source,shell script]\n----\ncmake .. -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG -DRUNTIME_CHECK=hwasan\n----\n\nThe ASAN (libasan) and UBSAN (libubsan) libraries must be installed in\norder to use this option.\n\nNOTE: Memory pool will produce false leak reports unless `QD_MEMORY_DEBUG`\nis also defined.\n\nFalse positive leak errors can be suppressed via the lsan.supp file in\nthe tests directory.\n\n\n=== CMake Build Options\n\nUse `cmake-gui` to explore the CMake build options available.\nExisting build directory can be opened with `cmake-gui -S .. -B .`\n\n|===\n|CMake option| Description\n\n|`-DCMAKE_BUILD_TYPE=`\n|Dispatch defaults to building with the `RelWithDebInfo` CMake preset.\nOther options include `Debug` (disables optimizations) and `Coverage`.\n\n|`-DQD_ENABLE_ASSERTIONS=`\n|Seting this to `ON` enables asserts irrespective of `CMAKE_BUILD_TYPE`.\n\n|`-DCONSOLE_INSTALL=`\n|Web console will not be built if this is set to `OFF`.\n\n|`-DRUNTIME_CHECK=`\n|Enables C/C++ runtime checkers.See \"Run Time Validation\" chapter above.\n\n|`-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON`\n|With CMake 3.9+, compiles the project with LTO (Link Time Optimization) enabled.\nOlder CMake will only honor this option with the Intel compiler on Linux.\n|===\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fqpid-dispatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapache%2Fqpid-dispatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fqpid-dispatch/lists"}