replay

package
v2.3.0-beta5 Latest Latest
Warning

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

Go to latest
Published: Aug 20, 2024 License: Apache-2.0 Imports: 39 Imported by: 0

Documentation

Overview

Package replay provides functions for replaying requests and comparing responses.

Index

Constants

View Source
const MAX_LINE_LENGTH = 50

MAX_LINE_LENGTH is chars PER expected/actual string. Can be changed no problem

Variables

This section is empty.

Functions

func AbsMatch

func AbsMatch(tcs1, tcs2 *models.TestCase, noiseConfig map[string]map[string][]string, ignoreOrdering bool, logger *zap.Logger) (bool, bool, bool, *models.AbsResult)

AbsMatch (Absolute Match) compares two test cases and returns a boolean value indicating whether they are equal or not. It also returns a AbsResult object which contains the results of the comparison. Parameters: tcs1, tcs2, noiseConfig, ignoreOrdering, logger Returns: bool, *models.AbsResult

func AddHTTPBodyToMap

func AddHTTPBodyToMap(body string, m map[string][]string) error

func ArrayToMap

func ArrayToMap(arr []string) map[string]bool

func CheckStringExist

func CheckStringExist(s string, mp map[string][]string) ([]string, bool)

func CompareCurl

func CompareCurl(curl1, curl2 string, logger *zap.Logger) bool

func CompareHTTPReq

func CompareHTTPReq(tcs1, tcs2 *models.TestCase, _ models.GlobalNoise, ignoreOrdering bool, logger *zap.Logger) (bool, models.ReqCompare)

CompareHTTPReq compares two http requests and returns a boolean value indicating whether they are equal or not.

func CompareHTTPResp

func CompareHTTPResp(tcs1, tcs2 *models.TestCase, noiseConfig models.GlobalNoise, ignoreOrdering bool, logger *zap.Logger) (bool, models.RespCompare)

CompareHTTPResp compares two http responses and returns a boolean value indicating whether they are equal or not.

func CompareHeaders

func CompareHeaders(h1 http.Header, h2 http.Header, res *[]models.HeaderResult, noise map[string][]string) bool

func CompareNoise

func CompareNoise(noise1, noise2 map[string][]string) bool

func CompareURLParams

func CompareURLParams(urlParams1, urlParams2 map[string]string, urlParamsResult *[]models.URLParamsResult) bool

func Contains

func Contains(elems []string, v string) bool

func Flatten

func Flatten(j interface{}) map[string][]string

Flatten takes a map and returns a new one where nested maps are replaced by dot-delimited keys. examples of valid jsons - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#examples

func FlattenHTTPResponse

func FlattenHTTPResponse(h http.Header, body string) (map[string][]string, error)

func InterfaceToString

func InterfaceToString(val interface{}) string

func LeftJoinNoise

func LeftJoinNoise(globalNoise config.GlobalNoise, tsNoise config.GlobalNoise) config.GlobalNoise

func MapToArray

func MapToArray(mp map[string][]string) []string

func Match

func Match(tc *models.TestCase, actualResponse *models.HTTPResp, noiseConfig map[string]map[string][]string, ignoreOrdering bool, logger *zap.Logger) (bool, *models.Result)

func MatchesAnyRegex

func MatchesAnyRegex(str string, regexArray []string) (bool, string)

func ReplaceBaseURL

func ReplaceBaseURL(newURL, oldURL string) (string, error)

ReplaceBaseURL replaces the baseUrl of the old URL with the new URL's.

func SetTestHooks

func SetTestHooks(testHooks TestHooks)

func UnmarshallJSON

func UnmarshallJSON(s string, log *zap.Logger) (interface{}, error)

UnmarshallJSON returns unmarshalled JSON object.

Types

type DiffsPrinter

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

func NewDiffsPrinter

func NewDiffsPrinter(testCase string) DiffsPrinter

func (*DiffsPrinter) PushBodyDiff

func (d *DiffsPrinter) PushBodyDiff(exp, act string, noise map[string][]string)

func (*DiffsPrinter) PushFooterDiff

func (d *DiffsPrinter) PushFooterDiff(key string)

func (*DiffsPrinter) PushHeaderDiff

func (d *DiffsPrinter) PushHeaderDiff(exp, act, key string, noise map[string][]string)

func (*DiffsPrinter) PushStatusDiff

func (d *DiffsPrinter) PushStatusDiff(exp, act string)

func (*DiffsPrinter) Render

func (d *DiffsPrinter) Render() error

Render will display and colorize diffs side-by-side

type Hooks

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

func (*Hooks) AfterTestSetRun

