1// +build bench
2
3package restjson_test
4
5import (
6	"net/http"
7	"net/http/httptest"
8	"os"
9	"testing"
10
11	"github.com/aws/aws-sdk-go/aws"
12	"github.com/aws/aws-sdk-go/aws/credentials"
13	"github.com/aws/aws-sdk-go/aws/endpoints"
14	"github.com/aws/aws-sdk-go/aws/request"
15	"github.com/aws/aws-sdk-go/aws/session"
16	"github.com/aws/aws-sdk-go/private/protocol/restjson"
17	"github.com/aws/aws-sdk-go/service/elastictranscoder"
18)
19
20var (
21	elastictranscoderSvc *elastictranscoder.ElasticTranscoder
22)
23
24func TestMain(m *testing.M) {
25	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
26		w.WriteHeader(http.StatusOK)
27	}))
28
29	sess := session.Must(session.NewSession(&aws.Config{
30		Credentials:      credentials.NewStaticCredentials("Key", "Secret", "Token"),
31		Endpoint:         aws.String(server.URL),
32		S3ForcePathStyle: aws.Bool(true),
33		DisableSSL:       aws.Bool(true),
34		Region:           aws.String(endpoints.UsWest2RegionID),
35	}))
36	elastictranscoderSvc = elastictranscoder.New(sess)
37
38	c := m.Run()
39	server.Close()
40	os.Exit(c)
41}
42
43func BenchmarkRESTJSONBuild_Complex_ETCCreateJob(b *testing.B) {
44	params := elastictranscoderCreateJobInput()
45
46	benchRESTJSONBuild(b, func() *request.Request {
47		req, _ := elastictranscoderSvc.CreateJobRequest(params)
48		return req
49	})
50}
51
52func BenchmarkRESTJSONBuild_Simple_ETCListJobsByPipeline(b *testing.B) {
53	params := elastictranscoderListJobsByPipeline()
54
55	benchRESTJSONBuild(b, func() *request.Request {
56		req, _ := elastictranscoderSvc.ListJobsByPipelineRequest(params)
57		return req
58	})
59}
60
61func BenchmarkRESTJSONRequest_Complex_CFCreateJob(b *testing.B) {
62	benchRESTJSONRequest(b, func() *request.Request {
63		req, _ := elastictranscoderSvc.CreateJobRequest(elastictranscoderCreateJobInput())
64		return req
65	})
66}
67
68func BenchmarkRESTJSONRequest_Simple_ETCListJobsByPipeline(b *testing.B) {
69	benchRESTJSONRequest(b, func() *request.Request {
70		req, _ := elastictranscoderSvc.ListJobsByPipelineRequest(elastictranscoderListJobsByPipeline())
71		return req
72	})
73}
74
75func benchRESTJSONBuild(b *testing.B, reqFn func() *request.Request) {
76	b.ResetTimer()
77
78	for i := 0; i < b.N; i++ {
79		req := reqFn()
80		restjson.Build(req)
81		if req.Error != nil {
82			b.Fatal("Unexpected error", req.Error)
83		}
84	}
85}
86
87func benchRESTJSONRequest(b *testing.B, reqFn func() *request.Request) {
88	b.ResetTimer()
89
90	for i := 0; i < b.N; i++ {
91		err := reqFn().Send()
92		if err != nil {
93			b.Fatal("Unexpected error", err)
94		}
95	}
96}
97
98func elastictranscoderListJobsByPipeline() *elastictranscoder.ListJobsByPipelineInput {
99	return &elastictranscoder.ListJobsByPipelineInput{
100		PipelineId: aws.String("Id"), // Required
101		Ascending:  aws.String("Ascending"),
102		PageToken:  aws.String("Id"),
103	}
104}
105
106func elastictranscoderCreateJobInput() *elastictranscoder.CreateJobInput {
107	return &elastictranscoder.CreateJobInput{
108		Input: &elastictranscoder.JobInput{ // Required
109			AspectRatio: aws.String("AspectRatio"),
110			Container:   aws.String("JobContainer"),
111			DetectedProperties: &elastictranscoder.DetectedProperties{
112				DurationMillis: aws.Int64(1),
113				FileSize:       aws.Int64(1),
114				FrameRate:      aws.String("FloatString"),
115				Height:         aws.Int64(1),
116				Width:          aws.Int64(1),
117			},
118			Encryption: &elastictranscoder.Encryption{
119				InitializationVector: aws.String("ZeroTo255String"),
120				Key:                  aws.String("Base64EncodedString"),
121				KeyMd5:               aws.String("Base64EncodedString"),
122				Mode:                 aws.String("EncryptionMode"),
123			},
124			FrameRate:  aws.String("FrameRate"),
125			Interlaced: aws.String("Interlaced"),
126			Key:        aws.String("Key"),
127			Resolution: aws.String("Resolution"),
128		},
129		PipelineId: aws.String("Id"), // Required
130		Output: &elastictranscoder.CreateJobOutput{
131			AlbumArt: &elastictranscoder.JobAlbumArt{
132				Artwork: []*elastictranscoder.Artwork{
133					{ // Required
134						AlbumArtFormat: aws.String("JpgOrPng"),
135						Encryption: &elastictranscoder.Encryption{
136							InitializationVector: aws.String("ZeroTo255String"),
137							Key:                  aws.String("Base64EncodedString"),
138							KeyMd5:               aws.String("Base64EncodedString"),
139							Mode:                 aws.String("EncryptionMode"),
140						},
141						InputKey:      aws.String("WatermarkKey"),
142						MaxHeight:     aws.String("DigitsOrAuto"),
143						MaxWidth:      aws.String("DigitsOrAuto"),
144						PaddingPolicy: aws.String("PaddingPolicy"),
145						SizingPolicy:  aws.String("SizingPolicy"),
146					},
147					// More values...
148				},
149				MergePolicy: aws.String("MergePolicy"),
150			},
151			Captions: &elastictranscoder.Captions{
152				CaptionFormats: []*elastictranscoder.CaptionFormat{
153					{ // Required
154						Encryption: &elastictranscoder.Encryption{
155							InitializationVector: aws.String("ZeroTo255String"),
156							Key:                  aws.String("Base64EncodedString"),
157							KeyMd5:               aws.String("Base64EncodedString"),
158							Mode:                 aws.String("EncryptionMode"),
159						},
160						Format:  aws.String("CaptionFormatFormat"),
161						Pattern: aws.String("CaptionFormatPattern"),
162					},
163					// More values...
164				},
165				CaptionSources: []*elastictranscoder.CaptionSource{
166					{ // Required
167						Encryption: &elastictranscoder.Encryption{
168							InitializationVector: aws.String("ZeroTo255String"),
169							Key:                  aws.String("Base64EncodedString"),
170							KeyMd5:               aws.String("Base64EncodedString"),
171							Mode:                 aws.String("EncryptionMode"),
172						},
173						Key:        aws.String("Key"),
174						Label:      aws.String("Name"),
175						Language:   aws.String("Key"),
176						TimeOffset: aws.String("TimeOffset"),
177					},
178					// More values...
179				},
180				MergePolicy: aws.String("CaptionMergePolicy"),
181			},
182			Composition: []*elastictranscoder.Clip{
183				{ // Required
184					TimeSpan: &elastictranscoder.TimeSpan{
185						Duration:  aws.String("Time"),
186						StartTime: aws.String("Time"),
187					},
188				},
189				// More values...
190			},
191			Encryption: &elastictranscoder.Encryption{
192				InitializationVector: aws.String("ZeroTo255String"),
193				Key:                  aws.String("Base64EncodedString"),
194				KeyMd5:               aws.String("Base64EncodedString"),
195				Mode:                 aws.String("EncryptionMode"),
196			},
197			Key:             aws.String("Key"),
198			PresetId:        aws.String("Id"),
199			Rotate:          aws.String("Rotate"),
200			SegmentDuration: aws.String("FloatString"),
201			ThumbnailEncryption: &elastictranscoder.Encryption{
202				InitializationVector: aws.String("ZeroTo255String"),
203				Key:                  aws.String("Base64EncodedString"),
204				KeyMd5:               aws.String("Base64EncodedString"),
205				Mode:                 aws.String("EncryptionMode"),
206			},
207			ThumbnailPattern: aws.String("ThumbnailPattern"),
208			Watermarks: []*elastictranscoder.JobWatermark{
209				{ // Required
210					Encryption: &elastictranscoder.Encryption{
211						InitializationVector: aws.String("ZeroTo255String"),
212						Key:                  aws.String("Base64EncodedString"),
213						KeyMd5:               aws.String("Base64EncodedString"),
214						Mode:                 aws.String("EncryptionMode"),
215					},
216					InputKey:          aws.String("WatermarkKey"),
217					PresetWatermarkId: aws.String("PresetWatermarkId"),
218				},
219				// More values...
220			},
221		},
222		OutputKeyPrefix: aws.String("Key"),
223		Outputs: []*elastictranscoder.CreateJobOutput{
224			{ // Required
225				AlbumArt: &elastictranscoder.JobAlbumArt{
226					Artwork: []*elastictranscoder.Artwork{
227						{ // Required
228							AlbumArtFormat: aws.String("JpgOrPng"),
229							Encryption: &elastictranscoder.Encryption{
230								InitializationVector: aws.String("ZeroTo255String"),
231								Key:                  aws.String("Base64EncodedString"),
232								KeyMd5:               aws.String("Base64EncodedString"),
233								Mode:                 aws.String("EncryptionMode"),
234							},
235							InputKey:      aws.String("WatermarkKey"),
236							MaxHeight:     aws.String("DigitsOrAuto"),
237							MaxWidth:      aws.String("DigitsOrAuto"),
238							PaddingPolicy: aws.String("PaddingPolicy"),
239							SizingPolicy:  aws.String("SizingPolicy"),
240						},
241						// More values...
242					},
243					MergePolicy: aws.String("MergePolicy"),
244				},
245				Captions: &elastictranscoder.Captions{
246					CaptionFormats: []*elastictranscoder.CaptionFormat{
247						{ // Required
248							Encryption: &elastictranscoder.Encryption{
249								InitializationVector: aws.String("ZeroTo255String"),
250								Key:                  aws.String("Base64EncodedString"),
251								KeyMd5:               aws.String("Base64EncodedString"),
252								Mode:                 aws.String("EncryptionMode"),
253							},
254							Format:  aws.String("CaptionFormatFormat"),
255							Pattern: aws.String("CaptionFormatPattern"),
256						},
257						// More values...
258					},
259					CaptionSources: []*elastictranscoder.CaptionSource{
260						{ // Required
261							Encryption: &elastictranscoder.Encryption{
262								InitializationVector: aws.String("ZeroTo255String"),
263								Key:                  aws.String("Base64EncodedString"),
264								KeyMd5:               aws.String("Base64EncodedString"),
265								Mode:                 aws.String("EncryptionMode"),
266							},
267							Key:        aws.String("Key"),
268							Label:      aws.String("Name"),
269							Language:   aws.String("Key"),
270							TimeOffset: aws.String("TimeOffset"),
271						},
272						// More values...
273					},
274					MergePolicy: aws.String("CaptionMergePolicy"),
275				},
276				Composition: []*elastictranscoder.Clip{
277					{ // Required
278						TimeSpan: &elastictranscoder.TimeSpan{
279							Duration:  aws.String("Time"),
280							StartTime: aws.String("Time"),
281						},
282					},
283					// More values...
284				},
285				Encryption: &elastictranscoder.Encryption{
286					InitializationVector: aws.String("ZeroTo255String"),
287					Key:                  aws.String("Base64EncodedString"),
288					KeyMd5:               aws.String("Base64EncodedString"),
289					Mode:                 aws.String("EncryptionMode"),
290				},
291				Key:             aws.String("Key"),
292				PresetId:        aws.String("Id"),
293				Rotate:          aws.String("Rotate"),
294				SegmentDuration: aws.String("FloatString"),
295				ThumbnailEncryption: &elastictranscoder.Encryption{
296					InitializationVector: aws.String("ZeroTo255String"),
297					Key:                  aws.String("Base64EncodedString"),
298					KeyMd5:               aws.String("Base64EncodedString"),
299					Mode:                 aws.String("EncryptionMode"),
300				},
301				ThumbnailPattern: aws.String("ThumbnailPattern"),
302				Watermarks: []*elastictranscoder.JobWatermark{
303					{ // Required
304						Encryption: &elastictranscoder.Encryption{
305							InitializationVector: aws.String("ZeroTo255String"),
306							Key:                  aws.String("Base64EncodedString"),
307							KeyMd5:               aws.String("Base64EncodedString"),
308							Mode:                 aws.String("EncryptionMode"),
309						},
310						InputKey:          aws.String("WatermarkKey"),
311						PresetWatermarkId: aws.String("PresetWatermarkId"),
312					},
313					// More values...
314				},
315			},
316			// More values...
317		},
318		Playlists: []*elastictranscoder.CreateJobPlaylist{
319			{ // Required
320				Format: aws.String("PlaylistFormat"),
321				HlsContentProtection: &elastictranscoder.HlsContentProtection{
322					InitializationVector:  aws.String("ZeroTo255String"),
323					Key:                   aws.String("Base64EncodedString"),
324					KeyMd5:                aws.String("Base64EncodedString"),
325					KeyStoragePolicy:      aws.String("KeyStoragePolicy"),
326					LicenseAcquisitionUrl: aws.String("ZeroTo512String"),
327					Method:                aws.String("HlsContentProtectionMethod"),
328				},
329				Name: aws.String("Filename"),
330				OutputKeys: []*string{
331					aws.String("Key"), // Required
332					// More values...
333				},
334				PlayReadyDrm: &elastictranscoder.PlayReadyDrm{
335					Format:                aws.String("PlayReadyDrmFormatString"),
336					InitializationVector:  aws.String("ZeroTo255String"),
337					Key:                   aws.String("NonEmptyBase64EncodedString"),
338					KeyId:                 aws.String("KeyIdGuid"),
339					KeyMd5:                aws.String("NonEmptyBase64EncodedString"),
340					LicenseAcquisitionUrl: aws.String("OneTo512String"),
341				},
342			},
343			// More values...
344		},
345		UserMetadata: map[string]*string{
346			"Key": aws.String("String"), // Required
347			// More values...
348		},
349	}
350}
351