landrush 1.1.0.beta.1 → 1.1.0.beta.2

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.rubocop_todo.yml +5 -14
  4. data/.travis.yml +1 -1
  5. data/README.md +29 -5
  6. data/lib/landrush.rb +0 -2
  7. data/lib/landrush/action/setup.rb +2 -12
  8. data/lib/landrush/cap/{all → guest/all}/read_host_visible_ip_address.rb +0 -0
  9. data/lib/landrush/cap/{debian → guest/debian}/install_iptables.rb +0 -0
  10. data/lib/landrush/cap/{debian → guest/debian}/iptables_installed.rb +0 -0
  11. data/lib/landrush/cap/{linux → guest/linux}/add_iptables_rule.rb +1 -1
  12. data/lib/landrush/cap/{linux → guest/linux}/configured_dns_servers.rb +0 -0
  13. data/lib/landrush/cap/{linux → guest/linux}/redirect_dns.rb +0 -0
  14. data/lib/landrush/cap/{redhat → guest/redhat}/install_iptables.rb +0 -0
  15. data/lib/landrush/cap/{redhat → guest/redhat}/iptables_installed.rb +0 -0
  16. data/lib/landrush/cap/host/darwin/configure_visibility_on_host.rb +62 -0
  17. data/lib/landrush/cap/host/debian/dnsmasq_installed.rb +11 -0
  18. data/lib/landrush/cap/host/debian/host.rb +11 -0
  19. data/lib/landrush/cap/host/debian/install_dnsmasq.rb +12 -0
  20. data/lib/landrush/cap/host/debian/restart_dnsmasq.rb +11 -0
  21. data/lib/landrush/cap/host/linux/configure_visibility_on_host.rb +18 -0
  22. data/lib/landrush/cap/host/linux/create_dnsmasq_config.rb +65 -0
  23. data/lib/landrush/cap/host/redhat/dnsmasq_installed.rb +11 -0
  24. data/lib/landrush/cap/host/redhat/install_dnsmasq.rb +14 -0
  25. data/lib/landrush/cap/host/redhat/restart_dnsmasq.rb +23 -0
  26. data/lib/landrush/cap/host/ubuntu/host.rb +12 -0
  27. data/lib/landrush/cap/host/windows/configure_visibility_on_host.rb +187 -0
  28. data/lib/landrush/config.rb +22 -15
  29. data/lib/landrush/plugin.rb +68 -8
  30. data/lib/landrush/version.rb +1 -1
  31. data/test/landrush/action/setup_test.rb +4 -34
  32. data/test/landrush/cap/{all → guest/all}/read_host_visible_ip_address_test.rb +1 -1
  33. data/test/landrush/cap/{linux → guest/linux}/configured_dns_servers_test.rb +1 -1
  34. data/test/landrush/cap/{linux → guest/linux}/redirect_dns_test.rb +2 -5
  35. data/test/landrush/cap/host/darwin/configure_visibility_on_host_test.rb +56 -0
  36. data/test/landrush/cap/host/linux/configure_visibility_on_host_test.rb +34 -0
  37. data/test/landrush/cap/host/windows/configure_visibility_on_host_test.rb +70 -0
  38. data/test/test_helper.rb +28 -17
  39. metadata +34 -26
  40. data/lib/landrush/resolver_config.rb +0 -68
  41. data/lib/landrush/win_network_config.rb +0 -185
  42. data/test/landrush/resolver_config_test.rb +0 -19
  43. data/test/landrush/win_network_config_test.rb +0 -70
  44. data/test/support/fake_resolver_config.rb +0 -25
  45. data/test/support/fake_ui.rb +0 -5
@@ -1,4 +1,4 @@
1
- require_relative '../../../test_helper'
1
+ require_relative '../../../../test_helper'
2
2
 
3
3
  module Landrush
4
4
  module Cap
@@ -1,4 +1,4 @@
1
- require_relative '../../../test_helper'
1
+ require_relative '../../../../test_helper'
2
2
 
3
3
  describe Landrush::Cap::Linux::ConfiguredDnsServers do
