invoker 1.5.6 → 1.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/invoker.rb +0 -1
- data/lib/invoker/cli.rb +3 -8
- data/lib/invoker/parsers/config.rb +2 -2
- data/lib/invoker/power/balancer.rb +1 -1
- data/lib/invoker/power/setup.rb +6 -3
- data/lib/invoker/power/setup/distro/base.rb +36 -13
- data/lib/invoker/power/setup/distro/ubuntu.rb +36 -0
- data/lib/invoker/power/setup/linux_setup.rb +10 -18
- data/lib/invoker/process_manager.rb +3 -0
- data/lib/invoker/version.rb +1 -1
- data/spec/invoker/config_spec.rb +4 -4
- data/spec/invoker/power/setup/linux_setup_spec.rb +95 -32
- data/spec/invoker/power/url_rewriter_spec.rb +16 -17
- data/spec/spec_helper.rb +3 -3
- metadata +50 -65
- data/.coveralls.yml +0 -1
- data/.gitignore +0 -16
- data/.rspec +0 -2
- data/.rubocop.yml +0 -29
- data/.travis.yml +0 -12
- data/CHANGELOG.md +0 -26
- data/Dockerfile +0 -7
- data/Gemfile +0 -13
- data/MIT-LICENSE +0 -20
- data/Rakefile +0 -16
- data/TODO +0 -5
- data/contrib/completion/invoker-completion.bash +0 -70
- data/contrib/completion/invoker-completion.zsh +0 -62
- data/examples/crash.rb +0 -2
- data/examples/hello_sinatra.rb +0 -26
- data/examples/sample.ini +0 -7
- data/invoker.gemspec +0 -43
- data/lib/invoker/power/pf_migrate.rb +0 -64
- data/lib/invoker/power/setup/distro/mint.rb +0 -10
- data/readme.md +0 -25
- data/spec/invoker/power/pf_migrate_spec.rb +0 -87
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 55217109e2c3f44ebbbfd25c36f3b4d8d3dedff2c8380cc262cb12653cc1a1b1
|
4
|
+
data.tar.gz: 7f9e9a0d4a100d44549400473a81686d09773ee0d9d5ec8f193ccbee999bebe9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4221997cbbcf54911d116f2dde24cc30ba91e36013f72b3ed1e392fcb96c0be43186f2837be0735da43932e09ddd1725452784ee2a3e7fd0b12928daebd7f337
|
7
|
+
data.tar.gz: f4c3a7697a1ce22121cce85e58770ad0a3fd8f816d731b82115c5b0dcba5cda404822d3a56b1710766171bf776c2cccb44223e8759974f9e231956e2125e2ef6
|
data/lib/invoker.rb
CHANGED
@@ -21,7 +21,6 @@ require "invoker/power/setup"
|
|
21
21
|
require "invoker/power/setup/linux_setup"
|
22
22
|
require "invoker/power/setup/osx_setup"
|
23
23
|
require "invoker/power/powerup"
|
24
|
-
require "invoker/power/pf_migrate"
|
25
24
|
require "invoker/errors"
|
26
25
|
require "invoker/parsers/procfile"
|
27
26
|
require "invoker/parsers/config"
|
data/lib/invoker/cli.rb
CHANGED
@@ -19,6 +19,7 @@ module Invoker
|
|
19
19
|
def setup
|
20
20
|
Invoker::Power::Setup.install(get_tld(options))
|
21
21
|
end
|
22
|
+
map install: :setup
|
22
23
|
|
23
24
|
desc "version", "Print Invoker version"
|
24
25
|
def version
|
@@ -56,7 +57,6 @@ module Invoker
|
|
56
57
|
Invoker.private_key = options[:private_key]
|
57
58
|
Invoker.load_invoker_config(file, port)
|
58
59
|
warn_about_notification
|
59
|
-
warn_about_old_configuration
|
60
60
|
pinger = Invoker::CLI::Pinger.new(unix_socket)
|
61
61
|
abort("Invoker is already running".colorize(:red)) if pinger.invoker_running?
|
62
62
|
Invoker.commander.start_manager
|
@@ -91,6 +91,7 @@ module Invoker
|
|
91
91
|
signal = options[:signal] || 'INT'
|
92
92
|
unix_socket.send_command('reload', process_name: name, signal: signal)
|
93
93
|
end
|
94
|
+
map restart: :reload
|
94
95
|
|
95
96
|
desc "list", "List all running processes"
|
96
97
|
option :raw,
|
@@ -131,7 +132,7 @@ module Invoker
|
|
131
132
|
end
|
132
133
|
|
133
134
|
def self.valid_tasks
|
134
|
-
tasks.keys +
|
135
|
+
tasks.keys + %w(help install restart)
|
135
136
|
end
|
136
137
|
|
137
138
|
# TODO(kgrz): the default TLD option is duplicated in both this file and
|
@@ -172,12 +173,6 @@ module Invoker
|
|
172
173
|
end
|
173
174
|
end
|
174
175
|
end
|
175
|
-
|
176
|
-
def warn_about_old_configuration
|
177
|
-
Invoker::Power::PfMigrate.new.tap do |pf_migrator|
|
178
|
-
pf_migrator.migrate
|
179
|
-
end
|
180
|
-
end
|
181
176
|
end
|
182
177
|
end
|
183
178
|
|
@@ -133,10 +133,10 @@ module Invoker
|
|
133
133
|
end
|
134
134
|
|
135
135
|
sleep_duration = section['sleep'].to_i
|
136
|
-
if sleep_duration
|
136
|
+
if sleep_duration >= 0
|
137
137
|
pconfig['sleep_duration'] = sleep_duration
|
138
138
|
else
|
139
|
-
pconfig['sleep_duration'] =
|
139
|
+
pconfig['sleep_duration'] = 0
|
140
140
|
end
|
141
141
|
|
142
142
|
OpenStruct.new(pconfig)
|
@@ -100,7 +100,7 @@ module Invoker
|
|
100
100
|
@backend_data = true
|
101
101
|
|
102
102
|
# check backend data for websockets connection. check for upgrade headers
|
103
|
-
# -
|
103
|
+
# - Upgrade: websocket\r\n
|
104
104
|
if data =~ /Upgrade: websocket/
|
105
105
|
@upgraded_to = "websocket"
|
106
106
|
end
|
data/lib/invoker/power/setup.rb
CHANGED
@@ -11,9 +11,11 @@ module Invoker
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.uninstall
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
if Invoker::Power::Config.has_config?
|
15
|
+
power_config = Invoker::Power::Config.load_config
|
16
|
+
selected_installer_klass = installer_klass
|
17
|
+
selected_installer_klass.new(power_config.tld).uninstall_invoker
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
def self.installer_klass
|
@@ -74,6 +76,7 @@ module Invoker
|
|
74
76
|
end
|
75
77
|
|
76
78
|
def remove_resolver_file
|
79
|
+
return if resolver_file.nil?
|
77
80
|
begin
|
78
81
|
safe_remove_file(resolver_file)
|
79
82
|
rescue Errno::EACCES
|
@@ -12,23 +12,19 @@ module Invoker
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.distro_installer(tld)
|
15
|
-
|
16
|
-
when "Ubuntu"
|
17
|
-
require "invoker/power/setup/distro/ubuntu"
|
18
|
-
Ubuntu.new(tld)
|
19
|
-
when "Fedora"
|
20
|
-
require "invoker/power/setup/distro/redhat"
|
21
|
-
Redhat.new(tld)
|
22
|
-
when "Archlinux"
|
15
|
+
if distro.start_with? "Arch Linux", "Manjaro Linux"
|
23
16
|
require "invoker/power/setup/distro/arch"
|
24
17
|
Arch.new(tld)
|
25
|
-
|
18
|
+
elsif distro.start_with? "Debian"
|
26
19
|
require "invoker/power/setup/distro/debian"
|
27
20
|
Debian.new(tld)
|
28
|
-
|
29
|
-
require "invoker/power/setup/distro/
|
30
|
-
|
31
|
-
|
21
|
+
elsif distro.start_with? "Fedora"
|
22
|
+
require "invoker/power/setup/distro/redhat"
|
23
|
+
Redhat.new(tld)
|
24
|
+
elsif distro.start_with? "Linux Mint", "Ubuntu"
|
25
|
+
require "invoker/power/setup/distro/ubuntu"
|
26
|
+
Ubuntu.new(tld)
|
27
|
+
elsif distro.start_with? "openSUSE"
|
32
28
|
require "invoker/power/setup/distro/opensuse"
|
33
29
|
Opensuse.new(tld)
|
34
30
|
else
|
@@ -36,6 +32,17 @@ module Invoker
|
|
36
32
|
end
|
37
33
|
end
|
38
34
|
|
35
|
+
def self.distro
|
36
|
+
@distro ||= if File.exist?('/etc/os-release')
|
37
|
+
File.read('/etc/os-release').each_line do |line|
|
38
|
+
parsed_line = line.chomp.tr('"', '').split('=')
|
39
|
+
break parsed_line[1] if parsed_line[0] == 'NAME'
|
40
|
+
end
|
41
|
+
else
|
42
|
+
raise "File /etc/os-release doesn't exist or not Linux"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
39
46
|
def initialize(tld)
|
40
47
|
self.tld = tld
|
41
48
|
end
|
@@ -51,6 +58,22 @@ module Invoker
|
|
51
58
|
system("systemctl start socat_invoker.service")
|
52
59
|
system("systemctl restart dnsmasq")
|
53
60
|
end
|
61
|
+
|
62
|
+
def install_packages
|
63
|
+
"dnsmasq and socat"
|
64
|
+
end
|
65
|
+
|
66
|
+
def install_other
|
67
|
+
" a local resolver for .#{tld} domain and"
|
68
|
+
end
|
69
|
+
|
70
|
+
def get_user_confirmation?
|
71
|
+
Invoker::Logger.puts("Invoker is going to install #{install_packages} on this machine."\
|
72
|
+
" It is also going to install#{install_other} a socat service"\
|
73
|
+
" which will forward all local requests on port 80 and 443 to another port")
|
74
|
+
Invoker::Logger.puts("If you still want to proceed with installation, press y.")
|
75
|
+
Invoker::CLI::Question.agree("Proceed with installation (y/n) : ")
|
76
|
+
end
|
54
77
|
end
|
55
78
|
end
|
56
79
|
end
|
@@ -4,6 +4,42 @@ module Invoker
|
|
4
4
|
module Power
|
5
5
|
module Distro
|
6
6
|
class Ubuntu < Debian
|
7
|
+
def using_systemd_resolved?
|
8
|
+
return @_using_systemd_resolved if defined?(@_using_systemd_resolved)
|
9
|
+
@_using_systemd_resolved = system("systemctl is-active --quiet systemd-resolved")
|
10
|
+
end
|
11
|
+
|
12
|
+
def install_required_software
|
13
|
+
if using_systemd_resolved?
|
14
|
+
# Don't install dnsmasq if Ubuntu version uses systemd-resolved for DNS because they conflict
|
15
|
+
system("apt-get --assume-yes install socat")
|
16
|
+
else
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def install_packages
|
22
|
+
using_systemd_resolved? ? "socat" : super
|
23
|
+
end
|
24
|
+
|
25
|
+
def install_other
|
26
|
+
using_systemd_resolved? ? nil : super
|
27
|
+
end
|
28
|
+
|
29
|
+
def resolver_file
|
30
|
+
using_systemd_resolved? ? nil : super
|
31
|
+
end
|
32
|
+
|
33
|
+
def tld
|
34
|
+
using_systemd_resolved? ? 'localhost' : @tld
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_user_confirmation?
|
38
|
+
if using_systemd_resolved? && tld != 'localhost'
|
39
|
+
Invoker::Logger.puts("Ubuntu installations using systemd-resolved (typically Ubuntu 17+) only support the .localhost domain, so your tld setting (or the default) will be ignored.".colorize(:yellow))
|
40
|
+
end
|
41
|
+
super
|
42
|
+
end
|
7
43
|
end
|
8
44
|
end
|
9
45
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require "invoker/power/setup/distro/base"
|
2
|
-
require "facter"
|
3
2
|
require 'erb'
|
4
3
|
require 'fileutils'
|
5
4
|
|
@@ -9,8 +8,8 @@ module Invoker
|
|
9
8
|
attr_accessor :distro_installer
|
10
9
|
|
11
10
|
def setup_invoker
|
12
|
-
|
13
|
-
|
11
|
+
initialize_distro_installer
|
12
|
+
if distro_installer.get_user_confirmation?
|
14
13
|
find_open_ports
|
15
14
|
distro_installer.install_required_software
|
16
15
|
install_resolver
|
@@ -35,6 +34,12 @@ module Invoker
|
|
35
34
|
Invoker::Power::Config.delete
|
36
35
|
end
|
37
36
|
|
37
|
+
def build_power_config
|
38
|
+
config = super
|
39
|
+
config[:tld] = distro_installer.tld
|
40
|
+
config
|
41
|
+
end
|
42
|
+
|
38
43
|
def resolver_file
|
39
44
|
distro_installer.resolver_file
|
40
45
|
end
|
@@ -50,16 +55,11 @@ module Invoker
|
|
50
55
|
private
|
51
56
|
|
52
57
|
def initialize_distro_installer
|
53
|
-
|
54
|
-
Facter.add(:systemctl) do
|
55
|
-
setcode do
|
56
|
-
Facter::Util::Resolution.exec("[ -e /usr/bin/systemctl ] && echo 'true' || echo 'false'")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
@distro_installer = Invoker::Power::Distro::Base.distro_installer(tld)
|
58
|
+
@distro_installer ||= Invoker::Power::Distro::Base.distro_installer(tld)
|
60
59
|
end
|
61
60
|
|
62
61
|
def install_resolver
|
62
|
+
return if resolver_file.nil?
|
63
63
|
File.open(resolver_file, "w") do |fl|
|
64
64
|
fl.write(resolver_file_content)
|
65
65
|
end
|
@@ -92,14 +92,6 @@ address=/#{tld}/127.0.0.1
|
|
92
92
|
FileUtils.cp(socat_unit, Invoker::Power::Distro::Base::SOCAT_SYSTEMD)
|
93
93
|
system("chmod 644 #{Invoker::Power::Distro::Base::SOCAT_SYSTEMD}")
|
94
94
|
end
|
95
|
-
|
96
|
-
def get_user_confirmation?
|
97
|
-
Invoker::Logger.puts("Invoker is going to install dnsmasq and socat on this machine."\
|
98
|
-
" It is also going to install a local resolver for .#{tld} domain and a socat service"\
|
99
|
-
" which will forward all local requests on port 80 and 443 to another port")
|
100
|
-
Invoker::Logger.puts("If you still want to proceed with installation, press y.")
|
101
|
-
Invoker::CLI::Question.agree("Proceed with installation (y/n) : ")
|
102
|
-
end
|
103
95
|
end
|
104
96
|
end
|
105
97
|
end
|
@@ -168,6 +168,9 @@ module Invoker
|
|
168
168
|
if worker
|
169
169
|
@open_pipes.delete(worker.pipe_end.fileno)
|
170
170
|
@workers.delete(command_label)
|
171
|
+
# Move label color to front of array so it's reused first
|
172
|
+
LABEL_COLORS.delete(worker.color)
|
173
|
+
LABEL_COLORS.unshift(worker.color)
|
171
174
|
end
|
172
175
|
if trigger_event
|
173
176
|
Invoker.commander.trigger(command_label, :worker_removed)
|
data/lib/invoker/version.rb
CHANGED
data/spec/invoker/config_spec.rb
CHANGED
@@ -155,7 +155,7 @@ command = ls
|
|
155
155
|
|
156
156
|
describe "Procfile" do
|
157
157
|
it "should load Procfiles and create config object" do
|
158
|
-
File.open("/tmp/Procfile", "w") {|fl|
|
158
|
+
File.open("/tmp/Procfile", "w") {|fl|
|
159
159
|
fl.write <<-EOD
|
160
160
|
web: bundle exec rails s -p $PORT
|
161
161
|
EOD
|
@@ -170,7 +170,7 @@ web: bundle exec rails s -p $PORT
|
|
170
170
|
|
171
171
|
describe "Copy of DNS information" do
|
172
172
|
it "should allow copy of DNS information" do
|
173
|
-
File.open("/tmp/Procfile", "w") {|fl|
|
173
|
+
File.open("/tmp/Procfile", "w") {|fl|
|
174
174
|
fl.write <<-EOD
|
175
175
|
web: bundle exec rails s -p $PORT
|
176
176
|
EOD
|
@@ -251,7 +251,7 @@ index = 1
|
|
251
251
|
config = Invoker::Parsers::Config.new(file.path, 9000)
|
252
252
|
processes = config.autorunnable_processes
|
253
253
|
expect(processes.map(&:label)).to eq(['panda-auth', 'postgres', 'memcached'])
|
254
|
-
expect(processes[0].sleep_duration).to eq(
|
254
|
+
expect(processes[0].sleep_duration).to eq(0)
|
255
255
|
expect(processes[1].sleep_duration).to eq(5)
|
256
256
|
ensure
|
257
257
|
file.unlink()
|
@@ -342,7 +342,7 @@ some_other_process: some_other_command
|
|
342
342
|
expect(config.process("some_process").cmd).to eq("some_command")
|
343
343
|
processes = config.autorunnable_processes
|
344
344
|
process_1 = processes[0]
|
345
|
-
expect(process_1.sleep_duration).to eq(
|
345
|
+
expect(process_1.sleep_duration).to eq(0)
|
346
346
|
expect(process_1.index).to eq(0)
|
347
347
|
ensure
|
348
348
|
File.delete(invoker_ini)
|
@@ -16,43 +16,55 @@ def mock_socat_scripts
|
|
16
16
|
fl.write(socat_content)
|
17
17
|
end
|
18
18
|
FileUtils.mkdir_p("/usr/bin")
|
19
|
+
FileUtils.mkdir_p("/etc/systemd/system")
|
19
20
|
end
|
20
21
|
|
21
22
|
describe Invoker::Power::LinuxSetup, fakefs: true do
|
22
23
|
before do
|
23
24
|
FileUtils.mkdir_p(inv_conf_dir)
|
24
25
|
FileUtils.mkdir_p(Invoker::Power::Distro::Base::RESOLVER_DIR)
|
26
|
+
Invoker.config = mock
|
25
27
|
end
|
26
28
|
|
27
29
|
let(:invoker_setup) { Invoker::Power::LinuxSetup.new('test') }
|
28
30
|
let(:distro_installer) { Invoker::Power::Distro::Ubuntu.new('test') }
|
29
31
|
|
30
|
-
|
31
|
-
|
32
|
+
before do
|
33
|
+
invoker_setup.distro_installer = distro_installer
|
34
|
+
end
|
32
35
|
|
33
|
-
|
34
|
-
|
35
|
-
invoker_setup.expects(:get_user_confirmation?).returns(true)
|
36
|
-
invoker_setup.expects(:install_resolver).returns(true)
|
37
|
-
invoker_setup.expects(:install_port_forwarder).returns(true)
|
38
|
-
invoker_setup.expects(:drop_to_normal_user).returns(true)
|
36
|
+
it "should only proceed after user confirmation" do
|
37
|
+
distro_installer.expects(:get_user_confirmation?).returns(false)
|
39
38
|
|
40
|
-
|
41
|
-
distro_installer.expects(:restart_services)
|
39
|
+
invoker_setup.setup_invoker
|
42
40
|
|
43
|
-
|
41
|
+
expect { Invoker::Power::Config.load_config }.to raise_error(Errno::ENOENT)
|
42
|
+
end
|
44
43
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
it "should create config file with http(s) ports" do
|
45
|
+
invoker_setup.expects(:initialize_distro_installer).returns(true)
|
46
|
+
invoker_setup.expects(:install_resolver).returns(true)
|
47
|
+
invoker_setup.expects(:install_port_forwarder).returns(true)
|
48
|
+
invoker_setup.expects(:drop_to_normal_user).returns(true)
|
49
|
+
|
50
|
+
distro_installer.expects(:get_user_confirmation?).returns(true)
|
51
|
+
distro_installer.expects(:install_required_software)
|
52
|
+
distro_installer.expects(:restart_services)
|
53
|
+
|
54
|
+
invoker_setup.setup_invoker
|
55
|
+
|
56
|
+
config = Invoker::Power::Config.load_config
|
57
|
+
expect(config.tld).to eq('test')
|
58
|
+
expect(config.http_port).not_to be_nil
|
59
|
+
expect(config.dns_port).to be_nil
|
60
|
+
expect(config.https_port).not_to be_nil
|
50
61
|
end
|
51
62
|
|
52
|
-
describe "configuring
|
63
|
+
describe "configuring services" do
|
64
|
+
let(:config) { Invoker::Power::Config.load_config }
|
65
|
+
|
53
66
|
before(:all) do
|
54
67
|
@original_invoker_config = Invoker.config
|
55
|
-
Invoker.config = mock
|
56
68
|
end
|
57
69
|
|
58
70
|
after(:all) do
|
@@ -60,26 +72,21 @@ describe Invoker::Power::LinuxSetup, fakefs: true do
|
|
60
72
|
end
|
61
73
|
|
62
74
|
before(:each) do
|
63
|
-
invoker_setup.distro_installer = distro_installer
|
64
75
|
mock_socat_scripts
|
65
76
|
end
|
66
77
|
|
67
|
-
|
78
|
+
def run_setup
|
68
79
|
invoker_setup.expects(:initialize_distro_installer).returns(true)
|
69
|
-
invoker_setup.expects(:get_user_confirmation?).returns(true)
|
70
80
|
invoker_setup.expects(:drop_to_normal_user).returns(true)
|
71
81
|
|
82
|
+
distro_installer.expects(:get_user_confirmation?).returns(true)
|
72
83
|
distro_installer.expects(:install_required_software)
|
73
84
|
distro_installer.expects(:restart_services)
|
74
85
|
|
75
86
|
invoker_setup.setup_invoker
|
87
|
+
end
|
76
88
|
|
77
|
-
|
78
|
-
|
79
|
-
dnsmasq_content = File.read(distro_installer.resolver_file)
|
80
|
-
expect(dnsmasq_content.strip).to_not be_empty
|
81
|
-
expect(dnsmasq_content).to match(/test/)
|
82
|
-
|
89
|
+
def test_socat_config
|
83
90
|
socat_content = File.read(Invoker::Power::Distro::Base::SOCAT_SHELLSCRIPT)
|
84
91
|
expect(socat_content.strip).to_not be_empty
|
85
92
|
expect(socat_content.strip).to match(/#{config.https_port}/)
|
@@ -88,15 +95,71 @@ describe Invoker::Power::LinuxSetup, fakefs: true do
|
|
88
95
|
service_file = File.read(Invoker::Power::Distro::Base::SOCAT_SYSTEMD)
|
89
96
|
expect(service_file.strip).to_not be_empty
|
90
97
|
end
|
98
|
+
|
99
|
+
context 'on ubuntu with systemd-resolved' do
|
100
|
+
it "should create socat config & set tld to localhost" do
|
101
|
+
distro_installer.expects(:using_systemd_resolved?).at_least_once.returns(true)
|
102
|
+
run_setup
|
103
|
+
expect(distro_installer.resolver_file).to be_nil
|
104
|
+
test_socat_config
|
105
|
+
expect(config.tld).to eq('localhost')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'on non-systemd-resolved distro' do
|
110
|
+
it "should create dnsmasq & socat configs" do
|
111
|
+
run_setup
|
112
|
+
dnsmasq_content = File.read(distro_installer.resolver_file)
|
113
|
+
expect(dnsmasq_content.strip).to_not be_empty
|
114
|
+
expect(dnsmasq_content).to match(/test/)
|
115
|
+
|
116
|
+
test_socat_config
|
117
|
+
end
|
118
|
+
end
|
91
119
|
end
|
92
120
|
|
93
121
|
describe 'resolver file' do
|
94
122
|
context 'user sets up a custom top level domain' do
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
123
|
+
let(:tld) { 'local' }
|
124
|
+
let(:linux_setup) { Invoker::Power::LinuxSetup.new(tld) }
|
125
|
+
|
126
|
+
context 'on ubuntu with systemd-resolved' do
|
127
|
+
it 'should not create a resolver file' do
|
128
|
+
ubuntu_installer = Invoker::Power::Distro::Ubuntu.new(tld)
|
129
|
+
linux_setup.distro_installer = ubuntu_installer
|
130
|
+
ubuntu_installer.expects(:using_systemd_resolved?).at_least_once.returns(true)
|
131
|
+
expect(linux_setup.resolver_file).to eq(nil)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'on non-systemd-resolved distro' do
|
136
|
+
it 'should create the correct resolver file' do
|
137
|
+
suse_installer = Invoker::Power::Distro::Opensuse.new(tld)
|
138
|
+
linux_setup.distro_installer = suse_installer
|
139
|
+
expect(linux_setup.resolver_file).to eq("/etc/dnsmasq.d/#{tld}-tld")
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe Invoker::Power::Distro::Base, docker: true do
|
147
|
+
describe '.distro_installer' do
|
148
|
+
it 'correctly recognizes the current distro' do
|
149
|
+
case ENV['DISTRO']
|
150
|
+
when 'archlinux/base', 'manjarolinux/base'
|
151
|
+
expect(described_class.distro_installer('')).to be_a Invoker::Power::Distro::Arch
|
152
|
+
when 'debian'
|
153
|
+
expect(described_class.distro_installer('')).to be_a Invoker::Power::Distro::Debian
|
154
|
+
when 'fedora'
|
155
|
+
expect(described_class.distro_installer('')).to be_a Invoker::Power::Distro::Redhat
|
156
|
+
when 'linuxmintd/mint20-amd64', 'ubuntu'
|
157
|
+
expect(described_class.distro_installer('')).to be_a Invoker::Power::Distro::Ubuntu
|
158
|
+
when 'opensuse/leap', 'opensuse/tumbleweed'
|
159
|
+
expect(described_class.distro_installer('')).to be_a Invoker::Power::Distro::Opensuse
|
160
|
+
when nil
|
161
|
+
else
|
162
|
+
raise 'Unrecognized Linux distro. Please add the appropriate docker image to the travis build matrix, update the described method, and add a case here.'
|
100
163
|
end
|
101
164
|
end
|
102
165
|
end
|