mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Merge pull request #551 from mogotest/implement_zerigo_mocks
Implemented mocks for Zerigo.
This commit is contained in:
commit
0cba13b70e
16 changed files with 352 additions and 16 deletions
|
@ -34,7 +34,7 @@ module Fog
|
||||||
|
|
||||||
def self.data
|
def self.data
|
||||||
@data ||= Hash.new do |hash, key|
|
@data ||= Hash.new do |hash, key|
|
||||||
hash[key] = {}
|
hash[key] = key == :zones ? [] : {}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -48,13 +48,24 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
def data
|
def data
|
||||||
self.class.data[@zerigo_email]
|
self.class.data
|
||||||
end
|
end
|
||||||
|
|
||||||
def reset_data
|
def reset_data
|
||||||
self.class.data.delete(@zerigo_email)
|
self.class.reset
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def find_by_zone_id(zone_id)
|
||||||
|
self.data[:zones].find { |z| z['id'] == zone_id }
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_by_domain(domain)
|
||||||
|
self.data[:zones].find { |z| z['domain'] == domain }
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_host(host_id)
|
||||||
|
self.data[:zones].collect { |z| z['hosts'].find { |h| h['id'] == host_id } }.compact.first
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Real
|
class Real
|
||||||
|
|
|
@ -14,8 +14,8 @@ module Fog
|
||||||
load(data)
|
load(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
def get(zone_id)
|
def get(zone_id_or_domain)
|
||||||
data = connection.get_zone(zone_id).body
|
data = connection.get_zone(zone_id_or_domain).body
|
||||||
zone = new(data)
|
zone = new(data)
|
||||||
zone.records.load(data['hosts'])
|
zone.records.load(data['hosts'])
|
||||||
zone
|
zone
|
||||||
|
|
|
@ -23,6 +23,25 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def count_hosts(zone_id)
|
||||||
|
zone = find_by_zone_id(zone_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if zone
|
||||||
|
response.status = 200
|
||||||
|
response.body = {
|
||||||
|
'count' => zone['hosts'].size
|
||||||
|
}
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,7 +13,7 @@ module Fog
|
||||||
# * body<~Hash>
|
# * body<~Hash>
|
||||||
# * 'count'<~Integer>
|
# * 'count'<~Integer>
|
||||||
# * 'status'<~Integer> - 200 indicates success
|
# * 'status'<~Integer> - 200 indicates success
|
||||||
def count_zones()
|
def count_zones
|
||||||
request(
|
request(
|
||||||
:expects => 200,
|
:expects => 200,
|
||||||
:method => 'GET',
|
:method => 'GET',
|
||||||
|
@ -23,6 +23,17 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def count_zones
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
response.status = 200
|
||||||
|
response.body = { 'count' => self.data[:zones].size }
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,7 +11,7 @@ module Fog
|
||||||
# * zone_id<~Integer>
|
# * zone_id<~Integer>
|
||||||
# * host_type<~String>
|
# * host_type<~String>
|
||||||
# * data<~String>
|
# * data<~String>
|
||||||
# * options<~Hash> - optional paramaters
|
# * options<~Hash> - optional parameters
|
||||||
# * hostname<~String> - Note: normally this is set/required!!
|
# * hostname<~String> - Note: normally this is set/required!!
|
||||||
# * notes<~String>
|
# * notes<~String>
|
||||||
# * priority<~Integer> - Note: required for MX or SRV records
|
# * priority<~Integer> - Note: required for MX or SRV records
|
||||||
|
@ -57,6 +57,72 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def valid_host_types
|
||||||
|
%w[A AAAA CNAME GEO MX NS SPF SRV TXT URL PTR CNAME NS]
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_host(zone_id, host_type, data, options = {})
|
||||||
|
zone = find_by_zone_id(zone_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
# Handle error cases.
|
||||||
|
|
||||||
|
# Zone doesn't exist.
|
||||||
|
unless zone
|
||||||
|
response.status = 404
|
||||||
|
return response
|
||||||
|
end
|
||||||
|
|
||||||
|
# Bad host type.
|
||||||
|
unless valid_host_types.include?(host_type)
|
||||||
|
response.status = 422
|
||||||
|
response.body = {
|
||||||
|
'errors' => [
|
||||||
|
'error' => 'Host type is not included in the list'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
return response
|
||||||
|
end
|
||||||
|
|
||||||
|
# Missing or bad priority value for MX or SRV records.
|
||||||
|
if %w[MX SRV].include?(host_type) && options['priority'].to_s !~ /\d+/
|
||||||
|
response.status = 422
|
||||||
|
response.body = {
|
||||||
|
'errors' => [
|
||||||
|
'error' => 'Priority is not a number'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
return response
|
||||||
|
end
|
||||||
|
|
||||||
|
# Successful case.
|
||||||
|
now = Time.now
|
||||||
|
host = {
|
||||||
|
'id' => rand(10000000),
|
||||||
|
'fqdn' => options[:hostname] ? "#{options[:hostname]}.#{zone['domain']}" : zone['domain'],
|
||||||
|
'data' => data,
|
||||||
|
'hostname' => options[:hostname],
|
||||||
|
'ttl' => options[:ttl].to_i,
|
||||||
|
'host-type' => host_type,
|
||||||
|
'created-at' => now,
|
||||||
|
'updated-at' => now,
|
||||||
|
'notes' => options[:notes],
|
||||||
|
'priority' => options[:priority].to_i,
|
||||||
|
'zone-id' => zone_id
|
||||||
|
}
|
||||||
|
|
||||||
|
zone['hosts'] << host
|
||||||
|
response.status = 201
|
||||||
|
response.body = host
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -84,6 +84,49 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def create_zone(domain, default_ttl, ns_type, options = {})
|
||||||
|
now = Time.now
|
||||||
|
zone = {
|
||||||
|
'id' => rand(10000000),
|
||||||
|
'domain' => domain,
|
||||||
|
'created-at' => now,
|
||||||
|
'updated-at' => now,
|
||||||
|
'ns1' => options[:ns1],
|
||||||
|
'nx-ttl' => options[:nx_ttl].to_i,
|
||||||
|
'default-ttl' => default_ttl.to_i,
|
||||||
|
'ns-type' => ns_type,
|
||||||
|
'hosts' => options[:hosts] || [],
|
||||||
|
'hosts-count' => (options[:hosts] || []).size,
|
||||||
|
'notes' => options[:notes],
|
||||||
|
'slave-nameservers' => options[:slave_nameservers],
|
||||||
|
'tag-list' => options[:tag_list]
|
||||||
|
}
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if self.data[:zones].any? {|z| z['domain'] == zone['domain'] }
|
||||||
|
response.status = 422
|
||||||
|
response.body = {
|
||||||
|
'errors' => [
|
||||||
|
'error' => 'Domain is already associated to another account',
|
||||||
|
'error' => 'Domain already exists. If it was just deleted, wait a minute and try again'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
self.data[:zones] << zone
|
||||||
|
|
||||||
|
response.status = 201
|
||||||
|
response.headers = { 'Location' => "http://ns.zerigo.com/api/1.1/zones/#{zone['id']}" }
|
||||||
|
response.body = zone['hosts'].empty? ? zone.merge(:hosts => nil) : zone # Zerigo returns nil, not an empty list only on the create command.
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,6 +19,25 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def delete_host(host_id)
|
||||||
|
host = find_host(host_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if host
|
||||||
|
zone = find_by_zone_id(host['zone-id'])
|
||||||
|
zone['hosts'].delete(host)
|
||||||
|
|
||||||
|
response.status = 200
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,6 +20,23 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def delete_zone(zone_id)
|
||||||
|
zone = find_by_zone_id(zone_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if zone
|
||||||
|
self.data[:zones].delete(zone)
|
||||||
|
response.status = 200
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -50,6 +50,27 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def find_hosts(fqdn, zone_id = nil)
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
zone = find_by_zone_id(zone_id)
|
||||||
|
if zone_id && !zone
|
||||||
|
response.status = 404
|
||||||
|
else
|
||||||
|
hosts = zone ? zone['hosts'].select { |z| z['fqdn'] == fqdn } :
|
||||||
|
self.data[:zones].collect { |z| z['hosts'].find { |h| h['fqdn'] == fqdn } }.compact
|
||||||
|
|
||||||
|
response.status = 200
|
||||||
|
response.body = {
|
||||||
|
'hosts' => hosts
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,6 +34,23 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def get_host(host_id)
|
||||||
|
host = find_host(host_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if host
|
||||||
|
response.status = 200
|
||||||
|
response.body = host
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,16 +34,33 @@ module Fog
|
||||||
# * 'restrict-axfr'<~String>
|
# * 'restrict-axfr'<~String>
|
||||||
# * 'status'<~Integer> - 200 indicates success
|
# * 'status'<~Integer> - 200 indicates success
|
||||||
|
|
||||||
def get_zone(zone)
|
def get_zone(zone_id_or_domain)
|
||||||
request(
|
request(
|
||||||
:expects => 200,
|
:expects => 200,
|
||||||
:method => 'GET',
|
:method => 'GET',
|
||||||
:parser => Fog::Parsers::DNS::Zerigo::GetZone.new,
|
:parser => Fog::Parsers::DNS::Zerigo::GetZone.new,
|
||||||
:path => "/api/1.1/zones/#{zone}.xml"
|
:path => "/api/1.1/zones/#{zone_id_or_domain}.xml"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def get_zone(zone_id_or_domain)
|
||||||
|
zone = find_by_zone_id(zone_id_or_domain) || find_by_domain(zone_id_or_domain)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if zone
|
||||||
|
response.status = 200
|
||||||
|
response.body = zone
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,6 +31,29 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def get_zone_stats(zone_id)
|
||||||
|
zone = find_by_zone_id(zone_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if zone
|
||||||
|
response.status = 200
|
||||||
|
response.body = {
|
||||||
|
'id' => zone,
|
||||||
|
'domain' => zone['domain'],
|
||||||
|
'period-begin' => zone['created-at'].strftime("%F"),
|
||||||
|
'period-end' => Date.today.to_s,
|
||||||
|
'queries' => 0
|
||||||
|
}
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,6 +35,25 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def list_hosts(zone_id)
|
||||||
|
zone = find_by_zone_id(zone_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if zone
|
||||||
|
response.status = 200
|
||||||
|
response.body = {
|
||||||
|
'hosts' => zone['hosts']
|
||||||
|
}
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -40,6 +40,21 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
|
||||||
|
def list_zones
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
response.status = 200
|
||||||
|
response.body = {
|
||||||
|
'zones' => self.data[:zones]
|
||||||
|
}
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -47,6 +47,25 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def update_host(host_id, options = {})
|
||||||
|
host = find_host(host_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if host
|
||||||
|
options.each { |k, v| host[k.to_s] = v } # Deal with symbols in requests but strings in responses.
|
||||||
|
host['updated-at'] = Time.now
|
||||||
|
|
||||||
|
response.status = 200
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -65,6 +65,25 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
def update_zone(zone_id, options = {})
|
||||||
|
zone = find_by_zone_id(zone_id)
|
||||||
|
|
||||||
|
response = Excon::Response.new
|
||||||
|
|
||||||
|
if zone
|
||||||
|
options.each { |k, v| zone[k.to_s] = v } # Deal with symbols in requests but strings in responses.
|
||||||
|
zone['updated-at'] = Time.now
|
||||||
|
|
||||||
|
response.status = 200
|
||||||
|
else
|
||||||
|
response.status = 404
|
||||||
|
end
|
||||||
|
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue