in testutils/fakekms/fakekms.go [156:189]
func NewWithResponses(keyName string, port int, delay time.Duration, responses ...json.Marshaler) (*Server, error) {
handle := func(req json.Marshaler) (json.Marshaler, int, error) {
if len(responses) == 0 {
return nil, http.StatusServiceUnavailable, errors.New("list of responses is empty")
}
status := http.StatusInternalServerError
switch req.(type) {
case *cloudkms.EncryptRequest:
e, ok := responses[0].(*cloudkms.EncryptResponse)
if !ok {
return nil, status, errors.New("request for encrypt does not have a corresponding response of cloudkms.EncryptResponse")
}
status = e.HTTPStatusCode
case *cloudkms.DecryptRequest:
d, ok := responses[0].(*cloudkms.DecryptResponse)
if !ok {
return nil, status, errors.New("request for decrypt does not have a corresponding response of cloudkms.DecryptResponse")
}
status = d.HTTPStatusCode
case *cloudkms.TestIamPermissionsRequest:
t, ok := responses[0].(*cloudkms.TestIamPermissionsResponse)
if !ok {
return nil, status, errors.New("request for testIamPermissions does not have a corresponding response of cloudkms.TestIAMPermissionResponse")
}
status = t.HTTPStatusCode
}
r := responses[0]
responses = responses[1:]
return r, status, nil
}
return newWithCallback(keyName, port, delay, handle)
}