]> git.ipfire.org Git - thirdparty/pdns.git/blob - modules/remotebackend/unittest.rb
Merge pull request #9106 from omoerbeek/release-cycles
[thirdparty/pdns.git] / modules / remotebackend / unittest.rb
1 require 'rubygems'
2 require 'bundler/setup'
3 require 'json'
4
5 # define a simple $domain
6
7 $ttl = 300
8 $notified_serial = 1
9
10 $domain = {
11 "unit.test." => {
12 "SOA" => ["ns.unit.test. hostmaster.unit.test. 1 2 3 4 5"],
13 "NS" => ["ns1.unit.test.", "ns2.unit.test."],
14 },
15 "ns1.unit.test." => {
16 "A" => ["10.0.0.1"]
17 },
18 "ns2.unit.test." => {
19 "A" => ["10.0.0.2"]
20 },
21 "empty.unit.test." => {}
22 }
23
24 $meta = {}
25
26 $keys = {}
27
28 $tsigkeys = { "test." => {:name => "test.", :algorithm => "NULL.", :content => "NULL"} }
29
30 $masters = { :name => "ns1.unit.test.", :ip => "10.0.0.1" }
31
32 class Handler
33 def initialize
34 end
35
36 def rr(qname, qtype, content, ttl, auth = 1, domain_id = -1)
37 {:qname => qname, :qtype => qtype, :content => content, :ttl => ttl.to_i, :auth => auth.to_i, :domain_id => domain_id.to_i}
38 end
39
40 def do_initialize(*args)
41 return true, "Test bench initialized"
42 end
43
44 def do_lookup(args)
45 ret = []
46 if $domain.has_key?(args["qname"])
47 if $domain[args["qname"]].has_key?(args["qtype"])
48 $domain[args["qname"]][args["qtype"]].each do |rd|
49 ret << rr(args["qname"], args["qtype"], rd, $ttl)
50 end
51 elsif args["qtype"] == 'ANY'
52 $domain[args["qname"]].each do |qt,qr|
53 qr.each do |rd|
54 ret << rr(args["qname"], qt, rd, $ttl)
55 end
56 end
57 end
58 end
59 [false] unless ret.size>0 and args["qname"] != "empty.unit.test"
60 [ret]
61 end
62
63 def do_list(args)
64 ret = []
65 if args["zonename"] == "unit.test."
66 $domain.each do |qname,rdata|
67 rdata.each do |rtype,rc|
68 rc.each do |rd|
69 ret << rr(qname,rtype,rd,$ttl)
70 end
71 end
72 end
73 end
74 [false] unless ret.size>0
75 [ret]
76 end
77
78 def do_getalldomainmetadata(args)
79 return [ $meta[args["name"]] ] if $meta.has_key?(args["name"])
80 return [false]
81 end
82
83 def do_getdomainmetadata(args)
84 return [ $meta[args["name"]][args["kind"]] ] if $meta.has_key?(args["name"]) and $meta[args["name"]].has_key?(args["kind"])
85 return [false]
86 end
87
88 def do_setdomainmetadata(args)
89 $meta[args["name"].to_s] = {} unless $meta.has_key? args["name"]
90 $meta[args["name"].to_s][args["kind"].to_s] = args["value"].to_a
91 [true]
92 end
93
94 def do_adddomainkey(args)
95 $keys[args["name"]] = [] unless $keys.has_key? args["name"]
96 id=$keys[args["name"]].size + 1
97 args["key"]["id"] = id
98 $keys[args["name"]] << args["key"]
99 [id]
100 end
101
102 def do_getdomainkeys(args)
103 if $keys.has_key? args["name"]
104 return [ $keys[args["name"]] ]
105 end
106 [false]
107 end
108
109 def do_activatedomainkey(args)
110 args["id"] = args["id"].to_i
111 if $keys.has_key? args["name"]
112 if $keys[args["name"]][args["id"]-1]
113 $keys[args["name"]][args["id"]-1]["active"] = true
114 return [true]
115 end
116 end
117 [false]
118 end
119
120 def do_deactivatedomainkey(args)
121 args["id"] = args["id"].to_i
122 if $keys.has_key? args["name"]
123 if $keys[args["name"]][args["id"]-1]
124 $keys[args["name"]][args["id"]-1]["active"] = false
125 return [true]
126 end
127 end
128 [false]
129 end
130
131 def do_publishdomainkey(args)
132 args["id"] = args["id"].to_i
133 if $keys.has_key? args["name"]
134 if $keys[args["name"]][args["id"]-1]
135 $keys[args["name"]][args["id"]-1]["published"] = true
136 return [true]
137 end
138 end
139 [false]
140 end
141
142 def do_unpublishdomainkey(args)
143 args["id"] = args["id"].to_i
144 if $keys.has_key? args["name"]
145 if $keys[args["name"]][args["id"]-1]
146 $keys[args["name"]][args["id"]-1]["published"] = false
147 return [true]
148 end
149 end
150 [false]
151 end
152
153 def do_removedomainkey(args)
154 args["id"] = args["id"].to_i
155 if $keys.has_key? args["name"]
156 if $keys[args["name"]][args["id"]-1]
157 $keys[args["name"]].delete_at args["id"]-1
158 return [true]
159 end
160 end
161 [false]
162 end
163
164 def do_getbeforeandafternamesabsolute(args)
165 return [ { :unhashed => "middle.", :before => "begin.", :after => "stop." } ] if args["qname"] == 'middle.unit.test.'
166 [false]
167 end
168
169 def do_gettsigkey(args)
170 if $tsigkeys.has_key? args["name"]
171 return [{:algorithm => $tsigkeys[args["name"]][:algorithm], :content => $tsigkeys[args["name"]][:content] }]
172 end
173 [false]
174 end
175
176 def do_setnotified(args)
177 if args["id"].to_i == 1
178 $notified_serial = args["serial"].to_i
179 return [true]
180 end
181 [false]
182 end
183
184 def do_getdomaininfo(args)
185 if args["name"] == "unit.test."
186 return [{
187 :id => 1,
188 :zone => "unit.test.",
189 :masters => ["10.0.0.1"],
190 :notified_serial => $notified_serial,
191 :serial => $notified_serial,
192 :last_check => Time.now.to_i,
193 :kind => 'native'
194 }]
195 end
196 if args["name"] == "master.test."
197 return [{
198 :id => 2,
199 :zone => "master.test.",
200 :masters => ["10.0.0.1"],
201 :notified_serial => $notified_serial,
202 :serial => $notified_serial,
203 :last_check => Time.now.to_i,
204 :kind => 'master'
205 }]
206 end
207 [false]
208 end
209
210 def do_ismaster(args)
211 $masters[:name] == args["name"] && $masters[:ip] == args["ip"]
212 end
213
214 def do_supermasterbackend(args)
215 $domain[args["domain"]] = {
216 "NS" => args["nsset"]
217 }
218 [true]
219 end
220
221 def do_createslavedomain(args)
222 $domain[args["domain"]] = {
223 }
224 [true]
225 end
226
227 def do_feedrecord(args)
228 args.delete "trxid"
229 rr = args["rr"]
230 name = rr["qname"]
231 qtype = rr["qtype"]
232 $domain[name] = {} unless $domain.has_key? name
233 $domain[name][qtype] = [] unless $domain[name].has_key? qtype
234 $domain[name][qtype] << rr["content"]
235 [true]
236 end
237
238 def do_replacerrset(args)
239 $domain[args["qname"]].delete args["qtype"] if $domain.has_key?(args["qname"]) and $domain[args["qname"]].has_key?(args["qtype"])
240 args["rrset"] = args["rrset"].values if args["rrset"].is_a?(Hash)
241 args["rrset"].each do |rr|
242 self.do_feedrecord({"trxid" => args["trxid"], "rr" => rr})
243 end
244 [true]
245 end
246
247 def do_feedents(args)
248 [true]
249 end
250
251 def do_feedents3(args)
252 [true]
253 end
254
255 def do_settsigkey(args)
256 $tsigkeys[args["name"]] = { :name => args["name"], :algorithm => args["algorithm"], :content => args["content"] }
257 [true]
258 end
259
260 def do_deletetsigkey(args)
261 $tsigkeys.delete args["name"] if $tsigkeys.has_key? args["name"]
262 [true]
263 end
264
265 def do_gettsigkeys(*args)
266 return [$tsigkeys.values]
267 end
268
269 def do_starttransaction(args)
270 [true]
271 end
272
273 def do_committransaction(args)
274 [true]
275 end
276
277 def do_aborttransaction(args)
278 [true]
279 end
280
281 def do_directbackendcmd(args)
282 [args["query"]]
283 end
284
285 def do_getalldomains(args)
286 [do_getdomaininfo({'name'=>'unit.test.'})]
287 end
288
289 def do_getupdatedmasters()
290 [do_getdomaininfo({'name'=>'master.test.'})]
291 end
292 end
293