4
4
  let(:machine) { fake_machine }
@@ -1,14 +1,11 @@
1
- require_relative '../../../test_helper'
1
+ require_relative '../../../../test_helper'
2
2
 
3
3
  describe Landrush::Cap::Linux::RedirectDns do
4
4
  let(:machine) { fake_machine }
5
5
 
6
6
  describe 'redirect_dns' do
7
7
  it 'fetches the dns servers from the machine, and adds one iptables rule per server' do
8
- machine.guest.stubs(:capability).with(:configured_dns_servers).returns([
9
- '1.2.3.4',
10
- '4.5.6.7'
11
- ])
8
+ machine.guest.stubs(:capability).with(:configured_dns_servers).returns(%w(1.2.3.4 4.5.6.7))
12
9
 
13
10
  machine.guest.expects(:capability).with(:add_iptables_rule, "OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 53 -j DNAT --to-destination 2.3.4.5:4321").once
14
11
  machine.guest.expects(:capability).with(:add_iptables_rule, "OUTPUT -t nat -p udp -d 1.2.3.4 --dport 53 -j DNAT --to-destination 2.3.4.5:4321").once
@@ -0,0 +1,56 @@
1
+ require_relative '../../../../test_helper'
2
+
3
+ module Landrush
4
+ module Cap
5
+ module Darwin
6
+ describe ConfigureVisibilityOnHost do
7
+ let(:env) { Vagrant::Environment.new }
8
+
9
+ CONFIG = <<-EOF.gsub(/^ +/, '')
10
+ # Generated by landrush, a vagrant plugin
11
+ nameserver 127.0.0.1
12
+ port #{Server.port}
13
+ EOF
14
+
15
+ describe 'configure_visibility_on_host' do
16
+ it 'writes a resolver config on the host' do
17
+ Dir.mktmpdir('landrush-test-dir-') do |dir|
18
+ # puts "Using #{dir} for testing"
19
+ Dir["#{dir}/*"].empty?.must_equal true
20
+
21
+ # stub some internal methods to make sure config gets written into tmp directory
22
+ ConfigureVisibilityOnHost.stubs(:config_dir).returns(Pathname(dir))
23
+ # also disable 'sudo'
24
+ ConfigureVisibilityOnHost.stubs(:sudo).returns('')
25
+
26
+ ConfigureVisibilityOnHost.configure_visibility_on_host(env)
27
+
28
+ Dir["#{dir}/*"].empty?.must_equal false
29
+ File.exist?(File.join(dir, 'vagrant.test')).must_equal true
30
+ Pathname(File.join(dir, 'vagrant.test')).read.must_equal CONFIG
31
+ end
32
+ end
33
+
34
+ it 'the config file is named after the configured tld' do
35
+ Dir.mktmpdir('landrush-test-dir-') do |dir|
36
+ # puts "Using #{dir} for testing"
37
+ Dir["#{dir}/*"].empty?.must_equal true
38
+
39
+ # stub some internal methods to make sure config gets written into tmp directory
40
+ ConfigureVisibilityOnHost.stubs(:config_dir).returns(Pathname(dir))
41
+ # also disable 'sudo'
42
+ ConfigureVisibilityOnHost.stubs(:sudo).returns('')
43
+
44
+ env.vagrantfile.config.landrush.tld = 'foo.bar'
45
+ ConfigureVisibilityOnHost.configure_visibility_on_host(env)
46
+
47
+ Dir["#{dir}/*"].empty?.must_equal false
48
+ File.exist?(File.join(dir, 'foo.bar')).must_equal true
49
+ Pathname(File.join(dir, 'foo.bar')).read.must_equal CONFIG
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../../../../test_helper'
2
+
3
+ module Landrush
4
+ module Cap
5
+ module Linux
6
+ describe ConfigureVisibilityOnHost do
7
+ TEST_IP = '10.42.42.42'.freeze
8
+ TEST_TLD = 'landrush.test'.freeze
9
+ TEST_CONFIG = "/etc/dnsmasq.d/vagrant-landrush-#{TEST_TLD}".freeze
10
+
11
+ CONFIG = <<-EOF.gsub(/^ +/, '')
12
+ # Generated by landrush, a vagrant plugin
13
+ server=/landrush.test/127.0.0.1#10053
14
+ EOF
15
+
16
+ after do
17
+ system("sudo rm #{TEST_CONFIG}") if Pathname(TEST_CONFIG).exist?
18
+ end
19
+
20
+ describe 'dnsmasq' do
21
+ it 'creates dnsmasq config' do
22
+ skip('Only supported on Linux') unless Vagrant::Util::Platform.linux?
23
+ File.exist?(TEST_CONFIG).must_equal false
24
+
25
+ Landrush::Cap::Linux::ConfigureVisibilityOnHost.configure_visibility_on_host(fake_environment, TEST_IP, TEST_TLD)
26
+
27
+ File.exist?(TEST_CONFIG).must_equal true
28
+ Pathname(TEST_CONFIG).read.must_equal CONFIG
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,70 @@
1
+ require_relative '../../../../test_helper'
2
+
3
+ module Landrush
4
+ module Cap
5
+ module Windows
6
+ describe ConfigureVisibilityOnHost do
7
+ TEST_IP = '10.42.42.42'.freeze
8
+
9
+ before do
10
+ @vboxmanage_found = !Vagrant::Util::Which.which('VBoxManage').nil?
11
+ @has_admin_privileges = Landrush::Cap::Windows::ConfigureVisibilityOnHost.admin_mode?
12
+ end
13
+
14
+ describe 'modify DNS settings of network adapter' do
15
+ it 'sets 127.0.0.1 as DNS server on the interface' do
16
+ skip('Only supported on Windows') unless Vagrant::Util::Platform.windows? && @vboxmanage_found && @has_admin_privileges
17
+
18
+ # VBoxManage uses the network description for its commands whereas netsh uses the name
19
+ # We need to get both
20
+ begin
21
+ old_network_state = network_state
22
+ network_description = create_test_interface
23
+ new_network_state = network_state
24
+ network_name = get_network_name(old_network_state, new_network_state)
25
+
26
+ get_dns_for_name(network_name).must_be_nil
27
+ Landrush::Cap::Windows::ConfigureVisibilityOnHost.configure_visibility_on_host(fake_environment, TEST_IP, 'landrush.test')
28
+ get_dns_for_name(network_name).must_equal '127.0.0.1'
29
+ rescue
30
+ delete_test_interface network_description
31
+ end
32
+ end
33
+ end
34
+
35
+ def network_state
36
+ `netsh interface ip show config`.split(/\n/).reject(&:empty?)
37
+ end
38
+
39
+ def get_network_name(old_network_state, new_network_state)
40
+ new_network_state.reject! { |line| old_network_state.include? line }
41
+ new_network_state[0].match(/.*\"(.*)\"$/).captures[0]
42
+ end
43
+
44
+ # Creates a test interface using VBoxMange and sets a known test IP
45
+ def create_test_interface
46
+ cmd_out = `VBoxManage hostonlyif create`
47
+ network_description = cmd_out.match(/.*'(.*)'.*/).captures[0]
48
+ `VBoxManage.exe hostonlyif ipconfig \"#{network_description}\" --ip #{TEST_IP}`
49
+ sleep 3
50
+ network_description
51
+ end
52
+
53
+ def delete_test_interface(name)
54
+ `VBoxManage hostonlyif remove \"#{name}\"`
55
+ end
56
+
57
+ def get_dns_for_name(name)
58
+ cmd_out = `netsh interface ip show config name=\"#{name}\"`
59
+ dns = cmd_out.split(/\n/).select { |settings| settings.match(/Statically Configured DNS Servers/m) }
60
+ # TODO: better error handling
61
+ begin
62
+ dns[0].match(/.* (\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}).*/).captures[0]
63
+ rescue
64
+ return nil
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
data/test/test_helper.rb CHANGED
@@ -4,10 +4,12 @@ require 'bundler/setup'
4
4
  require 'minitest/spec'
