class Fog::DNS::Google::Mock

Public Class Methods

data(_api_version) click to toggle source
# File lib/fog/dns/google/mock.rb, line 11
def self.data(_api_version)
  @data ||= {}
end
new(options) click to toggle source
# File lib/fog/dns/google/mock.rb, line 7
def initialize(options)
  shared_initialize(options[:google_project], GOOGLE_DNS_API_VERSION, GOOGLE_DNS_BASE_URL)
end
reset() click to toggle source
# File lib/fog/dns/google/mock.rb, line 15
def self.reset
  @data = nil
end

Public Instance Methods

create_change(zone_name_or_id, additions = [], deletions = []) click to toggle source
# File lib/fog/dns/google/requests/create_change.rb, line 26
def create_change(zone_name_or_id, additions = [], deletions = [])
  if data[:managed_zones].key?(zone_name_or_id)
    zone = data[:managed_zones][zone_name_or_id]
  else
    zone = data[:managed_zones].values.detect { |z| z["name"] = zone_name_or_id }
  end

  unless zone
    raise Fog::Errors::NotFound, "The 'parameters.managedZone' resource named '#{zone_name_or_id}' does not exist."
  end

  deletions.each do |del|
    rrset = data[:resource_record_sets][zone["id"]].reject! { |r| r["name"] == del["name"] && r["type"] == del["type"] }
    unless rrset
      raise Fog::Errors::NotFound, "The 'entity.change.deletions[0]' resource named '#{del['name']} ('#{del['type']})' does not exist."
    end
  end

  additions.each do |add|
    data[:resource_record_sets][zone["id"]] << add
  end

  id = data[:changes][zone["id"]].max_by { |c| c["id"] }["id"]
  data = {
    "kind" => 'dns#change',
    "id" => (id.to_i + 1).to_s,
    "startTime" => DateTime.now.strftime("%FT%T.%LZ"),
    "status" => "done",
    "additions" => additions,
    "deletions" => deletions
  }
  self.data[:changes][zone["id"]] << data

  build_excon_response(data)
end
create_managed_zone(name, dns_name, description) click to toggle source
# File lib/fog/dns/google/requests/create_managed_zone.rb, line 27
def create_managed_zone(name, dns_name, description)
  id = Fog::Mock.random_numbers(19).to_s
  data = {
    "kind" => 'dns#managedZone',
    "id" => id,
    "creationTime" => DateTime.now.strftime("%FT%T.%LZ"),
    "name" => name,
    "dnsName" => dns_name,
    "description" => description,
    "nameServers" => [
      "ns-cloud-e1.googledomains.com.",
      "ns-cloud-e2.googledomains.com.",
      "ns-cloud-e3.googledomains.com.",
      "ns-cloud-e4.googledomains.com."
    ]
  }
  self.data[:managed_zones][id] = data
  self.data[:resource_record_sets][id] = [
    {
      "kind" => 'dns#resourceRecordSet',
      "name" => dns_name,
      "type" => "NS",
      "ttl" => 21_600,
      "rrdatas" => [
        "ns-cloud-c1.googledomains.com.",
        "ns-cloud-c2.googledomains.com.",
        "ns-cloud-c3.googledomains.com.",
        "ns-cloud-c4.googledomains.com."
      ]
    },
    {
      "kind" => 'dns#resourceRecordSet',
      "name" => dns_name,
      "type" => "SOA",
      "ttl" => 21_600,
      "rrdatas" => [
        "ns-cloud-c1.googledomains.com. dns-admin.google.com. 0 21600 3600 1209600 300"
      ]
    }
  ]
  self.data[:changes][id] = [
    {
      "kind" => 'dns#change',
      "id" => "0",
      "startTime" => DateTime.now.strftime("%FT%T.%LZ"),
      "status" => "done",
      "additions" => self.data[:resource_record_sets][id]
    }
  ]

  build_excon_response(data)
end
data(project = @project) click to toggle source
# File lib/fog/dns/google/mock.rb, line 19
def data(project = @project)
  self.class.data(api_version)[project] ||= {
    :managed_zones => {},
    :resource_record_sets => {},
    :changes => {}
  }
end
delete_managed_zone(name_or_id) click to toggle source
# File lib/fog/dns/google/requests/delete_managed_zone.rb, line 21
def delete_managed_zone(name_or_id)
  if data[:managed_zones].key?(name_or_id)
    data[:managed_zones].delete(name_or_id)
  elsif zone = data[:managed_zones].values.detect { |z| z["name"] = name_or_id }
    data[:managed_zones].delete(zone["id"])
  else
    raise Fog::Errors::NotFound, "The 'parameters.managedZone' resource named '#{name_or_id}' does not exist."
  end

  build_excon_response(nil)
