diff --git a/lib/fog/aws/kinesis.rb b/lib/fog/aws/kinesis.rb index 730685616..21ab25778 100644 --- a/lib/fog/aws/kinesis.rb +++ b/lib/fog/aws/kinesis.rb @@ -25,7 +25,7 @@ module Fog request :split_shard request :merge_shards request :add_tags_to_stream - # request :list_tags_for_stream + request :list_tags_for_stream # request :remove_tags_from_stream class Real diff --git a/lib/fog/aws/requests/kinesis/add_tags_to_stream.rb b/lib/fog/aws/requests/kinesis/add_tags_to_stream.rb index ec2651b0e..1d07df252 100644 --- a/lib/fog/aws/requests/kinesis/add_tags_to_stream.rb +++ b/lib/fog/aws/requests/kinesis/add_tags_to_stream.rb @@ -6,7 +6,7 @@ module Fog # # ==== Options # * StreamName<~String>: The name of the stream. - # * Tags<~Hash>: The name of the stream. + # * Tags<~Hash>: The set of key-value pairs to use to create the tags. # ==== Returns # * response<~Excon::Response>: # @@ -16,7 +16,7 @@ module Fog def add_tags_to_stream(options={}) body = { "StreamName" => options.delete("StreamName"), - "Tags" => Fog::JSON.encode(options.delete("Tags")) + "Tags" => options.delete("Tags") }.reject{ |_,v| v.nil? } request({ diff --git a/lib/fog/aws/requests/kinesis/list_tags_for_stream.rb b/lib/fog/aws/requests/kinesis/list_tags_for_stream.rb new file mode 100644 index 000000000..d49cbe25d --- /dev/null +++ b/lib/fog/aws/requests/kinesis/list_tags_for_stream.rb @@ -0,0 +1,57 @@ +module Fog + module AWS + class Kinesis + class Real + # Lists the tags for the specified Amazon Kinesis stream. + # + # ==== Options + # * ExclusiveStartTagKey<~String>: The key to use as the starting point for the list of tags. + # * Limit<~Number>: The number of tags to return. + # * StreamName<~String>: The name of the stream. + # ==== Returns + # * response<~Excon::Response>: + # + # ==== See Also + # https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListTagsForStream.html + # + def list_tags_for_stream(options={}) + body = { + "ExclusiveStartTagKey" => options.delete("ExclusiveStartTagKey"), + "Limit" => options.delete("Limit"), + "StreamName" => options.delete("StreamName") + }.reject{ |_,v| v.nil? } + + response = request({ + :idempotent => true, + 'X-Amz-Target' => "Kinesis_#{@version}.ListTagsForStream", + :body => body, + }.merge(options)) + response.body = Fog::JSON.decode(response.body) unless response.body.nil? + response.body + response + end + end + + class Mock + def list_tags_for_stream(options={}) + stream_name = options.delete("StreamName") + + unless stream = data[:kinesis_streams].detect{ |s| s["StreamName"] == stream_name } + raise 'unknown stream' + end + + response = Excon::Response.new + response.status = 200 + response.body = { + "HasMoreTags" => false, + "Tags" => stream["Tags"].map{ |k,v| + {"Key" => k, "Value" => v} + } + + } + response + end + end + end + end +end diff --git a/tests/requests/kinesis/stream_tests.rb b/tests/requests/kinesis/stream_tests.rb index 2ffc1e737..9f8bed15e 100644 --- a/tests/requests/kinesis/stream_tests.rb +++ b/tests/requests/kinesis/stream_tests.rb @@ -85,6 +85,16 @@ Shindo.tests('AWS::Kinesis | stream requests', ['aws', 'kinesis']) do ] } + @list_tags_for_stream_format = { + "HasMoreTags" => Fog::Boolean, + "Tags" => [ + { + "Key" => String, + "Value" => String + } + ] + } + tests("#create_stream").returns("") do Fog::AWS[:kinesis].create_stream("StreamName" => @stream_id).body.tap do wait_for_status.call("ACTIVE") @@ -209,6 +219,14 @@ Shindo.tests('AWS::Kinesis | stream requests', ['aws', 'kinesis']) do Fog::AWS[:kinesis].add_tags_to_stream("StreamName" => @stream_id, "Tags" => {"a" => "1", "b" => "2"}).body end + tests("#list_tags_for_stream").formats(@list_tags_for_stream_format) do + Fog::AWS[:kinesis].list_tags_for_stream("StreamName" => @stream_id).body.tap do |body| + returns({"a" => "1", "b" => "2"}) { + body["Tags"].inject({}){ |m, tag| m.merge(tag["Key"] => tag["Value"]) } + } + end + end + tests("#delete_stream").returns("") do Fog::AWS[:kinesis].delete_stream("StreamName" => @stream_id).body end