smart_proxy_dns_powerdns 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,115 +1,185 @@
1
1
  require 'test_helper'
2
2
 
3
- require 'smart_proxy_dns_powerdns/dns_powerdns_plugin'
4
3
  require 'smart_proxy_dns_powerdns/dns_powerdns_main'
5
4
 
6
5
  class DnsPowerdnsRecordTest < Test::Unit::TestCase
7
- # Test that correct initialization works
8
- def test_initialize_dummy_with_settings
9
- Proxy::Dns::Powerdns::Plugin.load_test_settings(:powerdns_pdnssec => 'sudo pdnssec')
10
- provider = klass.new
11
- assert_equal 'sudo pdnssec', provider.pdnssec
6
+ def setup
7
+ @provider = Proxy::Dns::Powerdns::Record.new('localhost', 86400, 'sudo pdnssec')
8
+ end
9
+
10
+ def test_initialize
11
+ assert_equal 86400, @provider.ttl
12
+ assert_equal 'sudo pdnssec', @provider.pdnssec
12
13
  end
13
14
 
14
15
  # Test A record creation
15
16
  def test_create_a
16
- instance = klass.new
17
+ @provider.expects(:a_record_conflicts).with('test.example.com', '10.1.1.1').returns(-1)
18
+ @provider.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
19
+ @provider.expects(:create_record).with(1, 'test.example.com', 'A', '10.1.1.1').returns(true)
20
+ @provider.expects(:rectify_zone).with('example.com').returns(true)
17
21
 
18
- instance.expects(:dns_find).with('test.example.com').returns(false)
19
- instance.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
20
- instance.expects(:create_record).with(1, 'test.example.com', 'A', '10.1.1.1').returns(true)
21
- instance.expects(:rectify_zone).with('example.com').returns(true)
22
+ assert @provider.create_a_record(fqdn, ipv4)
23
+ end
22
24
 
23
- assert instance.create_a_record(fqdn, ip)
25
+ # Test A record creation does nothing if the same record exists
26
+ def test_create_a_duplicate
27
+ @provider.expects(:a_record_conflicts).with('test.example.com', '10.1.1.1').returns(0)
28
+
29
+ assert_equal nil, @provider.create_a_record(fqdn, ipv4)
24
30
  end
25
31
 
26
32
  # Test A record creation fails if the record exists
27
33
  def test_create_a_conflict
28
- instance = klass.new
34
+ @provider.expects(:a_record_conflicts).with('test.example.com', '10.1.1.1').returns(1)
35
+
36
+ assert_raise(Proxy::Dns::Collision) { @provider.create_a_record(fqdn, ipv4) }
37
+ end
38
+
39
+ # Test AAAA record creation
40
+ def test_create_aaaa
41
+ @provider.expects(:aaaa_record_conflicts).with('test.example.com', '2001:db8:1234:abcd::1').returns(-1)
42
+ @provider.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
43
+ @provider.expects(:create_record).with(1, 'test.example.com', 'AAAA', '2001:db8:1234:abcd::1').returns(true)
44
+ @provider.expects(:rectify_zone).with('example.com').returns(true)
45
+
46
+ assert @provider.create_aaaa_record(fqdn, ipv6)
47
+ end
48
+
49
+ # Test AAAA record creation does nothing if the same record exists
50
+ def test_create_aaaa_duplicate
51
+ @provider.expects(:aaaa_record_conflicts).with('test.example.com', '2001:db8:1234:abcd::1').returns(0)
52
+
53
+ assert_equal nil, @provider.create_aaaa_record(fqdn, ipv6)
54
+ end
55
+
56
+ # Test AAAA record creation fails if the record exists
57
+ def test_create_aaaa_conflict
58
+ @provider.expects(:aaaa_record_conflicts).with('test.example.com', '2001:db8:1234:abcd::1').returns(1)
59
+
60
+ assert_raise(Proxy::Dns::Collision) { @provider.create_aaaa_record(fqdn, ipv6) }
61
+ end
62
+
63
+ # Test CNAME record creation
64
+ def test_create_cname
65
+ @provider.expects(:cname_record_conflicts).with('test.example.com', 'something.example.com').returns(-1)
66
+ @provider.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
67
+ @provider.expects(:create_record).with(1, 'test.example.com', 'CNAME', 'something.example.com').returns(true)
68
+ @provider.expects(:rectify_zone).with('example.com').returns(true)
69
+
70
+ assert @provider.create_cname_record(fqdn, 'something.example.com')
71
+ end
72
+
73
+ # Test CNAME record creation does nothing if the same record exists
74
+ def test_create_cname_duplicate
75
+ @provider.expects(:cname_record_conflicts).with('test.example.com', 'something.example.com').returns(0)
29
76
 
