Class: Fog::DNS::Google::Mock

Inherits:
Object
  • Object
show all
Includes:
Google::Shared
Defined in:
lib/fog/dns/google/mock.rb,
lib/fog/dns/google/requests/get_change.rb,
lib/fog/dns/google/requests/get_project.rb,
lib/fog/dns/google/requests/list_changes.rb,
lib/fog/dns/google/requests/create_change.rb,
lib/fog/dns/google/requests/get_managed_zone.rb,
lib/fog/dns/google/requests/list_managed_zones.rb,
lib/fog/dns/google/requests/create_managed_zone.rb,
lib/fog/dns/google/requests/delete_managed_zone.rb,
lib/fog/dns/google/requests/list_resource_record_sets.rb

Instance Attribute Summary

Attributes included from Google::Shared

#api_url, #api_version, #project

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Google::Shared

#build_excon_response, #create_signing_key, #initialize_google_client, #new_pk12_google_client, #request, #shared_initialize

Constructor Details

#initialize(options) ⇒ Mock

Returns a new instance of Mock.



7
8
9
# 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

Class Method Details

.data(_api_version) ⇒ Object



11
12
13
# File 'lib/fog/dns/google/mock.rb', line 11

def self.data(_api_version)
  @data ||= {}
end

.resetObject



15
16
17
# File 'lib/fog/dns/google/mock.rb', line 15

def self.reset
  @data = nil
end

Instance Method Details

#create_change(zone_name_or_id, additions = [], deletions = []) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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) ⇒ Object



19
20
21
22
23
24
25
# 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) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
# 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) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# 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) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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_zonesObject



20
21
22
23
24
25
26
27
# 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 = {}) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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_dataObject



27
28
29
# File 'lib/fog/dns/google/mock.rb', line 27

def reset_data
  self.class.data(api_version).delete(@project)
end