Gont

A testing framework for distributed Go applications
Alternatives To Gont
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Glusterfs4,102
2 days ago218gpl-2.0C
Gluster Filesystem : Build your distributed storage in minutes
Testing Distributed Systems2,237
22 days ago1cc-by-4.0HTML
Curated list of resources on testing distributed systems
Maelstrom1,607
7 days ago1February 07, 201811epl-1.0Clojure
A workbench for writing toy implementations of distributed systems.
Waltz38546 months ago16January 05, 202220apache-2.0Java
Waltz is a quorum-based distributed write-ahead log for replicating transactions
Testground36123 months ago23January 27, 2022226otherGo
🧪 A platform for testing, benchmarking, and simulating distributed and p2p systems at scale.
Nosqlbench142192 days ago183January 13, 2023240apache-2.0Java
The open source, pluggable, nosql benchmarking suite.
Panic Server1232483 years ago14January 30, 20181JavaScript
Testing for collaborative apps and tools
Schism70
3 months ago2mitElixir
Partition testing tool for elixir
Gont56
a day ago7apache-2.0Go
A testing framework for distributed Go applications
Libpitaya54
23 days ago56April 29, 202024mitC
a client sdk for pitaya game server framework
Alternatives To Gont
Select To Compare


Alternative Project Comparisons
Readme

Gont - A testing framework for distributed Go applications

GitHub Workflow Status (master) Codacy grade Codecov branch libraries.io DOI License GitHub go.mod Go version Go Reference

Gont is a Go package to support the development networked and distributed applications.

It can construct a virtual network using Linux network spaces, to simulate switches, routers, NAT and endpoints, on a single machine (VM, cloud or native). In addition, it supports developers with tooling for tracing and debugger tooling for investigating distributed applications.

Gont is heavily inspired by Mininet. It allows the user to build virtual network topologies defined Go code. Under the hood the network is then constructed using Linux virtual bridges and network namespaces.

Gont runs on all moderatly recent Linux versions and requires NET_ADMIN capabilities (or root access).

Using Gont, developers can test complex distributed peer-to-peer and federated applications like routing daemons or social networks and messaging. Integration tests can be automated and executed in CI environments like GitHub actions (which are in fact used to test Gont itself).

Getting started

Have a look at our slide set to get you started.

Features

  • Various common network nodes:

    • Standard host
    • Layer-3 Routers
    • Layer-2 Switches
    • Layer-3 NAT Routers
    • Layer-3 NAT to host networks
  • Hostname resolution for test nodes (/etc/hosts overlay)

  • Execution of sub-processes, Go code & functions in the network namespace of test nodes

  • Simultaneous setup of multiple isolated networks

  • Ideal for Golang unit tests

  • Can run in workflows powered by GitHub's runners

  • Lean code thanks to functional options

  • Full IPv6 support

  • Per link network emulation and bandwidth limiting via for Netem and TBF queuing disciplines

  • Use of existing network namespaces as nodes

  • Configuration of per-host nftables firewall rules

  • Built-in Ping & Traceroute diagnostic tools

  • Built-in packet tracing with PCAPng output

  • Distributed tracing of events

    • A slog.Handler to emit structured log records as trace events
    • A zapcore.Core to emit zap log messages as trace events
    • Dedicated gont/trace package for emitting trace events
    • Capturing of trace events in PCAPng files
    • WireShark Lua dissector for decoding events
  • Built-in Delve debugger

    • Simultaneous attachment to multiple processes
    • Tracing via HW watch- & breakpoints to emit tracer events (see above)
      • Capture and investigate tracepoints in WireShark
    • Remote debugging via DAP
    • Generation of VS Code compound launch configurations
      • Start Gont test and attach to all processes at once

Examples

Have a look at the unit tests for usage examples:

Prerequisites

  • Go version 1.19 or later
  • traceroute (for testing)
  • libpcap (for compiling BPF filter expressions of packet tracing feature)

Architecture

Credits

Funding acknowledment

European Flag The development of Gont has been supported by the ERIGrid 2.0 project
of the H2020 Programme under Grant Agreement No. 870620

License

Gont is REUSE compliant and mainly licensed under the Apache 2.0 license

  • SPDX-FileCopyrightText: 2023 Steffen Vogel <[email protected]>
  • SPDX-License-Identifier: Apache-2.0
Popular Testing Projects
Popular Distributed Systems Projects
Popular Software Quality Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Golang
Testing
Network
Continuous Integration
Networking
P2p
Tracing
Distributed Systems