30
- instance.expects(:dns_find).with('test.example.com').returns('192.168.1.1')
77
+ assert_equal nil, @provider.create_cname_record(fqdn, 'something.example.com')
78
+ end
79
+
80
+ # Test CNAME record creation fails if the record exists
81
+ def test_create_cname_conflict
82
+ @provider.expects(:cname_record_conflicts).with('test.example.com', 'something.example.com').returns(1)
31
83
 
32
- assert_raise(Proxy::Dns::Collision) { instance.create_a_record(fqdn, ip) }
84
+ assert_raise(Proxy::Dns::Collision) { @provider.create_cname_record(fqdn, 'something.example.com') }
33
85
  end
34
86
 
35
87
  # Test PTR record creation
36
88
  def test_create_ptr
37
- instance = klass.new
89
+ @provider.expects(:ptr_record_conflicts).with('test.example.com', '10.1.1.1').returns(-1)
90
+ @provider.expects(:get_zone).with('1.1.1.10.in-addr.arpa').returns({'id' => 1, 'name' => '1.1.10.in-addr.arpa'})
91
+ @provider.expects(:create_record).with(1, '1.1.1.10.in-addr.arpa', 'PTR', 'test.example.com').returns(true)
92
+ @provider.expects(:rectify_zone).with('1.1.10.in-addr.arpa').returns(true)
38
93
 
39
- instance.expects(:dns_find).with('1.1.1.10.in-addr.arpa').returns(false)
40
- instance.expects(:get_zone).with('1.1.1.10.in-addr.arpa').returns({'id' => 1, 'name' => '1.1.10.in-addr.arpa'})
41
- instance.expects(:create_record).with(1, '1.1.1.10.in-addr.arpa', 'PTR', 'test.example.com').returns(true)
42
- instance.expects(:rectify_zone).with('1.1.10.in-addr.arpa').returns(true)
94
+ assert @provider.create_ptr_record(fqdn, reverse_ipv4)
95
+ end
43
96
 
44
- assert instance.create_ptr_record(fqdn, reverse_ip)
97
+ # Test PTR record creation does nothing if the same record exists
98
+ def test_create_ptr_duplicate
99
+ @provider.expects(:ptr_record_conflicts).with('test.example.com', '10.1.1.1').returns(0)
100
+
101
+ assert_equal nil, @provider.create_ptr_record(fqdn, reverse_ipv4)
45
102
  end
46
103
 
47
104
  # Test PTR record creation fails if the record exists
48
105
  def test_create_ptr_conflict
49
- instance = klass.new
106
+ @provider.expects(:ptr_record_conflicts).with('test.example.com', '10.1.1.1').returns(1)
107
+
108
+ assert_raise(Proxy::Dns::Collision) { @provider.create_ptr_record(fqdn, reverse_ipv4) }
109
+ end
50
110
 
51
- instance.expects(:dns_find).with('1.1.1.10.in-addr.arpa').returns('test2.example.com')
111
+ # Test PTR record creation
112
+ def test_create_ptr_ipv6
113
+ @provider.expects(:ptr_record_conflicts).with('test.example.com', '2001:0db8:1234:abcd:0000:0000:0000:0001').returns(-1)
114
+ @provider.expects(:get_zone).with('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa').returns({'id' => 1, 'name' => 'd.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa'})
115
+ @provider.expects(:create_record).with(1, '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa', 'PTR', 'test.example.com').returns(true)
116
+ @provider.expects(:rectify_zone).with('d.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa').returns(true)
52
117
 
53
- assert_raise(Proxy::Dns::Collision) { instance.create_ptr_record(fqdn, reverse_ip) }
118
+ assert @provider.create_ptr_record(fqdn, reverse_ipv6)
54
119
  end
55
120
 
56
121
  # Test A record removal
57
122
  def test_remove_a