5
5
 
6
6
  require 'landrush'
7
- require 'landrush/cap/linux/configured_dns_servers'
8
- require 'landrush/cap/linux/redirect_dns'
9
- require 'landrush/cap/all/read_host_visible_ip_address'
10
- require 'landrush/win_network_config'
7
+ require 'landrush/cap/guest/linux/configured_dns_servers'
8
+ require 'landrush/cap/guest/linux/redirect_dns'
9
+ require 'landrush/cap/guest/all/read_host_visible_ip_address'
10
+ require 'landrush/cap/host/darwin/configure_visibility_on_host'
11
+ require 'landrush/cap/host/windows/configure_visibility_on_host'
12
+ require 'landrush/cap/host/linux/configure_visibility_on_host'
11
13
  require 'landrush/util/retry'
12
14
 
13
15
  require 'minitest/autorun'
@@ -17,19 +19,33 @@ require 'mocha/mini_test'
17
19
  # Putting include/exclude out of order is kind of the point though ;)
18
20
  def fake_addresses
19
21
  [
20
- { 'name' => 'exclude1', 'ipv4' => '172.28.128.1', 'ipv6' => '::1' },
21
- { 'name' => 'include1', 'ipv4' => '172.28.128.2', 'ipv6' => '::2' },
22
- { 'name' => 'include2', 'ipv4' => '172.28.128.3', 'ipv6' => '::3' },
23
- { 'name' => 'include3', 'ipv4' => '172.28.128.4', 'ipv6' => '::4' },
24
- { 'name' => 'exclude2', 'ipv4' => '172.28.128.5', 'ipv6' => '::5' },
25
- { 'name' => 'exclude3', 'ipv4' => '172.28.128.6', 'ipv6' => '::6' }
22
+ {'name' => 'exclude1', 'ipv4' => '172.28.128.1', 'ipv6' => '::1'},
23
+ {'name' => 'include1', 'ipv4' => '172.28.128.2', 'ipv6' => '::2'},
24
+ {'name' => 'include2', 'ipv4' => '172.28.128.3', 'ipv6' => '::3'},
25
+ {'name' => 'include3', 'ipv4' => '172.28.128.4', 'ipv6' => '::4'},
26
+ {'name' => 'exclude2', 'ipv4' => '172.28.128.5', 'ipv6' => '::5'},
27
+ {'name' => 'exclude3', 'ipv4' => '172.28.128.6', 'ipv6' => '::6'}
26
28
  ]
