File: //opt/go/pkg/mod/github.com/aws/
[email protected]/private/model/api/eventstream_tmpl_tests.go
//go:build codegen
// +build codegen
package api
import (
"bytes"
"fmt"
"strings"
)
// APIEventStreamTestGoCode generates Go code for EventStream operation tests.
func (a *API) APIEventStreamTestGoCode() string {
var buf bytes.Buffer
a.resetImports()
a.AddImport("bytes")
a.AddImport("io/ioutil")
a.AddImport("net/http")
a.AddImport("reflect")
a.AddImport("testing")
a.AddImport("time")
a.AddImport("context")
a.AddImport("strings")
a.AddImport("sync")
a.AddSDKImport("aws")
a.AddSDKImport("aws/corehandlers")
a.AddSDKImport("aws/request")
a.AddSDKImport("aws/awserr")
a.AddSDKImport("awstesting/unit")
a.AddSDKImport("private/protocol")
a.AddSDKImport("private/protocol/", a.ProtocolPackage())
a.AddSDKImport("private/protocol/eventstream")
a.AddSDKImport("private/protocol/eventstream/eventstreamapi")
a.AddSDKImport("private/protocol/eventstream/eventstreamtest")
unused := `
var _ time.Time
var _ awserr.Error
var _ context.Context
var _ sync.WaitGroup
var _ strings.Reader
`
if err := eventStreamReaderTestTmpl.Execute(&buf, a); err != nil {
panic(err)
}
if err := eventStreamWriterTestTmpl.Execute(&buf, a); err != nil {
panic(err)
}
return a.importsGoCode() + unused + strings.TrimSpace(buf.String())
}
func templateMap(args ...interface{}) map[string]interface{} {
if len(args)%2 != 0 {
panic(fmt.Sprintf("invalid map call, non-even args %v", args))
}
m := map[string]interface{}{}
for i := 0; i < len(args); i += 2 {
k, ok := args[i].(string)
if !ok {
panic(fmt.Sprintf("invalid map call, arg is not string, %T, %v", args[i], args[i]))
}
m[k] = args[i+1]
}
return m
}
func valueForType(s *Shape, visited []string) string {
if isShapeVisited(visited, s.ShapeName) {
return "nil"
}
visited = append(visited, s.ShapeName)
switch s.Type {
case "blob":
return `[]byte("blob value goes here")`
case "string":
return `aws.String("string value goes here")`
case "boolean":
return `aws.Bool(true)`
case "byte":
return `aws.Int64(1)`
case "short":
return `aws.Int64(12)`
case "integer":
return `aws.Int64(123)`
case "long":
return `aws.Int64(1234)`
case "float":
return `aws.Float64(123.4)`
case "double":
return `aws.Float64(123.45)`
case "timestamp":
return `aws.Time(time.Unix(1396594860, 0).UTC())`
case "structure":
w := bytes.NewBuffer(nil)
fmt.Fprintf(w, "&%s{\n", s.ShapeName)
if s.Exception {
fmt.Fprintf(w, `RespMetadata: protocol.ResponseMetadata{
StatusCode: 200,
},
`)
}
for _, refName := range s.MemberNames() {
fmt.Fprintf(w, "%s: %s,\n", refName, valueForType(s.MemberRefs[refName].Shape, visited))
}
fmt.Fprintf(w, "}")
return w.String()
case "list":
w := bytes.NewBuffer(nil)
fmt.Fprintf(w, "%s{\n", s.GoType())
if !isShapeVisited(visited, s.MemberRef.Shape.ShapeName) {
for i := 0; i < 3; i++ {
fmt.Fprintf(w, "%s,\n", valueForType(s.MemberRef.Shape, visited))
}
}
fmt.Fprintf(w, "}")
return w.String()
case "map":
w := bytes.NewBuffer(nil)
fmt.Fprintf(w, "%s{\n", s.GoType())
if !isShapeVisited(visited, s.ValueRef.Shape.ShapeName) {
for _, k := range []string{"a", "b", "c"} {
fmt.Fprintf(w, "%q: %s,\n", k, valueForType(s.ValueRef.Shape, visited))
}
}
fmt.Fprintf(w, "}")
return w.String()
default:
panic(fmt.Sprintf("valueForType does not support %s, %s", s.ShapeName, s.Type))
}
}
func isShapeVisited(visited []string, name string) bool {
for _, v := range visited {
if v == name {
return true
}
}
return false
}