devdnsd 3.0.7 → 3.0.8
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.
- checksums.yaml +4 -4
- data/.bundle/install.log +44 -0
- data/1 +0 -0
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/bin/devdnsd +13 -7
- data/doc/DevDNSd/Application.html +489 -161
- data/doc/DevDNSd/ApplicationMethods/Aliases.html +61 -61
- data/doc/DevDNSd/ApplicationMethods/Server.html +43 -43
- data/doc/DevDNSd/ApplicationMethods/System/ClassMethods.html +1 -1
- data/doc/DevDNSd/ApplicationMethods/System.html +55 -39
- data/doc/DevDNSd/ApplicationMethods.html +1 -1
- data/doc/DevDNSd/Configuration.html +18 -8
- data/doc/DevDNSd/Errors/InvalidRule.html +1 -1
- data/doc/DevDNSd/Errors.html +1 -1
- data/doc/DevDNSd/Rule.html +1 -1
- data/doc/DevDNSd/Version.html +2 -2
- data/doc/DevDNSd.html +1 -1
- data/doc/_index.html +1 -1
- data/doc/file.README.html +2 -2
- data/doc/index.html +2 -2
- data/doc/top-level-namespace.html +1 -1
- data/lib/devdnsd/application.rb +85 -23
- data/lib/devdnsd/configuration.rb +11 -6
- data/lib/devdnsd/version.rb +1 -1
- data/lib/devdnsd.rb +1 -0
- data/locales/en.yml +3 -1
- data/locales/it.yml +3 -1
- data/spec/devdnsd/application_spec.rb +37 -3
- data/spec/devdnsd/configuration_spec.rb +6 -1
- metadata +2 -1
data/doc/_index.html
CHANGED
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
</div>
|
|
238
238
|
|
|
239
239
|
<div id="footer">
|
|
240
|
-
Generated on Sat Mar 8
|
|
240
|
+
Generated on Sat Mar 8 15:25:56 2014 by
|
|
241
241
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
242
242
|
0.8.7.3 (ruby-2.1.0).
|
|
243
243
|
</div>
|
data/doc/file.README.html
CHANGED
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
|
|
106
106
|
<h2 id="configuration">Configuration</h2>
|
|
107
107
|
|
|
108
|
-
<p>By defaults, DevDNSd uses a configuration file in <code>~/.
|
|
108
|
+
<p>By defaults, DevDNSd uses a configuration file in <code>~/.devdnsd/default.conf</code>, but you can change the path using the <code>--config</code> switch.</p>
|
|
109
109
|
|
|
110
110
|
<p>The file is a plain Ruby file with a single <code>config</code> object that supports the following directives.</p>
|
|
111
111
|
|
|
@@ -166,7 +166,7 @@ This argument is ignored if you pass the block, as it assumes that the second ar
|
|
|
166
166
|
</div></div>
|
|
167
167
|
|
|
168
168
|
<div id="footer">
|
|
169
|
-
Generated on Sat Mar 8
|
|
169
|
+
Generated on Sat Mar 8 15:25:56 2014 by
|
|
170
170
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
171
171
|
0.8.7.3 (ruby-2.1.0).
|
|
172
172
|
</div>
|
data/doc/index.html
CHANGED
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
|
|
106
106
|
<h2 id="configuration">Configuration</h2>
|
|
107
107
|
|
|
108
|
-
<p>By defaults, DevDNSd uses a configuration file in <code>~/.
|
|
108
|
+
<p>By defaults, DevDNSd uses a configuration file in <code>~/.devdnsd/default.conf</code>, but you can change the path using the <code>--config</code> switch.</p>
|
|
109
109
|
|
|
110
110
|
<p>The file is a plain Ruby file with a single <code>config</code> object that supports the following directives.</p>
|
|
111
111
|
|
|
@@ -166,7 +166,7 @@ This argument is ignored if you pass the block, as it assumes that the second ar
|
|
|
166
166
|
</div></div>
|
|
167
167
|
|
|
168
168
|
<div id="footer">
|
|
169
|
-
Generated on Sat Mar 8
|
|
169
|
+
Generated on Sat Mar 8 15:25:56 2014 by
|
|
170
170
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
171
171
|
0.8.7.3 (ruby-2.1.0).
|
|
172
172
|
</div>
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
</div>
|
|
104
104
|
|
|
105
105
|
<div id="footer">
|
|
106
|
-
Generated on Sat Mar 8
|
|
106
|
+
Generated on Sat Mar 8 15:25:56 2014 by
|
|
107
107
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
108
108
|
0.8.7.3 (ruby-2.1.0).
|
|
109
109
|
</div>
|
data/lib/devdnsd/application.rb
CHANGED
|
@@ -73,7 +73,7 @@ module DevDNSd
|
|
|
73
73
|
# @param command [String] The command to execute.
|
|
74
74
|
# @return [Boolean] `true` if command succeeded, `false` otherwise.
|
|
75
75
|
def execute_command(command)
|
|
76
|
-
system(command)
|
|
76
|
+
system("#{command} 2&>1 > /dev/null")
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
# Updates DNS cache.
|
|
@@ -81,7 +81,15 @@ module DevDNSd
|
|
|
81
81
|
# @return [Boolean] `true` if command succeeded, `false` otherwise.
|
|
82
82
|
def dns_update
|
|
83
83
|
@logger.info(i18n.dns_update)
|
|
84
|
-
|
|
84
|
+
|
|
85
|
+
script = Tempfile.new("devdnsd-dns-cache-script")
|
|
86
|
+
script.write("dscacheutil -flushcache 2&>1 > /dev/null\n")
|
|
87
|
+
script.write("killall -9 mDNSResponder 2&>1 > /dev/null\n")
|
|
88
|
+
script.write("killall -9 mDNSResponderHelper 2&>1 > /dev/null\n")
|
|
89
|
+
script.close
|
|
90
|
+
|
|
91
|
+
Kernel.system("/usr/bin/osascript -e 'do shell script \"sh #{script.path}\" with administrator privileges' 2&>1 > /dev/null")
|
|
92
|
+
script.unlink
|
|
85
93
|
end
|
|
86
94
|
|
|
87
95
|
# Checks if we are running on MacOS X.
|
|
@@ -160,6 +168,8 @@ module DevDNSd
|
|
|
160
168
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
|
161
169
|
def manage_installation(launch_agent, resolver_path, first_operation, second_operation, third_operation)
|
|
162
170
|
rv = check_agent_available
|
|
171
|
+
|
|
172
|
+
logger.warn(replace_markers(i18n.admin_privileges_warning))
|
|
163
173
|
rv = send(first_operation, launch_agent, resolver_path) if rv
|
|
164
174
|
rv = send(second_operation, launch_agent, resolver_path) if rv
|
|
165
175
|
rv = send(third_operation, launch_agent, resolver_path) if rv
|
|
@@ -203,33 +213,36 @@ module DevDNSd
|
|
|
203
213
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
|
204
214
|
def create_resolver(_, resolver_path)
|
|
205
215
|
begin
|
|
206
|
-
logger.info(i18n.resolver_creating(resolver_path))
|
|
216
|
+
logger.info(replace_markers(i18n.resolver_creating(resolver_path)))
|
|
207
217
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
218
|
+
script = Tempfile.new("devdnsd-install-script")
|
|
219
|
+
script.write("mkdir -p '#{File.dirname(resolver_path)}'\n")
|
|
220
|
+
script.write("rm -rf '#{resolver_path}'\n")
|
|
221
|
+
script.write("echo 'nameserver 127.0.0.1\\nport #{@config.port}' >> '#{resolver_path}'")
|
|
222
|
+
script.close
|
|
213
223
|
|
|
224
|
+
Kernel.system("/usr/bin/osascript -e 'do shell script \"sh #{script.path}\" with administrator privileges' 2&>1 > /dev/null")
|
|
225
|
+
script.unlink
|
|
214
226
|
true
|
|
215
|
-
rescue
|
|
227
|
+
rescue Exception
|
|
216
228
|
logger.error(i18n.resolver_creating_error)
|
|
217
229
|
false
|
|
218
230
|
end
|
|
219
231
|
end
|
|
220
232
|
|
|
221
|
-
# Writes a OSX resolver.
|
|
222
|
-
#
|
|
223
|
-
# @param resolver_path [String] The resolver path.
|
|
224
|
-
def write_resolver(resolver_path)
|
|
225
|
-
end
|
|
226
|
-
|
|
227
233
|
# Deletes a OSX resolver.
|
|
228
234
|
#
|
|
229
235
|
# @param resolver_path [String] The resolver path.
|
|
230
236
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
|
231
237
|
def delete_resolver(_, resolver_path)
|
|
232
|
-
|
|
238
|
+
begin
|
|
239
|
+
logger.info(i18n.resolver_deleting(resolver_path))
|
|
240
|
+
Kernel.system("/usr/bin/osascript -e 'do shell script \"rm #{resolver_path}\" with administrator privileges' 2&>1 > /dev/null")
|
|
241
|
+
true
|
|
242
|
+
rescue Exception
|
|
243
|
+
logger.warn(i18n.resolver_deleting_error)
|
|
244
|
+
false
|
|
245
|
+
end
|
|
233
246
|
end
|
|
234
247
|
|
|
235
248
|
# Creates a OSX system agent.
|
|
@@ -238,7 +251,7 @@ module DevDNSd
|
|
|
238
251
|
# @return [Boolean] `true` if operation succeeded, `false` otherwise.
|
|
239
252
|
def create_agent(launch_agent, _)
|
|
240
253
|
begin
|
|
241
|
-
logger.info(i18n.agent_creating(launch_agent))
|
|
254
|
+
logger.info(replace_markers(i18n.agent_creating(launch_agent)))
|
|
242
255
|
program, args = prepare_agent
|
|
243
256
|
|
|
244
257
|
::File.open(launch_agent, "w") {|f|
|
|
@@ -305,6 +318,14 @@ module DevDNSd
|
|
|
305
318
|
false
|
|
306
319
|
end
|
|
307
320
|
end
|
|
321
|
+
|
|
322
|
+
# Replaces markers in a log message.
|
|
323
|
+
#
|
|
324
|
+
# @param message [String] The message to process.
|
|
325
|
+
# @return [String] The processed message.
|
|
326
|
+
def replace_markers(message)
|
|
327
|
+
@command.application.console.replace_markers(message)
|
|
328
|
+
end
|
|
308
329
|
end
|
|
309
330
|
|
|
310
331
|
# Methods to handle interfaces aliases.
|
|
@@ -464,7 +485,7 @@ module DevDNSd
|
|
|
464
485
|
log_management(:run, prefix, type, locale.removing, locale.adding, address, config)
|
|
465
486
|
rv = execute_command(command)
|
|
466
487
|
labels = (type == :remove ? [locale.remove, locale.from] : [locale.add, locale.to])
|
|
467
|
-
@logger.error(
|
|
488
|
+
@logger.error(replace_markers(locale.general_error(labels[0], address, labels[1], config.interface))) if !rv
|
|
468
489
|
rv
|
|
469
490
|
end
|
|
470
491
|
|
|
@@ -480,7 +501,7 @@ module DevDNSd
|
|
|
480
501
|
def log_management(message, prefix, type, remove_label, add_label, address, config)
|
|
481
502
|
locale = i18n
|
|
482
503
|
labels = (type == :remove ? [remove_label, locale.from] : [add_label, locale.to])
|
|
483
|
-
@logger.info(
|
|
504
|
+
@logger.info(replace_markers(i18n.send(message, prefix, labels[0], address, labels[1], config.interface)))
|
|
484
505
|
end
|
|
485
506
|
end
|
|
486
507
|
|
|
@@ -624,7 +645,7 @@ module DevDNSd
|
|
|
624
645
|
options = @command.application.get_options.reject {|_, v| v.nil? }
|
|
625
646
|
|
|
626
647
|
# Setup logger
|
|
627
|
-
|
|
648
|
+
create_logger(options)
|
|
628
649
|
|
|
629
650
|
# Open configuration
|
|
630
651
|
read_configuration(options)
|
|
@@ -687,18 +708,59 @@ module DevDNSd
|
|
|
687
708
|
end
|
|
688
709
|
|
|
689
710
|
private
|
|
711
|
+
# Creates a logger.
|
|
712
|
+
#
|
|
713
|
+
# @param options [Hash] The configuration to use.
|
|
714
|
+
def create_logger(options)
|
|
715
|
+
warn_failure = false
|
|
716
|
+
orig_file = file = Bovem::Logger.get_real_file(options["log_file"]) || Bovem::Logger.default_file
|
|
717
|
+
|
|
718
|
+
if file.is_a?(String) then
|
|
719
|
+
file = File.absolute_path(File.expand_path(file))
|
|
720
|
+
|
|
721
|
+
begin
|
|
722
|
+
FileUtils.mkdir_p(File.dirname(file))
|
|
723
|
+
@logger = Bovem::Logger.create(file, Logger::INFO)
|
|
724
|
+
rescue
|
|
725
|
+
file = $stdout
|
|
726
|
+
warn_failure = true
|
|
727
|
+
end
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
@logger = Bovem::Logger.create(file, Logger::INFO)
|
|
731
|
+
@logger.warn(replace_markers(i18n.logging_failed(orig_file))) if @logger && warn_failure
|
|
732
|
+
@logger
|
|
733
|
+
end
|
|
734
|
+
|
|
690
735
|
# Reads configuration.
|
|
691
736
|
#
|
|
692
737
|
# @param options [Hash] The configuration to read.
|
|
693
738
|
def read_configuration(options)
|
|
739
|
+
path = ::File.absolute_path(File.expand_path(options["configuration"]))
|
|
740
|
+
|
|
694
741
|
begin
|
|
695
|
-
@config = DevDNSd::Configuration.new(
|
|
742
|
+
@config = DevDNSd::Configuration.new(path, options, @logger)
|
|
743
|
+
ensure_directory_for(@config.log_file) if @config.log_file.is_a?(String)
|
|
744
|
+
ensure_directory_for(@config.pid_file)
|
|
745
|
+
|
|
696
746
|
@logger = nil
|
|
697
747
|
@logger = get_logger
|
|
698
748
|
rescue Bovem::Errors::InvalidConfiguration => e
|
|
699
|
-
logger = Bovem::Logger.create(
|
|
749
|
+
logger = Bovem::Logger.create($stderr)
|
|
700
750
|
logger.fatal(e.message)
|
|
701
|
-
logger.warn(
|
|
751
|
+
logger.warn(replace_markers(i18n.application_create_config(path)))
|
|
752
|
+
raise ::SystemExit
|
|
753
|
+
end
|
|
754
|
+
end
|
|
755
|
+
|
|
756
|
+
# Creates a folder for a file.
|
|
757
|
+
#
|
|
758
|
+
# @param [String] The path of the file.
|
|
759
|
+
def ensure_directory_for(path)
|
|
760
|
+
begin
|
|
761
|
+
FileUtils.mkdir_p(File.dirname(path))
|
|
762
|
+
rescue
|
|
763
|
+
@logger.warn(replace_markers(i18n.invalid_directory(File.dirname(path))))
|
|
702
764
|
raise ::SystemExit
|
|
703
765
|
end
|
|
704
766
|
end
|
|
@@ -19,11 +19,11 @@ module DevDNSd
|
|
|
19
19
|
# The TLD to manage. Default: `dev`.
|
|
20
20
|
property :tld, default: "dev"
|
|
21
21
|
|
|
22
|
-
# The PID file to use. Default:
|
|
23
|
-
property :pid_file, default: "/
|
|
22
|
+
# The PID file to use. Default: `~/.devdnsd/daemon.pid`.
|
|
23
|
+
property :pid_file, default: "~/.devdnsd/daemon.pid"
|
|
24
24
|
|
|
25
|
-
# The file to log to. Default: `/var/log/
|
|
26
|
-
property :log_file, default: "/
|
|
25
|
+
# The file to log to. Default: `/var/log/daemon.log`.
|
|
26
|
+
property :log_file, default: "~/.devdnsd/daemon.log"
|
|
27
27
|
|
|
28
28
|
# The minimum severity to log. Default: `Logger::INFO`.
|
|
29
29
|
property :log_level, default: Logger::INFO
|
|
@@ -65,8 +65,13 @@ module DevDNSd
|
|
|
65
65
|
super(file, overrides, logger)
|
|
66
66
|
|
|
67
67
|
# Make sure some arguments are of correct type
|
|
68
|
-
self.log_file =
|
|
69
|
-
|
|
68
|
+
self.log_file = case log_file
|
|
69
|
+
when "STDOUT" then $stdout
|
|
70
|
+
when "STDERR" then $stderr
|
|
71
|
+
else File.absolute_path(File.expand_path(log_file))
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
self.pid_file = File.absolute_path(File.expand_path(pid_file))
|
|
70
75
|
self.port = port.to_integer
|
|
71
76
|
self.log_level = log_level.to_integer
|
|
72
77
|
|
data/lib/devdnsd/version.rb
CHANGED
data/lib/devdnsd.rb
CHANGED
data/locales/en.yml
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
reply: "Reply is %1 with type %2."
|
|
18
18
|
no_reply: "No reply found."
|
|
19
19
|
no_agent: "Install DevDNSd as a local resolver is only available on MacOSX."
|
|
20
|
+
admin_privileges_warning: "Basing on your setup, the system might ask you up to twice to grant {mark=bright}osascript{/mark} application admin privileges."
|
|
20
21
|
resolver_creating: "Creating the resolver in {mark=bright}%1{/mark} ..."
|
|
21
22
|
resolver_creating_error: "Cannot create the resolver file."
|
|
22
23
|
resolver_deleting: "Deleting the resolver %1 ..."
|
|
@@ -29,7 +30,8 @@
|
|
|
29
30
|
agent_loading_error: "Cannot load the launch agent."
|
|
30
31
|
agent_unloading: "Unloading the launch agent %1 ..."
|
|
31
32
|
agent_unloading_error: "Cannot unload the launch agent."
|
|
32
|
-
logging_failed: "Cannot log to {mark=bright}%1{/mark}.
|
|
33
|
+
logging_failed: "Cannot log to {mark=bright}%1{/mark}. Logging to terminal..."
|
|
34
|
+
invalid_directory: "Cannot write on directory {mark=bright}%1{/mark}. Exiting..."
|
|
33
35
|
application_description: "A small DNS server to enable local domain resolution."
|
|
34
36
|
application_help_configuration: "The configuration file to use. Default is \"~/.devdnsd_config\"."
|
|
35
37
|
application_help_tld: "The TLD to handle. Default is \"dev\"."
|
data/locales/it.yml
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
reply: "La risposta è %1 con tipo %2."
|
|
18
18
|
no_reply: "Nessuna risposta trovata."
|
|
19
19
|
no_agent: "Installare DevDNSd come resolver locale è disponibile solo su MacOSX."
|
|
20
|
+
admin_privileges_warning: "In base alla tua configurazione, il sistema potrebbe chiederti fino a due volte di garantire all'applicazione {mark=bright}osascript{/mark} i privilegi di amministratore."
|
|
20
21
|
resolver_creating: "Creo il resolver in {mark=bright}%1{/mark} ..."
|
|
21
22
|
resolver_creating_error: "Impossible creare il file del resolver."
|
|
22
23
|
resolver_deleting: "Cancello resolver %1 ..."
|
|
@@ -29,7 +30,8 @@
|
|
|
29
30
|
agent_loading_error: "Impossibile avviare il launch agent."
|
|
30
31
|
agent_unloading: "Fermo il launch agent %1 ..."
|
|
31
32
|
agent_unloading_error: "Impossible fermare il launch agent."
|
|
32
|
-
logging_failed: "Impossibile eseguire il logging in {mark=bright}%1{/mark}.
|
|
33
|
+
logging_failed: "Impossibile eseguire il logging in {mark=bright}%1{/mark}. Eseguo il logging nel terminale..."
|
|
34
|
+
invalid_directory: "Impossibile scrivere sulla directory {mark=bright}%1{/mark}. Esco..."
|
|
33
35
|
application_description: "Un piccolo server DNS per abilitare la risoluzione di domini locali."
|
|
34
36
|
application_help_configuration: "Il file di configurazione da usare. Il valore predefinito è \"~/.devdnsd_config\"."
|
|
35
37
|
application_help_tld: "Il TLD da gestiere. Il valore predefinito è \"dev\"."
|
|
@@ -17,7 +17,7 @@ describe DevDNSd::Application do
|
|
|
17
17
|
option :configuration, [], {default: overrides["configuration"] || "/dev/null"}
|
|
18
18
|
option :tld, [], {default: overrides["tld"] || "dev"}
|
|
19
19
|
option :port, [], {type: Integer, default: overrides["port"] || 7771}
|
|
20
|
-
option :pid_file, [:P, "pid-file"], {type: String, default: "/var/run/devdnsd.pid"}
|
|
20
|
+
option :pid_file, [:P, "pid-file"], {type: String, default: overrides["pid_file"] || "/var/run/devdnsd.pid"}
|
|
21
21
|
option :log_file, [:l, "log-file"], {default: overrides["log_file"] || "/dev/null"}
|
|
22
22
|
option :log_level, [:L, "log-level"], {type: Integer, default: overrides["log_level"] || 1}
|
|
23
23
|
}, :en)
|
|
@@ -35,6 +35,12 @@ describe DevDNSd::Application do
|
|
|
35
35
|
expect(application.logger).not_to be_nil
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
it "should fallback logger to STDOUT" do
|
|
39
|
+
allow_any_instance_of(DevDNSd::Application).to receive(:read_configuration)
|
|
40
|
+
expect(Bovem::Logger).to receive(:create).with($stdout, Logger::INFO)
|
|
41
|
+
create_application({"log_file" => "/invalid/logger"})
|
|
42
|
+
end
|
|
43
|
+
|
|
38
44
|
it "should setup the configuration" do
|
|
39
45
|
expect(application.config).not_to be_nil
|
|
40
46
|
end
|
|
@@ -50,6 +56,12 @@ describe DevDNSd::Application do
|
|
|
50
56
|
expect { create_application({"configuration" => file.path, "log_file" => log_file}) }.to raise_error(::SystemExit)
|
|
51
57
|
::File.unlink(path)
|
|
52
58
|
end
|
|
59
|
+
|
|
60
|
+
it "should abort when the log file is invalid" do
|
|
61
|
+
allow_any_instance_of(Bovem::Logger).to receive(:fatal)
|
|
62
|
+
allow_any_instance_of(Bovem::Logger).to receive(:warn)
|
|
63
|
+
expect { create_application({"pid_file" => "/invalid/pid", "log_file" => log_file}) }.to raise_error(::SystemExit)
|
|
64
|
+
end
|
|
53
65
|
end
|
|
54
66
|
|
|
55
67
|
describe ".run" do
|
|
@@ -339,8 +351,8 @@ describe DevDNSd::Application do
|
|
|
339
351
|
|
|
340
352
|
describe "#dns_update" do
|
|
341
353
|
it "should update the DNS cache" do
|
|
342
|
-
allow(
|
|
343
|
-
|
|
354
|
+
allow(Kernel).to receive(:system).and_return("EXECUTED")
|
|
355
|
+
application.dns_update
|
|
344
356
|
end
|
|
345
357
|
end
|
|
346
358
|
|
|
@@ -559,6 +571,7 @@ describe DevDNSd::Application do
|
|
|
559
571
|
before(:each) do
|
|
560
572
|
allow(application).to receive(:is_osx?).and_return(true)
|
|
561
573
|
allow(application).to receive(:execute_command)
|
|
574
|
+
expect(Kernel).to receive(:system).at_least(1)
|
|
562
575
|
end
|
|
563
576
|
|
|
564
577
|
it "should create the resolver" do
|
|
@@ -567,6 +580,7 @@ describe DevDNSd::Application do
|
|
|
567
580
|
::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
|
|
568
581
|
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
|
569
582
|
|
|
583
|
+
allow(application).to receive(:create_resolver) {|_, path| FileUtils.touch(path) }
|
|
570
584
|
application.action_install
|
|
571
585
|
expect(::File.exists?(resolver_path)).to be_true
|
|
572
586
|
|
|
@@ -607,6 +621,8 @@ describe DevDNSd::Application do
|
|
|
607
621
|
::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
|
|
608
622
|
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
|
609
623
|
|
|
624
|
+
allow(application).to receive(:create_agent).and_return(true)
|
|
625
|
+
expect_any_instance_of(R18n::Translation).to receive(:resolver_creating).and_raise(ArgumentError)
|
|
610
626
|
expect(application.logger).to receive(:error).with("Cannot create the resolver file.")
|
|
611
627
|
application.action_install
|
|
612
628
|
|
|
@@ -655,6 +671,7 @@ describe DevDNSd::Application do
|
|
|
655
671
|
before(:each) do
|
|
656
672
|
allow(application).to receive(:is_osx?).and_return(true)
|
|
657
673
|
allow(application).to receive(:execute_command)
|
|
674
|
+
expect(Kernel).to receive(:system).at_least(1)
|
|
658
675
|
end
|
|
659
676
|
|
|
660
677
|
it "should remove the resolver" do
|
|
@@ -671,6 +688,23 @@ describe DevDNSd::Application do
|
|
|
671
688
|
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
|
672
689
|
end
|
|
673
690
|
|
|
691
|
+
it "should not remove an invalid resolver" do
|
|
692
|
+
allow(application).to receive(:resolver_path).and_return("/invalid/resolver")
|
|
693
|
+
allow(application).to receive(:launch_agent_path).and_return("/invalid/agent")
|
|
694
|
+
::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
|
|
695
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
|
696
|
+
|
|
697
|
+
allow(application).to receive(:unload_agent).and_return(true)
|
|
698
|
+
expect_any_instance_of(R18n::Translation).to receive(:resolver_deleting).and_raise(ArgumentError)
|
|
699
|
+
expect(application.logger).to receive(:warn)
|
|
700
|
+
expect(application.logger).to receive(:warn).with("Cannot delete the resolver file.")
|
|
701
|
+
|
|
702
|
+
application.action_uninstall
|
|
703
|
+
|
|
704
|
+
::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
|
|
705
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
|
706
|
+
end
|
|
707
|
+
|
|
674
708
|
it "should remove the agent" do
|
|
675
709
|
allow(application).to receive(:resolver_path).and_return(resolver_path)
|
|
676
710
|
allow(application).to receive(:launch_agent_path).and_return(launch_agent_path)
|
|
@@ -14,11 +14,16 @@ describe DevDNSd::Configuration do
|
|
|
14
14
|
expect(config.address).to eq("0.0.0.0")
|
|
15
15
|
expect(config.port).to eq(7771)
|
|
16
16
|
expect(config.tld).to eq("dev")
|
|
17
|
-
expect(config.log_file).to eq("/
|
|
17
|
+
expect(config.log_file).to eq(File.absolute_path(File.expand_path("~/.devdnsd/daemon.log")))
|
|
18
18
|
expect(config.log_level).to eq(::Logger::INFO)
|
|
19
19
|
expect(config.rules.count).to eq(1)
|
|
20
20
|
expect(config.foreground).to eq(false)
|
|
21
21
|
end
|
|
22
|
+
|
|
23
|
+
it "should log to standard output or standard error" do
|
|
24
|
+
expect(DevDNSd::Configuration.new(nil, log_file: "STDOUT").log_file).to eq($stdout)
|
|
25
|
+
expect(DevDNSd::Configuration.new(nil, log_file: "STDERR").log_file).to eq($stderr)
|
|
26
|
+
end
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
describe "#add_rule" do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: devdnsd
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0.
|
|
4
|
+
version: 3.0.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Shogun
|
|
@@ -82,6 +82,7 @@ files:
|
|
|
82
82
|
- ".travis-gemfile"
|
|
83
83
|
- ".travis.yml"
|
|
84
84
|
- ".yardopts"
|
|
85
|
+
- '1'
|
|
85
86
|
- CHANGELOG.md
|
|
86
87
|
- Gemfile
|
|
87
88
|
- README.md
|