58
- instance = klass.new
59
-
60
- instance.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
61
- instance.expects(:delete_record).with(1, 'test.example.com', 'A').returns(true)
62
- instance.expects(:rectify_zone).with('example.com').returns(true)
123
+ @provider.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
124
+ @provider.expects(:delete_record).with(1, 'test.example.com', 'A').returns(true)
125
+ @provider.expects(:rectify_zone).with('example.com').returns(true)
63
126
 
64
- assert instance.remove_a_record(fqdn)
127
+ assert @provider.remove_a_record(fqdn)
65
128
  end
66
129
 
67
130
  # Test PTR record removal
68
- def test_remove_ptr
69
- instance = klass.new
131
+ def test_remove_ptr_ipv4
132
+ @provider.expects(:get_zone).with('1.1.1.10.in-addr.arpa').returns({'id' => 1, 'name' => '1.1.10.in-addr.arpa'})
133
+ @provider.expects(:delete_record).with(1, '1.1.1.10.in-addr.arpa', 'PTR').returns(true)
134
+ @provider.expects(:rectify_zone).with('1.1.10.in-addr.arpa').returns(true)
70
135
 
71
- instance.expects(:get_zone).with('1.1.1.10.in-addr.arpa').returns({'id' => 1, 'name' => '1.1.10.in-addr.arpa'})
72
- instance.expects(:delete_record).with(1, '1.1.1.10.in-addr.arpa', 'PTR').returns(true)
73
- instance.expects(:rectify_zone).with('1.1.10.in-addr.arpa').returns(true)
136
+ assert @provider.remove_ptr_record(reverse_ipv4)
137
+ end
74
138
 
75
- assert instance.remove_ptr_record(reverse_ip)
139
+ # Test PTR record removal
140
+ def test_remove_ptr_ipv6
141
+ @provider.expects(:get_zone).with('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa').returns({'id' => 1, 'name' => 'd.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa'})
142
+ @provider.expects(:delete_record).with(1, '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa', 'PTR').returns(true)
143
+ @provider.expects(:rectify_zone).with('d.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa').returns(true)
144
+
145
+ assert @provider.remove_ptr_record(reverse_ipv6)
76
146
  end
77
147
 
78
148
  def test_do_create
79
- instance = klass.new
80
-
81
- instance.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
82
- instance.expects(:create_record).with(1, 'test.example.com', 'A', '10.1.1.1').returns(true)
83
- instance.expects(:rectify_zone).with('example.com').returns(true)
149
+ @provider.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
150
+ @provider.expects(:create_record).with(1, 'test.example.com', 'A', '10.1.1.1').returns(true)
151
+ @provider.expects(:rectify_zone).with('example.com').returns(true)
84
152
 
85
- assert instance.do_create('test.example.com', '10.1.1.1', 'A')
153
+ assert @provider.do_create('test.example.com', '10.1.1.1', 'A')
86
154
  end
87
155
 
88
156
  def test_do_remove
89
- instance = klass.new
90
-
91
- instance.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
92
- instance.expects(:delete_record).with(1, 'test.example.com', 'A').returns(true)
93
- instance.expects(:rectify_zone).with('example.com').returns(true)
157
+ @provider.expects(:get_zone).with('test.example.com').returns({'id' => 1, 'name' => 'example.com'})
158
+ @provider.expects(:delete_record).with(1, 'test.example.com', 'A').returns(true)
159
+ @provider.expects(:rectify_zone).with('example.com').returns(true)
94
160
 
95
- assert instance.do_remove('test.example.com', 'A')
161
+ assert @provider.do_remove('test.example.com', 'A')
96
162
  end
97
163
 
98
164
  private
99
165
 
100
- def klass
101
- Proxy::Dns::Powerdns::Record
102
- end
103
-
104
166
  def fqdn
105
167
  'test.example.com'
106
168
  end
107
169
 
108
- def ip
170
+ def ipv4
109
171
  '10.1.1.1'
110
172
  end
111
173
 
112
- def reverse_ip
174
+ def reverse_ipv4
113
175
  '1.1.1.10.in-addr.arpa'
114
176
  end
177
+
178
+ def ipv6
179
+ '2001:db8:1234:abcd::1'
180
+ end
181
+
182
+ def reverse_ipv6
183
+ '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.c.b.a.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa'
184
+ end
115
185
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_proxy_dns_powerdns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ewoud Kohl van Wijngaarden
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-27 00:00:00.000000000 Z
11
+ date: 2017-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -81,20 +81,25 @@ files:
81
81
  - lib/smart_proxy_dns_powerdns/backend/dummy.rb