27
29
  end
28
30
 
29
- def fake_environment(options = { enabled: true })
31
+ def fake_environment(options = {enabled: true})
30
32
  # For the home_path we want the base Vagrant directory
31
33
  vagrant_test_home = Pathname(Landrush::Server.working_dir).parent.parent
32
- { machine: fake_machine(options), ui: FakeUI, home_path: vagrant_test_home }
34
+ env = Vagrant::Environment.new
35
+ {machine: fake_machine(options), host: env.host, ui: FakeUI.new, home_path: vagrant_test_home}
36
+ end
37
+
38
+ class FakeUI
39
+ attr_reader :received_info_messages
40
+
41
+ def initialize
42
+ @received_info_messages = []
43
+ end
44
+
45
+ def info(*args)
46
+ # puts "#{args}"
47
+ @received_info_messages << args[0]
48
+ end
33
49
  end
34
50
 
35
51
  class RecordingCommunicator
@@ -136,11 +152,6 @@ end
136
152
 
137
153
  # order is important on these
138
154
  require_relative 'support/create_fake_working_dir'
139
-
140
155
  require_relative 'support/clear_dependent_vms'
141
-
142
- require_relative 'support/fake_ui'
143
156
  require_relative 'support/test_server_daemon'
144
- require_relative 'support/fake_resolver_config'
145
-
146
157
  require_relative 'support/delete_fake_working_dir'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: landrush
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.beta.1
4
+ version: 1.1.0.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Hinze
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-04 00:00:00.000000000 Z
11
+ date: 2016-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubydns
@@ -101,41 +101,50 @@ files:
101
101
  - lib/landrush/action/redirect_dns.rb
