{ "info": { "author": "Taylor McKinnon", "author_email": "taylor.mckinnon@scality.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "# SFKO\n\n```\nusage: sfko [-h] [-c] [-w]\n\nI am become death, destoyer of clusters.\n\noptional arguments:\n -h, --help show this help message and exit\n -c, --controller Start sfko in controller mode\n -w, --worker Start sfko in worker mode\n\nIf no options are provided sfko will start in standalone mode\n```\n\n\n# Testing model\n\nSFKO implements a randomized testing strategy. Test configuration is loosely defined in `Scenarios` and specifics are chosen at random during runtime.\n\n### Scenarios\n\n`Scenarios` consist of a list of `tests` and `checks` to execute along with options defining required resources.\n\nSimple `Scenario`\n\n```yaml\n- name: Write 0B\n required:\n buckets: 1\n objects:\n size: 0B\n tests:\n - put\n checks:\n - check-backend\n```\n\n`Scenarios` with all the bells and whistles\n\n```\n- name: Replicate 10M\n required:\n buckets:\n - replication:\n - *AWS\n - *GCP\n clouds:\n - *AWS\n objects:\n count: 10000\n size: 10M\n tests:\n - put-replication\n checks:\n - check-replication-mpu\n```\n\n#### Scenario options\n\n```\n- name: Example Scenario\n required:\n buckets: 1 # buckets can be a integer sepcify the number of buckets to create\n buckets: # buckets can be a list with each element specify a bucket\n \t- replication: True # replication can be set as a boolean\n - replication:\t\t# or a list specify possible backend clouds\n - *AWS\n - *GCP\n clouds:\t\t\t# clouds specifies a list of backends to be used for created buckets\n - *AWS\n```\n\n### Tests and Checks\n\nFunctions that either drive the cluster or check behavior are split into two groups: `Tests` and `Checks`.\n\n\n### Anatomy of a `Test` or `Check`\n\nAt its root a `Test` or `Check` is simply a function that returns `True/False` based on success.\n```python\n@register_test('put')\ndef put_objects(bucket, objs):\n for obj, data in objs:\n obj.upload_fileobj(data)\n return True\n\n```\n\n```python\n@register_check('check-backend')\ndef check_backend(bucket_conf, objs):\n\tif that_op_worked():\n \treturn True\n return False\n```\n\nNew `Tests` and `Checks` can be registered with the decorators `register_test` and `register_check` respectively. When called each check is pass two objects: a `Bucket` and `ObjectProxy` instance. These describe the generated bucket and objects chosen for this test.\n\nA `Bucket` instance has the following attributes:\n\n```\nname\t\t# Name of bucket\nbackend\t\t# Instance of Backend, describes chosen bucket backend\nreplication # Instance of Backend, describes chosen replication target\ntrasient\t# bool whether transient source is enabled\nexpiration\t# bool whether lifecycle expiration is enabled\nversioning \t# bool whether versioning is enabled\nclouds\t\t# List of cloud constants describing possible backend choices\nclient\t\t# A high level boto3 Bucket client\n```\nA `Backend` has the following attributes\n\n```\nname\t# Human friendly name for this backend\ntype\t# A constant describing this backends type\nbucket\t# The cloudside bucket for this backend\n```\n\nA `ObjectProxy` has the following attributes\n\n```\nobjects\t\t# An iterator yielding a boto3 Object, and a open file descriptor of content\nraw\t\t\t# An iterator yielding a bucket name, key name, and file size\nclient\t\t# A low level boto3 client\nresource\t# A high level boto3 resource\n```", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "scality zenko orbit", "license": "", "maintainer": "", "maintainer_email": "", "name": "sfko", "package_url": "https://pypi.org/project/sfko/", "platform": "", "project_url": "https://pypi.org/project/sfko/", "project_urls": null, "release_url": "https://pypi.org/project/sfko/0.1.4/", "requires_dist": null, "requires_python": "", "summary": "A utility for long running semi-random stress tests of Zenko", "version": "0.1.4" }, "last_serial": 4432678, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ed10d7cdf4378157e3f8bf3146b7a726", "sha256": "d374090dc25f4dd8fd82865fc27d0682da849163a6689893e330735f048b4b16" }, "downloads": -1, "filename": "sfko-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ed10d7cdf4378157e3f8bf3146b7a726", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16334, "upload_time": "2018-10-16T21:39:25", "url": "https://files.pythonhosted.org/packages/b6/07/aa6452497c7d64084c3a808ae82aa42fc9b7e8010b68ccefbd2bea4f8b35/sfko-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0cf8e0c263e183e615f6bad461a9b303", "sha256": "e1d343c26252772a460edf685f02878905d7fb3e4299209003aec80037848912" }, "downloads": -1, "filename": "sfko-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0cf8e0c263e183e615f6bad461a9b303", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25537, "upload_time": "2018-10-17T00:13:36", "url": "https://files.pythonhosted.org/packages/fb/cf/72547e3cb871c7e50e3c1ed58cdab842af4da63055bdf14fdce86198c1ad/sfko-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "39c85c840f11d7f37aa7481bda90780f", "sha256": "71a48fb5d3735f9e6dc6f8ee197dc3060008979e4a3516a1ac608c0654e78d3c" }, "downloads": -1, "filename": "sfko-0.1.2.tar.gz", "has_sig": false, "md5_digest": "39c85c840f11d7f37aa7481bda90780f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25546, "upload_time": "2018-10-17T00:14:27", "url": "https://files.pythonhosted.org/packages/cc/cd/c8c1a31ab5ee2e29a21356314b09aae4919f6c78163d6f084e8e0d67fc82/sfko-0.1.2.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "f2161ab82d8fc3b06b0b005e44ddbf22", "sha256": "6b6efd4a6c70a31bd31c0bfee41e80928e4fb3ae39a124957ed814e015181168" }, "downloads": -1, "filename": "sfko-0.1.4.tar.gz", "has_sig": false, "md5_digest": "f2161ab82d8fc3b06b0b005e44ddbf22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27518, "upload_time": "2018-10-30T18:46:40", "url": "https://files.pythonhosted.org/packages/62/8a/9f274960f4ee2cbd1b2abc5aa9ff9dc3e4d8ff25db04c20280147bb1b3d1/sfko-0.1.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f2161ab82d8fc3b06b0b005e44ddbf22", "sha256": "6b6efd4a6c70a31bd31c0bfee41e80928e4fb3ae39a124957ed814e015181168" }, "downloads": -1, "filename": "sfko-0.1.4.tar.gz", "has_sig": false, "md5_digest": "f2161ab82d8fc3b06b0b005e44ddbf22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27518, "upload_time": "2018-10-30T18:46:40", "url": "https://files.pythonhosted.org/packages/62/8a/9f274960f4ee2cbd1b2abc5aa9ff9dc3e4d8ff25db04c20280147bb1b3d1/sfko-0.1.4.tar.gz" } ] }