82
82
  - lib/smart_proxy_dns_powerdns/backend/mysql.rb
83
83
  - lib/smart_proxy_dns_powerdns/backend/postgresql.rb
84
- - lib/smart_proxy_dns_powerdns/dependencies.rb
85
- - lib/smart_proxy_dns_powerdns/dns_powerdns_configuration_validator.rb
84
+ - lib/smart_proxy_dns_powerdns/backend/rest.rb
85
+ - lib/smart_proxy_dns_powerdns/dns_powerdns_configuration.rb
86
86
  - lib/smart_proxy_dns_powerdns/dns_powerdns_main.rb
87
87
  - lib/smart_proxy_dns_powerdns/dns_powerdns_plugin.rb
88
88
  - lib/smart_proxy_dns_powerdns/dns_powerdns_version.rb
89
+ - test/config/smart-proxy-settings.d/dns.yml
90
+ - test/config/smart-proxy-settings.d/dns_powerdns.yml
91
+ - test/config/smart-proxy-settings.yml
89
92
  - test/integration/integration_test.rb
90
93
  - test/test_helper.rb
91
- - test/unit/dns_powerdns_configuration_validator_test.rb
94
+ - test/unit/dns_powerdns_configuration_test.rb
95
+ - test/unit/dns_powerdns_record_dummy_test.rb
92
96
  - test/unit/dns_powerdns_record_mysql_test.rb
93
97
  - test/unit/dns_powerdns_record_postgresql_test.rb
98
+ - test/unit/dns_powerdns_record_rest_test.rb
94
99
  - test/unit/dns_powerdns_record_test.rb
95
100
  homepage: https://github.com/theforeman/smart_proxy_dns_powerdns
96
101
  licenses:
97
- - GPLv3
102
+ - GPL-3.0
98
103
  metadata: {}
99
104
  post_install_message:
100
105
  rdoc_options: []
@@ -112,14 +117,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
117
  version: '0'
113
118
  requirements: []
114
119
  rubyforge_project:
115
- rubygems_version: 2.2.5
120
+ rubygems_version: 2.6.8
116
121
  signing_key:
117
122
  specification_version: 4
118
123
  summary: PowerDNS DNS provider plugin for Foreman's smart proxy
119
124
  test_files:
120
- - test/test_helper.rb
121
125
  - test/integration/integration_test.rb
122
- - test/unit/dns_powerdns_record_postgresql_test.rb
123
- - test/unit/dns_powerdns_configuration_validator_test.rb
126
+ - test/unit/dns_powerdns_configuration_test.rb
124
127
  - test/unit/dns_powerdns_record_mysql_test.rb
128
+ - test/unit/dns_powerdns_record_rest_test.rb
125
129
  - test/unit/dns_powerdns_record_test.rb
