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 )