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