{ "info": { "author": "Ask Solem", "author_email": "ask@celeryproject.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: Jython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "=====================================================================\n Cyanide - Celery stress testing and integration test support.\n=====================================================================\n\n|build-status| |coverage| |license| |wheel| |pyversion| |pyimp|\n\n:Version: 1.3.0\n:Web: https://cyanide.readthedocs.io/\n:Download: http://pypi.python.org/pypi/cyanide/\n:Source: http://github.com/celery/cyanide/\n:Keywords: celery, stress, integration, functional, testing\n\n.. contents::\n :local:\n\nIntroduction\n============\n\nThis stress test suite will attempt to break the Celery worker in different\nways, and can also be used to write new stress test suites for projects\ndepending on Celery infrastructure.\n\nThe worker must currently be started separately, and it's encouraged\nto repeat the suite using workers started with different configuration values.\n\nIdeas include:\n\n#. Default, single process:\n ::\n\n $ celery -A cyanide worker -c 1\n\n#. Default, multiple processes:\n ::\n\n $ celery -A cyanide worker -c 8\n\n#. Frequent ``maxtasksperchild`` recycling, single child process:\n ::\n\n $ celery -A cyanide worker -c 1 --maxtasksperchild=1\n\n#. Frequent autoscale scale down & ``maxtasksperchild``, single child process:\n ::\n\n $ AUTOSCALE_KEEPALIVE=0.01 celery -A cyanide worker \\\n > --autoscale=1,0 --maxtasksperchild=1\n\n#. Frequent ``maxtasksperchild``, multiple child processes:\n ::\n\n $ celery -A cyanide worker -c 8 --maxtasksperchild=1\n\n#. Processes terminated by time limits:\n ::\n\n $ celery -A cyanide worker --time-limit=1\n\n#. Frequent ``maxtasksperchild``, single child process with late ack:\n ::\n\n $ celery -A cyanide worker -c1 --maxtasksperchild=1 -Z acks_late\n\n#. Worker using the ``eventlet`` pool:\n\n Start the worker, here having a thousand green-threads:\n ::\n\n $ celery -A cyanide worker -c1000 -P eventlet\n\n You must activate the `green` test group when starting the test suite:\n ::\n\n $ celery cyanide -g green\n\n#. Worker using the ``gevent`` pool:\n\n Start the worker, here having a thousand green-threads:\n ::\n\n $ celery -A cyanide worker -c1000 -P gevent\n\n You must activate the `green` test group when starting the test suite:\n ::\n\n $ celery cyanide -g green\n\nTips\n====\n\nIt's a good idea to include the ``--purge ``\nargument to clear out tasks from previous runs.\n\nNote that the stress client will probably hang if the test fails, so this\ntest suite is currently not suited for automatic runs.\n\nConfiguration Templates\n=======================\n\nYou can select a configuration template using the `-Z` command-line argument\nto any ``celery -A cyanide`` command or the ``celery cyanide``\ncommand used to execute the test suite.\n\nThe templates available are:\n\n* ``default``\n\n Using AMQP as a broker, RPC as a result backend,\n and using JSON serialization for task and result messages.\n\n Both broker and result store is expected to run at localhost.\n\n* ``vagrant1``\n\n Use the VM started by ``celery vagrant up`` as the broker\n and result backend (RabbitMQ).\n\n* ``vagrant1_redis``\n\n Use the VM started by ``celery vagrant up`` as the broker\n and result backend (Redis).\n\n* ``redis``\n\n Using Redis as a broker and result backend.\n\n* ``redistore``\n\n Using Redis as a result backend only.\n\n* ``acks_late``\n\n Enables late ack globally.\n\n* ``pickle``\n\n Using pickle as the serializer for tasks and results\n (also allowing the worker to receive and process pickled messages)\n\n* ``confirms``\n\n Enables RabbitMQ publisher confirmations.\n\n* ``events``\n\n Configure workers to send task events.\n\n* ``proto1``\n\n Use version 1 of the task message protocol (pre 4.0)\n\nYou can see the resulting configuration from any template by running\nthe command:\n::\n\n $ celery -A cyanide report -Z redis\n\nExamples\n--------\n\nExample running the stress test using the ``redis`` configuration template:\n::\n\n $ cyanide -Z redis\n\nExample running the worker using the ``redis`` configuration template:\n::\n\n $ celery -A cyanide worker -Z redis\n\nYou can also mix several templates by providing a comma-separated list:\n::\n\n $ celery -A cyanide worker -Z redis,acks_late\n\nIn this example (``redis,acks_late``) the ``redis`` template will be used\nas main configuration, and then the additional keys from the ``acks_late`` template\nwill be merged as changes.\n\nTest Suite Options\n==================\n\nAfter one or more worker instances are running, you can start executing the\ntests.\n\nBy default the complete test suite will be executed:\n::\n\n $ celery cyanide\n\nYou can also specify what test cases to run by providing one or more names\nas arguments:\n::\n\n $ celery cyanide revoketermfast revoketermslow\n\nA full list of test case names can be retrieved with the\n``-l `` switch:\n::\n\n $ celery cyanide -l\n .> 1) chain,\n .> 2) chaincomplex,\n .> 3) parentids_chain,\n .> 4) parentids_group,\n .> 5) manyshort,\n .> 6) unicodetask,\n .> 7) always_timeout,\n .> 8) termbysig,\n .> 9) timelimits,\n .> 10) timelimits_soft,\n .> 11) alwayskilled,\n .> 12) alwaysexits,\n .> 13) bigtasksbigvalue,\n .> 14) bigtasks,\n .> 15) smalltasks,\n .> 16) revoketermfast,\n .> 17) revoketermslow\n\nYou can also start from an offset within this list, e.g. to skip the first two\ntests use ``--offset=2 ``:\n::\n\n $ celery cyanide --offset=2\n\nSee ``celery cyanide --help`` for a list of all available\ncommand-line options.\n\nVagrant\n=======\n\nStarting\n--------\n\nCyanide ships with a complete virtual machine solution to run your tests.\nThe image ships with Celery, Cyanide, RabbitMQ and Redis and can be deployed\nsimply by running the ``celery vagrant`` command:\n::\n\n $ celery vagrant up\n\n\nThe IP address of the new virtual machine will be 192.168.33.123,\nand you can easily tell both the worker and cyanide test suite to use\nit by specifying the ``vagrant1`` (RabbitMQ) or ``vagrant1_redis`` templates:\n::\n\n $ celery -A worker -Z vagrant1\n $ celery cyanide -Z vagrant1\n\nSSH\n---\n\nTo open an SSH session with the virtual machine after starting\nwith ``celery vagrant up`` do:\n::\n\n $ ssh $(celery vagrant sshargs)\n\nStopping\n--------\n\nTo shutdown the virtual machine run the command:\n::\n\n $ celery vagrant halt\n\nTo destroy the instance run the command:\n::\n\n $ celery vagrant destroy\n\n\n.. note::\n\n To completely wipe your instance you need to remove the\n ``.vagrant`` directory.\n\n The location of this directory can be retrieved by executing\n the following:\n ::\n\n $ celery vagrant statedir\n /opt/devel/cyanide/cyanide/vagrant/.vagrant\n\n You can combine this with ``rm`` to force removal of this\n directory:\n ::\n\n $ rm -rf $(celery vagrant statedir)\n\nEnvironment Variables\n=====================\n\n``CYANIDE_TRANS``\n-----------------\n\nIf the ``CYANIDE_TRANS`` environment variable is set\nthe stress test suite will use transient task messages instead of persisting\nmessages to disk.\n\nTo avoid declaration collision the ``cstress.trans`` queue name will be used\nwhen this option is enabled.\n\n``CYANIDE_BROKER``\n------------------\n\nYou can set the ``CYANIDE_BROKER`` environment variable\nto change the default broker used:\n::\n\n $ CYANIDE_BROKER='amqp://' celery -A cyanide worker # ...\n $ CYANIDE_BROKER='amqp://' celery cyanide\n\n``CYANIDE_BACKEND``\n-------------------\n\nYou can set the ``CYANIDE_BACKEND`` environment variable to change\nthe result backend used:\n::\n\n $ CYANIDE_BACKEND='amqp://' celery -A cyanide worker # ...\n $ CYANIDE_BACKEND='amqp://' celery cyanide\n\n``CYANIDE_QUEUE``\n-----------------\n\nA queue named ``c.stress`` is created and used by default for all task\ncommunication.\n\nYou can change the name of this queue using the ``CYANIDE_QUEUE``\nenvironment variable:\n::\n\n $ CYANIDE_QUEUE='cyanide' celery -A cyanide worker # ...\n $ CYANIDE_QUEUE='cyanide' celery cyanide\n\n``CYANIDE_PREFETCH``\n--------------------\n\nThe ``CYANIDE_PREFETCH`` environment variable sets the default prefetch\nmultiplier (default value is 10).\n\n``AWS_REGION``\n--------------\n\nThe ``AWS_REGION`` environment variable changes the Amazon AWS region\nto something other than the default ``us-east-1``, to be used with the\n``sqs`` template.\n\n\nCustom Suites\n=============\n\nYou can define custom suites (look at source code of\n``cyanide.suites.default`` for inspiration), and tell cyanide to use that\nsuite by specifying the ``celery cyanide -S`` option:\n::\n\n $ celery cyanide -S proj.funtests:MySuite\n\n.. _installation:\n\nInstallation\n============\n\nYou can install cyanide either via the Python Package Index (PyPI)\nor from source.\n\nTo install using `pip`:\n::\n\n $ pip install -U cyanide\n\n.. _installing-from-source:\n\nDownloading and installing from source\n--------------------------------------\n\nDownload the latest version of cyanide from\nhttp://pypi.python.org/pypi/cyanide\n\nYou can install it by doing the following:\n::\n\n $ tar xvfz cyanide-0.0.0.tar.gz\n $ cd cyanide-0.0.0\n $ python setup.py build\n # python setup.py install\n\nThe last command must be executed as a privileged user if\nyou are not currently using a virtualenv.\n\n.. _installing-from-git:\n\nUsing the development version\n-----------------------------\n\nWith pip\n~~~~~~~~\n\nYou can install the latest snapshot of cyanide using the following\npip command:\n::\n\n $ pip install https://github.com/celery/cyanide/zipball/master#egg=cyanide\n\n.. |build-status| image:: https://secure.travis-ci.org/celery/cyanide.png?branch=master\n :alt: Build status\n :target: https://travis-ci.org/celery/cyanide\n\n.. |coverage| image:: https://codecov.io/github/celery/cyanide/coverage.svg?branch=master\n :target: https://codecov.io/github/celery/cyanide?branch=master\n\n.. |license| image:: https://img.shields.io/pypi/l/cyanide.svg\n :alt: BSD License\n :target: https://opensource.org/licenses/BSD-3-Clause\n\n.. |wheel| image:: https://img.shields.io/pypi/wheel/cyanide.svg\n :alt: Cyanide can be installed via wheel\n :target: http://pypi.python.org/pypi/cyanide/\n\n.. |pyversion| image:: https://img.shields.io/pypi/pyversions/cyanide.svg\n :alt: Supported Python versions.\n :target: http://pypi.python.org/pypi/cyanide/\n\n.. |pyimp| image:: https://img.shields.io/pypi/implementation/cyanide.svg\n :alt: Support Python implementations.\n :target: http://pypi.python.org/pypi/cyanide/", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/celery/cyanide", "keywords": "celery integration test suite", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "cyanide", "package_url": "https://pypi.org/project/cyanide/", "platform": "any", "project_url": "https://pypi.org/project/cyanide/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/celery/cyanide" }, "release_url": "https://pypi.org/project/cyanide/1.3.0/", "requires_dist": null, "requires_python": null, "summary": "Celery stress testing and integration test support.", "version": "1.3.0" }, "last_serial": 3086525, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "4093b34f40ccafd7a845b83e8944f1f8", "sha256": "57beee1e64f0e528935004d7fd05e6d8ca1f5009b2275f6d57c515dc5786cb59" }, "downloads": -1, "filename": "cyanide-1.0.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4093b34f40ccafd7a845b83e8944f1f8", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 27072, "upload_time": "2016-04-27T01:21:29", "url": "https://files.pythonhosted.org/packages/9b/3f/41a399e6a92e8da5fd2f12690df1948a77ff855cf173c2e258f6f3e4d2d6/cyanide-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e3f5de7b76110d000992d75c7cd2673", "sha256": "fa403d1e0f62a3e9a0343890368f839848b30c4c4c12119e4c7cd721f69dfa93" }, "downloads": -1, "filename": "cyanide-1.0.0.tar.gz", "has_sig": true, "md5_digest": "2e3f5de7b76110d000992d75c7cd2673", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66001, "upload_time": "2016-04-27T01:20:59", "url": "https://files.pythonhosted.org/packages/de/bd/8342930e7f8af92ab634c67dac3d9a2e082255d982885e876a4b91acc323/cyanide-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "85e7fdede587d4b7246ec85a3e60a47f", "sha256": "75c76bf909e9e7b1e585fa02d4177f163a5a7fe15925e923be1a06dcfc8d3bdf" }, "downloads": -1, "filename": "cyanide-1.0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "85e7fdede587d4b7246ec85a3e60a47f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 27407, "upload_time": "2016-04-27T01:45:46", "url": "https://files.pythonhosted.org/packages/99/50/fbc61333b310ac4ab74a7ffbba24c586f5dbb88e0624892cbf8e2b0c6087/cyanide-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b734535623872b07f2fa86934771db82", "sha256": "143b160cf1b750294ab0deb7ccaad3324a0dd4b3b233b85ec52e951807803a7b" }, "downloads": -1, "filename": "cyanide-1.0.1.tar.gz", "has_sig": true, "md5_digest": "b734535623872b07f2fa86934771db82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66200, "upload_time": "2016-04-27T01:45:40", "url": "https://files.pythonhosted.org/packages/c7/e7/cbb48522aa7326afa8701337b4bea8aebadafbdf44c2bfc8369b67365cd0/cyanide-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "9841e2841308ff24b1fcd97649027327", "sha256": "c244a3d1f1e33594eca96799a69d3de3ecc2a72f5d9904828022d4a8e85b3a94" }, "downloads": -1, "filename": "cyanide-1.1.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "9841e2841308ff24b1fcd97649027327", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 30009, "upload_time": "2016-05-12T22:14:25", "url": "https://files.pythonhosted.org/packages/8a/bf/e2983023bb13114fbecf445918ab490244d4c2f6f8c22d26fd93ebc81f1c/cyanide-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb0fede653d09aea11e3d35a9179afe9", "sha256": "4c7af4baa6ff7b243761f6540f4ef08cddc816cfaf99ecc8c6dec8a89ac22f5d" }, "downloads": -1, "filename": "cyanide-1.1.0.tar.gz", "has_sig": true, "md5_digest": "fb0fede653d09aea11e3d35a9179afe9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70226, "upload_time": "2016-05-12T22:14:17", "url": "https://files.pythonhosted.org/packages/8d/30/95ed189995aa4fa13d29caea303ffa16d1bf93252341ba04e0817fbe2733/cyanide-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "built for Darwin-15.6.0", "digests": { "md5": "2e89f9e305aab1a0b646d909af9124f4", "sha256": "fd911a589eb368053a3012ce2fc39090b48a77160d050971b69c8b1e1d734b66" }, "downloads": -1, "filename": "cyanide-1.2.0.macosx-10.11-intel.tar.gz", "has_sig": true, "md5_digest": "2e89f9e305aab1a0b646d909af9124f4", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 42946, "upload_time": "2016-06-30T19:04:00", "url": "https://files.pythonhosted.org/packages/5d/42/38d3b344eb7518bd131b2c72f16424d272d849c4155c0065babe67fc8993/cyanide-1.2.0.macosx-10.11-intel.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "59960406f02e4beb1f6418bcda70ede8", "sha256": "0f9e682dc493151b9c3b0aad417a8be98b29fddf311974e5a9470d00091eaa50" }, "downloads": -1, "filename": "cyanide-1.3.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "59960406f02e4beb1f6418bcda70ede8", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 30510, "upload_time": "2016-10-19T19:39:28", "url": "https://files.pythonhosted.org/packages/ce/4d/89b72e4c7c160d58b0a85e0fb01f4e41d2c25a03d73d295e2cb39a3e5a21/cyanide-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b299b0826df450ca518b63a925c0c633", "sha256": "5a75f962f313dd64bbe5b21983a76cf4def64cdfc249bfa1d92994c29bcc6326" }, "downloads": -1, "filename": "cyanide-1.3.0.tar.gz", "has_sig": true, "md5_digest": "b299b0826df450ca518b63a925c0c633", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70544, "upload_time": "2016-10-19T19:39:25", "url": "https://files.pythonhosted.org/packages/65/3c/5cc5a38e2c24d68ddfa39c3e5e7f547a7be2e59702fee5d2e23a4327e157/cyanide-1.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "59960406f02e4beb1f6418bcda70ede8", "sha256": "0f9e682dc493151b9c3b0aad417a8be98b29fddf311974e5a9470d00091eaa50" }, "downloads": -1, "filename": "cyanide-1.3.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "59960406f02e4beb1f6418bcda70ede8", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 30510, "upload_time": "2016-10-19T19:39:28", "url": "https://files.pythonhosted.org/packages/ce/4d/89b72e4c7c160d58b0a85e0fb01f4e41d2c25a03d73d295e2cb39a3e5a21/cyanide-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b299b0826df450ca518b63a925c0c633", "sha256": "5a75f962f313dd64bbe5b21983a76cf4def64cdfc249bfa1d92994c29bcc6326" }, "downloads": -1, "filename": "cyanide-1.3.0.tar.gz", "has_sig": true, "md5_digest": "b299b0826df450ca518b63a925c0c633", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70544, "upload_time": "2016-10-19T19:39:25", "url": "https://files.pythonhosted.org/packages/65/3c/5cc5a38e2c24d68ddfa39c3e5e7f547a7be2e59702fee5d2e23a4327e157/cyanide-1.3.0.tar.gz" } ] }