{"id":51140179,"url":"https://github.com/google/testrun","last_synced_at":"2026-06-25T22:01:08.820Z","repository":{"id":196596898,"uuid":"600215024","full_name":"google/testrun","owner":"google","description":"A tool to automate verification of network-based device behavior","archived":false,"fork":false,"pushed_at":"2026-06-25T08:10:01.000Z","size":31602,"stargazers_count":53,"open_issues_count":32,"forks_count":19,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-06-25T08:23:05.742Z","etag":null,"topics":["automation","iot","network","security"],"latest_commit_sha":null,"homepage":"","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/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.pdf","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-02-10T21:02:34.000Z","updated_at":"2026-06-25T08:05:43.000Z","dependencies_parsed_at":"2023-10-02T15:34:34.973Z","dependency_job_id":"53ed8400-70e7-411b-9a08-58d65336ca0f","html_url":"https://github.com/google/testrun","commit_stats":null,"previous_names":["google/testrun"],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/google/testrun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Ftestrun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Ftestrun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Ftestrun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Ftestrun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/testrun/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Ftestrun/sbom","scorecard":{"id":112472,"data":{"date":"2025-07-29T07:08:24Z","repo":{"name":"github.com/google/testrun","commit":"1e65cb249d819eedb53c2dade7d8426a4d4b4d15"},"scorecard":{"version":"v4.13.1","commit":"49c0eed3a423f00c872b5c3c9f1bbca9e8aae799"},"score":6.5,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":4,"reason":"12 out of 28 merged PRs checked by a CI test -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":8,"reason":"found 4 unreviewed changesets out of 28 -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#code-review"}},{"name":"Contributors","score":3,"reason":"1 different organizations found -- score normalized to 3","details":["Info: contributors work for forest rock systems"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: tool 'Dependabot' is used: :0"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no OSSFuzz integration found: Follow the steps in https://github.com/google/oss-fuzz to integrate fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no OneFuzz integration found: Follow the steps in https://github.com/microsoft/onefuzz to start fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no GoBuiltInFuzzer integration found: Follow the steps in https://go.dev/doc/fuzz/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no PythonAtherisFuzzer integration found: Follow the steps in https://github.com/google/atheris to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CppLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no SwiftLibFuzzer integration found: Follow the steps in https://google.github.io/oss-fuzz/getting-started/new-project-guide/swift-lang/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no RustCargoFuzzer integration found: Follow the steps in https://rust-fuzz.github.io/book/cargo-fuzz.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no JavaJazzerFuzzer integration found: Follow the steps in https://github.com/CodeIntelligenceTesting/jazzer to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no ClusterFuzzLite integration found: Follow the steps in https://github.com/google/clusterfuzzlite to integrate fuzzing as part of CI.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no HaskellPropertyBasedTesting integration found: Use one of the following frameworks to fuzz your project:\nQuickCheck: https://hackage.haskell.org/package/QuickCheck\nhedgehog: https://hedgehog.qa/\nvalidity: https://github.com/NorfairKing/validity\nsmallcheck: https://hackage.haskell.org/package/smallcheck\nhspec: https://hspec.github.io/\ntasty: https://hackage.haskell.org/package/tasty (High effort)","Warn: no TypeScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)","Warn: no JavaScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: License file found in expected location: LICENSE:1","Info: FSF or OSI recognized license: LICENSE:1"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"2 commit(s) out of 30 and 29 issue activity out of 30 found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"no published package detected","details":["Warn: no GitHub/GitLab publishing workflow detected"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: containerImage not pinned by hash: modules/devices/faux-dev/faux-dev.Dockerfile:16","Warn: containerImage not pinned by hash: modules/network/dhcp-1/dhcp-1.Dockerfile:16","Warn: containerImage not pinned by hash: modules/network/dhcp-2/dhcp-2.Dockerfile:16","Warn: containerImage not pinned by hash: modules/network/dns/dns.Dockerfile:16","Warn: containerImage not pinned by hash: modules/network/gateway/gateway.Dockerfile:16","Warn: containerImage not pinned by hash: modules/network/host/host.Dockerfile:16","Warn: containerImage not pinned by hash: modules/network/ntp/ntp.Dockerfile:16","Warn: containerImage not pinned by hash: modules/network/radius/radius.Dockerfile:16","Warn: containerImage not pinned by hash: modules/test/base/base.Dockerfile:17","Warn: containerImage not pinned by hash: modules/test/base/base.Dockerfile:68: pin your Docker image by updating python:3.10-slim to python:3.10-slim@sha256:81f1cdb3770d54ecfdbddcc52c2125fce674c14a1d976dfd8f65dc0734f9c3c5","Warn: containerImage not pinned by hash: modules/test/baseline/baseline.Dockerfile:16","Warn: containerImage not pinned by hash: modules/test/conn/conn.Dockerfile:16","Warn: containerImage not pinned by hash: modules/test/dns/dns.Dockerfile:16","Warn: containerImage not pinned by hash: modules/test/ntp/ntp.Dockerfile:16","Warn: containerImage not pinned by hash: modules/test/protocol/protocol.Dockerfile:16","Warn: containerImage not pinned by hash: modules/test/services/services.Dockerfile:16","Warn: containerImage not pinned by hash: modules/test/tls/tls.Dockerfile:16","Warn: pipCommand not pinned by hash: modules/network/base/base.Dockerfile:35","Warn: pipCommand not pinned by hash: modules/network/radius/radius.Dockerfile:29","Warn: pipCommand not pinned by hash: modules/network/radius/radius.Dockerfile:45","Warn: pipCommand not pinned by hash: modules/test/base/base.Dockerfile:40","Warn: pipCommand not pinned by hash: modules/test/conn/conn.Dockerfile:30","Warn: pipCommand not pinned by hash: modules/test/dns/dns.Dockerfile:25","Warn: pipCommand not pinned by hash: modules/test/ntp/ntp.Dockerfile:31","Warn: pipCommand not pinned by hash: modules/test/protocol/protocol.Dockerfile:31","Warn: pipCommand not pinned by hash: modules/test/services/services.Dockerfile:25","Warn: pipCommand not pinned by hash: modules/test/tls/tls.Dockerfile:44","Warn: pipCommand not pinned by hash: modules/test/tls/tls.Dockerfile:47","Warn: pipCommand not pinned by hash: modules/test/tls/tls.Dockerfile:50","Warn: pipCommand not pinned by hash: testing/docker/ci_test_device1/bacnet_compliant/Dockerfile:13","Warn: pipCommand not pinned by hash: testing/docker/ci_test_device1/protocol_compliant/Dockerfile:13","Warn: npmCommand not pinned by hash: cmd/build_ui:35","Warn: pipCommand not pinned by hash: cmd/install:59","Warn: pipCommand not pinned by hash: testing/pylint/test_pylint:24","Warn: npmCommand not pinned by hash: .github/workflows/testing.yml:149","Warn: npmCommand not pinned by hash: .github/workflows/testing.yml:170","Info:  20 out of  20 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of  16 pipCommand dependencies pinned","Info:   2 out of   5 npmCommand dependencies pinned","Info:  14 out of  31 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":3,"reason":"SAST tool is not run on all commits -- score normalized to 3","details":["Warn: 10 commits out of 28 are checked with a SAST tool","Warn: CodeQL tool not detected"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/google/.github/SECURITY.md:1","Info: Found linked content: github.com/google/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/google/.github/SECURITY.md:1","Info: Found text in security policy: github.com/google/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"0 out of 5 artifacts are signed or have provenance","details":["Warn: release artifact v2.2.1 does not have provenance: https://api.github.com/repos/google/testrun/releases/219701228","Warn: release artifact v2.2.1 not signed: https://api.github.com/repos/google/testrun/releases/219701228","Warn: release artifact v2.2 does not have provenance: https://api.github.com/repos/google/testrun/releases/215161468","Warn: release artifact v2.2 not signed: https://api.github.com/repos/google/testrun/releases/215161468","Warn: release artifact v2.1.1 does not have provenance: https://api.github.com/repos/google/testrun/releases/194662014","Warn: release artifact v2.1.1 not signed: https://api.github.com/repos/google/testrun/releases/194662014","Warn: release artifact v2.1 does not have provenance: https://api.github.com/repos/google/testrun/releases/187846079","Warn: release artifact v2.1 not signed: https://api.github.com/repos/google/testrun/releases/187846079","Warn: release artifact v2.0.1 does not have provenance: https://api.github.com/repos/google/testrun/releases/181023833","Warn: release artifact v2.0.1 not signed: https://api.github.com/repos/google/testrun/releases/181023833"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/package.yml:13","Info: jobLevel permissions set to 'none': .github/workflows/package.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/package.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/package.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:14","Info: topLevel permissions set to 'none': .github/workflows/testing.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/testing.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/testing.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/testing.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/testing.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/testing.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/testing.yml:1","Info: jobLevel permissions set to 'none': .github/workflows/testing.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":2,"reason":"8 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-8qvm-5x2c-j2w7","Warn: Project is vulnerable to: GHSA-48p4-8xcf-vxj5","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T12:43:57.025Z","repository_id":196596898,"created_at":"2025-08-15T12:43:57.026Z","updated_at":"2025-08-15T12:43:57.026Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34793951,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["automation","iot","network","security"],"created_at":"2026-06-25T22:01:07.670Z","updated_at":"2026-06-25T22:01:08.791Z","avatar_url":"https://github.com/google.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg width=\"200\" alt=\"Testrun logo\" src=\"https://user-images.githubusercontent.com/7399056/221927867-4190a4e8-a571-4e40-9c2b-65780ad9264c.png\" alt=\"Testrun\"\u003e\n\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/google/testrun/badge)](https://securityscorecards.dev/viewer/?uri=github.com/google/testrun)\n[![CodeQL](https://github.com/google/testrun/actions/workflows/github-code-scanning/codeql/badge.svg?branch=main)](https://github.com/google/testrun/actions/workflows/github-code-scanning/codeql)\n[![Testrun test suite](https://github.com/google/testrun/actions/workflows/testing.yml/badge.svg?branch=main\u0026event=push)](https://github.com/google/testrun/actions/workflows/testing.yml)\n\n# Introduction :wave:\n\nTestrun automates specific test cases to verify network and security functionality in IoT devices. It's an open-source tool that manufacturers use to test their IP-capable devices for the purpose of device qualification within Google's Building Operating System  (BOS) program.\n\n# Motivation :bulb:\n\nTest labs and engineers often need to maintain a large and complex network coupled with dynamic configuration files and constant software updates. Testrun helps address major issues like:\n\n-  The complexity of managing a testing network\n-  The time required to perform testing of network functionality\n-  The accuracy and consistency of testing network functionality\n\n# How it works :triangular_ruler:\n\nTestrun creates an isolated and controlled network environment on a Linux machine. This removes the necessity for complex hardware, advanced knowledge, and networking experience while enabling test engineers to validate device behavior against Google's BOS requirements.\n\nTestrun supports two modes: automated testing and lab network.\n\n## Automated testing\n\nAutomated testing of the device under test (DUT) begins once the device is operational (steady state). Containerized test modules execute against the device one module at a time. Testrun produces a report with the results after all modules are executed.\n\n## Lab network\n\nTestrun provides the network and assistive tools for engineers when manual testing or configuration changes are required, reducing the need to maintain a separate but identical lab network. Testrun handles packet captures and logs for each network service for further debugging.\n\n# Minimum requirements :computer:\n\n## Hardware\n\n-  PC running Ubuntu LTS 22.04 or 24.04 (laptop or desktop)\n-  2x ethernet ports (USB ethernet adapters work too)\n-  Internet connection\n\n## Software\n\nTestrun requires Docker. Refer to the [installation guide](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) for more information.\n\n## Device under test (DUT)\n\nThe DUT must be able to obtain an IP address via DHCP.\n\n# Get started :arrow_forward:\n\nOnce you meet the hardware and software requirements, follow the Testrun [Get started guide](/docs/get_started.md). Additional guidance is available in the [docs directory](/docs).\n\n# Roadmap :chart_with_upwards_trend:\n\nTestrun continually evolves to further support end users by automating device network behavior against industry standards. For information on upcoming features, check out the [Roadmap](/docs/roadmap.pdf).\n\n# Accessibility :busts_in_silhouette:\n\nWe're proud of our tool and strive to provide an enjoyable experience for everyone. Testrun goes through rigorous accessibility testing at each release. Download the [Testrun: Accessible features](https://github.com/google/testrun/raw/refs/heads/main/docs/ui/accessibility.mp4) video to learn more.You're welcome to [submit a new issue](https://github.com/google/testrun/issues) and provide feedback on our implementations. To learn more about Google's [Belonging initiative](https://www.google.co.uk/accessibility) and their approach to accessibility, visit their site.\n\n# Issue reporting :triangular_flag_on_post:\n\nIf you encounter a problem during setup or use, raise an issue under the [Issues tab](https://github.com/google/testrun/issues). Issue templates exist for both bug reports and feature requests. If neither of these apply, raise a blank issue instead.\n\n# Contributing :keyboard:\n\nWe strongly encourage contributions from the community. Review the requirements on the  [\"How to Contribute\" page](CONTRIBUTING.md), then follow the [developer guidelines](/docs/dev/README.md). \n\n# FAQ :raising_hand:\n\n#### 1. What should I do if I have an issue while installing or upgrading Testrun?\n\n You can resolve most issues by reinstalling Testrun using these commands:\n- `sudo docker system prune -a`\n- `sudo apt install ./testrun*.deb`\n\nIf this doesn't resolve the problem, [raise an issue](https://github.com/google/testrun/issues).\n\n#### 2. What device networking functionality does Testrun validate?\n\nBest practices and requirements for IoT devices change often due to technological advances and discovery of vulnerabilities. You can find the current expectations for IoT devices on Google deployments in the [Application Security Requirements for IoT Devices](https://partner-security.withgoogle.com/docs/iot_requirements). Testrun aims to automate as much of the Application Security Requirements as possible.\n\n#### 3. What services are provided on the virtual network?\n\nThe following network services are containerized and accessible to the DUT:\n\n-  DHCP in failover configuration with internet connectivity\n-  IPv6 SLAAC\n-  DNS\n-  NTPv4\n\nNote that this list is likely to change over time.\n\n#### 4. Can I run Testrun on a virtual machine?\n\nTestrun can be virtualized if the 2x Ethernet adapters are passed through to a VirtualBox VM as a USB device rather than managed network adapters. Visit the [virtual machine guide](/docs/virtual_machine.md) for additional details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Ftestrun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Ftestrun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Ftestrun/lists"}