package recording

import "github.com/Azure/azure-sdk-for-go/sdk/internal/recording"

Index

Constants

const (
	RecordingMode     = "record"
	PlaybackMode      = "playback"
	LiveMode          = "live"
	IDHeader          = "x-recording-id"
	ModeHeader        = "x-recording-mode"
	UpstreamURIHeader = "x-recording-upstream-base-uri"
)
const (
	ModeEnvironmentVariableName = "AZURE_TEST_MODE"
)
const SanitizedBase64Value string = "Kg=="

SanitizedBase64Value is the default placeholder value to be used for sanitized base-64 encoded strings.

const SanitizedValue string = "sanitized"

SanitizedValue is the default placeholder value to be used for sanitized strings.

Functions

func AddBodyKeySanitizer

func AddBodyKeySanitizer(jsonPath, value, regex string, options *RecordingOptions) error

AddBodyKeySanitizer adds a sanitizer for JSON Bodies. jsonPath is the path to the key, value is the value to replace with, and regex is the string to match in the body. If your regex includes a group options.GroupForReplace specifies which group to replace

func AddBodyRegexSanitizer

func AddBodyRegexSanitizer(value, regex string, options *RecordingOptions) error

AddBodyRegexSanitizer offers regex replace within a returned JSON body. value is the substitution value, regex can be a simple regex or a substitution operation if options.GroupForReplace is set.

func AddContinuationSanitizer

func AddContinuationSanitizer(key, method string, resetAfterFirst bool, options *RecordingOptions) error

AddContinuationSanitizer is used to anonymize private keys in response/request pairs. key: the name of the header whos value will be replaced from response -> next request method: the method by which the value of the targeted key will be replaced. Defaults to GUID replacement resetAfterFirt: Do we need multiple pairs replaced? Or do we want to replace each value with the same value.

func AddGeneralRegexSanitizer

func AddGeneralRegexSanitizer(value, regex string, options *RecordingOptions) error

AddGeneralRegexSanitizer adds a general regex across request/response Body, Headers, and URI. value is the substitution value, regex can be defined as a simple regex replace or a substition operation if options.GroupForReplace specifies which group to replace.

func AddHeaderRegexSanitizer

func AddHeaderRegexSanitizer(key, value, regex string, options *RecordingOptions) error

AddHeaderRegexSanitizer can be used to replace a key with a specific value: set regex to "" OR can be used to do a simple regex replace operation by setting key, value, and regex. OR To do a substitution operation if options.GroupForReplace is set. key is the name of the header to operate against. value is the substitution or whole new header value. regex can be defined as a simple regex replace or a substitution operation if options.GroupForReplace is set.

func AddOAuthResponseSanitizer

func AddOAuthResponseSanitizer(options *RecordingOptions) error

AddOAuthResponseSanitizer cleans all request/response pairs taht match an oauth regex in their URI

func AddRemoveHeaderSanitizer

func AddRemoveHeaderSanitizer(headersForRemoval []string, options *RecordingOptions) error

AddRemoveHeaderSanitizer removes a list of headers from request/responses.

func AddURISanitizer

func AddURISanitizer(value, regex string, options *RecordingOptions) error

AddURISanitizer sanitizes URIs via regex. value is the substition value, regex is either a simple regex or a substitution operation if options.GroupForReplace is defined.

func AddURISubscriptionIDSanitizer

func AddURISubscriptionIDSanitizer(value string, options *RecordingOptions) error

AddURISubscriptionIDSanitizer replaces real subscriptionIDs within a URI with a default or configured fake value. To use the default value set value to "", otherwise value specifies the replacement value.

func DefaultStringSanitizer

func DefaultStringSanitizer(s *string)

func GetEnvVariable

func GetEnvVariable(varName string, recordedValue string) string

This looks up an environment variable and if it is not found, returns the recordedValue

func GetHTTPClient

func GetHTTPClient(t *testing.T) (*http.Client, error)

func GetRecordMode

func GetRecordMode() string

func GetRecordingId

func GetRecordingId(t *testing.T) string

func IsLiveOnly

func IsLiveOnly(t *testing.T) bool

func LiveOnly

func LiveOnly(t *testing.T)

func ResetSanitizers

func ResetSanitizers(options *RecordingOptions) error

func Sleep

func Sleep(duration time.Duration)

Function for sleeping during a test for `duration` seconds. This method will only execute when AZURE_RECORD_MODE = "record", if a test is running in playback this will be a noop.

func Start

func Start(t *testing.T, pathToRecordings string, options *RecordingOptions) error

func Stop

func Stop(t *testing.T, options *RecordingOptions) error

Types

type Failer

type Failer func(string)

type Logger

type Logger func(string)

type Name

type Name func() string

type RecordMode

type RecordMode string
const (
	Record   RecordMode = "record"
	Playback RecordMode = "playback"
	Live     RecordMode = "live"
)

type Recording

