class Fog::AWS::CDN::Mock
Constants
- CDN_ERRORS
Public Class Methods
data()
click to toggle source
# File lib/fog/aws/cdn.rb, line 31 def self.data @data ||= Hash.new do |hash, key| hash[key] = { :distributions => {}, :streaming_distributions => {}, :invalidations => {} } end end
distribution_id()
click to toggle source
# File lib/fog/aws/cdn.rb, line 66 def self.distribution_id random_id(14) end
domain_name()
click to toggle source
# File lib/fog/aws/cdn.rb, line 74 def self.domain_name "#{random_id(12).downcase}.cloudfront.net" end
error(code, argument = '')
click to toggle source
# File lib/fog/aws/cdn.rb, line 99 def self.error(code, argument = '') if error = CDN_ERRORS[code] raise_error(error[:status], error[:code], error[:msg] % argument) end end
generic_id()
click to toggle source
# File lib/fog/aws/cdn.rb, line 70 def self.generic_id random_id(14) end
new(options={})
click to toggle source
# File lib/fog/aws/cdn.rb, line 45 def initialize(options={}) @use_iam_profile = options[:use_iam_profile] setup_credentials(options) end
raise_error(status, code, message='')
click to toggle source
# File lib/fog/aws/cdn.rb, line 105 def self.raise_error(status, code, message='') response = Excon::Response.new response.status = status response.body = <<EOF <ErrorResponse xmlns="http://cloudfront.amazonaws.com/doc/2010-11-01/"> <Error> <Type>Sender</Type> <Code>#{code}</Code> <Message>#{message}.</Message> </Error> <RequestId>#{Fog::AWS::Mock.request_id}</RequestId> </ErrorResponse> EOF raise(Excon::Errors.status_error({:expects => 201}, response)) end
random_id(length)
click to toggle source
# File lib/fog/aws/cdn.rb, line 78 def self.random_id(length) Fog::Mock.random_selection("abcdefghijklmnopqrstuvwxyz0123456789", length).upcase end
reset()
click to toggle source
# File lib/fog/aws/cdn.rb, line 41 def self.reset @data = nil end
Public Instance Methods
data()
click to toggle source
# File lib/fog/aws/cdn.rb, line 50 def data self.class.data[@aws_access_key_id] end
delete_distribution(distribution_id, etag)
click to toggle source
# File lib/fog/aws/requests/cdn/delete_distribution.rb, line 24 def delete_distribution(distribution_id, etag) distribution = self.data[:distributions][distribution_id] if distribution if distribution['ETag'] != etag Fog::AWS::CDN::Mock.error(:invalid_if_match_version) end unless distribution['DistributionConfig']['CallerReference'] Fog::AWS::CDN::Mock.error(:illegal_update) end if distribution['DistributionConfig']['Enabled'] Fog::AWS::CDN::Mock.error(:distribution_not_disabled) end self.data[:distributions].delete(distribution_id) self.data[:invalidations].delete(distribution_id) response = Excon::Response.new response.status = 204 response.body = "x-amz-request-id: #{Fog::AWS::Mock.request_id}" response else Fog::AWS::CDN::Mock.error(:no_such_distribution) end end
delete_streaming_distribution(distribution_id, etag)
click to toggle source
# File lib/fog/aws/requests/cdn/delete_streaming_distribution.rb, line 24 def delete_streaming_distribution(distribution_id, etag) distribution = self.data[:streaming_distributions][distribution_id] if distribution if distribution['ETag'] != etag Fog::AWS::CDN::Mock.error(:invalid_if_match_version) end unless distribution['StreamingDistributionConfig']['CallerReference'] Fog::AWS::CDN::Mock.error(:illegal_update) end if distribution['StreamingDistributionConfig']['Enabled'] Fog::AWS::CDN::Mock.error(:distribution_not_disabled) end self.data[:streaming_distributions].delete(distribution_id) response = Excon::Response.new response.status = 204 response.body = "x-amz-request-id: #{Fog::AWS::Mock.request_id}" response else Fog::AWS::CDN::Mock.error(:no_such_streaming_distribution) end end
get_distribution(distribution_id)
click to toggle source
# File lib/fog/aws/requests/cdn/get_distribution.rb, line 52 def get_distribution(distribution_id) response = Excon::Response.new distribution = self.data[:distributions][distribution_id] unless distribution Fog::AWS::CDN::Mock.error(:no_such_distribution) end if distribution['Status'] == 'InProgress' && (Time.now - Time.parse(distribution['LastModifiedTime']) >= Fog::Mock.delay * 2) distribution['Status'] = 'Deployed' end etag = Fog::AWS::CDN::Mock.generic_id response.status = 200 response.body = { 'InProgressInvalidationBatches' => 0, }.merge(distribution.reject { |k,v| k == 'ETag' }) response.headers['ETag'] = etag distribution['ETag'] = etag response end
get_distribution_list(options = {})
click to toggle source
# File lib/fog/aws/requests/cdn/get_distribution_list.rb, line 53 def get_distribution_list(options = {}) response = Excon::Response.new response.status = 200 distributions = self.data[:distributions].values response.body = { 'Marker' => Fog::Mock.random_hex(16), 'IsTruncated' => false, 'MaxItems' => 100, 'DistributionSummary' => distributions.map { |d| to_distribution_summary(d) } } response end
get_invalidation(distribution_id, invalidation_id)
click to toggle source
# File lib/fog/aws/requests/cdn/get_invalidation.rb, line 34 def get_invalidation(distribution_id, invalidation_id) distribution = self.data[:distributions][distribution_id] unless distribution Fog::AWS::CDN::Mock.error(:no_such_distribution) end invalidation = self.data[:invalidations][distribution_id][invalidation_id] unless invalidation Fog::AWS::CDN::Mock.error(:no_such_invalidation) end if invalidation['Status'] == 'InProgress' && (Time.now - Time.parse(invalidation['CreateTime']) >= Fog::Mock.delay * 2) invalidation['Status'] = 'Completed' distribution['InProgressInvalidationBatches'] -= 1 end response = Excon::Response.new response.status = 200 response.body = invalidation response end
get_invalidation_list(distribution_id, options = {})
click to toggle source
# File lib/fog/aws/requests/cdn/get_invalidation_list.rb, line 38 def get_invalidation_list(distribution_id, options = {}) distribution = self.data[:distributions][distribution_id] unless distribution Fog::AWS::CDN::Mock.error(:no_such_distribution) end invalidations = (self.data[:invalidations][distribution_id] || {}).values invalidations.each do |invalidation| if invalidation['Status'] == 'InProgress' && (Time.now - Time.parse(invalidation['CreateTime']) >= Fog::Mock.delay * 2) invalidation['Status'] = 'Completed' distribution['InProgressInvalidationBatches'] -= 1 end end response = Excon::Response.new response.status = 200 response.body = { 'Marker' => Fog::Mock.random_hex(16), 'IsTruncated' => false, 'MaxItems' => 100, 'InvalidationSummary' => invalidations.map { |i| to_invalidation_summary(i) } } response end
get_streaming_distribution(distribution_id)
click to toggle source
# File lib/fog/aws/requests/cdn/get_streaming_distribution.rb, line 45 def get_streaming_distribution(distribution_id) response = Excon::Response.new distribution = self.data[:streaming_distributions][distribution_id] unless distribution Fog::AWS::CDN::Mock.error(:no_such_streaming_distribution) end if distribution['Status'] == 'InProgress' && (Time.now - Time.parse(distribution['LastModifiedTime']) >= Fog::Mock.delay * 2) distribution['Status'] = 'Deployed' end etag = Fog::AWS::CDN::Mock.generic_id response.status = 200 response.body = distribution.reject { |k,v| k == 'ETag' } response.headers['ETag'] = etag distribution['ETag'] = etag response end
get_streaming_distribution_list(options = {})
click to toggle source
# File lib/fog/aws/requests/cdn/get_streaming_distribution_list.rb, line 53 def get_streaming_distribution_list(options = {}) response = Excon::Response.new response.status = 200 distributions = self.data[:streaming_distributions].values response.body = { 'Marker' => Fog::Mock.random_hex(16), 'IsTruncated' => false, 'MaxItems' => 100, 'StreamingDistributionSummary' => distributions.map { |d| to_streaming_distribution_summary(d) } } response end
post_distribution(options = {})
click to toggle source
# File lib/fog/aws/requests/cdn/post_distribution.rb, line 89 def post_distribution(options = {}) if self.data[:distributions].values.any? { |d| (d['CNAME'] & (options['CNAME']||[])).empty? } Fog::AWS::CDN::Mock.error(:invalid_argument, 'CNAME is already in use') end response = Excon::Response.new response.status = 201 options['CallerReference'] = Time.now.to_i.to_s dist_id = Fog::AWS::CDN::Mock.distribution_id distribution = { 'DomainName' => Fog::AWS::CDN::Mock.domain_name, 'Id' => dist_id, 'Status' => 'InProgress', 'LastModifiedTime' => Time.now.utc.iso8601, 'InProgressInvalidationBatches' => 0, 'DistributionConfig' => { 'CallerReference' => options['CallerReference'], 'CNAME' => options['CNAME'] || [], 'Comment' => options['Comment'], 'Enabled' => options['Enabled'], 'Logging' => { 'Bucket' => options['Bucket'], 'Prefix' => options['Prefix'] }, 'S3Origin' => options['S3Origin'], 'CustomOrigin' => options['CustomOrigin'], 'TrustedSigners' => options['TrustedSigners'] || [] } } self.data[:distributions][dist_id] = distribution response.body = distribution response end
post_invalidation(distribution_id, paths, caller_reference = Time.now.to_i.to_s)
click to toggle source
# File lib/fog/aws/requests/cdn/post_invalidation.rb, line 45 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::AWS::CDN::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::AWS::CDN::Mock.error(:no_such_distribution) end end
post_streaming_distribution(options = {})
click to toggle source
# File lib/fog/aws/requests/cdn/post_streaming_distribution.rb, line 76 def post_streaming_distribution(options = {}) if self.data[:streaming_distributions].values.any? { |d| (d['CNAME'] & (options['CNAME']||[])).empty? } Fog::AWS::CDN::Mock.error(:invalid_argument, 'CNAME is already in use') end response = Excon::Response.new response.status = 201 options['CallerReference'] = Time.now.to_i.to_s dist_id = Fog::AWS::CDN::Mock.distribution_id distribution = { 'DomainName' => Fog::AWS::CDN::Mock.domain_name, 'Id' => dist_id, 'Status' => 'InProgress', 'LastModifiedTime' => Time.now.utc.iso8601, 'StreamingDistributionConfig' => { 'CallerReference' => options['CallerReference'], 'CNAME' => options['CNAME'] || [], 'Comment' => options['Comment'], 'Enabled' => options['Enabled'], 'Logging' => { 'Bucket' => options['Bucket'], 'Prefix' => options['Prefix'] }, 'S3Origin' => options['S3Origin'], 'TrustedSigners' => options['TrustedSigners'] || [] } } self.data[:streaming_distributions][dist_id] = distribution response.body = distribution response end
put_distribution_config(distribution_id, etag, options = {})
click to toggle source
# File lib/fog/aws/requests/cdn/put_distribution_config.rb, line 90 def put_distribution_config(distribution_id, etag, options = {}) distribution = self.data[:distributions][distribution_id] if distribution if distribution['ETag'] != etag Fog::AWS::CDN::Mock.error(:invalid_if_match_version) end unless distribution['DistributionConfig']['CallerReference'] Fog::AWS::CDN::Mock.error(:illegal_update) end distribution['DistributionConfig'].merge!(options) distribution['Status'] = 'InProgress' response = Excon::Response.new response.status = 200 response.headers['ETag'] = Fog::AWS::CDN::Mock.generic_id response.body = distribution.merge({ 'LastModifiedTime' => Time.now.utc.iso8601 }).reject{ |k,v| k == 'ETag' } response else Fog::AWS::CDN::Mock.error(:no_such_distribution) end end
put_streaming_distribution_config(distribution_id, etag, options = {})
click to toggle source
# File lib/fog/aws/requests/cdn/put_streaming_distribution_config.rb, line 79 def put_streaming_distribution_config(distribution_id, etag, options = {}) distribution = self.data[:streaming_distributions][distribution_id] if distribution if distribution['ETag'] != etag Fog::AWS::CDN::Mock.error(:invalid_if_match_version) end unless distribution['StreamingDistributionConfig']['CallerReference'] Fog::AWS::CDN::Mock.error(:illegal_update) end distribution['StreamingDistributionConfig'].merge!(options) distribution['Status'] = 'InProgress' response = Excon::Response.new response.status = 200 response.headers['ETag'] = Fog::AWS::CDN::Mock.generic_id response.body = distribution.merge({ 'LastModifiedTime' => Time.now.utc.iso8601 }).reject{ |k,v| k == 'ETag' } response else Fog::AWS::CDN::Mock.error(:no_such_streaming_distribution) end end
reset_data()
click to toggle source
# File lib/fog/aws/cdn.rb, line 54 def reset_data self.class.data.delete(@aws_access_key_id) end
setup_credentials(options={})
click to toggle source
# File lib/fog/aws/cdn.rb, line 62 def setup_credentials(options={}) @aws_access_key_id = options[:aws_access_key_id] end
signature(params)
click to toggle source
# File lib/fog/aws/cdn.rb, line 58 def signature(params) "foo" end
Private Instance Methods
to_distribution_summary(d)
click to toggle source
# File lib/fog/aws/requests/cdn/get_distribution_list.rb, line 71 def to_distribution_summary(d) { 'DomainName' => d['DomainName'], 'Id' => d['Id'], 'LastModifiedTime' => d['LastModifiedTime'] }.merge(d['DistributionConfig']) end
to_invalidation_summary(d)
click to toggle source
# File lib/fog/aws/requests/cdn/get_invalidation_list.rb, line 67 def to_invalidation_summary(d) { 'Id' => d['Id'], 'Status' => d['Status'] } end
to_streaming_distribution_summary(d)
click to toggle source
# File lib/fog/aws/requests/cdn/get_streaming_distribution_list.rb, line 71 def to_streaming_distribution_summary(d) { 'DomainName' => d['DomainName'], 'Id' => d['Id'], 'LastModifiedTime' => d['LastModifiedTime'] }.merge(d['StreamingDistributionConfig']) end