From 3d5b9ccb6b17d9e77ecee90782704f4450b6a11a Mon Sep 17 00:00:00 2001 From: Trevor Rowe Date: Tue, 28 Jul 2015 08:55:43 -0700 Subject: [PATCH] Regression fix for serializing structures for EC2. Fixes #881. --- CHANGELOG.md | 10 ++++++ .../aws-sdk-core/query/ec2_param_builder.rb | 2 +- .../spec/aws/query/ec2_param_builder_spec.rb | 34 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 aws-sdk-core/spec/aws/query/ec2_param_builder_spec.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 352e8e9ac65..29fe9d4dcd5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ Unreleased Changes ------------------ +* Issue - Aws::EC2 - Resolved a regression with serializing `Aws::Structure` types in + `Aws::EC2::Client` requests. The `Aws::Query::EC2ParamBuilder` class is responsible + for testing protocol specific implementations but it tests with input that is loaded + from a JSON document into a vanilla Ruby hash which does not trigger this behavior. + + The other protocol builder classes have full unit test suites, while the EC2 param + builder did not. A test case has been added to cover this regression. + + See [related GitHub issue #881](https://github.com/aws/aws-sdk-ruby/issues/881). + * Feature - KMS Client-Side-Encryption - Added support to `Aws::S3::Encryption::Client` for using AWS Key Management Service (KMS) to manage master encryption keys. ```ruby diff --git a/aws-sdk-core/lib/aws-sdk-core/query/ec2_param_builder.rb b/aws-sdk-core/lib/aws-sdk-core/query/ec2_param_builder.rb index ff350c9ecc4..c6b43b281b4 100644 --- a/aws-sdk-core/lib/aws-sdk-core/query/ec2_param_builder.rb +++ b/aws-sdk-core/lib/aws-sdk-core/query/ec2_param_builder.rb @@ -20,7 +20,7 @@ def apply(ref, params) def structure(ref, values, prefix) shape = ref.shape - values.each do |name, value| + values.each_pair do |name, value| unless value.nil? member_ref = shape.member(name) format(member_ref, value, prefix + query_name(member_ref)) diff --git a/aws-sdk-core/spec/aws/query/ec2_param_builder_spec.rb b/aws-sdk-core/spec/aws/query/ec2_param_builder_spec.rb new file mode 100644 index 00000000000..2d143417fcd --- /dev/null +++ b/aws-sdk-core/spec/aws/query/ec2_param_builder_spec.rb @@ -0,0 +1,34 @@ +require 'spec_helper' + +module Aws + module Query + describe EC2ParamBuilder do + + let(:shapes) { ApiHelper.sample_shapes } + + let(:rules) { + shape_map = Api::ShapeMap.new(shapes) + shape_map.shape_ref('shape' => 'StructureShape') + } + + def query(params = {}) + param_list = ParamList.new + EC2ParamBuilder.new(param_list).apply(rules, params) + param_list.map { |param| [param.name, param.value ] }.sort + end + + it 'can serialize structures' do + params = Structure.new(*rules.shape.member_names).new + params.boolean = true + params.integer = 123 + params.string = 'abc' + expect(query(params)).to eq([ + ['Boolean', 'true'], + ['Integer', '123'], + ['String', 'abc'], + ]) + end + + end + end +end