Documentation

Overview

    Package proxy implements proxy servers for network fault testing.

    Index

    Constants

    This section is empty.

    Variables

    This section is empty.

    Functions

    This section is empty.

    Types

    type Server

    type Server interface {
    	// From returns proxy source address in "scheme://host:port" format.
    	From() string
    	// To returns proxy destination address in "scheme://host:port" format.
    	To() string
    
    	// Ready returns when proxy is ready to serve.
    	Ready() <-chan struct{}
    	// Done returns when proxy has been closed.
    	Done() <-chan struct{}
    	// Error sends errors while serving proxy.
    	Error() <-chan error
    	// Close closes listener and transport.
    	Close() error
    
    	// DelayAccept adds latency ± random variable to accepting new incoming connections.
    	DelayAccept(latency, rv time.Duration)
    	// UndelayAccept removes sending latencies.
    	UndelayAccept()
    	// LatencyAccept returns current latency on accepting new incoming connections.
    	LatencyAccept() time.Duration
    	// DelayTx adds latency ± random variable to "sending" layer.
    	DelayTx(latency, rv time.Duration)
    	// UndelayTx removes sending latencies.
    	UndelayTx()
    	// LatencyTx returns current send latency.
    	LatencyTx() time.Duration
    	// DelayRx adds latency ± random variable to "receiving" layer.
    	DelayRx(latency, rv time.Duration)
    	// UndelayRx removes "receiving" latencies.
    	UndelayRx()
    	// LatencyRx returns current receive latency.
    	LatencyRx() time.Duration
    
    	// PauseAccept stops accepting new connections.
    	PauseAccept()
    	// UnpauseAccept removes pause operation on accepting new connections.
    	UnpauseAccept()
    	// PauseTx stops "forwarding" packets.
    	PauseTx()
    	// UnpauseTx removes "forwarding" pause operation.
    	UnpauseTx()
    	// PauseRx stops "receiving" packets to client.
    	PauseRx()
    	// UnpauseRx removes "receiving" pause operation.
    	UnpauseRx()
    
    	// BlackholeTx drops all incoming packets before "forwarding".
    	BlackholeTx()
    	// UnblackholeTx removes blackhole operation on "sending".
    	UnblackholeTx()
    	// BlackholeRx drops all incoming packets to client.
    	BlackholeRx()
    	// UnblackholeRx removes blackhole operation on "receiving".
    	UnblackholeRx()
    
    	// CorruptTx corrupts incoming packets from the listener.
    	CorruptTx(f func(data []byte) []byte)
    	// UncorruptTx removes corrupt operation on "forwarding".
    	UncorruptTx()
    	// CorruptRx corrupts incoming packets to client.
    	CorruptRx(f func(data []byte) []byte)
    	// UncorruptRx removes corrupt operation on "receiving".
    	UncorruptRx()
    
    	// ResetListener closes and restarts listener.
    	ResetListener() error
    }

      Server defines proxy server layer that simulates common network faults, such as latency spikes, packet drop/corruption, etc..

      func NewServer

      func NewServer(cfg ServerConfig) Server

        NewServer returns a proxy implementation with no iptables/tc dependencies. The proxy layer overhead is <1ms.

        type ServerConfig

        type ServerConfig struct {
        	Logger        *zap.Logger
        	From          url.URL
        	To            url.URL
        	TLSInfo       transport.TLSInfo
        	DialTimeout   time.Duration
        	BufferSize    int
        	RetryInterval time.Duration
        }

          ServerConfig defines proxy server configuration.

          Source Files