130
+ - test/unit/dns_powerdns_record_dummy_test.rb
131
+ - test/unit/dns_powerdns_record_postgresql_test.rb
132
+ - test/config/smart-proxy-settings.d/dns.yml
133
+ - test/config/smart-proxy-settings.d/dns_powerdns.yml
134
+ - test/config/smart-proxy-settings.yml
135
+ - test/test_helper.rb
@@ -1,15 +0,0 @@
1
- require 'dns_common/dependency_injection/dependencies'
2
-
3
- class Proxy::Dns::DependencyInjection::Dependencies
4
- case Proxy::Dns::Powerdns::Plugin.settings.powerdns_backend
5
- when 'mysql'
6
- require 'smart_proxy_dns_powerdns/backend/mysql'
7
- dependency :dns_provider, Proxy::Dns::Powerdns::Backend::Mysql
8
- when 'postgresql'
9
- require 'smart_proxy_dns_powerdns/backend/postgresql'
10
- dependency :dns_provider, Proxy::Dns::Powerdns::Backend::Postgresql
11
- when 'dummy'
12
- require 'smart_proxy_dns_powerdns/backend/dummy'
13
- dependency :dns_provider, Proxy::Dns::Powerdns::Backend::Dummy
14
- end
15
- end
@@ -1,32 +0,0 @@
1
- require 'smart_proxy_dns_powerdns/dns_powerdns_plugin'
2
-
3
- module Proxy::Dns::Powerdns
4
- class ConfigurationValidator
5
- def validate_settings!(settings)
6
- validate_choice(settings, :powerdns_backend, ['mysql', 'postgresql', 'dummy'])
7
-
8
- case settings.powerdns_backend
9
- when 'mysql'
10
- validate_presence(settings, [:powerdns_mysql_username, :powerdns_mysql_password, :powerdns_mysql_database])
11
- when 'postgresql'
12
- validate_presence(settings, [:powerdns_postgresql_connection])
13
- end
14
- end
15
-
16
- def validate_choice(settings, setting, choices)
17
- value = settings.send(setting)
18
- unless choices.include?(value)
19
- raise ::Proxy::Error::ConfigurationError, "Parameter '#{setting}' is expected to be one of #{choices.join(",")}"
20
- end
21
- true
22
- end
23
-
24
- def validate_presence(settings, names)
25
- names.each do |name|
26
- value = settings.send(name)
27
- raise ::Proxy::Error::ConfigurationError, "Parameter '#{name}' is expected to have a non-empty value" if value.nil? || value.to_s.empty?
28
- end
29
- true
30
- end
31
- end
32
- end
@@ -1,78 +0,0 @@
1
- require 'test_helper'
2
- require 'ostruct'
3
-
4
- require 'smart_proxy_dns_powerdns/dns_powerdns_plugin'
5
- require 'smart_proxy_dns_powerdns/dns_powerdns_configuration_validator'
6
-
7
- class DnsPowerdnsConfigurationValidatorTest < Test::Unit::TestCase
8
- def setup
9
- @config_validator = Proxy::Dns::Powerdns::ConfigurationValidator.new
10
- end
11
-
12
- def test_initialize_missing_backend
13
- settings = OpenStruct.new(:dns_provider => 'powerdns', :powerdns_backend => nil)
14
-
15
- assert_raise Proxy::Error::ConfigurationError do
16
- @config_validator.validate_settings!(settings)
17
- end
18
- end
19
-
20
- def test_initialize_invalid_backend
21
- settings = OpenStruct.new(:dns_provider => 'powerdns', :powerdns_backend => 'invalid')
22
-
23
- assert_raise Proxy::Error::ConfigurationError do
24
- @config_validator.validate_settings!(settings)
25
- end
26
- end
27
-
28
- def test_initialize_dummy_with_settings
29
- settings = OpenStruct.new(:dns_provider => 'powerdns', :powerdns_backend => 'dummy')
30
-
31
- assert_nothing_raised do
32
- @config_validator.validate_settings!(settings)
33
- end
34
- end
35
-
36
- def test_initialize_mysql_without_settings
37
- settings = OpenStruct.new(:dns_provider => 'powerdns', :powerdns_backend => 'mysql')
38
-
39
- assert_raise Proxy::Error::ConfigurationError do
40
- @config_validator.validate_settings!(settings)
41
- end
42
- end
43
-
44
- def test_initialize_mysql_with_settings
45
- settings = OpenStruct.new(
46
- :dns_provider => 'powerdns',
47
- :powerdns_backend => 'mysql',
48
- :powerdns_mysql_hostname => 'localhost',
49
- :powerdns_mysql_username => 'username',
50
- :powerdns_mysql_password => 'password',
51
- :powerdns_mysql_database => 'powerdns'
52
- )
53
-
54
- assert_nothing_raised do
55
- @config_validator.validate_settings!(settings)
56
- end
57
- end
58
-
59
- def test_initialize_postgresql_without_settings
60
- settings = OpenStruct.new(:dns_provider => 'powerdns', :powerdns_backend => 'postgresql')
61
-
62
- assert_raise Proxy::Error::ConfigurationError do
63
- @config_validator.validate_settings!(settings)
64
- end
65
- end
66
-
67
- def test_initialize_postgresql_with_settings
68
- settings = OpenStruct.new(
69
- :dns_provider => 'powerdns',
70
- :powerdns_backend => 'postgresql',
71
- :powerdns_postgresql_connection => 'dbname=powerdns'
72
- )
73
-
74
- assert_nothing_raised do
75
- @config_validator.validate_settings!(settings)
76
- end
77
- end
78
- end