end
get_change(zone_name_or_id, identity) click to toggle source
# File lib/fog/dns/google/requests/get_change.rb, line 22
def get_change(zone_name_or_id, identity)
  if data[:managed_zones].key?(zone_name_or_id)
    zone = data[:managed_zones][zone_name_or_id]
  else
    zone = data[:managed_zones].values.detect { |z| z["name"] = zone_name_or_id }
  end

  unless zone
    raise Fog::Errors::NotFound, "The 'parameters.managedZone' resource named '#{zone_name_or_id}' does not exist."
  end

  unless data = self.data[:changes][zone["id"]].detect { |c| c["id"] == identity }
    raise Fog::Errors::NotFound, "The 'parameters.changeId' resource named '#{identity}' does not exist."
  end

  build_excon_response(data)
end
get_managed_zone(name_or_id) click to toggle source
# File lib/fog/dns/google/requests/get_managed_zone.rb, line 21
def get_managed_zone(name_or_id)
  if data[:managed_zones].key?(name_or_id)
    data = self.data[:managed_zones][name_or_id]
  else
    data = self.data[:managed_zones].values.detect { |zone| zone["name"] = name_or_id }
  end

  unless data
    raise Fog::Errors::NotFound, "The 'parameters.managedZone' resource named '#{name_or_id}' does not exist."
  end

  build_excon_response(data)
end
get_project(identity) click to toggle source
# File lib/fog/dns/google/requests/get_project.rb, line 21
def get_project(identity)
  body = {
    "kind" => 'dns#project',
    "number" => Fog::Mock.random_numbers(12).to_s,
    "id" => identity,
    "quota" => {
      "kind" => 'dns#quota',
      "managedZones" => 100,
      "rrsetsPerManagedZone" => 10_000,
      "rrsetAdditionsPerChange" => 100,
      "rrsetDeletionsPerChange" => 100,
      "totalRrdataSizePerChange" => 10_000,
      "resourceRecordsPerRrset" => 20
    }
  }

  build_excon_response(body)
end
list_changes(zone_name_or_id) click to toggle source
# File lib/fog/dns/google/requests/list_changes.rb, line 21
def list_changes(zone_name_or_id)
  if data[:managed_zones].key?(zone_name_or_id)
    zone = data[:managed_zones][zone_name_or_id]
  else
    zone = data[:managed_zones].values.detect { |z| z["name"] == zone_name_or_id }
  end

  unless zone
    raise Fog::Errors::NotFound, "The 'parameters.managedZone' resource named '#{zone_name_or_id}' does not exist."
  end

  body = {
    "kind" => 'dns#changesListResponse',
    "changes" => data[:changes][zone["id"]]
  }
  build_excon_response(body)
end
list_managed_zones() click to toggle source
# File lib/fog/dns/google/requests/list_managed_zones.rb, line 20
def list_managed_zones
  body = {
    "kind" => 'dns#managedZonesListResponse',
    "managedZones" => data[:managed_zones].values
  }

  build_excon_response(body)
end
list_resource_record_sets(zone_name_or_id, options = {}) click to toggle source
# File lib/fog/dns/google/requests/list_resource_record_sets.rb, line 25
def list_resource_record_sets(zone_name_or_id, options = {})
  if data[:managed_zones].key?(zone_name_or_id)
    zone = data[:managed_zones][zone_name_or_id]
  else
    zone = data[:managed_zones].values.detect { |z| z["name"] = zone_name_or_id }
  end

  unless zone
    raise Fog::Errors::NotFound, "The 'parameters.managedZone' resource named '#{zone_name_or_id}' does not exist."
  end

  rrsets = data[:resource_record_sets][zone["id"]]
  if options.key?(:name) && options.key?(:type)
    rrsets.delete_if { |rrset| rrset["name"] != options[:name] || rrset["type"] != options[:type] }
  end

  body = {
    "kind" => 'dns#resourceRecordSetsListResponse',
    "rrsets" => rrsets
  }
  build_excon_response(body)
end
reset_data() click to toggle source
# File lib/fog/dns/google/mock.rb, line 27
def reset_data
  self.class.data(api_version).delete(@project)
end