102
102
  - lib/landrush/action/setup.rb
103
103
  - lib/landrush/action/teardown.rb
104
- - lib/landrush/cap/all/read_host_visible_ip_address.rb
105
- - lib/landrush/cap/debian/install_iptables.rb
106
- - lib/landrush/cap/debian/iptables_installed.rb
107
- - lib/landrush/cap/linux/add_iptables_rule.rb
108
- - lib/landrush/cap/linux/configured_dns_servers.rb
109
- - lib/landrush/cap/linux/redirect_dns.rb
110
- - lib/landrush/cap/redhat/install_iptables.rb
111
- - lib/landrush/cap/redhat/iptables_installed.rb
104
+ - lib/landrush/cap/guest/all/read_host_visible_ip_address.rb
105
+ - lib/landrush/cap/guest/debian/install_iptables.rb
106
+ - lib/landrush/cap/guest/debian/iptables_installed.rb
107
+ - lib/landrush/cap/guest/linux/add_iptables_rule.rb
108
+ - lib/landrush/cap/guest/linux/configured_dns_servers.rb
109
+ - lib/landrush/cap/guest/linux/redirect_dns.rb
110
+ - lib/landrush/cap/guest/redhat/install_iptables.rb
111
+ - lib/landrush/cap/guest/redhat/iptables_installed.rb
112
+ - lib/landrush/cap/host/darwin/configure_visibility_on_host.rb
113
+ - lib/landrush/cap/host/debian/dnsmasq_installed.rb
114
+ - lib/landrush/cap/host/debian/host.rb
115
+ - lib/landrush/cap/host/debian/install_dnsmasq.rb
116
+ - lib/landrush/cap/host/debian/restart_dnsmasq.rb
117
+ - lib/landrush/cap/host/linux/configure_visibility_on_host.rb
118
+ - lib/landrush/cap/host/linux/create_dnsmasq_config.rb
119
+ - lib/landrush/cap/host/redhat/dnsmasq_installed.rb
120
+ - lib/landrush/cap/host/redhat/install_dnsmasq.rb
121
+ - lib/landrush/cap/host/redhat/restart_dnsmasq.rb
122
+ - lib/landrush/cap/host/ubuntu/host.rb
123
+ - lib/landrush/cap/host/windows/configure_visibility_on_host.rb
112
124
  - lib/landrush/command.rb
113
125
  - lib/landrush/config.rb
114
126
  - lib/landrush/dependent_vms.rb
115
127
  - lib/landrush/plugin.rb
116
- - lib/landrush/resolver_config.rb
117
128
  - lib/landrush/server.rb
118
129
  - lib/landrush/store.rb
119
130
  - lib/landrush/util/retry.rb
120
131
  - lib/landrush/version.rb
121
- - lib/landrush/win_network_config.rb
122
132
  - test/landrush/action/setup_test.rb
123
133
  - test/landrush/action/teardown_test.rb
124
- - test/landrush/cap/all/read_host_visible_ip_address_test.rb
125
- - test/landrush/cap/linux/configured_dns_servers_test.rb
126
- - test/landrush/cap/linux/redirect_dns_test.rb
134
+ - test/landrush/cap/guest/all/read_host_visible_ip_address_test.rb
135
+ - test/landrush/cap/guest/linux/configured_dns_servers_test.rb
136
+ - test/landrush/cap/guest/linux/redirect_dns_test.rb
137
+ - test/landrush/cap/host/darwin/configure_visibility_on_host_test.rb
138
+ - test/landrush/cap/host/linux/configure_visibility_on_host_test.rb
139
+ - test/landrush/cap/host/windows/configure_visibility_on_host_test.rb
127
140
  - test/landrush/config_test.rb
128
141
  - test/landrush/dependent_vms_test.rb
129
- - test/landrush/resolver_config_test.rb
130
142
  - test/landrush/server_test.rb
131
143
  - test/landrush/store_test.rb
132
144
  - test/landrush/util/rety_test.rb