func (h *Hooks) AfterTestSetRun(ctx context.Context, _, testSetID string, _ models.TestCoverage, _ int, status bool) error

func (*Hooks) BeforeTestSetRun

func (h *Hooks) BeforeTestSetRun(ctx context.Context, testSetID string) error

func (*Hooks) SimulateRequest

func (h *Hooks) SimulateRequest(ctx context.Context, _ uint64, tc *models.TestCase, testSetID string) (*models.HTTPResp, error)

type InstrumentState

type InstrumentState struct {
	AppID      uint64
	HookCancel context.CancelFunc
}

type Instrumentation

type Instrumentation interface {
	//Setup prepares the environment for the recording
	Setup(ctx context.Context, cmd string, opts models.SetupOptions) (uint64, error)
	//Hook will load hooks and start the proxy server.
	Hook(ctx context.Context, id uint64, opts models.HookOptions) error
	MockOutgoing(ctx context.Context, id uint64, opts models.OutgoingOptions) error
	// SetMocks Allows for setting mocks between test runs for better filtering and matching
	SetMocks(ctx context.Context, id uint64, filtered []*models.Mock, unFiltered []*models.Mock) error
	// GetConsumedMocks to log the names of the mocks that were consumed during the test run of failed test cases
	GetConsumedMocks(ctx context.Context, id uint64) ([]string, error)
	// Run is blocking call and will execute until error
	Run(ctx context.Context, id uint64, opts models.RunOptions) models.AppError

	GetContainerIP(ctx context.Context, id uint64) (string, error)
}

type JSONComparisonResult

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

func JSONDiffWithNoiseControl

func JSONDiffWithNoiseControl(validatedJSON ValidatedJSON, noise map[string][]string, ignoreOrdering bool) (JSONComparisonResult, error)

type MockAction

type MockAction string
const (
	Start  MockAction = "start"
	Update MockAction = "update"
)

MockAction constants define the possible actions that can be taken on a mocking.

type MockDB

type MockDB interface {
	GetFilteredMocks(ctx context.Context, testSetID string, afterTime time.Time, beforeTime time.Time) ([]*models.Mock, error)
	GetUnFilteredMocks(ctx context.Context, testSetID string, afterTime time.Time, beforeTime time.Time) ([]*models.Mock, error)
	UpdateMocks(ctx context.Context, testSetID string, mockNames map[string]bool) error
}

type Replayer

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

func (*Replayer) DeleteTestSet

func (r *Replayer) DeleteTestSet(ctx context.Context, testSetID string) error

func (*Replayer) DeleteTests

func (r *Replayer) DeleteTests(ctx context.Context, testSetID string, testCaseIDs []string) error

func (*Replayer) DenoiseTestCases

func (r *Replayer) DenoiseTestCases(ctx context.Context, testSetID string, noiseParams []*models.NoiseParams) ([]*models.NoiseParams, error)

func (*Replayer) GetAllTestSetIDs

func (r *Replayer) GetAllTestSetIDs(ctx context.Context) ([]string, error)

func (*Replayer) GetMocks

func (r *Replayer) GetMocks(ctx context.Context, testSetID string, afterTime time.Time, beforeTime time.Time) (filtered, unfiltered []*models.Mock, err error)

func (*Replayer) GetNextTestRunID

func (r *Replayer) GetNextTestRunID(ctx context.Context) (string, error)

func (*Replayer) GetTestCases

func (r *Replayer) GetTestCases(ctx context.Context, testID string) ([]*models.TestCase, error)

func (*Replayer) GetTestSetConf

func (r *Replayer) GetTestSetConf(ctx context.Context, testSet string) (*models.TestSet, error)

func (*Replayer) GetTestSetStatus

func (r *Replayer) GetTestSetStatus(ctx context.Context, testRunID string, testSetID string) (models.TestSetStatus, error)

func (*Replayer) Instrument

func (r *Replayer) Instrument(ctx context.Context) (*InstrumentState, error)

func (*Replayer) Normalize

func (r *Replayer) Normalize(ctx context.Context) error

func (*Replayer) NormalizeTestCases

func (r *Replayer) NormalizeTestCases(ctx context.Context, testRun string, testSetID string, selectedTestCaseIDs []string, testCaseResults []models.TestResult) error

func (*Replayer) RunApplication

func (r *Replayer) RunApplication(ctx context.Context, appID uint64, opts models.RunOptions) models.AppError

func (*Replayer) RunTestSet

func (r *Replayer) RunTestSet(ctx context.Context, testSetID string, testRunID string, appID uint64, serveTest bool) (models.TestSetStatus, error)

func (*Replayer) SetupOrUpdateMocks

func (r *Replayer) SetupOrUpdateMocks(ctx context.Context, appID uint64, testSetID string, afterTime, beforeTime time.Time, action MockAction) error

func (*Replayer) Start

func (r *Replayer) Start(ctx context.Context) error

func (*Replayer) Templatize

func (r *Replayer) Templatize(ctx context.Context) error

type ReportDB

type ReportDB interface {
	GetAllTestRunIDs(ctx context.Context) ([]string, error)
	GetTestCaseResults(ctx context.Context, testRunID string, testSetID string) ([]models.TestResult, error)
	GetReport(ctx context.Context, testRunID string, testSetID string) (*models.TestReport, error)
	InsertTestCaseResult(ctx context.Context, testRunID string, testSetID string, result *models.TestResult) error
	InsertReport(ctx context.Context, testRunID string, testSetID string, testReport *models.TestReport) error
	UpdateReport(ctx context.Context, testRunID string, testCoverage any) error
}

type Service

type Service interface {
	Start(ctx context.Context) error
	Instrument(ctx context.Context) (*InstrumentState, error)
	GetNextTestRunID(ctx context.Context) (string, error)
	GetAllTestSetIDs(ctx context.Context) ([]string, error)
	RunTestSet(ctx context.Context, testSetID string, testRunID string, appID uint64, serveTest bool) (models.TestSetStatus, error)
	GetTestSetStatus(ctx context.Context, testRunID string, testSetID string) (models.TestSetStatus, error)
	GetTestCases(ctx context.Context, testID string) ([]*models.TestCase, error)
	GetTestSetConf(ctx context.Context, testSetID string) (*models.TestSet, error)
	RunApplication(ctx context.Context, appID uint64, opts models.RunOptions) models.AppError
	Normalize(ctx context.Context) error
	Templatize(ctx context.Context) error
	DenoiseTestCases(ctx context.Context, testSetID string, noiseParams []*models.NoiseParams) ([]*models.NoiseParams, error)
	NormalizeTestCases(ctx context.Context, testRun string, testSetID string, selectedTestCaseIDs []string, testResult []models.TestResult) error
	DeleteTests(ctx context.Context, testSetID string, testCaseIDs []string) error
	DeleteTestSet(ctx context.Context, testSetID string) error
}

func NewReplayer

func NewReplayer(logger *zap.Logger, testDB TestDB, mockDB MockDB, reportDB ReportDB, testSetConf TestSetConfig, telemetry Telemetry, instrumentation Instrumentation, auth service.Auth, storage Storage, config *config.Config) Service

type Storage

type Storage interface {
	Upload(ctx context.Context, file io.Reader, mockName string, appName string, jwtToken string) error
	Download(ctx context.Context, mockName string, appName string, userName string, jwtToken string) (io.Reader, error)
}

type Telemetry

type Telemetry interface {
	TestSetRun(success int, failure int, testSet string, runStatus string)
	TestRun(success int, failure int, testSets int, runStatus string)
	MockTestRun(utilizedMocks int)
}

type TestDB

type TestDB interface {
	GetAllTestSetIDs(ctx context.Context) ([]string, error)
	GetTestCases(ctx context.Context, testSetID string) ([]*models.TestCase, error)
	UpdateTestCase(ctx context.Context, testCase *models.TestCase, testSetID string) error
	DeleteTests(ctx context.Context, testSetID string, testCaseIDs []string) error
	DeleteTestSet(ctx context.Context, testSetID string) error
}

type TestHooks

type TestHooks interface {
	SimulateRequest(ctx context.Context, appID uint64, tc *models.TestCase, testSetID string) (*models.HTTPResp, error)
	BeforeTestSetRun(ctx context.Context, testSetID string) error
	AfterTestSetRun(ctx context.Context, testRunID, testSetID string, coverage models.TestCoverage, totalTestSets int, status bool) error
}
var HookImpl TestHooks

func NewHooks

func NewHooks(logger *zap.Logger, cfg *config.Config, tsConfigDB TestSetConfig, storage Storage, auth service.Auth) TestHooks

type TestReportVerdict

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

type TestSetConfig

type TestSetConfig interface {
	Read(ctx context.Context, testSetID string) (*models.TestSet, error)
	Write(ctx context.Context, testSetID string, testSet *models.TestSet) error
}

type ValidatedJSON

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

func ValidateAndMarshalJSON

func ValidateAndMarshalJSON(log *zap.Logger, exp, act *string) (ValidatedJSON, error)

Jump to

Keyboard shortcuts

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