{"id":46716518,"url":"https://github.com/rdkcentral/python_raft","last_synced_at":"2026-03-09T10:31:39.509Z","repository":{"id":239738740,"uuid":"769128079","full_name":"rdkcentral/python_raft","owner":"rdkcentral","description":"RAFT is a Python based testing framework for writing engineering tests. It provides a modular, config driven, low level testing framework","archived":false,"fork":false,"pushed_at":"2026-02-18T15:09:35.000Z","size":1263,"stargazers_count":3,"open_issues_count":37,"forks_count":3,"subscribers_count":4,"default_branch":"develop","last_synced_at":"2026-02-18T19:16:24.408Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"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/rdkcentral.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","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,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-08T12:00:57.000Z","updated_at":"2026-02-18T15:09:41.000Z","dependencies_parsed_at":"2025-11-30T08:00:33.889Z","dependency_job_id":null,"html_url":"https://github.com/rdkcentral/python_raft","commit_stats":null,"previous_names":["rdkcentral/python_raft"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/rdkcentral/python_raft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fpython_raft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fpython_raft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fpython_raft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fpython_raft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rdkcentral","download_url":"https://codeload.github.com/rdkcentral/python_raft/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fpython_raft/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30291807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-03-09T10:31:38.431Z","updated_at":"2026-03-09T10:31:39.501Z","avatar_url":"https://github.com/rdkcentral.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv style=\"text-align:center\"\u003e\u003cimg src=\"./docs/images/RAFT_Logo_250.png\"/\u003e\u003c/div\u003e\n\n# Rapid Application Framework for Test (RAFT)\n\nThe RAFT framework provides a flexible environment for engineering-level device testing, empowering developers to thoroughly validate code changes before commits, promoting code quality and enabling the testing of multiple commits simultaneously.\n\n\n\u003cdetails\u003e\n  \u003csummary id=toc\u003eContents \u003c/summary\u003e\n  \n  * [Features](#features)\n  * [Why Use This System](#why-use-this-system)\n  * [Installation](#installation)\n    * [Requirements](#requirements)\n    * [User Installation](#user-installation)\n  * [Getting Started](#getting-started)\n    * [Running Your First Test](#running-your-first-test)\n    * [How it works?](#how-it-works)\n    * [The Logs](#the-logs)\n  * [Documentation](#documentation)\n  * [Contributing](#contributing)\n  * [License](#license)\n\u003c/details\u003e\n\n---\n\n## Features:\n\n### Configuration Management\n\nThe system includes a flexible parsing mechanism for configuration. This allows simple environment configuration for describing racks, the devices within them, network settings and other essential test parameters. Providing ultimate flexibility in testing setup, without needing to modify the test.\n\n### Command-Line Customisation\n\nTest runs can be customised by providing dynamic command-line arguments. These arguments might specify which rack to use, device slots to target, debug mode, and other runtime settings. The system intelligently combines these arguments with your pre-defined configurations.\n\n### Device Control and Management\n\n**Centralized Device Management**: The core of the system is a device manager that provides a centralized way to organize and control multiple devices in the testing setup. \n\nIt understands how to:\n- **Model Devices**: Representing each device as an object, encapsulating its configuration details.\n- **Establish Consoles**: Establishing different types of communication channels with devices, supporting protocols like SSH, Telnet, or Serial for management and control.\n- **Manage Power**: Integrates with power control mechanisms to cycle the power state of devices as needed during testing.\n- **Handle Inbound/Outbound Connections**: Configures devices to initiate inbound/outbound connections if required by your test scenarios.\n- **Remote Control**: Provides a unified interface for sending remote control commands to your devices, abstracting differences between remote types.\n\n\n## Why Use This System\n\n- **Minimal Infrastructure**: Adaptive minimal testing infrastructure requiring no specialised hardware.\n- **Quick setup**: With python and some pip packages installed, testing can begin.\n- **Flexibility**: Supports various devices, communication protocols, and integrates with different power control systems.\n- **Ease of Use**: Provides a clear interface to interact with devices, simplifying your test scripts and focusing on the test logic itself.\n- **Organization**: Introduces structure to your test environment, making it easier to manage test cases and scenarios.\n\n## Installation\n\n### Requirements\n\n- Python (version 3.10+)\n    - Pyenv can be used to manage multiple versions of Python (please refer to the [documentation](https://github.com/pyenv/pyenv?tab=readme-ov-file#installation)).\n\n### User Installation\n\nClone the repository and run the [`install_requirements.sh`](installation/install_requirements.sh) script.\n\nAdministrator rights are required to install the below packages. Without these some modules may not work:\n- `cec-client` - Required to use the CECClient hdmiCECController module.\n\n*If you do not have administrator rights, please ask your administrator to install the above packages for you.*\n\n## Getting Started\n\n### Running Your First Test\n\nFor our first test script we will be using the [example_test.py](examples/code/example_ssh.py). There are extensive comments in the test files to explain what it does.\n\nBefore this test script can be run the `prompt` line in the [device_config](examples/configs/example_device_config.yml) must be replaced with the prompt of the PC running the script.\n\nThis test script can be run with the below command:\n`./example_test.py --config ../configs/getting_started_rack_config.yml`\n\n### How it works?\n\nTwo config files are used for running this test. They are:\n\n- The Rack config\n  - This yaml file is used to define the setup your DUT (**D**evice **U**nder **T**est). In this file the connections, IP addresses and controllers connected to the device are listed.\n  - For first test we used the [getting_started_rack_config.yml](examples/configs/getting_started_rack_config.yml) from the docs directory.\n  - For further information on the rack config see the [example_rack_config.yml](examples/configs/example_rack_config.yml)\n- The device config\n  - This yaml file is used to define device types. The information defined in this config is consistent across all devices of a type.\n  - For of our first test we will use the [example_device_config.yml](examples/configs/example_device_config.yml)\n\n### The Logs\n\nAfter running your test you should find a new folder has been created called `logs`. This should contain test logs in both text and `.csv` format.\n\nThe summary files in this directory show the results of all tests that ran.\n\n*If multiple instances of our test class had been created they would each get a `test-\u003cindex\u003e.log` and corresponding `.csv`, with all their results being collated into the summary files.*\n\n\n## Documentation\n\n- [Module documentation](docs/modules/interfaces.md)\n\n## Contributing\n\nSee contributing file: [CONTRIBUTING.md](./CONTRIBUTING.md)\n\n## License\n\nSee license file: [LICENSE](./LICENSE)\n\n\n\n\u003cstyle\u003e\n    #toc {\n        font-size: 1.5em;\n        font-weight: 500;\n    }\n\u003c/style\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdkcentral%2Fpython_raft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frdkcentral%2Fpython_raft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdkcentral%2Fpython_raft/lists"}