Parent

Class/Module Index [+]

Quicksearch

Fog::CDN::AWS::Mock

Constants

CDN_ERRORS

Public Class Methods

data() click to toggle source
# File lib/fog/aws/cdn.rb, line 35
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 71
def self.distribution_id
  random_id(14)
end
domain_name() click to toggle source
# File lib/fog/aws/cdn.rb, line 79
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 104
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 75
def self.generic_id
  random_id(14)
end
new(options={}) click to toggle source
# File lib/fog/aws/cdn.rb, line 49
def initialize(options={})
  require 'mime/types'
  @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 110
def self.raise_error(status, code, message='')
  response = Excon::Response.new
  response.status = status
  response.body = <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>

  raise(Excon::Errors.status_error({:expects => 201}, response))
end
random_id(length) click to toggle source
# File lib/fog/aws/cdn.rb, line 83
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 45
def self.reset
  @data = nil
end

Public Instance Methods

data() click to toggle source
# File lib/fog/aws/cdn.rb, line 55
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 27
def delete_distribution(distribution_id, etag)
  distribution = self.data[:distributions][distribution_id]

  if distribution
    if distribution['ETag'] != etag
      Fog::CDN::AWS::Mock.error(:invalid_if_match_version)
    end
    unless distribution['DistributionConfig']['CallerReference']
      Fog::CDN::AWS::Mock.error(:illegal_update)
    end
    if distribution['DistributionConfig']['Enabled']
      Fog::CDN::AWS::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::CDN::AWS::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 27
def delete_streaming_distribution(distribution_id, etag)
  distribution = self.data[:streaming_distributions][distribution_id]

  if distribution
    if distribution['ETag'] != etag
      Fog::CDN::AWS::Mock.error(:invalid_if_match_version)
    end
    unless distribution['StreamingDistributionConfig']['CallerReference']
      Fog::CDN::AWS::Mock.error(:illegal_update)
    end
    if distribution['StreamingDistributionConfig']['Enabled']
      Fog::CDN::AWS::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::CDN::AWS::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 55
def get_distribution(distribution_id)
  response = Excon::Response.new

  distribution = self.data[:distributions][distribution_id]
  unless distribution
    Fog::CDN::AWS::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::CDN::AWS::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 56
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 37
def get_invalidation(distribution_id, invalidation_id)
  distribution = self.data[:distributions][distribution_id]
  unless distribution
    Fog::CDN::AWS::Mock.error(:no_such_distribution)
  end

  invalidation = self.data[:invalidations][distribution_id][invalidation_id]
  unless invalidation
    Fog::CDN::AWS::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 41
def get_invalidation_list(distribution_id, options = {})
  distribution = self.data[:distributions][distribution_id]
  unless distribution
    Fog::CDN::AWS::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 48
def get_streaming_distribution(distribution_id)
  response = Excon::Response.new

  distribution = self.data[:streaming_distributions][distribution_id]
  unless distribution
    Fog::CDN::AWS::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::CDN::AWS::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 56
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 92
def post_distribution(options = {})
  if self.data[:distributions].values.any? { |d| (d['CNAME'] & (options['CNAME']||[])).empty? }
    Fog::CDN::AWS::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::CDN::AWS::Mock.distribution_id

  distribution = {
    'DomainName' => Fog::CDN::AWS::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 48
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
post_streaming_distribution(options = {}) click to toggle source
# File lib/fog/aws/requests/cdn/post_streaming_distribution.rb, line 80
def post_streaming_distribution(options = {})
  if self.data[:streaming_distributions].values.any? { |d| (d['CNAME'] & (options['CNAME']||[])).empty? }
    Fog::CDN::AWS::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::CDN::AWS::Mock.distribution_id

  distribution = {
    'DomainName' => Fog::CDN::AWS::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 93
def put_distribution_config(distribution_id, etag, options = {})
  distribution = self.data[:distributions][distribution_id]

  if distribution
    if distribution['ETag'] != etag
      Fog::CDN::AWS::Mock.error(:invalid_if_match_version)
    end
    unless distribution['DistributionConfig']['CallerReference']
      Fog::CDN::AWS::Mock.error(:illegal_update)
    end

    distribution['DistributionConfig'].merge!(options)
    distribution['Status'] = 'InProgress'

    response = Excon::Response.new
    response.status = 200
    response.headers['ETag'] = Fog::CDN::AWS::Mock.generic_id
    response.body = distribution.merge({ 'LastModifiedTime' => Time.now.utc.iso8601 }).reject{ |k,v| k == 'ETag' }
    response
  else
    Fog::CDN::AWS::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 82
def put_streaming_distribution_config(distribution_id, etag, options = {})
  distribution = self.data[:streaming_distributions][distribution_id]

  if distribution
    if distribution['ETag'] != etag
      Fog::CDN::AWS::Mock.error(:invalid_if_match_version)
    end
    unless distribution['StreamingDistributionConfig']['CallerReference']
      Fog::CDN::AWS::Mock.error(:illegal_update)
    end

    distribution['StreamingDistributionConfig'].merge!(options)
    distribution['Status'] = 'InProgress'

    response = Excon::Response.new
    response.status = 200
    response.headers['ETag'] = Fog::CDN::AWS::Mock.generic_id
    response.body = distribution.merge({ 'LastModifiedTime' => Time.now.utc.iso8601 }).reject{ |k,v| k == 'ETag' }
    response
  else
    Fog::CDN::AWS::Mock.error(:no_such_streaming_distribution)
  end
end
reset_data() click to toggle source
# File lib/fog/aws/cdn.rb, line 59
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 67
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 63
def signature(params)
  "foo"
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.