cassette

package
v3.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 13, 2024 License: BSD-2-Clause Imports: 11 Imported by: 10

Documentation

Index

Constants

View Source
const (
	// Version 1 of the cassette format
	CassetteFormatV1 = 1

	// Version 2 of the cassette format
	CassetteFormatV2 = 2
)

Cassette format versions

Variables

View Source
var (
	// ErrInteractionNotFound indicates that a requested
	// interaction was not found in the cassette file
	ErrInteractionNotFound = errors.New("requested interaction not found")

	// ErrCassetteNotFound indicates that a requested
	// casette doesn't exist (only in Replaying mode)
	ErrCassetteNotFound = errors.New("requested cassette not found")

	// ErrUnsupportedCassetteFormat is returned when attempting to
	// use an older and potentially unsupported format of a
	// cassette
	ErrUnsupportedCassetteFormat = fmt.Errorf("required version of cassette is v%d", CassetteFormatV2)
)

Functions

func DefaultMatcher

func DefaultMatcher(r *http.Request, i Request) bool

DefaultMatcher is used when a custom matcher is not defined and compares only the method and of the HTTP request.

Types

type Cassette

type Cassette struct {
	// Name of the cassette
	Name string `yaml:"-"`

	// File name of the cassette as written on disk
	File string `yaml:"-"`

	// Cassette format version
	Version int `yaml:"version"`

	// Mutex to lock accessing Interactions. omitempty is set to
	// prevent the mutex appearing in the recorded YAML.
	Mu sync.RWMutex `yaml:"mu,omitempty"`

	// Interactions between client and server
	Interactions []*Interaction `yaml:"interactions"`

	// ReplayableInteractions defines whether to allow
	// interactions to be replayed or not
	ReplayableInteractions bool `yaml:"-"`

	// Matches actual request with interaction requests.
	Matcher MatcherFunc `yaml:"-"`

	// IsNew specifies whether this is a newly created cassette.
	// Returns false, when the cassette was loaded from an
	// existing source, e.g. a file.
	IsNew bool `yaml:"-"`
	// contains filtered or unexported fields
}

Cassette type

func Load

func Load(name string) (*Cassette, error)

Load reads a cassette file from disk

func New

func New(name string) *Cassette

New creates a new empty cassette

func (*Cassette) AddInteraction

func (c *Cassette) AddInteraction(i *Interaction)

AddInteraction appends a new interaction to the cassette

func (*Cassette) GetInteraction

func (c *Cassette) GetInteraction(r *http.Request) (*Interaction, error)

GetInteraction retrieves a recorded request/response interaction

func (*Cassette) Save

func (c *Cassette) Save() error

Save writes the cassette data on disk for future re-use

type Interaction

type Interaction struct {
	// ID is the id of the interaction
	ID int `yaml:"id"`

	// Request is the recorded request
	Request Request `yaml:"request"`

	// Response is the recorded response
	Response Response `yaml:"response"`

	// DiscardOnSave if set to true will discard the interaction
	// as a whole and it will not be part of the final
	// interactions when saving the cassette on disk.
	DiscardOnSave bool `yaml:"-"`
	// contains filtered or unexported fields
}

Interaction type contains a pair of request/response for a single HTTP interaction between a client and a server

func (*Interaction) GetHTTPRequest

func (i *Interaction) GetHTTPRequest() (*http.Request, error)

GetHTTPRequest converts the recorded interaction request to http.Request instance

func (*Interaction) GetHTTPResponse

func (i *Interaction) GetHTTPResponse() (*http.Response, error)

GetHTTPResponse converts the recorded interaction response to http.Response instance

func (*Interaction) WasReplayed added in v3.2.0

func (i *Interaction) WasReplayed() bool

WasReplayed returns a boolean indicating whether the given interaction was already replayed.

type MatcherFunc

type MatcherFunc func(*http.Request, Request) bool

MatcherFunc function returns true when the actual request matches a single HTTP interaction's request according to the function's own criteria.

type Request

type Request struct {
	Proto            string      `yaml:"proto"`
	ProtoMajor       int         `yaml:"proto_major"`
	ProtoMinor       int         `yaml:"proto_minor"`
	ContentLength    int64       `yaml:"content_length"`
	TransferEncoding []string    `yaml:"transfer_encoding"`
	Trailer          http.Header `yaml:"trailer"`
	Host             string      `yaml:"host"`
	RemoteAddr       string      `yaml:"remote_addr"`
	RequestURI       string      `yaml:"request_uri"`

	// Body of request
	Body string `yaml:"body"`

	// Form values
	Form url.Values `yaml:"form"`

	// Request headers
	Headers http.Header `yaml:"headers"`

	// Request URL
	URL string `yaml:"url"`

	// Request method
	Method string `yaml:"method"`
}

Request represents a client request as recorded in the cassette file

type Response

type Response struct {
	Proto            string      `yaml:"proto"`
	ProtoMajor       int         `yaml:"proto_major"`
	ProtoMinor       int         `yaml:"proto_minor"`
	TransferEncoding []string    `yaml:"transfer_encoding"`
	Trailer          http.Header `yaml:"trailer"`
	ContentLength    int64       `yaml:"content_length"`
	Uncompressed     bool        `yaml:"uncompressed"`

	// Body of response
	Body string `yaml:"body"`

	// Response headers
	Headers http.Header `yaml:"headers"`

	// Response status message
	Status string `yaml:"status"`

	// Response status code
	Code int `yaml:"code"`

	// Response duration (something like "100ms" or "10s")
	Duration time.Duration `yaml:"duration"`
}

Response represents a server response as recorded in the cassette file

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL