Documentation
¶
Index ¶
- Constants
- Variables
- func CACert() *x509.Certificate
- func CACertPEM() []byte
- func EncodeAsJson(obj any) string
- func JMESMatch(obj any, expression string, expected any) bool
- type CertStorage
- type IMDSMockOptions
- type MockedEndpoint
- func Mock_Failure(service, action string) *MockedEndpoint
- func Mock_Failure_WithCode(statusCode int, service, action, errorCode, errorMessage string) *MockedEndpoint
- func Mock_IMDS_API_Token() *MockedEndpoint
- func Mock_IMDS_Common(optFns ...func(*IMDSMockOptions)) []*MockedEndpoint
- func Mock_IMDS_IAM_Credentials(roleName string) *MockedEndpoint
- func Mock_IMDS_IAM_Info(profileName string) *MockedEndpoint
- func Mock_IMDS_IAM_RoleList(roleName string) *MockedEndpoint
- func Mock_IMDS_IdentityDocument(optFns ...func(*imds.InstanceIdentityDocument)) *MockedEndpoint
- func Mock_IMDS_MetaData_KeyValue(k, v string) *MockedEndpoint
- func Mock_IMDS_UserData(userData string) *MockedEndpoint
- func NewSimpleMockedEndpoint(service, action string, responseObj any) *MockedEndpoint
- type MockedRequest
- type MockedRequestHandler
- type MockedResponse
- type MockerInfo
- type MockerOptions
- type ReceivedRequest
- type ResponseEncoding
- type TestingT
Constants ¶
const ( ContentTypeXML = "text/xml" ContentTypeJSON = "application/x-amz-json-1.1" ContentTypeText = "text/plain" )
const ( DefaultAccountId = "555555555555" DefaultRegion = "us-east-1" )
Variables ¶
var ( // Will Print out all the Request/Response traffic from the proxy GlobalDebugMode = false // where debugging output will go if requested DebugOutputWriter io.Writer = os.Stdout )
var ( MockStsGetCallerIdentityValid = &MockedEndpoint{ Request: &MockedRequest{ Service: "sts", Action: "GetCallerIdentity", }, Response: &MockedResponse{ StatusCode: http.StatusOK, Encoding: ResponseEncodingXML, Body: map[string]interface{}{ "Account": DefaultAccountId, "Arn": fmt.Sprintf("arn:aws:iam::%s:user/fakeuser", DefaultAccountId), "UserId": "AKIAI44QH8DHBEXAMPLE", }, }, } )
Functions ¶
func CACertPEM ¶
func CACertPEM() []byte
Exports the PEM Bytes of the CA Certificate (if you need to use it)
func EncodeAsJson ¶ added in v0.2.0
func JMESMatch ¶ added in v0.2.5
Performs a JMES Expression match on the object. The expected value should be a scalar or a function that takes a single any and returns a boolean the value returned from the jmes expression should equal the expected value all numerical values will be casted to a float64 (as that is what json numbers are treated as)
Types ¶
type CertStorage ¶ added in v0.2.0
type CertStorage struct {
// contains filtered or unexported fields
}
func (*CertStorage) Fetch ¶ added in v0.2.0
func (tcs *CertStorage) Fetch(hostname string) *tls.Certificate
type IMDSMockOptions ¶ added in v0.2.0
type IMDSMockOptions struct {
// The identity document to return
IdentityDocument imds.InstanceIdentityDocument
// any custom user data
UserData string
// if you want to override the role name that is used for EC2 creds
RoleName string
// Override the instance profile name
InstanceProfileName string
}
Override the default settings when using a default IMDS mock
type MockedEndpoint ¶
type MockedEndpoint struct {
Request *MockedRequest
Response *MockedResponse
}
func Mock_Failure ¶ added in v0.2.5
func Mock_Failure(service, action string) *MockedEndpoint
Returns an error response for a given service/action call
func Mock_Failure_WithCode ¶ added in v0.2.5
func Mock_Failure_WithCode(statusCode int, service, action, errorCode, errorMessage string) *MockedEndpoint
func Mock_IMDS_API_Token ¶ added in v0.2.0
func Mock_IMDS_API_Token() *MockedEndpoint
func Mock_IMDS_Common ¶ added in v0.2.0
func Mock_IMDS_Common(optFns ...func(*IMDSMockOptions)) []*MockedEndpoint
Provides an array of mocks that will provide a decent replication of the EC2 Instance Metadata Service
func Mock_IMDS_IAM_Credentials ¶ added in v0.2.0
func Mock_IMDS_IAM_Credentials(roleName string) *MockedEndpoint
func Mock_IMDS_IAM_Info ¶ added in v0.2.0
func Mock_IMDS_IAM_Info(profileName string) *MockedEndpoint
func Mock_IMDS_IAM_RoleList ¶ added in v0.2.0
func Mock_IMDS_IAM_RoleList(roleName string) *MockedEndpoint
func Mock_IMDS_IdentityDocument ¶ added in v0.2.0
func Mock_IMDS_IdentityDocument(optFns ...func(*imds.InstanceIdentityDocument)) *MockedEndpoint
Provide a document to be returned, or nil to use a default one
func Mock_IMDS_MetaData_KeyValue ¶ added in v0.2.0
func Mock_IMDS_MetaData_KeyValue(k, v string) *MockedEndpoint
func Mock_IMDS_UserData ¶ added in v0.2.0
func Mock_IMDS_UserData(userData string) *MockedEndpoint
func NewSimpleMockedEndpoint ¶
func NewSimpleMockedEndpoint(service, action string, responseObj any) *MockedEndpoint
type MockedRequest ¶
type MockedRequest struct {
// Require that fields are matched exactly
//
// Nonstrict (default) means that Params listed are matched against
// the request to ensure the ones specified match
//
// Strict mode requires that the request contain ONLY the params listed
// any extra parameters will cause the request to fail to match
Strict bool
// The hostname only. Does not include the port
Hostname string
// The AWS service shortcode
Service string
// The AWS API Action being performed
Action string
// Body to match against
Body string
// Match against specific parameters in the request.
// This is only used for XML/Form requests (not the newer JSON ones)
Params url.Values
// Match a specific HTTP method
Method string
// Match the URL path
Path string
// Match the URL path, using a regex
PathRegex *regexp.Regexp
// Is this an instance metadata request?
// setting this to true will match against both the IPv4 and IPv6 hostnames
IsEc2IMDS bool
// Matches a JSON request body by resolving the jmespath expression as keys
// and comparing the values returned against the value provided in the map
JMESPathMatches map[string]any
// Write a custom matcher function that will be used to match a request.
// this runs after checking the other fields, so you can use those as filters.
Matcher func(*ReceivedRequest) bool
// Stop matching this request after it has been matched X times
//
// 0 (default) means it will live forever
MaxMatchCount int
// contains filtered or unexported fields
}
Describes a request that should be matched
func (*MockedRequest) Inspect ¶ added in v0.2.0
func (m *MockedRequest) Inspect() string
Returns a string to help identify this MockedRequest
type MockedRequestHandler ¶ added in v0.2.0
type MockedRequestHandler = func(*ReceivedRequest) *http.Response
type MockedResponse ¶
type MockedResponse struct {
// modify the status code. default is 200
StatusCode int
// force the content type. default will be determined by request content type
ContentType string
Encoding ResponseEncoding
// a string, struct or map that will be encoded as the response
//
// Also accepts a function that is of the following signatures:
// func(*ReceivedRequest) (string) = string payload (with 200 OK, inferred content type)
// func(*ReceivedRequest) (string, int) = string payload, <int> status code (with inferred content type)
// func(*ReceivedRequest) (string, int, string) = string payload, <int> status code, content type
Body any
// Do not wrap the xml response in ACTIONResponse>ACTIONResult
DoNotWrap bool
RootTag string
// If provided, then all other fields are ignored, and the user
// is responsible for building an HTTP response themselves
Handler MockedRequestHandler
// contains filtered or unexported fields
}
func MockResponse_Error ¶ added in v0.2.5
func MockResponse_Error(statusCode int, errorCode, errorMessage string) *MockedResponse
Returns an error response with a custom code and message
type MockerInfo ¶ added in v0.2.0
type MockerInfo struct {
// URL of the proxy server
ProxyURL string
// Aws configuration to use
// This is only provided if you gave ReturnAwsConfig in the options
AwsConfig *aws.Config
}
Returned when you start the server, provides you some information if needed
func Start ¶ added in v0.2.0
func Start(t TestingT, options *MockerOptions) *MockerInfo
type MockerOptions ¶
type MockerOptions struct {
// Add extra logging. This is deprecated, you should just use the AWSMOCKER_DEBUG=1 env var and do a targeted test run
Verbose bool
// if true, then env vars for various aws credentials will not be set.
// This is dangerous, because if the proxy were to fail, then your requests may actually
// execute on AWS with real credentials.
//
DoNotOverrideCreds bool
// if this is true, then default mocks for GetCallerIdentity and role assumptions will not be provided
SkipDefaultMocks bool
// WARNING: Setting this to true assumes that you are able to use the config value returned
// If you do not use the provided config and set this true, then requests will not be routed properly.
ReturnAwsConfig bool
// Timeout for proxied requests.
Timeout time.Duration
// The mocks that will be responded to
Mocks []*MockedEndpoint
// Comma separated list of hostname globs that should not be proxied
// if you are doing other HTTP/HTTPS requests within your test, you should
// add the hostnames used to this.
DoNotProxy string
// Add mocks for the EC2 Instance Metadata Service
MockEc2Metadata bool
// By default, receiving an unmatched request will cause the test to be marked as failed
// you can pass true to this if you do not want to fail your test when the mocker receives an
// unmatched request
DoNotFailUnhandledRequests bool
}
type ReceivedRequest ¶ added in v0.2.0
type ReceivedRequest struct {
HttpRequest *http.Request
Action string
Service string
Region string
Hostname string
Path string
// The expected response type based upon the request. JSON requests answered with JSON,
// form param posts respond with XML
AssumedResponseType string
// This will only be populated if the request was NOT a form
RawBody []byte
// If the request was a JSON request, then this will be the parsed JSON
JsonPayload any
}
func (*ReceivedRequest) DebugDump ¶ added in v0.2.0
func (r *ReceivedRequest) DebugDump()
func (*ReceivedRequest) Inspect ¶ added in v0.2.5
func (rr *ReceivedRequest) Inspect() string
type ResponseEncoding ¶
type ResponseEncoding int
const ( // Default will try to determine encoding via the request headers ResponseEncodingDefault ResponseEncoding = iota ResponseEncodingJSON ResponseEncodingXML ResponseEncodingText )