Add all dependency of go-getter

This commit is contained in:
Jingfang Liu
2018-08-15 11:34:38 -07:00
parent c9a8bc1121
commit ec95e5f97e
2894 changed files with 1945864 additions and 0 deletions

View File

@@ -0,0 +1,211 @@
{
"version":"2.0",
"metadata":{
"apiVersion":"0000-00-00",
"endpointPrefix":"rpcservice",
"jsonVersion":"1.1",
"protocol":"json",
"serviceAbbreviation":"RPCService",
"serviceFullName":"RPC Service",
"serviceId":"RPCService",
"signatureVersion":"v4",
"targetPrefix":"RPCService_00000000",
"uid":"RPCService-0000-00-00"
},
"operations":{
"GetEventStream":{
"name":"GetEventStream",
"http":{
"method":"POST",
"requestUri":"/"
},
"input":{"shape":"GetEventStreamRequest"},
"output":{"shape":"GetEventStreamResponse"}
},
"EmptyStream":{
"name":"EmptyStream",
"http":{
"method":"POST",
"requestUri":"/"
},
"input":{"shape":"EmptyStreamRequest"},
"output":{"shape":"EmptyStreamResponse"}
}
},
"shapes":{
"Bool":{"type":"boolean"},
"Byte":{"type":"byte"},
"Short":{"type":"short"},
"Integer":{"type":"integer"},
"Long":{"type":"long"},
"Blob":{"type":"blob"},
"String":{"type":"string"},
"Time":{"type":"timestamp"},
"GetEventStreamRequest":{
"type":"structure",
"members":{
"InputVal":{"shape":"String"}
}
},
"GetEventStreamResponse":{
"type":"structure",
"members":{
"StrVal":{"shape":"String"},
"IntVal":{"shape":"Integer"},
"EventStream":{"shape":"EventStream"}
}
},
"EventStream":{
"type":"structure",
"members":{
"Headers":{"shape":"HeaderOnlyEvent"},
"ImplicitPayload":{"shape":"ImplicitPayloadEvent"},
"ExplicitPayload":{"shape":"ExplicitPayloadEvent"},
"PayloadOnly":{"shape":"PayloadOnlyEvent"},
"PayloadOnlyBlob":{"shape":"PayloadOnlyBlobEvent"},
"PayloadOnlyString":{"shape":"PayloadOnlyStringEvent"},
"Empty":{"shape":"EmptyEvent"},
"Exception":{"shape":"ExceptionEvent"}
},
"eventstream":true
},
"EmptyStreamRequest":{
"type":"structure",
"members":{}
},
"EmptyStreamResponse":{
"type":"structure",
"members":{
"EventStream":{"shape":"EmptyEventStream"}
}
},
"EmptyEventStream":{
"type":"structure",
"members":{
},
"eventstream":true
},
"HeaderOnlyEvent":{
"type":"structure",
"members":{
"BoolVal":{
"shape":"Bool",
"eventheader":true
},
"ByteVal":{
"shape":"Byte",
"eventheader":true
},
"ShortVal":{
"shape":"Short",
"eventheader":true
},
"IntegerVal":{
"shape":"Integer",
"eventheader":true
},
"LongVal":{
"shape":"Long",
"eventheader":true
},
"StringVal":{
"shape":"String",
"eventheader":true
},
"BlobVal":{
"shape":"Blob",
"eventheader":true
},
"TimeVal":{
"shape":"Time",
"eventheader":true
}
},
"event":true
},
"ImplicitPayloadEvent": {
"type":"structure",
"members":{
"ByteVal":{
"shape":"Byte",
"eventheader":true
},
"ShortVal":{
"shape":"Short"
},
"IntegerVal":{
"shape":"Integer"
}
},
"event":true
},
"ExplicitPayloadEvent": {
"type":"structure",
"members":{
"LongVal":{
"shape":"Long",
"eventheader":true
},
"StringVal":{
"shape":"String",
"eventheader":true
},
"NestedVal":{
"shape":"NestedShape",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyEvent":{
"type":"structure",
"members":{
"NestedVal":{
"shape":"NestedShape",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyBlobEvent":{
"type":"structure",
"members":{
"BlobPayload":{
"shape":"Blob",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyStringEvent":{
"type":"structure",
"members":{
"StringPayload":{
"shape":"String",
"eventpayload":true
}
},
"event":true
},
"EmptyEvent": {
"type":"structure",
"members":{},
"event": true
},
"NestedShape": {
"type":"structure",
"members":{
"IntVal":{"shape":"Integer"},
"StrVal":{"shape":"String"}
}
},
"ExceptionEvent":{
"type":"structure",
"members":{
"IntVal":{"shape":"Integer"},
"message":{"shape":"String"}
},
"exception":true
}
}
}

View File

@@ -0,0 +1,7 @@
{
"version": "2.0",
"service": null,
"operations": {
},
"shapes":{}
}

View File

@@ -0,0 +1,211 @@
{
"version":"2.0",
"metadata":{
"apiVersion":"0000-00-00",
"endpointPrefix":"restjsonservice",
"jsonVersion":"1.1",
"protocol":"rest-json",
"serviceAbbreviation":"RESTJSONService",
"serviceFullName":"REST JSON Service",
"serviceId":"RESTJSONService",
"signatureVersion":"v4",
"targetPrefix":"RESTJSONService_00000000",
"uid":"RESTJSONService-0000-00-00"
},
"operations":{
"GetEventStream":{
"name":"GetEventStream",
"http":{
"method":"POST",
"requestUri":"/"
},
"input":{"shape":"GetEventStreamRequest"},
"output":{"shape":"GetEventStreamResponse"}
},
"EmptyStream":{
"name":"EmptyStream",
"http":{
"method":"POST",
"requestUri":"/"
},
"input":{"shape":"EmptyStreamRequest"},
"output":{"shape":"EmptyStreamResponse"}
}
},
"shapes":{
"Bool":{"type":"boolean"},
"Byte":{"type":"byte"},
"Short":{"type":"short"},
"Integer":{"type":"integer"},
"Long":{"type":"long"},
"Blob":{"type":"blob"},
"String":{"type":"string"},
"Time":{"type":"timestamp"},
"GetEventStreamRequest":{
"type":"structure",
"members":{
"InputVal":{"shape":"String"}
}
},
"GetEventStreamResponse":{
"type":"structure",
"members":{
"StrVal":{"shape":"String"},
"IntVal":{"shape":"Integer"},
"EventStream":{"shape":"EventStream"}
}
},
"EventStream":{
"type":"structure",
"members":{
"Headers":{"shape":"HeaderOnlyEvent"},
"ImplicitPayload":{"shape":"ImplicitPayloadEvent"},
"ExplicitPayload":{"shape":"ExplicitPayloadEvent"},
"PayloadOnly":{"shape":"PayloadOnlyEvent"},
"PayloadOnlyBlob":{"shape":"PayloadOnlyBlobEvent"},
"PayloadOnlyString":{"shape":"PayloadOnlyStringEvent"},
"Empty":{"shape":"EmptyEvent"},
"Exception":{"shape":"ExceptionEvent"}
},
"eventstream":true
},
"EmptyStreamRequest":{
"type":"structure",
"members":{}
},
"EmptyStreamResponse":{
"type":"structure",
"members":{
"EventStream":{"shape":"EmptyEventStream"}
}
},
"EmptyEventStream":{
"type":"structure",
"members":{
},
"eventstream":true
},
"HeaderOnlyEvent":{
"type":"structure",
"members":{
"BoolVal":{
"shape":"Bool",
"eventheader":true
},
"ByteVal":{
"shape":"Byte",
"eventheader":true
},
"ShortVal":{
"shape":"Short",
"eventheader":true
},
"IntegerVal":{
"shape":"Integer",
"eventheader":true
},
"LongVal":{
"shape":"Long",
"eventheader":true
},
"StringVal":{
"shape":"String",
"eventheader":true
},
"BlobVal":{
"shape":"Blob",
"eventheader":true
},
"TimeVal":{
"shape":"Time",
"eventheader":true
}
},
"event":true
},
"ImplicitPayloadEvent": {
"type":"structure",
"members":{
"ByteVal":{
"shape":"Byte",
"eventheader":true
},
"ShortVal":{
"shape":"Short"
},
"IntegerVal":{
"shape":"Integer"
}
},
"event":true
},
"ExplicitPayloadEvent": {
"type":"structure",
"members":{
"LongVal":{
"shape":"Long",
"eventheader":true
},
"StringVal":{
"shape":"String",
"eventheader":true
},
"NestedVal":{
"shape":"NestedShape",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyEvent":{
"type":"structure",
"members":{
"NestedVal":{
"shape":"NestedShape",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyBlobEvent":{
"type":"structure",
"members":{
"BlobPayload":{
"shape":"Blob",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyStringEvent":{
"type":"structure",
"members":{
"StringPayload":{
"shape":"String",
"eventpayload":true
}
},
"event":true
},
"EmptyEvent": {
"type":"structure",
"members":{},
"event": true
},
"NestedShape": {
"type":"structure",
"members":{
"IntVal":{"shape":"Integer"},
"StrVal":{"shape":"String"}
}
},
"ExceptionEvent":{
"type":"structure",
"members":{
"IntVal":{"shape":"Integer"},
"message":{"shape":"String"}
},
"exception":true
}
}
}

View File

@@ -0,0 +1,7 @@
{
"version": "2.0",
"service": null,
"operations": {
},
"shapes":{}
}

View File

@@ -0,0 +1,211 @@
{
"version":"2.0",
"metadata":{
"apiVersion":"0000-00-00",
"endpointPrefix":"restxmlservice",
"jsonVersion":"1.1",
"protocol":"rest-xml",
"serviceAbbreviation":"RESTXMLService",
"serviceFullName":"REST XML Service",
"serviceId":"RESTXMLService",
"signatureVersion":"v4",
"targetPrefix":"RESTXMLService_00000000",
"uid":"RESTXMLService-0000-00-00"
},
"operations":{
"GetEventStream":{
"name":"GetEventStream",
"http":{
"method":"POST",
"requestUri":"/"
},
"input":{"shape":"GetEventStreamRequest"},
"output":{"shape":"GetEventStreamResponse"}
},
"EmptyStream":{
"name":"EmptyStream",
"http":{
"method":"POST",
"requestUri":"/"
},
"input":{"shape":"EmptyStreamRequest"},
"output":{"shape":"EmptyStreamResponse"}
}
},
"shapes":{
"Bool":{"type":"boolean"},
"Byte":{"type":"byte"},
"Short":{"type":"short"},
"Integer":{"type":"integer"},
"Long":{"type":"long"},
"Blob":{"type":"blob"},
"String":{"type":"string"},
"Time":{"type":"timestamp"},
"GetEventStreamRequest":{
"type":"structure",
"members":{
"InputVal":{"shape":"String"}
}
},
"GetEventStreamResponse":{
"type":"structure",
"members":{
"StrVal":{"shape":"String"},
"IntVal":{"shape":"Integer"},
"EventStream":{"shape":"EventStream"}
}
},
"EventStream":{
"type":"structure",
"members":{
"Headers":{"shape":"HeaderOnlyEvent"},
"ImplicitPayload":{"shape":"ImplicitPayloadEvent"},
"ExplicitPayload":{"shape":"ExplicitPayloadEvent"},
"PayloadOnly":{"shape":"PayloadOnlyEvent"},
"PayloadOnlyBlob":{"shape":"PayloadOnlyBlobEvent"},
"PayloadOnlyString":{"shape":"PayloadOnlyStringEvent"},
"Empty":{"shape":"EmptyEvent"},
"Exception":{"shape":"ExceptionEvent"}
},
"eventstream":true
},
"EmptyStreamRequest":{
"type":"structure",
"members":{}
},
"EmptyStreamResponse":{
"type":"structure",
"members":{
"EventStream":{"shape":"EmptyEventStream"}
}
},
"EmptyEventStream":{
"type":"structure",
"members":{
},
"eventstream":true
},
"HeaderOnlyEvent":{
"type":"structure",
"members":{
"BoolVal":{
"shape":"Bool",
"eventheader":true
},
"ByteVal":{
"shape":"Byte",
"eventheader":true
},
"ShortVal":{
"shape":"Short",
"eventheader":true
},
"IntegerVal":{
"shape":"Integer",
"eventheader":true
},
"LongVal":{
"shape":"Long",
"eventheader":true
},
"StringVal":{
"shape":"String",
"eventheader":true
},
"BlobVal":{
"shape":"Blob",
"eventheader":true
},
"TimeVal":{
"shape":"Time",
"eventheader":true
}
},
"event":true
},
"ImplicitPayloadEvent": {
"type":"structure",
"members":{
"ByteVal":{
"shape":"Byte",
"eventheader":true
},
"ShortVal":{
"shape":"Short"
},
"IntegerVal":{
"shape":"Integer"
}
},
"event":true
},
"ExplicitPayloadEvent": {
"type":"structure",
"members":{
"LongVal":{
"shape":"Long",
"eventheader":true
},
"StringVal":{
"shape":"String",
"eventheader":true
},
"NestedVal":{
"shape":"NestedShape",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyEvent":{
"type":"structure",
"members":{
"NestedVal":{
"shape":"NestedShape",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyBlobEvent":{
"type":"structure",
"members":{
"BlobPayload":{
"shape":"Blob",
"eventpayload":true
}
},
"event":true
},
"PayloadOnlyStringEvent":{
"type":"structure",
"members":{
"StringPayload":{
"shape":"String",
"eventpayload":true
}
},
"event":true
},
"EmptyEvent": {
"type":"structure",
"members":{},
"event": true
},
"NestedShape": {
"type":"structure",
"members":{
"IntVal":{"shape":"Integer"},
"StrVal":{"shape":"String"}
}
},
"ExceptionEvent":{
"type":"structure",
"members":{
"IntVal":{"shape":"Integer"},
"message":{"shape":"String"}
},
"exception":true
}
}
}

View File

@@ -0,0 +1,7 @@
{
"version": "2.0",
"service": null,
"operations": {
},
"shapes":{}
}

View File

@@ -0,0 +1,5 @@
// Package service contains automatically generated AWS clients.
package service
//go:generate go run -tags codegen ../../../cli/gen-api/main.go -path=../service -svc-import-path "github.com/aws/aws-sdk-go/private/model/api/codegentest/service" ../models/*/*/api-2.json
//go:generate gofmt -s -w ../service

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// Package restjsonservice provides the client and types for making API
// requests to REST JSON Service.
//
// See https://docs.aws.amazon.com/goto/WebAPI/RESTJSONService-0000-00-00 for more information on this service.
//
// See restjsonservice package documentation for more information.
// https://docs.aws.amazon.com/sdk-for-go/api/service/restjsonservice/
//
// Using the Client
//
// To contact REST JSON Service with the SDK use the New function to create
// a new service client. With that client you can make API requests to the service.
// These clients are safe to use concurrently.
//
// See the SDK's documentation for more information on how to use the SDK.
// https://docs.aws.amazon.com/sdk-for-go/api/
//
// See aws.Config documentation for more information on configuring SDK clients.
// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config
//
// See the REST JSON Service client RESTJSONService for more
// information on creating client for this service.
// https://docs.aws.amazon.com/sdk-for-go/api/service/restjsonservice/#New
package restjsonservice

View File

@@ -0,0 +1,3 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
package restjsonservice

View File

@@ -0,0 +1,525 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// +build go1.6
package restjsonservice
import (
"bytes"
"io/ioutil"
"net/http"
"reflect"
"testing"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/corehandlers"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/awstesting/unit"
"github.com/aws/aws-sdk-go/private/protocol"
"github.com/aws/aws-sdk-go/private/protocol/eventstream"
"github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi"
"github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamtest"
"github.com/aws/aws-sdk-go/private/protocol/restjson"
)
var _ time.Time
var _ awserr.Error
func TestEmptyStream_Read(t *testing.T) {
expectEvents, eventMsgs := mockEmptyStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.EmptyStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
var i int
for event := range resp.EventStream.Events() {
if event == nil {
t.Errorf("%d, expect event, got nil", i)
}
if e, a := expectEvents[i], event; !reflect.DeepEqual(e, a) {
t.Errorf("%d, expect %T %v, got %T %v", i, e, e, a, a)
}
i++
}
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func TestEmptyStream_ReadClose(t *testing.T) {
_, eventMsgs := mockEmptyStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.EmptyStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
resp.EventStream.Close()
<-resp.EventStream.Events()
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func BenchmarkEmptyStream_Read(b *testing.B) {
_, eventMsgs := mockEmptyStreamReadEvents()
var buf bytes.Buffer
encoder := eventstream.NewEncoder(&buf)
for _, msg := range eventMsgs {
if err := encoder.Encode(msg); err != nil {
b.Fatalf("failed to encode message, %v", err)
}
}
stream := &loopReader{source: bytes.NewReader(buf.Bytes())}
sess := unit.Session
svc := New(sess, &aws.Config{
Endpoint: aws.String("https://example.com"),
DisableParamValidation: aws.Bool(true),
})
svc.Handlers.Send.Swap(corehandlers.SendHandler.Name,
request.NamedHandler{Name: "mockSend",
Fn: func(r *request.Request) {
r.HTTPResponse = &http.Response{
Status: "200 OK",
StatusCode: 200,
Header: http.Header{},
Body: ioutil.NopCloser(stream),
}
},
},
)
resp, err := svc.EmptyStream(nil)
if err != nil {
b.Fatalf("failed to create request, %v", err)
}
defer resp.EventStream.Close()
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err = resp.EventStream.Err(); err != nil {
b.Fatalf("expect no error, got %v", err)
}
event := <-resp.EventStream.Events()
if event == nil {
b.Fatalf("expect event, got nil, %v, %d", resp.EventStream.Err(), i)
}
}
}
func mockEmptyStreamReadEvents() (
[]EmptyEventStreamEvent,
[]eventstream.Message,
) {
expectEvents := []EmptyEventStreamEvent{}
var marshalers request.HandlerList
marshalers.PushBackNamed(restjson.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
_ = payloadMarshaler
eventMsgs := []eventstream.Message{}
return expectEvents, eventMsgs
}
func TestGetEventStream_Read(t *testing.T) {
expectEvents, eventMsgs := mockGetEventStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
var i int
for event := range resp.EventStream.Events() {
if event == nil {
t.Errorf("%d, expect event, got nil", i)
}
if e, a := expectEvents[i], event; !reflect.DeepEqual(e, a) {
t.Errorf("%d, expect %T %v, got %T %v", i, e, e, a, a)
}
i++
}
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func TestGetEventStream_ReadClose(t *testing.T) {
_, eventMsgs := mockGetEventStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
resp.EventStream.Close()
<-resp.EventStream.Events()
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func BenchmarkGetEventStream_Read(b *testing.B) {
_, eventMsgs := mockGetEventStreamReadEvents()
var buf bytes.Buffer
encoder := eventstream.NewEncoder(&buf)
for _, msg := range eventMsgs {
if err := encoder.Encode(msg); err != nil {
b.Fatalf("failed to encode message, %v", err)
}
}
stream := &loopReader{source: bytes.NewReader(buf.Bytes())}
sess := unit.Session
svc := New(sess, &aws.Config{
Endpoint: aws.String("https://example.com"),
DisableParamValidation: aws.Bool(true),
})
svc.Handlers.Send.Swap(corehandlers.SendHandler.Name,
request.NamedHandler{Name: "mockSend",
Fn: func(r *request.Request) {
r.HTTPResponse = &http.Response{
Status: "200 OK",
StatusCode: 200,
Header: http.Header{},
Body: ioutil.NopCloser(stream),
}
},
},
)
resp, err := svc.GetEventStream(nil)
if err != nil {
b.Fatalf("failed to create request, %v", err)
}
defer resp.EventStream.Close()
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err = resp.EventStream.Err(); err != nil {
b.Fatalf("expect no error, got %v", err)
}
event := <-resp.EventStream.Events()
if event == nil {
b.Fatalf("expect event, got nil, %v, %d", resp.EventStream.Err(), i)
}
}
}
func mockGetEventStreamReadEvents() (
[]EventStreamEvent,
[]eventstream.Message,
) {
expectEvents := []EventStreamEvent{
&EmptyEvent{},
&ExplicitPayloadEvent{
LongVal: aws.Int64(1234),
NestedVal: &NestedShape{
IntVal: aws.Int64(123),
StrVal: aws.String("string value goes here"),
},
StringVal: aws.String("string value goes here"),
},
&HeaderOnlyEvent{
BlobVal: []byte("blob value goes here"),
BoolVal: aws.Bool(true),
ByteVal: aws.Int64(1),
IntegerVal: aws.Int64(123),
LongVal: aws.Int64(1234),
ShortVal: aws.Int64(12),
StringVal: aws.String("string value goes here"),
TimeVal: aws.Time(time.Unix(1396594860, 0).UTC()),
},
&ImplicitPayloadEvent{
ByteVal: aws.Int64(1),
IntegerVal: aws.Int64(123),
ShortVal: aws.Int64(12),
},
&PayloadOnlyEvent{
NestedVal: &NestedShape{
IntVal: aws.Int64(123),
StrVal: aws.String("string value goes here"),
},
},
&PayloadOnlyBlobEvent{
BlobPayload: []byte("blob value goes here"),
},
&PayloadOnlyStringEvent{
StringPayload: aws.String("string value goes here"),
},
}
var marshalers request.HandlerList
marshalers.PushBackNamed(restjson.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
_ = payloadMarshaler
eventMsgs := []eventstream.Message{
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("Empty"),
},
},
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("ExplicitPayload"),
},
{
Name: "LongVal",
Value: eventstream.Int64Value(*expectEvents[1].(*ExplicitPayloadEvent).LongVal),
},
{
Name: "StringVal",
Value: eventstream.StringValue(*expectEvents[1].(*ExplicitPayloadEvent).StringVal),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[1]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("Headers"),
},
{
Name: "BlobVal",
Value: eventstream.BytesValue(expectEvents[2].(*HeaderOnlyEvent).BlobVal),
},
{
Name: "BoolVal",
Value: eventstream.BoolValue(*expectEvents[2].(*HeaderOnlyEvent).BoolVal),
},
{
Name: "ByteVal",
Value: eventstream.Int8Value(int8(*expectEvents[2].(*HeaderOnlyEvent).ByteVal)),
},
{
Name: "IntegerVal",
Value: eventstream.Int32Value(int32(*expectEvents[2].(*HeaderOnlyEvent).IntegerVal)),
},
{
Name: "LongVal",
Value: eventstream.Int64Value(*expectEvents[2].(*HeaderOnlyEvent).LongVal),
},
{
Name: "ShortVal",
Value: eventstream.Int16Value(int16(*expectEvents[2].(*HeaderOnlyEvent).ShortVal)),
},
{
Name: "StringVal",
Value: eventstream.StringValue(*expectEvents[2].(*HeaderOnlyEvent).StringVal),
},
{
Name: "TimeVal",
Value: eventstream.TimestampValue(*expectEvents[2].(*HeaderOnlyEvent).TimeVal),
},
},
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("ImplicitPayload"),
},
{
Name: "ByteVal",
Value: eventstream.Int8Value(int8(*expectEvents[3].(*ImplicitPayloadEvent).ByteVal)),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[3]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnly"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[4]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnlyBlob"),
},
},
Payload: expectEvents[5].(*PayloadOnlyBlobEvent).BlobPayload,
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnlyString"),
},
},
Payload: []byte(*expectEvents[6].(*PayloadOnlyStringEvent).StringPayload),
},
}
return expectEvents, eventMsgs
}
func TestGetEventStream_ReadException(t *testing.T) {
expectEvents := []EventStreamEvent{
&ExceptionEvent{
IntVal: aws.Int64(123),
Message_: aws.String("string value goes here"),
},
}
var marshalers request.HandlerList
marshalers.PushBackNamed(restjson.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
eventMsgs := []eventstream.Message{
{
Headers: eventstream.Headers{
eventstreamtest.EventExceptionTypeHeader,
{
Name: eventstreamapi.ExceptionTypeHeader,
Value: eventstream.StringValue("Exception"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[0]),
},
}
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
<-resp.EventStream.Events()
err = resp.EventStream.Err()
if err == nil {
t.Fatalf("expect err, got none")
}
expectErr := &ExceptionEvent{
IntVal: aws.Int64(123),
Message_: aws.String("string value goes here"),
}
aerr, ok := err.(awserr.Error)
if !ok {
t.Errorf("expect exception, got %T, %#v", err, err)
}
if e, a := expectErr.Code(), aerr.Code(); e != a {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectErr.Message(), aerr.Message(); e != a {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectErr, aerr; !reflect.DeepEqual(e, a) {
t.Errorf("expect %#v, got %#v", e, a)
}
}
var _ awserr.Error = (*ExceptionEvent)(nil)
type loopReader struct {
source *bytes.Reader
}
func (c *loopReader) Read(p []byte) (int, error) {
if c.source.Len() == 0 {
c.source.Seek(0, 0)
}
return c.source.Read(p)
}

View File

@@ -0,0 +1,72 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// Package restjsonserviceiface provides an interface to enable mocking the REST JSON Service service client
// for testing your code.
//
// It is important to note that this interface will have breaking changes
// when the service model is updated and adds new API operations, paginators,
// and waiters.
package restjsonserviceiface
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/private/model/api/codegentest/service/restjsonservice"
)
// RESTJSONServiceAPI provides an interface to enable mocking the
// restjsonservice.RESTJSONService service client's API operation,
// paginators, and waiters. This make unit testing your code that calls out
// to the SDK's service client's calls easier.
//
// The best way to use this interface is so the SDK's service client's calls
// can be stubbed out for unit testing your code with the SDK without needing
// to inject custom request handlers into the SDK's request pipeline.
//
// // myFunc uses an SDK service client to make a request to
// // REST JSON Service.
// func myFunc(svc restjsonserviceiface.RESTJSONServiceAPI) bool {
// // Make svc.EmptyStream request
// }
//
// func main() {
// sess := session.New()
// svc := restjsonservice.New(sess)
//
// myFunc(svc)
// }
//
// In your _test.go file:
//
// // Define a mock struct to be used in your unit tests of myFunc.
// type mockRESTJSONServiceClient struct {
// restjsonserviceiface.RESTJSONServiceAPI
// }
// func (m *mockRESTJSONServiceClient) EmptyStream(input *restjsonservice.EmptyStreamInput) (*restjsonservice.EmptyStreamOutput, error) {
// // mock response/functionality
// }
//
// func TestMyFunc(t *testing.T) {
// // Setup Test
// mockSvc := &mockRESTJSONServiceClient{}
//
// myfunc(mockSvc)
//
// // Verify myFunc's functionality
// }
//
// It is important to note that this interface will have breaking changes
// when the service model is updated and adds new API operations, paginators,
// and waiters. Its suggested to use the pattern above for testing, or using
// tooling to generate mocks to satisfy the interfaces.
type RESTJSONServiceAPI interface {
EmptyStream(*restjsonservice.EmptyStreamInput) (*restjsonservice.EmptyStreamOutput, error)
EmptyStreamWithContext(aws.Context, *restjsonservice.EmptyStreamInput, ...request.Option) (*restjsonservice.EmptyStreamOutput, error)
EmptyStreamRequest(*restjsonservice.EmptyStreamInput) (*request.Request, *restjsonservice.EmptyStreamOutput)
GetEventStream(*restjsonservice.GetEventStreamInput) (*restjsonservice.GetEventStreamOutput, error)
GetEventStreamWithContext(aws.Context, *restjsonservice.GetEventStreamInput, ...request.Option) (*restjsonservice.GetEventStreamOutput, error)
GetEventStreamRequest(*restjsonservice.GetEventStreamInput) (*request.Request, *restjsonservice.GetEventStreamOutput)
}
var _ RESTJSONServiceAPI = (*restjsonservice.RESTJSONService)(nil)

View File

@@ -0,0 +1,99 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
package restjsonservice
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/client"
"github.com/aws/aws-sdk-go/aws/client/metadata"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/aws/signer/v4"
"github.com/aws/aws-sdk-go/private/protocol/restjson"
)
// RESTJSONService provides the API operation methods for making requests to
// REST JSON Service. See this package's package overview docs
// for details on the service.
//
// RESTJSONService methods are safe to use concurrently. It is not safe to
// modify mutate any of the struct's properties though.
type RESTJSONService struct {
*client.Client
}
// Used for custom client initialization logic
var initClient func(*client.Client)
// Used for custom request initialization logic
var initRequest func(*request.Request)
// Service information constants
const (
ServiceName = "RESTJSONService" // Name of service.
EndpointsID = "restjsonservice" // ID to lookup a service endpoint with.
ServiceID = "RESTJSONService" // ServiceID is a unique identifer of a specific service.
)
// New creates a new instance of the RESTJSONService client with a session.
// If additional configuration is needed for the client instance use the optional
// aws.Config parameter to add your extra config.
//
// Example:
// // Create a RESTJSONService client from just a session.
// svc := restjsonservice.New(mySession)
//
// // Create a RESTJSONService client with additional configuration
// svc := restjsonservice.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
func New(p client.ConfigProvider, cfgs ...*aws.Config) *RESTJSONService {
c := p.ClientConfig(EndpointsID, cfgs...)
return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName)
}
// newClient creates, initializes and returns a new service client instance.
func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *RESTJSONService {
svc := &RESTJSONService{
Client: client.New(
cfg,
metadata.ClientInfo{
ServiceName: ServiceName,
ServiceID: ServiceID,
SigningName: signingName,
SigningRegion: signingRegion,
Endpoint: endpoint,
APIVersion: "0000-00-00",
JSONVersion: "1.1",
TargetPrefix: "RESTJSONService_00000000",
},
handlers,
),
}
// Handlers
svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)
svc.Handlers.Build.PushBackNamed(restjson.BuildHandler)
svc.Handlers.Unmarshal.PushBackNamed(restjson.UnmarshalHandler)
svc.Handlers.UnmarshalMeta.PushBackNamed(restjson.UnmarshalMetaHandler)
svc.Handlers.UnmarshalError.PushBackNamed(restjson.UnmarshalErrorHandler)
svc.Handlers.UnmarshalStream.PushBackNamed(restjson.UnmarshalHandler)
// Run custom client initialization if present
if initClient != nil {
initClient(svc.Client)
}
return svc
}
// newRequest creates a new request for a RESTJSONService operation and runs any
// custom request initialization.
func (c *RESTJSONService) newRequest(op *request.Operation, params, data interface{}) *request.Request {
req := c.NewRequest(op, params, data)
// Run custom request initialization if present
if initRequest != nil {
initRequest(req)
}
return req
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// Package restxmlservice provides the client and types for making API
// requests to REST XML Service.
//
// See https://docs.aws.amazon.com/goto/WebAPI/RESTXMLService-0000-00-00 for more information on this service.
//
// See restxmlservice package documentation for more information.
// https://docs.aws.amazon.com/sdk-for-go/api/service/restxmlservice/
//
// Using the Client
//
// To contact REST XML Service with the SDK use the New function to create
// a new service client. With that client you can make API requests to the service.
// These clients are safe to use concurrently.
//
// See the SDK's documentation for more information on how to use the SDK.
// https://docs.aws.amazon.com/sdk-for-go/api/
//
// See aws.Config documentation for more information on configuring SDK clients.
// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config
//
// See the REST XML Service client RESTXMLService for more
// information on creating client for this service.
// https://docs.aws.amazon.com/sdk-for-go/api/service/restxmlservice/#New
package restxmlservice

View File

@@ -0,0 +1,3 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
package restxmlservice

View File

@@ -0,0 +1,525 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// +build go1.6
package restxmlservice
import (
"bytes"
"io/ioutil"
"net/http"
"reflect"
"testing"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/corehandlers"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/awstesting/unit"
"github.com/aws/aws-sdk-go/private/protocol"
"github.com/aws/aws-sdk-go/private/protocol/eventstream"
"github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi"
"github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamtest"
"github.com/aws/aws-sdk-go/private/protocol/restxml"
)
var _ time.Time
var _ awserr.Error
func TestEmptyStream_Read(t *testing.T) {
expectEvents, eventMsgs := mockEmptyStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.EmptyStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
var i int
for event := range resp.EventStream.Events() {
if event == nil {
t.Errorf("%d, expect event, got nil", i)
}
if e, a := expectEvents[i], event; !reflect.DeepEqual(e, a) {
t.Errorf("%d, expect %T %v, got %T %v", i, e, e, a, a)
}
i++
}
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func TestEmptyStream_ReadClose(t *testing.T) {
_, eventMsgs := mockEmptyStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.EmptyStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
resp.EventStream.Close()
<-resp.EventStream.Events()
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func BenchmarkEmptyStream_Read(b *testing.B) {
_, eventMsgs := mockEmptyStreamReadEvents()
var buf bytes.Buffer
encoder := eventstream.NewEncoder(&buf)
for _, msg := range eventMsgs {
if err := encoder.Encode(msg); err != nil {
b.Fatalf("failed to encode message, %v", err)
}
}
stream := &loopReader{source: bytes.NewReader(buf.Bytes())}
sess := unit.Session
svc := New(sess, &aws.Config{
Endpoint: aws.String("https://example.com"),
DisableParamValidation: aws.Bool(true),
})
svc.Handlers.Send.Swap(corehandlers.SendHandler.Name,
request.NamedHandler{Name: "mockSend",
Fn: func(r *request.Request) {
r.HTTPResponse = &http.Response{
Status: "200 OK",
StatusCode: 200,
Header: http.Header{},
Body: ioutil.NopCloser(stream),
}
},
},
)
resp, err := svc.EmptyStream(nil)
if err != nil {
b.Fatalf("failed to create request, %v", err)
}
defer resp.EventStream.Close()
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err = resp.EventStream.Err(); err != nil {
b.Fatalf("expect no error, got %v", err)
}
event := <-resp.EventStream.Events()
if event == nil {
b.Fatalf("expect event, got nil, %v, %d", resp.EventStream.Err(), i)
}
}
}
func mockEmptyStreamReadEvents() (
[]EmptyEventStreamEvent,
[]eventstream.Message,
) {
expectEvents := []EmptyEventStreamEvent{}
var marshalers request.HandlerList
marshalers.PushBackNamed(restxml.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
_ = payloadMarshaler
eventMsgs := []eventstream.Message{}
return expectEvents, eventMsgs
}
func TestGetEventStream_Read(t *testing.T) {
expectEvents, eventMsgs := mockGetEventStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
var i int
for event := range resp.EventStream.Events() {
if event == nil {
t.Errorf("%d, expect event, got nil", i)
}
if e, a := expectEvents[i], event; !reflect.DeepEqual(e, a) {
t.Errorf("%d, expect %T %v, got %T %v", i, e, e, a, a)
}
i++
}
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func TestGetEventStream_ReadClose(t *testing.T) {
_, eventMsgs := mockGetEventStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
resp.EventStream.Close()
<-resp.EventStream.Events()
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func BenchmarkGetEventStream_Read(b *testing.B) {
_, eventMsgs := mockGetEventStreamReadEvents()
var buf bytes.Buffer
encoder := eventstream.NewEncoder(&buf)
for _, msg := range eventMsgs {
if err := encoder.Encode(msg); err != nil {
b.Fatalf("failed to encode message, %v", err)
}
}
stream := &loopReader{source: bytes.NewReader(buf.Bytes())}
sess := unit.Session
svc := New(sess, &aws.Config{
Endpoint: aws.String("https://example.com"),
DisableParamValidation: aws.Bool(true),
})
svc.Handlers.Send.Swap(corehandlers.SendHandler.Name,
request.NamedHandler{Name: "mockSend",
Fn: func(r *request.Request) {
r.HTTPResponse = &http.Response{
Status: "200 OK",
StatusCode: 200,
Header: http.Header{},
Body: ioutil.NopCloser(stream),
}
},
},
)
resp, err := svc.GetEventStream(nil)
if err != nil {
b.Fatalf("failed to create request, %v", err)
}
defer resp.EventStream.Close()
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err = resp.EventStream.Err(); err != nil {
b.Fatalf("expect no error, got %v", err)
}
event := <-resp.EventStream.Events()
if event == nil {
b.Fatalf("expect event, got nil, %v, %d", resp.EventStream.Err(), i)
}
}
}
func mockGetEventStreamReadEvents() (
[]EventStreamEvent,
[]eventstream.Message,
) {
expectEvents := []EventStreamEvent{
&EmptyEvent{},
&ExplicitPayloadEvent{
LongVal: aws.Int64(1234),
NestedVal: &NestedShape{
IntVal: aws.Int64(123),
StrVal: aws.String("string value goes here"),
},
StringVal: aws.String("string value goes here"),
},
&HeaderOnlyEvent{
BlobVal: []byte("blob value goes here"),
BoolVal: aws.Bool(true),
ByteVal: aws.Int64(1),
IntegerVal: aws.Int64(123),
LongVal: aws.Int64(1234),
ShortVal: aws.Int64(12),
StringVal: aws.String("string value goes here"),
TimeVal: aws.Time(time.Unix(1396594860, 0).UTC()),
},
&ImplicitPayloadEvent{
ByteVal: aws.Int64(1),
IntegerVal: aws.Int64(123),
ShortVal: aws.Int64(12),
},
&PayloadOnlyEvent{
NestedVal: &NestedShape{
IntVal: aws.Int64(123),
StrVal: aws.String("string value goes here"),
},
},
&PayloadOnlyBlobEvent{
BlobPayload: []byte("blob value goes here"),
},
&PayloadOnlyStringEvent{
StringPayload: aws.String("string value goes here"),
},
}
var marshalers request.HandlerList
marshalers.PushBackNamed(restxml.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
_ = payloadMarshaler
eventMsgs := []eventstream.Message{
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("Empty"),
},
},
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("ExplicitPayload"),
},
{
Name: "LongVal",
Value: eventstream.Int64Value(*expectEvents[1].(*ExplicitPayloadEvent).LongVal),
},
{
Name: "StringVal",
Value: eventstream.StringValue(*expectEvents[1].(*ExplicitPayloadEvent).StringVal),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[1]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("Headers"),
},
{
Name: "BlobVal",
Value: eventstream.BytesValue(expectEvents[2].(*HeaderOnlyEvent).BlobVal),
},
{
Name: "BoolVal",
Value: eventstream.BoolValue(*expectEvents[2].(*HeaderOnlyEvent).BoolVal),
},
{
Name: "ByteVal",
Value: eventstream.Int8Value(int8(*expectEvents[2].(*HeaderOnlyEvent).ByteVal)),
},
{
Name: "IntegerVal",
Value: eventstream.Int32Value(int32(*expectEvents[2].(*HeaderOnlyEvent).IntegerVal)),
},
{
Name: "LongVal",
Value: eventstream.Int64Value(*expectEvents[2].(*HeaderOnlyEvent).LongVal),
},
{
Name: "ShortVal",
Value: eventstream.Int16Value(int16(*expectEvents[2].(*HeaderOnlyEvent).ShortVal)),
},
{
Name: "StringVal",
Value: eventstream.StringValue(*expectEvents[2].(*HeaderOnlyEvent).StringVal),
},
{
Name: "TimeVal",
Value: eventstream.TimestampValue(*expectEvents[2].(*HeaderOnlyEvent).TimeVal),
},
},
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("ImplicitPayload"),
},
{
Name: "ByteVal",
Value: eventstream.Int8Value(int8(*expectEvents[3].(*ImplicitPayloadEvent).ByteVal)),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[3]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnly"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[4]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnlyBlob"),
},
},
Payload: expectEvents[5].(*PayloadOnlyBlobEvent).BlobPayload,
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnlyString"),
},
},
Payload: []byte(*expectEvents[6].(*PayloadOnlyStringEvent).StringPayload),
},
}
return expectEvents, eventMsgs
}
func TestGetEventStream_ReadException(t *testing.T) {
expectEvents := []EventStreamEvent{
&ExceptionEvent{
IntVal: aws.Int64(123),
Message_: aws.String("string value goes here"),
},
}
var marshalers request.HandlerList
marshalers.PushBackNamed(restxml.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
eventMsgs := []eventstream.Message{
{
Headers: eventstream.Headers{
eventstreamtest.EventExceptionTypeHeader,
{
Name: eventstreamapi.ExceptionTypeHeader,
Value: eventstream.StringValue("Exception"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[0]),
},
}
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
<-resp.EventStream.Events()
err = resp.EventStream.Err()
if err == nil {
t.Fatalf("expect err, got none")
}
expectErr := &ExceptionEvent{
IntVal: aws.Int64(123),
Message_: aws.String("string value goes here"),
}
aerr, ok := err.(awserr.Error)
if !ok {
t.Errorf("expect exception, got %T, %#v", err, err)
}
if e, a := expectErr.Code(), aerr.Code(); e != a {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectErr.Message(), aerr.Message(); e != a {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectErr, aerr; !reflect.DeepEqual(e, a) {
t.Errorf("expect %#v, got %#v", e, a)
}
}
var _ awserr.Error = (*ExceptionEvent)(nil)
type loopReader struct {
source *bytes.Reader
}
func (c *loopReader) Read(p []byte) (int, error) {
if c.source.Len() == 0 {
c.source.Seek(0, 0)
}
return c.source.Read(p)
}

View File

@@ -0,0 +1,72 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// Package restxmlserviceiface provides an interface to enable mocking the REST XML Service service client
// for testing your code.
//
// It is important to note that this interface will have breaking changes
// when the service model is updated and adds new API operations, paginators,
// and waiters.
package restxmlserviceiface
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/private/model/api/codegentest/service/restxmlservice"
)
// RESTXMLServiceAPI provides an interface to enable mocking the
// restxmlservice.RESTXMLService service client's API operation,
// paginators, and waiters. This make unit testing your code that calls out
// to the SDK's service client's calls easier.
//
// The best way to use this interface is so the SDK's service client's calls
// can be stubbed out for unit testing your code with the SDK without needing
// to inject custom request handlers into the SDK's request pipeline.
//
// // myFunc uses an SDK service client to make a request to
// // REST XML Service.
// func myFunc(svc restxmlserviceiface.RESTXMLServiceAPI) bool {
// // Make svc.EmptyStream request
// }
//
// func main() {
// sess := session.New()
// svc := restxmlservice.New(sess)
//
// myFunc(svc)
// }
//
// In your _test.go file:
//
// // Define a mock struct to be used in your unit tests of myFunc.
// type mockRESTXMLServiceClient struct {
// restxmlserviceiface.RESTXMLServiceAPI
// }
// func (m *mockRESTXMLServiceClient) EmptyStream(input *restxmlservice.EmptyStreamInput) (*restxmlservice.EmptyStreamOutput, error) {
// // mock response/functionality
// }
//
// func TestMyFunc(t *testing.T) {
// // Setup Test
// mockSvc := &mockRESTXMLServiceClient{}
//
// myfunc(mockSvc)
//
// // Verify myFunc's functionality
// }
//
// It is important to note that this interface will have breaking changes
// when the service model is updated and adds new API operations, paginators,
// and waiters. Its suggested to use the pattern above for testing, or using
// tooling to generate mocks to satisfy the interfaces.
type RESTXMLServiceAPI interface {
EmptyStream(*restxmlservice.EmptyStreamInput) (*restxmlservice.EmptyStreamOutput, error)
EmptyStreamWithContext(aws.Context, *restxmlservice.EmptyStreamInput, ...request.Option) (*restxmlservice.EmptyStreamOutput, error)
EmptyStreamRequest(*restxmlservice.EmptyStreamInput) (*request.Request, *restxmlservice.EmptyStreamOutput)
GetEventStream(*restxmlservice.GetEventStreamInput) (*restxmlservice.GetEventStreamOutput, error)
GetEventStreamWithContext(aws.Context, *restxmlservice.GetEventStreamInput, ...request.Option) (*restxmlservice.GetEventStreamOutput, error)
GetEventStreamRequest(*restxmlservice.GetEventStreamInput) (*request.Request, *restxmlservice.GetEventStreamOutput)
}
var _ RESTXMLServiceAPI = (*restxmlservice.RESTXMLService)(nil)

View File

@@ -0,0 +1,99 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
package restxmlservice
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/client"
"github.com/aws/aws-sdk-go/aws/client/metadata"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/aws/signer/v4"
"github.com/aws/aws-sdk-go/private/protocol/restxml"
)
// RESTXMLService provides the API operation methods for making requests to
// REST XML Service. See this package's package overview docs
// for details on the service.
//
// RESTXMLService methods are safe to use concurrently. It is not safe to
// modify mutate any of the struct's properties though.
type RESTXMLService struct {
*client.Client
}
// Used for custom client initialization logic
var initClient func(*client.Client)
// Used for custom request initialization logic
var initRequest func(*request.Request)
// Service information constants
const (
ServiceName = "RESTXMLService" // Name of service.
EndpointsID = "restxmlservice" // ID to lookup a service endpoint with.
ServiceID = "RESTXMLService" // ServiceID is a unique identifer of a specific service.
)
// New creates a new instance of the RESTXMLService client with a session.
// If additional configuration is needed for the client instance use the optional
// aws.Config parameter to add your extra config.
//
// Example:
// // Create a RESTXMLService client from just a session.
// svc := restxmlservice.New(mySession)
//
// // Create a RESTXMLService client with additional configuration
// svc := restxmlservice.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
func New(p client.ConfigProvider, cfgs ...*aws.Config) *RESTXMLService {
c := p.ClientConfig(EndpointsID, cfgs...)
return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName)
}
// newClient creates, initializes and returns a new service client instance.
func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *RESTXMLService {
svc := &RESTXMLService{
Client: client.New(
cfg,
metadata.ClientInfo{
ServiceName: ServiceName,
ServiceID: ServiceID,
SigningName: signingName,
SigningRegion: signingRegion,
Endpoint: endpoint,
APIVersion: "0000-00-00",
JSONVersion: "1.1",
TargetPrefix: "RESTXMLService_00000000",
},
handlers,
),
}
// Handlers
svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)
svc.Handlers.Build.PushBackNamed(restxml.BuildHandler)
svc.Handlers.Unmarshal.PushBackNamed(restxml.UnmarshalHandler)
svc.Handlers.UnmarshalMeta.PushBackNamed(restxml.UnmarshalMetaHandler)
svc.Handlers.UnmarshalError.PushBackNamed(restxml.UnmarshalErrorHandler)
svc.Handlers.UnmarshalStream.PushBackNamed(restxml.UnmarshalHandler)
// Run custom client initialization if present
if initClient != nil {
initClient(svc.Client)
}
return svc
}
// newRequest creates a new request for a RESTXMLService operation and runs any
// custom request initialization.
func (c *RESTXMLService) newRequest(op *request.Operation, params, data interface{}) *request.Request {
req := c.NewRequest(op, params, data)
// Run custom request initialization if present
if initRequest != nil {
initRequest(req)
}
return req
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// Package rpcservice provides the client and types for making API
// requests to RPC Service.
//
// See https://docs.aws.amazon.com/goto/WebAPI/RPCService-0000-00-00 for more information on this service.
//
// See rpcservice package documentation for more information.
// https://docs.aws.amazon.com/sdk-for-go/api/service/rpcservice/
//
// Using the Client
//
// To contact RPC Service with the SDK use the New function to create
// a new service client. With that client you can make API requests to the service.
// These clients are safe to use concurrently.
//
// See the SDK's documentation for more information on how to use the SDK.
// https://docs.aws.amazon.com/sdk-for-go/api/
//
// See aws.Config documentation for more information on configuring SDK clients.
// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config
//
// See the RPC Service client RPCService for more
// information on creating client for this service.
// https://docs.aws.amazon.com/sdk-for-go/api/service/rpcservice/#New
package rpcservice

View File

@@ -0,0 +1,3 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
package rpcservice

View File

@@ -0,0 +1,575 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// +build go1.6
package rpcservice
import (
"bytes"
"io/ioutil"
"net/http"
"reflect"
"testing"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/corehandlers"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/awstesting/unit"
"github.com/aws/aws-sdk-go/private/protocol"
"github.com/aws/aws-sdk-go/private/protocol/eventstream"
"github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi"
"github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamtest"
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
)
var _ time.Time
var _ awserr.Error
func TestEmptyStream_Read(t *testing.T) {
expectEvents, eventMsgs := mockEmptyStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.EmptyStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
var i int
for event := range resp.EventStream.Events() {
if event == nil {
t.Errorf("%d, expect event, got nil", i)
}
if e, a := expectEvents[i], event; !reflect.DeepEqual(e, a) {
t.Errorf("%d, expect %T %v, got %T %v", i, e, e, a, a)
}
i++
}
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func TestEmptyStream_ReadClose(t *testing.T) {
_, eventMsgs := mockEmptyStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.EmptyStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
resp.EventStream.Close()
<-resp.EventStream.Events()
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func BenchmarkEmptyStream_Read(b *testing.B) {
_, eventMsgs := mockEmptyStreamReadEvents()
var buf bytes.Buffer
encoder := eventstream.NewEncoder(&buf)
for _, msg := range eventMsgs {
if err := encoder.Encode(msg); err != nil {
b.Fatalf("failed to encode message, %v", err)
}
}
stream := &loopReader{source: bytes.NewReader(buf.Bytes())}
sess := unit.Session
svc := New(sess, &aws.Config{
Endpoint: aws.String("https://example.com"),
DisableParamValidation: aws.Bool(true),
})
svc.Handlers.Send.Swap(corehandlers.SendHandler.Name,
request.NamedHandler{Name: "mockSend",
Fn: func(r *request.Request) {
r.HTTPResponse = &http.Response{
Status: "200 OK",
StatusCode: 200,
Header: http.Header{},
Body: ioutil.NopCloser(stream),
}
},
},
)
resp, err := svc.EmptyStream(nil)
if err != nil {
b.Fatalf("failed to create request, %v", err)
}
defer resp.EventStream.Close()
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err = resp.EventStream.Err(); err != nil {
b.Fatalf("expect no error, got %v", err)
}
event := <-resp.EventStream.Events()
if event == nil {
b.Fatalf("expect event, got nil, %v, %d", resp.EventStream.Err(), i)
}
}
}
func mockEmptyStreamReadEvents() (
[]EmptyEventStreamEvent,
[]eventstream.Message,
) {
expectEvents := []EmptyEventStreamEvent{
&EmptyStreamOutput{},
}
var marshalers request.HandlerList
marshalers.PushBackNamed(jsonrpc.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
_ = payloadMarshaler
eventMsgs := []eventstream.Message{
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("initial-response"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[0]),
},
}
return expectEvents, eventMsgs
}
func TestGetEventStream_Read(t *testing.T) {
expectEvents, eventMsgs := mockGetEventStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
expectResp := expectEvents[0].(*GetEventStreamOutput)
if e, a := expectResp.IntVal, resp.IntVal; !reflect.DeepEqual(e, a) {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectResp.StrVal, resp.StrVal; !reflect.DeepEqual(e, a) {
t.Errorf("expect %v, got %v", e, a)
}
// Trim off response output type pseudo event so only event messages remain.
expectEvents = expectEvents[1:]
var i int
for event := range resp.EventStream.Events() {
if event == nil {
t.Errorf("%d, expect event, got nil", i)
}
if e, a := expectEvents[i], event; !reflect.DeepEqual(e, a) {
t.Errorf("%d, expect %T %v, got %T %v", i, e, e, a, a)
}
i++
}
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func TestGetEventStream_ReadClose(t *testing.T) {
_, eventMsgs := mockGetEventStreamReadEvents()
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
resp.EventStream.Close()
<-resp.EventStream.Events()
if err := resp.EventStream.Err(); err != nil {
t.Errorf("expect no error, %v", err)
}
}
func BenchmarkGetEventStream_Read(b *testing.B) {
_, eventMsgs := mockGetEventStreamReadEvents()
var buf bytes.Buffer
encoder := eventstream.NewEncoder(&buf)
for _, msg := range eventMsgs {
if err := encoder.Encode(msg); err != nil {
b.Fatalf("failed to encode message, %v", err)
}
}
stream := &loopReader{source: bytes.NewReader(buf.Bytes())}
sess := unit.Session
svc := New(sess, &aws.Config{
Endpoint: aws.String("https://example.com"),
DisableParamValidation: aws.Bool(true),
})
svc.Handlers.Send.Swap(corehandlers.SendHandler.Name,
request.NamedHandler{Name: "mockSend",
Fn: func(r *request.Request) {
r.HTTPResponse = &http.Response{
Status: "200 OK",
StatusCode: 200,
Header: http.Header{},
Body: ioutil.NopCloser(stream),
}
},
},
)
resp, err := svc.GetEventStream(nil)
if err != nil {
b.Fatalf("failed to create request, %v", err)
}
defer resp.EventStream.Close()
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err = resp.EventStream.Err(); err != nil {
b.Fatalf("expect no error, got %v", err)
}
event := <-resp.EventStream.Events()
if event == nil {
b.Fatalf("expect event, got nil, %v, %d", resp.EventStream.Err(), i)
}
}
}
func mockGetEventStreamReadEvents() (
[]EventStreamEvent,
[]eventstream.Message,
) {
expectEvents := []EventStreamEvent{
&GetEventStreamOutput{
IntVal: aws.Int64(123),
StrVal: aws.String("string value goes here"),
},
&EmptyEvent{},
&ExplicitPayloadEvent{
LongVal: aws.Int64(1234),
NestedVal: &NestedShape{
IntVal: aws.Int64(123),
StrVal: aws.String("string value goes here"),
},
StringVal: aws.String("string value goes here"),
},
&HeaderOnlyEvent{
BlobVal: []byte("blob value goes here"),
BoolVal: aws.Bool(true),
ByteVal: aws.Int64(1),
IntegerVal: aws.Int64(123),
LongVal: aws.Int64(1234),
ShortVal: aws.Int64(12),
StringVal: aws.String("string value goes here"),
TimeVal: aws.Time(time.Unix(1396594860, 0).UTC()),
},
&ImplicitPayloadEvent{
ByteVal: aws.Int64(1),
IntegerVal: aws.Int64(123),
ShortVal: aws.Int64(12),
},
&PayloadOnlyEvent{
NestedVal: &NestedShape{
IntVal: aws.Int64(123),
StrVal: aws.String("string value goes here"),
},
},
&PayloadOnlyBlobEvent{
BlobPayload: []byte("blob value goes here"),
},
&PayloadOnlyStringEvent{
StringPayload: aws.String("string value goes here"),
},
}
var marshalers request.HandlerList
marshalers.PushBackNamed(jsonrpc.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
_ = payloadMarshaler
eventMsgs := []eventstream.Message{
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("initial-response"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[0]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("Empty"),
},
},
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("ExplicitPayload"),
},
{
Name: "LongVal",
Value: eventstream.Int64Value(*expectEvents[2].(*ExplicitPayloadEvent).LongVal),
},
{
Name: "StringVal",
Value: eventstream.StringValue(*expectEvents[2].(*ExplicitPayloadEvent).StringVal),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[2]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("Headers"),
},
{
Name: "BlobVal",
Value: eventstream.BytesValue(expectEvents[3].(*HeaderOnlyEvent).BlobVal),
},
{
Name: "BoolVal",
Value: eventstream.BoolValue(*expectEvents[3].(*HeaderOnlyEvent).BoolVal),
},
{
Name: "ByteVal",
Value: eventstream.Int8Value(int8(*expectEvents[3].(*HeaderOnlyEvent).ByteVal)),
},
{
Name: "IntegerVal",
Value: eventstream.Int32Value(int32(*expectEvents[3].(*HeaderOnlyEvent).IntegerVal)),
},
{
Name: "LongVal",
Value: eventstream.Int64Value(*expectEvents[3].(*HeaderOnlyEvent).LongVal),
},
{
Name: "ShortVal",
Value: eventstream.Int16Value(int16(*expectEvents[3].(*HeaderOnlyEvent).ShortVal)),
},
{
Name: "StringVal",
Value: eventstream.StringValue(*expectEvents[3].(*HeaderOnlyEvent).StringVal),
},
{
Name: "TimeVal",
Value: eventstream.TimestampValue(*expectEvents[3].(*HeaderOnlyEvent).TimeVal),
},
},
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("ImplicitPayload"),
},
{
Name: "ByteVal",
Value: eventstream.Int8Value(int8(*expectEvents[4].(*ImplicitPayloadEvent).ByteVal)),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[4]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnly"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[5]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnlyBlob"),
},
},
Payload: expectEvents[6].(*PayloadOnlyBlobEvent).BlobPayload,
},
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("PayloadOnlyString"),
},
},
Payload: []byte(*expectEvents[7].(*PayloadOnlyStringEvent).StringPayload),
},
}
return expectEvents, eventMsgs
}
func TestGetEventStream_ReadException(t *testing.T) {
expectEvents := []EventStreamEvent{
&GetEventStreamOutput{
IntVal: aws.Int64(123),
StrVal: aws.String("string value goes here"),
},
&ExceptionEvent{
IntVal: aws.Int64(123),
Message_: aws.String("string value goes here"),
},
}
var marshalers request.HandlerList
marshalers.PushBackNamed(jsonrpc.BuildHandler)
payloadMarshaler := protocol.HandlerPayloadMarshal{
Marshalers: marshalers,
}
eventMsgs := []eventstream.Message{
{
Headers: eventstream.Headers{
eventstreamtest.EventMessageTypeHeader,
{
Name: eventstreamapi.EventTypeHeader,
Value: eventstream.StringValue("initial-response"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[0]),
},
{
Headers: eventstream.Headers{
eventstreamtest.EventExceptionTypeHeader,
{
Name: eventstreamapi.ExceptionTypeHeader,
Value: eventstream.StringValue("Exception"),
},
},
Payload: eventstreamtest.MarshalEventPayload(payloadMarshaler, expectEvents[1]),
},
}
sess, cleanupFn, err := eventstreamtest.SetupEventStreamSession(t,
eventstreamtest.ServeEventStream{
T: t,
Events: eventMsgs,
},
true,
)
if err != nil {
t.Fatalf("expect no error, %v", err)
}
defer cleanupFn()
svc := New(sess)
resp, err := svc.GetEventStream(nil)
if err != nil {
t.Fatalf("expect no error got, %v", err)
}
defer resp.EventStream.Close()
<-resp.EventStream.Events()
err = resp.EventStream.Err()
if err == nil {
t.Fatalf("expect err, got none")
}
expectErr := &ExceptionEvent{
IntVal: aws.Int64(123),
Message_: aws.String("string value goes here"),
}
aerr, ok := err.(awserr.Error)
if !ok {
t.Errorf("expect exception, got %T, %#v", err, err)
}
if e, a := expectErr.Code(), aerr.Code(); e != a {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectErr.Message(), aerr.Message(); e != a {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectErr, aerr; !reflect.DeepEqual(e, a) {
t.Errorf("expect %#v, got %#v", e, a)
}
}
var _ awserr.Error = (*ExceptionEvent)(nil)
type loopReader struct {
source *bytes.Reader
}
func (c *loopReader) Read(p []byte) (int, error) {
if c.source.Len() == 0 {
c.source.Seek(0, 0)
}
return c.source.Read(p)
}

View File

@@ -0,0 +1,72 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
// Package rpcserviceiface provides an interface to enable mocking the RPC Service service client
// for testing your code.
//
// It is important to note that this interface will have breaking changes
// when the service model is updated and adds new API operations, paginators,
// and waiters.
package rpcserviceiface
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/private/model/api/codegentest/service/rpcservice"
)
// RPCServiceAPI provides an interface to enable mocking the
// rpcservice.RPCService service client's API operation,
// paginators, and waiters. This make unit testing your code that calls out
// to the SDK's service client's calls easier.
//
// The best way to use this interface is so the SDK's service client's calls
// can be stubbed out for unit testing your code with the SDK without needing
// to inject custom request handlers into the SDK's request pipeline.
//
// // myFunc uses an SDK service client to make a request to
// // RPC Service.
// func myFunc(svc rpcserviceiface.RPCServiceAPI) bool {
// // Make svc.EmptyStream request
// }
//
// func main() {
// sess := session.New()
// svc := rpcservice.New(sess)
//
// myFunc(svc)
// }
//
// In your _test.go file:
//
// // Define a mock struct to be used in your unit tests of myFunc.
// type mockRPCServiceClient struct {
// rpcserviceiface.RPCServiceAPI
// }
// func (m *mockRPCServiceClient) EmptyStream(input *rpcservice.EmptyStreamInput) (*rpcservice.EmptyStreamOutput, error) {
// // mock response/functionality
// }
//
// func TestMyFunc(t *testing.T) {
// // Setup Test
// mockSvc := &mockRPCServiceClient{}
//
// myfunc(mockSvc)
//
// // Verify myFunc's functionality
// }
//
// It is important to note that this interface will have breaking changes
// when the service model is updated and adds new API operations, paginators,
// and waiters. Its suggested to use the pattern above for testing, or using
// tooling to generate mocks to satisfy the interfaces.
type RPCServiceAPI interface {
EmptyStream(*rpcservice.EmptyStreamInput) (*rpcservice.EmptyStreamOutput, error)
EmptyStreamWithContext(aws.Context, *rpcservice.EmptyStreamInput, ...request.Option) (*rpcservice.EmptyStreamOutput, error)
EmptyStreamRequest(*rpcservice.EmptyStreamInput) (*request.Request, *rpcservice.EmptyStreamOutput)
GetEventStream(*rpcservice.GetEventStreamInput) (*rpcservice.GetEventStreamOutput, error)
GetEventStreamWithContext(aws.Context, *rpcservice.GetEventStreamInput, ...request.Option) (*rpcservice.GetEventStreamOutput, error)
GetEventStreamRequest(*rpcservice.GetEventStreamInput) (*request.Request, *rpcservice.GetEventStreamOutput)
}
var _ RPCServiceAPI = (*rpcservice.RPCService)(nil)

View File

@@ -0,0 +1,99 @@
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
package rpcservice
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/client"
"github.com/aws/aws-sdk-go/aws/client/metadata"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/aws/signer/v4"
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
)
// RPCService provides the API operation methods for making requests to
// RPC Service. See this package's package overview docs
// for details on the service.
//
// RPCService methods are safe to use concurrently. It is not safe to
// modify mutate any of the struct's properties though.
type RPCService struct {
*client.Client
}
// Used for custom client initialization logic
var initClient func(*client.Client)
// Used for custom request initialization logic
var initRequest func(*request.Request)
// Service information constants
const (
ServiceName = "RPCService" // Name of service.
EndpointsID = "rpcservice" // ID to lookup a service endpoint with.
ServiceID = "RPCService" // ServiceID is a unique identifer of a specific service.
)
// New creates a new instance of the RPCService client with a session.
// If additional configuration is needed for the client instance use the optional
// aws.Config parameter to add your extra config.
//
// Example:
// // Create a RPCService client from just a session.
// svc := rpcservice.New(mySession)
//
// // Create a RPCService client with additional configuration
// svc := rpcservice.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
func New(p client.ConfigProvider, cfgs ...*aws.Config) *RPCService {
c := p.ClientConfig(EndpointsID, cfgs...)
return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName)
}
// newClient creates, initializes and returns a new service client instance.
func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *RPCService {
svc := &RPCService{
Client: client.New(
cfg,
metadata.ClientInfo{
ServiceName: ServiceName,
ServiceID: ServiceID,
SigningName: signingName,
SigningRegion: signingRegion,
Endpoint: endpoint,
APIVersion: "0000-00-00",
JSONVersion: "1.1",
TargetPrefix: "RPCService_00000000",
},
handlers,
),
}
// Handlers
svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)
svc.Handlers.Build.PushBackNamed(jsonrpc.BuildHandler)
svc.Handlers.Unmarshal.PushBackNamed(jsonrpc.UnmarshalHandler)
svc.Handlers.UnmarshalMeta.PushBackNamed(jsonrpc.UnmarshalMetaHandler)
svc.Handlers.UnmarshalError.PushBackNamed(jsonrpc.UnmarshalErrorHandler)
svc.Handlers.UnmarshalStream.PushBackNamed(jsonrpc.UnmarshalHandler)
// Run custom client initialization if present
if initClient != nil {
initClient(svc.Client)
}
return svc
}
// newRequest creates a new request for a RPCService operation and runs any
// custom request initialization.
func (c *RPCService) newRequest(op *request.Operation, params, data interface{}) *request.Request {
req := c.NewRequest(op, params, data)
// Run custom request initialization if present
if initRequest != nil {
initRequest(req)
}
return req
}