type Recording struct {
	SessionName   string
	RecordingFile string
	VariablesFile string
	Mode          RecordMode

	Sanitizer *Sanitizer
	Matcher   *RequestMatcher
	// contains filtered or unexported fields
}

func NewRecording

func NewRecording(c TestContext, mode RecordMode) (*Recording, error)

NewRecording initializes a new Recording instance

func (*Recording) Do

func (r *Recording) Do(req *http.Request) (*http.Response, error)

Do satisfies the azcore.Transport interface so that Recording can be used as the transport for recorded requests

func (*Recording) GenerateAlphaNumericID

func (r *Recording) GenerateAlphaNumericID(prefix string, length int, lowercaseOnly bool) (string, error)

GenerateAlphaNumericID will generate a recorded random alpha numeric id if the recording has a randomSeed already set, the value will be generated from that seed, else a new random seed will be used

func (*Recording) GetEnvVar

func (r *Recording) GetEnvVar(name string, variableType VariableType) (string, error)

GetEnvVar returns a recorded environment variable. If the variable is not found we return an error. variableType determines how the recorded variable will be saved.

func (*Recording) GetOptionalEnvVar

func (r *Recording) GetOptionalEnvVar(name string, defaultValue string, variableType VariableType) string

GetOptionalEnvVar returns a recorded environment variable with a fallback default value. default Value configures the fallback value to be returned if the environment variable is not set. variableType determines how the recorded variable will be saved.

func (*Recording) Now

func (r *Recording) Now() time.Time

func (*Recording) Stop

func (r *Recording) Stop() error

Stop stops the recording and saves them, including any captured variables, to disk

func (*Recording) UUID

func (r *Recording) UUID() uuid.UUID

type RecordingOptions

type RecordingOptions struct {
	UseHTTPS        bool
	GroupForReplace string
}

type RequestMatcher

type RequestMatcher struct {

	// IgnoredHeaders is a map acting as a hash set of the header names that will be ignored for matching.
	// Modifying the keys in the map will affect how headers are matched for recordings.
	IgnoredHeaders map[string]struct{}
	// contains filtered or unexported fields
}

func (*RequestMatcher) SetBodyMatcher

func (m *RequestMatcher) SetBodyMatcher(matcher StringMatcher)

SetBodyMatcher replaces the default matching behavior with a custom StringMatcher that compares the string value of the request body payload with the string value of the recorded body payload.

func (*RequestMatcher) SetMethodMatcher

func (m *RequestMatcher) SetMethodMatcher(matcher StringMatcher)

SetMethodMatcher replaces the default matching behavior with a custom StringMatcher that compares the string value of the request method with the string value of the recorded method

func (*RequestMatcher) SetURLMatcher

func (m *RequestMatcher) SetURLMatcher(matcher StringMatcher)

SetURLMatcher replaces the default matching behavior with a custom StringMatcher that compares the string value of the request URL with the string value of the recorded URL

type Sanitizer

type Sanitizer struct {
	// contains filtered or unexported fields
}

func (*Sanitizer) AddBodysanitizer

func (s *Sanitizer) AddBodysanitizer(sanitizer StringSanitizer)

AddBodysanitizer configures the supplied StringSanitizer to sanitize recording request and response bodies

func (*Sanitizer) AddSanitizedHeaders

func (s *Sanitizer) AddSanitizedHeaders(headers ...string)

AddSanitizedHeaders adds the supplied header names to the list of headers to be sanitized on request and response recordings.

func (*Sanitizer) AddUrlSanitizer

func (s *Sanitizer) AddUrlSanitizer(sanitizer StringSanitizer)

AddUriSanitizer configures the supplied StringSanitizer to sanitize recording request and response URLs

type StringMatcher

type StringMatcher func(reqVal string, recVal string) bool

type StringSanitizer

type StringSanitizer func(*string)

StringSanitizer is a func that will modify the string pointed to by the parameter into a sanitized value.

type TestContext

type TestContext interface {
	Fail(string)
	Log(string)
	Name() string
	IsFailed() bool
}

func NewTestContext

func NewTestContext(failer Failer, logger Logger, name Name) TestContext

NewTestContext initializes a new TestContext

type VariableType

type VariableType string
const (
	// NoSanitization indicates that the recorded value should not be sanitized.
	NoSanitization VariableType = "default"
	// Secret_String indicates that the recorded value should be replaced with a sanitized value.
	Secret_String VariableType = "secret_string"
	// Secret_Base64String indicates that the recorded value should be replaced with a sanitized valid base-64 string value.
	Secret_Base64String VariableType = "secret_base64String"
)

Source Files

doc.go recording.go request_matcher.go sanitizer.go testcontext.go

Directories

PathSynopsis
recording/mockserver
Version
v0.8.1
Published
Oct 21, 2021
Platform
js/wasm
Imports
21 packages
Last checked
56 seconds ago

Tools for package owners.