{"id":13413891,"url":"https://github.com/cunicu/gont","last_synced_at":"2025-04-30T12:38:12.982Z","repository":{"id":41090189,"uuid":"409905423","full_name":"cunicu/gont","owner":"cunicu","description":"A Go testing framework for distributed applications","archived":false,"fork":false,"pushed_at":"2024-04-30T09:35:18.000Z","size":785,"stargazers_count":71,"open_issues_count":8,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-05-02T06:17:22.205Z","etag":null,"topics":["ci","debugging","distributed-systems","go","golang","mininet","network","networking","p2p","testing","tracing"],"latest_commit_sha":null,"homepage":"http://gont.cunicu.li/","language":"Go","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/cunicu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-24T09:22:56.000Z","updated_at":"2024-05-06T02:39:21.265Z","dependencies_parsed_at":"2024-02-26T07:26:01.351Z","dependency_job_id":"e566cfe0-ae36-47e3-9c76-4ec408c93434","html_url":"https://github.com/cunicu/gont","commit_stats":null,"previous_names":["cunicu/gont","stv0g/gont"],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cunicu%2Fgont","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cunicu%2Fgont/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cunicu%2Fgont/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cunicu%2Fgont/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cunicu","download_url":"https://codeload.github.com/cunicu/gont/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237897684,"owners_count":19383727,"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":["ci","debugging","distributed-systems","go","golang","mininet","network","networking","p2p","testing","tracing"],"created_at":"2024-07-30T20:01:52.109Z","updated_at":"2025-02-09T02:35:33.254Z","avatar_url":"https://github.com/cunicu.png","language":"Go","funding_links":[],"categories":["Testing"],"sub_categories":["Testing Frameworks"],"readme":"![](website/static/img/gont_logo.png)\n\n## A Go testing framework for distributed applications\n\n[![GitHub build](https://img.shields.io/github/actions/workflow/status/cunicu/gont/build.yaml?style=flat-square)](https://github.com/cunicu/gont/actions)\n[![goreportcard](https://goreportcard.com/badge/github.com/cunicu/gont?style=flat-square)](https://goreportcard.com/report/github.com/cunicu/gont)\n[![Codecov branch](https://img.shields.io/codecov/c/github/cunicu/gont/main?style=flat-square\u0026token=2QHPZ691UD)](https://app.codecov.io/gh/cunicu/gont/tree/main)\n[![License](https://img.shields.io/github/license/cunicu/gont?style=flat-square)](https://github.com/cunicu/gont/blob/main/LICENSE)\n![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/cunicu/gont?style=flat-square)\n[![Go Reference](https://pkg.go.dev/badge/github.com/cunicu/gont.svg)](https://pkg.go.dev/github.com/cunicu/gont/v2)\n[![DOI](https://zenodo.org/badge/413409974.svg)](https://zenodo.org/badge/latestdoi/413409974)\n\nGont is a Go package to support the development networked and distributed applications.\n\nIt can construct a virtual network using Linux network spaces, to simulate switches, routers, NAT and endpoints, on a single machine (VM, cloud or native).\nIn addition, it supports developers with tooling for tracing and debugger tooling for investigating distributed applications.\n\nGont is heavily inspired by [Mininet](https://mininet.org).\nIt allows the user to build virtual network topologies defined Go code.\nUnder the hood the network is then constructed using Linux virtual bridges and network namespaces.\n\nGont runs on all moderatly recent Linux versions and requires `NET_ADMIN` capabilities (or root access).\n\nUsing Gont, developers can test complex distributed peer-to-peer and federated applications like routing daemons or social networks and messaging.\nIntegration tests can be automated and executed in CI environments like GitHub actions (which are in fact used to test Gont itself).\n\n## Getting started\n\nHave a look at our **[slide set](https://gont.cunicu.li/slides/)** to get you started.\n\n## Features\n\n-   Various common network nodes:\n    -   Standard host\n    -   Layer-3 Routers\n    -   Layer-2 Switches\n    -   Layer-3 NAT Routers\n    -   Layer-3 NAT to host networks\n\n-   Hostname resolution for test nodes (/etc/hosts overlay)\n-   Execution of sub-processes, Go code \u0026 functions in the network namespace of test nodes\n-   Simultaneous setup of multiple isolated networks\n-   Ideal for Golang unit tests\n-   Can run in workflows powered by GitHub's runners\n-   Lean code thanks to [functional options](https://sagikazarmark.hu/blog/functional-options-on-steroids/)\n-   Full IPv6 support\n-   Per link network emulation and bandwidth limiting via for [Netem](https://man7.org/linux/man-pages/man8/tc-netem.8.html) and [TBF](https://man7.org/linux/man-pages/man8/tc-tbf.8.html) queuing disciplines\n-   Use of existing network namespaces as nodes\n-   Configuration of per-host nftables firewall rules\n-   Built-in Ping \u0026 Traceroute diagnostic tools\n-   Built-in packet tracing with [PCAPng](https://wiki.wireshark.org/Development/PcapNg) output\n    - Real-time streaming of PCAPng data to WireShark via [TCP sockets or named-pipes](https://wiki.wireshark.org/CaptureSetup/Pipes.md)\n    - Automatic decryption of captured trafic using Wireshark/thark by including session secrets in PCAPng file\n    - Automatic instrumentation of sub-processes using [`SSLKEYLOGFILE` environment variable](https://everything.curl.dev/usingcurl/tls/sslkeylogfile)\n- Distributed tracing of events\n  - A `slog.Handler` to emit [structured log](https://pkg.go.dev/log/slog) records as trace events\n  - A `zapcore.Core` to emit [zap](https://github.com/uber-go/zap) log messages as trace events\n  - Dedicated [gont/trace](https://pkg.go.dev/github.com/cunicu/gont/v2/pkg/trace) package for emitting trace events\n  - Capturing of trace events in PCAPng files\n  - WireShark Lua dissector for decoding events\n- Built-in [Delve](https://github.com/go-delve/delve) debugger\n  - Simultaneous attachment to multiple processes\n  - Tracing via HW watch- \u0026 breakpoints to emit tracer events (see above)\n    - Capture and investigate tracepoints in WireShark\n  - Remote debugging via [DAP](https://microsoft.github.io/debug-adapter-protocol/)\n  - Generation of VS Code [compound launch configurations](https://code.visualstudio.com/docs/editor/debugging#_compound-launch-configurations)\n    - Start Gont test and attach to all processes at once\n\n## Examples\n\nPlease refer to [our documentation](https://gont.cunicu.li/examples/)\n\n## Contact\n\nPlease have a look at the contact page: [cunicu.li/docs/contact](https://cunicu.li/docs/contact).\n\n### Funding acknowledment\n\n\u003cimg alt=\"European Flag\" src=\"https://erigrid2.eu/wp-content/uploads/2020/03/europa_flag_low.jpg\" align=\"left\" /\u003e The development of [Gont][gont] has been supported by the [ERIGrid 2.0][erigrid] project \\\nof the H2020 Programme under [Grant Agreement No. 870620](https://cordis.europa.eu/project/id/870620)\n\n## License\n\nGont is licensed under the [Apache 2.0](./LICENSE) license.\n\n- SPDX-FileCopyrightText: 2023 Steffen Vogel \\\u003cpost@steffenvogel.de\\\u003e\n- SPDX-License-Identifier: Apache-2.0\n\n[erigrid]: https://erigrid2.eu\n[gont]: https://github.com/cunicu/gont\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcunicu%2Fgont","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcunicu%2Fgont","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcunicu%2Fgont/lists"}