Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kffl/speedbump
TCP proxy for simulating variable, yet predictable network latency :globe_with_meridians::hourglass_flowing_sand:
https://github.com/kffl/speedbump
go golang load-testing network-latency observability tcp tcp-proxy
Last synced: 24 days ago
JSON representation
TCP proxy for simulating variable, yet predictable network latency :globe_with_meridians::hourglass_flowing_sand:
- Host: GitHub
- URL: https://github.com/kffl/speedbump
- Owner: kffl
- License: apache-2.0
- Created: 2022-06-17T13:43:46.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-25T10:32:01.000Z (4 months ago)
- Last Synced: 2024-10-01T15:03:48.486Z (about 1 month ago)
- Topics: go, golang, load-testing, network-latency, observability, tcp, tcp-proxy
- Language: Go
- Homepage:
- Size: 1.46 MB
- Stars: 1,506
- Watchers: 9
- Forks: 34
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# speedbump - TCP proxy with variable latency
Speedbump is a TCP proxy written in Go which allows for simulating variable network latency.[![CI Workflow](https://github.com/kffl/speedbump/workflows/CI/badge.svg)](https://github.com/kffl/speedbump/actions) [![Go Report Card](https://goreportcard.com/badge/github.com/kffl/speedbump)](https://goreportcard.com/report/github.com/kffl/speedbump) [![Docker Pulls](https://img.shields.io/docker/pulls/kffl/speedbump)](https://hub.docker.com/r/kffl/speedbump) [![Docker Image Version](https://img.shields.io/docker/v/kffl/speedbump)](https://hub.docker.com/r/kffl/speedbump) [![GoDoc](https://godoc.org/github.com/kffl/speedbump/lib?status.svg)](https://godoc.org/github.com/kffl/speedbump/lib)
## Usage
### Installation
The easiest way to install speedbump is to download pre-built binaries for your platform that are automatically attached to each [release](https://github.com/kffl/speedbump/releases/) under _Assets_. If you wish to build speedbump from source, clone this repository and run `go build`. Alternatively, you can run speedbump as a container using the [kffl/speedbump](https://hub.docker.com/r/kffl/speedbump) image.
### Basic usage examples
Spawn a new instance listening on port 2000 that proxies TCP traffic to localhost:80 with a base latency of 100ms and sine wave amplitude of 100ms (resulting in maximum added latency being 200ms and minimum being 0), period of which is 1 minute:
```
speedbump --latency=100ms --sine-amplitude=100ms --sine-period=1m --port=2000 localhost:80
```or when running speedbump using the [kffl/speedbump](https://hub.docker.com/r/kffl/speedbump) container image:
```
docker run --net=host kffl/speedbump:latest --latency=100ms --sine-amplitude=100ms \
--sine-period=1m --port=2000 localhost:80
```Spawn a new instance with a base latency of 300ms and a sawtooth wave latency summand with amplitude of 200ms and period of 2 minutes (visualized by the graph below):
```
speedbump --latency=300ms --saw-amplitude=200ms --saw-period=2m --port=2000 localhost:80
```
### Combining latency summands
It is possible to run speedbump with multiple latency summands at once:
## CLI Arguments Reference:
Output of `speedbump --help`:
```
usage: speedbump []TCP proxy for simulating variable network latency.
Flags:
--help Show context-sensitive help (also try --help-long and
--help-man).
--host="" IP or hostname to listen on. Speedbump will bind to
all available network interfaces if unspecified.
--port=8000 Port number to listen on.
--buffer=64KB Size of the buffer used for TCP reads.
--queue-size=1024 Size of the delay queue storing read buffers.
--latency=5ms Base latency added to proxied traffic.
--log-level=INFO Log level. Possible values: DEBUG, TRACE, INFO, WARN,
ERROR.
--sine-amplitude=0 Amplitude of the latency sine wave.
--sine-period=0 Period of the latency sine wave.
--saw-amplitude=0 Amplitude of the latency sawtooth wave.
--saw-period=0 Period of the latency sawtooth wave.
--square-amplitude=0 Amplitude of the latency square wave.
--square-period=0 Period of the latency square wave.
--triangle-amplitude=0 Amplitude of the latency triangle wave.
--triangle-period=0 Period of the latency triangle wave.
--version Show application version.Args:
TCP proxy destination in host:post format.
```## Using speedbump as a library
Speedbump can be used as a Go library via its `lib` package. Check `lib` [README](lib/README.md) for additional information.
## License
Copyright Paweł Kuffel 2022, licensed under Apache 2.0 License.
Speedbump logo contains the Go Gopher mascot which was originally designed by Renee French (http://reneefrench.blogspot.com/) and licensed under Creative Commons 3.0 Attributions license.