1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/aws/requests/cdn/post_invalidation.rb
Brice Figureau e877f95034 [aws|cdn] add request mock support for AWS Cloudfront
This patch adds support for mocking the cloudfront API.
CDN Tests now can both be run with mocking and non mocking
activated.

Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
2012-09-28 11:24:36 +02:00

84 lines
2.9 KiB
Ruby

module Fog
module CDN
class AWS
class Real
require 'fog/aws/parsers/cdn/post_invalidation'
# List information about distributions in CloudFront
#
# ==== Parameters
# * distribution_id<~String> - Id of distribution for invalidations
# * paths<~Array> - Array of string paths to objects to invalidate
# * caller_reference<~String> - Used to prevent replay, defaults to Time.now.to_i.to_s
#
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# * 'Id'<~String> - Id of invalidation
# * 'Status'<~String> - Status of invalidation
# * 'CreateTime'<~Integer> - Time of invalidation creation
# * 'InvalidationBatch'<~Array>:
# * 'Path'<~Array> - Array of strings of objects to invalidate
# * 'CallerReference'<~String> - Used to prevent replay, defaults to Time.now.to_i.to_s
#
# ==== See Also
# http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/CreateInvalidation.html
def post_invalidation(distribution_id, paths, caller_reference = Time.now.to_i.to_s)
body = '<?xml version="1.0" encoding="UTF-8"?>'
body << "<InvalidationBatch>"
for path in [*paths]
body << "<Path>" << path << "</Path>"
end
body << "<CallerReference>" << caller_reference << "</CallerReference>"
body << "</InvalidationBatch>"
request({
:body => body,
:expects => 201,
:headers => {'Content-Type' => 'text/xml'},
:idempotent => true,
:method => 'POST',
:parser => Fog::Parsers::CDN::AWS::PostInvalidation.new,
:path => "/distribution/#{distribution_id}/invalidation"
})
end
end
class Mock
def post_invalidation(distribution_id, paths, caller_reference = Time.now.to_i.to_s)
distribution = self.data[:distributions][distribution_id]
if distribution
invalidation_id = Fog::CDN::AWS::Mock.distribution_id
invalidation = {
'Id' => invalidation_id,
'Status' => 'InProgress',
'CreateTime' => Time.now.utc.iso8601,
'InvalidationBatch' => {
'CallerReference' => caller_reference,
'Path' => paths
}
}
distribution['InProgressInvalidationBatches'] += 1
self.data[:invalidations][distribution_id] ||= {}
self.data[:invalidations][distribution_id][invalidation_id] = invalidation
response = Excon::Response.new
response.status = 201
response.body = invalidation
response
else
Fog::CDN::AWS::Mock.error(:no_such_distribution)
end
end
end
end
end
end