zazkia

模拟连接问题的 tcp 代理。「tcp proxy to simulate connection problems」

Github星跟蹤圖

zazkia
is a tool that simulates all kinds of connection problems with a tcp connection (reset,delay,throttle,corrupt).

systemtest dashboard

How does it work ?

In order to apply misbehavior, zazkia must be used as a proxy between a client and service.
It will accept tcp connections from a client and for each new one, will create a connection to the target service.

Routes

By specifying routes, you can tell zazkia on what ports to listen and what target to connect to (host and port).

Minimal zazkia-routes.json example

[
    {
        "label": "oracle",
        "service-hostname": "some.host.name",
        "service-port": 1521,
        "listen-port": 49997
    }
]

With this route definition, your application should use "localhost:49997" instead of "some.host.name:1521" in the connection specification.
Your application (the client) will setup a tcp connection with zazkia which will setup another tcp connection to oracle (the service).

Initial transport behavior

The transport part of a route configuration can be used to setup the initial behavior of a new connection pair (called link).
Using a REST api, the transport behavior can be changed on a per-link basis.

Full zazkia-routes.json example

[
    {
        "label": "postgresql",
        "service-hostname": "some.other.host.name",
        "service-port": 5432,
        "listen-port": 49998,
        "transport": {
			"accept-connections": true,
			"throttle-service-response": 1000,
			"delay-service-response": 100,
			"break-service-response": 10,
			"service-response-corrupt-method": "randomize",
			"sending-to-client": true,
			"receiving-from-client": true,
			"sending-to-service": true,
			"receiving-from-service": true,
			"verbose": true
        }
    }
]
transport property comment effective values
accept-connections whether connections from the client are accepted true, false
throttle-service-response bytes per second non-negative integer
delay-service-response milliseconds delay non-negative integer
break-service-response percentage of broken connections integer between 0 and 100
service-response-corrupt-method how the bytes are mangled empty, randomize
sending-to-client whether a response from the service is sent back to the client true, false
receiving-from-client whether a request from the client is read true, false
sending-to-service whether a request from the client is sent to the service true, false
receiving-from-service whether a response from the service is read true, false
verbose log each message that is transported between client and service true, false

Default transport behavior

"transport": {
	"accept-connections": true,
	"throttle-service-response": 0,
	"delay-service-response": 0,
	"break-service-response": 0,
	"service-response-corrupt-method": "",
	"sending-to-client": true,
	"receiving-from-client": true,
	"sending-to-service": true,
	"receiving-from-service": true,
	"verbose": false
}

Build

go test
go build

Run

Usage

./zazkia  -h
2021/03/26 14:38:06 zazkia - tpc proxy for simulating network problems
Usage of ./zazkia:
  -f string
        route definition (default "zazkia-routes.json")
  -p int
        port on which the admin http server will listen (default 9191)
  -v    verbose logging

Defaults (-p 9191 -f zazkia-routes.json)

./zazkia

Dashboard

A simple HTML dashboard is available to change the transport behavior of individual links. See the Swagger tab for documentation of the REST API.

http://localhost:9191

Docker

A Docker image is available on Docker Hub.

Usage

docker run -d -p 9200-9300:9200-9300 -p 9191:9191 -v $(pwd):/data emicklei/zazkia

Zazkia will look for a file called zazkia-routes.json.
The web UI will be running on http://localhost:9191
When using Docker, routes must use listener ports in the range 9200-9300 or 3306 (mysql) or 5432 (postgres) or 8080 (tomcat,jboss).

Examples

See the examples folder for simple usecase examples.

Build your own image

GOOS=linux go build && docker build -t emicklei/zazkia:latest .

© 2024, ernestmicklei.com. Apache v2 License. Contributions welcome.

主要指標

概覽
名稱與所有者emicklei/zazkia
主編程語言Go
編程語言Go (語言數: 7)
平台
許可證Other
所有者活动
創建於2016-09-29 05:29:17
推送於2024-12-06 12:56:37
最后一次提交2024-12-06 13:56:29
發布數12
最新版本名稱v0.8.1 (發布於 2024-12-06 13:56:36)
第一版名稱0.1.0 (發布於 2017-02-13 11:04:34)
用户参与
星數76
關注者數4
派生數5
提交數86
已啟用問題?
問題數1
打開的問題數0
拉請求數2
打開的拉請求數0
關閉的拉請求數1
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?