133
- - test/landrush/win_network_config_test.rb
134
145
  - test/support/clear_dependent_vms.rb
135
146
  - test/support/create_fake_working_dir.rb
136
147
  - test/support/delete_fake_working_dir.rb
137
- - test/support/fake_resolver_config.rb
138
- - test/support/fake_ui.rb
139
148
  - test/support/test_server_daemon.rb
140
149
  - test/test_helper.rb
141
150
  homepage: https://github.com/vagrant-landrush/landrush
@@ -170,20 +179,19 @@ test_files:
170
179
  - features/support/env.rb
171
180
  - test/landrush/action/setup_test.rb
172
181
  - test/landrush/action/teardown_test.rb
173
- - test/landrush/cap/all/read_host_visible_ip_address_test.rb
174
- - test/landrush/cap/linux/configured_dns_servers_test.rb
175
- - test/landrush/cap/linux/redirect_dns_test.rb
182
+ - test/landrush/cap/guest/all/read_host_visible_ip_address_test.rb
183
+ - test/landrush/cap/guest/linux/configured_dns_servers_test.rb
184
+ - test/landrush/cap/guest/linux/redirect_dns_test.rb
185
+ - test/landrush/cap/host/darwin/configure_visibility_on_host_test.rb
186
+ - test/landrush/cap/host/linux/configure_visibility_on_host_test.rb
187
+ - test/landrush/cap/host/windows/configure_visibility_on_host_test.rb
176
188
  - test/landrush/config_test.rb
177
189
  - test/landrush/dependent_vms_test.rb
178
- - test/landrush/resolver_config_test.rb
179
190
  - test/landrush/server_test.rb
180
191
  - test/landrush/store_test.rb
181
192
  - test/landrush/util/rety_test.rb
182
- - test/landrush/win_network_config_test.rb
183
193
  - test/support/clear_dependent_vms.rb
184
194
  - test/support/create_fake_working_dir.rb
185
195
  - test/support/delete_fake_working_dir.rb
186
- - test/support/fake_resolver_config.rb
187
- - test/support/fake_ui.rb
188
196
  - test/support/test_server_daemon.rb
189
197
  - test/test_helper.rb
@@ -1,68 +0,0 @@
1
- require 'tempfile'
2
-
3
- module Landrush
4
- class ResolverConfig
5
- class << self
6
- attr_writer :sudo, :config_dir
7
- end
8
-
9
- def self.sudo
10
- @sudo ||= 'sudo'
11
- end
12
-
13
- def self.config_dir
14
- @config_dir ||= Pathname('/etc/resolver')
15
- end
16
-
17
- def initialize(env={})
18
- @env = env
19
- end
20
-
21
- def info(msg)
22
- @env[:ui].info("[landrush] #{msg}")
23
- end
24
-
25
- def desired_contents; <<-EOS.gsub(/^ /, '')
26
- # Generated by landrush, a vagrant plugin
27
- nameserver 127.0.0.1
28
- port #{Server.port}
29
- EOS
30
- end
31
-
32
- def config_dir
33
- self.class.config_dir
34
- end
35
-
36
- def config_file
37
- config_dir.join(@env[:machine].config.landrush.tld)
38
- end
39
-
40
- def contents_match?
41
- config_file.exist? && File.read(config_file) == desired_contents
42
- end
43
-
44
- def write_config!
45
- info 'Momentarily using sudo to put the host config in place...'
46
- system "#{self.class.sudo} mkdir #{config_dir}" unless config_dir.directory?
47
- Tempfile.open('vagrant_landrush_host_config') do |f|
48
- f.write(desired_contents)
49
- f.close
50
- system "#{sudo} cp #{f.path} #{config_file}"
51
- system "#{sudo} chmod 644 #{config_file}"
52
- end
53
- end
54
-
55
- def ensure_config_exists!
56
- if contents_match?
57
- info 'Host DNS resolver config looks good.'
58
- else
59
- info 'Need to configure the host.'
60
- write_config!
61
- end
62
- end
63
-
64
- def sudo
65
- self.class.sudo
66
- end
67
- end
68
- end