vagrant 0.7.0.beta → 0.7.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/.gitignore +2 -0
  2. data/CHANGELOG.md +26 -0
  3. data/Gemfile +0 -8
  4. data/config/default.rb +1 -2
  5. data/contrib/README.md +12 -0
  6. data/contrib/emacs/vagrant.el +8 -0
  7. data/contrib/vim/vagrantfile.vim +9 -0
  8. data/lib/vagrant.rb +14 -18
  9. data/lib/vagrant/action.rb +12 -0
  10. data/lib/vagrant/action/box.rb +11 -0
  11. data/lib/vagrant/action/box/download.rb +0 -1
  12. data/lib/vagrant/action/env.rb +7 -0
  13. data/lib/vagrant/action/general.rb +8 -0
  14. data/lib/vagrant/action/vm.rb +30 -0
  15. data/lib/vagrant/action/vm/boot.rb +3 -2
  16. data/lib/vagrant/action/vm/check_box.rb +1 -0
  17. data/lib/vagrant/action/vm/network.rb +1 -1
  18. data/lib/vagrant/action/vm/nfs.rb +3 -1
  19. data/lib/vagrant/action/vm/provision.rb +14 -25
  20. data/lib/vagrant/action/vm/share_folders.rb +11 -4
  21. data/lib/vagrant/command.rb +25 -0
  22. data/lib/vagrant/config.rb +78 -128
  23. data/lib/vagrant/config/base.rb +17 -3
  24. data/lib/vagrant/config/ssh.rb +1 -0
  25. data/lib/vagrant/config/top.rb +61 -0
  26. data/lib/vagrant/config/vagrant.rb +1 -6
  27. data/lib/vagrant/config/vm.rb +34 -20
  28. data/lib/vagrant/config/vm/provisioner.rb +56 -0
  29. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  30. data/lib/vagrant/downloaders.rb +7 -0
  31. data/lib/vagrant/downloaders/file.rb +1 -0
  32. data/lib/vagrant/downloaders/http.rb +9 -0
  33. data/lib/vagrant/environment.rb +25 -13
  34. data/lib/vagrant/errors.rb +0 -15
  35. data/lib/vagrant/hosts.rb +7 -0
  36. data/lib/vagrant/provisioners.rb +8 -0
  37. data/lib/vagrant/provisioners/base.rb +19 -1
  38. data/lib/vagrant/provisioners/chef.rb +31 -52
  39. data/lib/vagrant/provisioners/chef_server.rb +34 -10
  40. data/lib/vagrant/provisioners/chef_solo.rb +31 -9
  41. data/lib/vagrant/provisioners/puppet.rb +70 -60
  42. data/lib/vagrant/provisioners/puppet_server.rb +57 -0
  43. data/lib/vagrant/ssh.rb +3 -72
  44. data/lib/vagrant/ssh/session.rb +81 -0
  45. data/lib/vagrant/systems.rb +9 -0
  46. data/lib/vagrant/systems/base.rb +16 -1
  47. data/lib/vagrant/systems/debian.rb +26 -0
  48. data/lib/vagrant/systems/gentoo.rb +27 -0
  49. data/lib/vagrant/systems/linux.rb +14 -56
  50. data/lib/vagrant/systems/linux/config.rb +21 -0
  51. data/lib/vagrant/systems/linux/error.rb +9 -0
  52. data/lib/vagrant/systems/redhat.rb +31 -0
  53. data/lib/vagrant/test_helpers.rb +1 -1
  54. data/lib/vagrant/version.rb +1 -1
  55. data/lib/vagrant/vm.rb +25 -5
  56. data/templates/chef_solo_solo.erb +11 -3
  57. data/templates/locales/en.yml +65 -25
  58. data/templates/{network_entry.erb → network_entry_debian.erb} +0 -0
  59. data/templates/network_entry_gentoo.erb +7 -0
  60. data/templates/network_entry_redhat.erb +8 -0
  61. data/test/vagrant/action/vm/check_box_test.rb +1 -0
  62. data/test/vagrant/action/vm/nfs_test.rb +7 -1
  63. data/test/vagrant/action/vm/provision_test.rb +24 -79
  64. data/test/vagrant/action/vm/share_folders_test.rb +6 -1
  65. data/test/vagrant/command/helpers_test.rb +2 -2
  66. data/test/vagrant/config/base_test.rb +0 -6
  67. data/test/vagrant/config/vagrant_test.rb +0 -8
  68. data/test/vagrant/config/vm/provisioner_test.rb +92 -0
  69. data/test/vagrant/config/vm_test.rb +8 -0
  70. data/test/vagrant/config_test.rb +49 -89
  71. data/test/vagrant/downloaders/file_test.rb +18 -4
  72. data/test/vagrant/environment_test.rb +36 -12
  73. data/test/vagrant/provisioners/base_test.rb +28 -1
  74. data/test/vagrant/provisioners/chef_server_test.rb +50 -41
  75. data/test/vagrant/provisioners/chef_solo_test.rb +39 -16
  76. data/test/vagrant/provisioners/chef_test.rb +11 -81
  77. data/test/vagrant/provisioners/puppet_server_test.rb +69 -0
  78. data/test/vagrant/provisioners/puppet_test.rb +69 -54
  79. data/test/vagrant/{ssh_session_test.rb → ssh/session_test.rb} +0 -0
  80. data/test/vagrant/ssh_test.rb +12 -1
  81. data/test/vagrant/systems/base_test.rb +18 -0
  82. data/test/vagrant/systems/linux_test.rb +2 -2
  83. data/test/vagrant/vm_test.rb +33 -5
  84. data/vagrant.gemspec +6 -5
  85. metadata +42 -16
  86. data/lib/vagrant/util/glob_loader.rb +0 -24
@@ -116,6 +116,7 @@ class ShareFoldersVMActionTest < Test::Unit::TestCase
116
116
  @folders = stub_shared_folders(<<-sf)
117
117
  config.vm.share_folder("foo", "fooguest", "foohost")
118
118
  config.vm.share_folder("bar", "barguest", "barhost")
119
+ config.vm.share_folder("foo_no_mount", nil, "foohost2")
119
120
  sf
120
121
  @ssh = mock("ssh")
121
122
  @vm.ssh.stubs(:execute).yields(@ssh)
@@ -125,7 +126,11 @@ class ShareFoldersVMActionTest < Test::Unit::TestCase
125
126
  should "mount all shared folders to the VM" do
126
127
  mount_seq = sequence("mount_seq")
127
128
  @folders.each do |name, data|
128
- @vm.system.expects(:mount_shared_folder).with(@ssh, name, data[:guestpath]).in_sequence(mount_seq)
129
+ if data[:guestpath]
130
+ @vm.system.expects(:mount_shared_folder).with(@ssh, name, data[:guestpath]).in_sequence(mount_seq)
131
+ else
132
+ @vm.system.expects(:mount_shared_folder).with(@ssh, name, anything).never
133
+ end
129
134
  end
130
135
 
131
136
  @instance.mount_shared_folders
@@ -52,7 +52,7 @@ class CommandHelpersTest < Test::Unit::TestCase
52
52
  should "return the VM if no name is specified" do
53
53
  instance = command([], @env)
54
54
  assert_nothing_raised {
55
- assert_equal @env.vms.values, instance.target_vms
55
+ assert_equal @env.vms.values.sort, instance.target_vms.sort
56
56
  }
57
57
  end
58
58
  end
@@ -64,7 +64,7 @@ class CommandHelpersTest < Test::Unit::TestCase
64
64
 
65
65
  should "return all the VMs if no name is specified" do
66
66
  instance = command([], @env)
67
- assert_equal @env.vms.values, instance.target_vms
67
+ assert_equal @env.vms.values.sort, instance.target_vms.sort
68
68
  end
69
69
 
70
70
  should "return only the specified VM if a name is given" do
@@ -42,12 +42,6 @@ class ConfigBaseTest < Test::Unit::TestCase
42
42
  assert_equal @json, @base.to_json
43
43
  end
44
44
 
45
- should "not include env in the JSON hash" do
46
- @base.env = "FOO"
47
- hash = @base.instance_variables_hash
48
- assert !hash.has_key?(:env)
49
- end
50
-
51
45
  should "not include top in the JSON hash" do
52
46
  @base.top = "FOO"
53
47
  hash = @base.instance_variables_hash
@@ -8,7 +8,6 @@ class ConfigVagrantTest < Test::Unit::TestCase
8
8
  context "validation" do
9
9
  setup do
10
10
  @config.dotfile_name = "foo"
11
- @config.home = "foo"
12
11
  @config.host = "foo"
13
12
 
14
13
  @errors = Vagrant::Config::ErrorRecorder.new
@@ -26,13 +25,6 @@ class ConfigVagrantTest < Test::Unit::TestCase
26
25
  assert !@errors.errors.empty?
27
26
  end
28
27
 
29
- should "be invalid with no home" do
30
- @config.home = nil
31
-
32
- @config.validate(@errors)
33
- assert !@errors.errors.empty?
34
- end
35
-
36
28
  should "be invalid with no host" do
37
29
  @config.host = nil
38
30
 
@@ -0,0 +1,92 @@
1
+ require "test_helper"
2
+
3
+ class ConfigVMProvisionerTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Config::VMConfig::Provisioner
6
+ @top = Vagrant::Config::Top.new(nil)
7
+ end
8
+
9
+ context "initializing" do
10
+ should "expose the top instance that the provisioner belongs to" do
11
+ instance = @klass.new(@top, :chef_solo)
12
+ assert_equal @top, instance.top
13
+ end
14
+
15
+ should "expose the shortcut used" do
16
+ instance = @klass.new(@top, :chef_solo)
17
+ assert_equal :chef_solo, instance.shortcut
18
+ end
19
+
20
+ should "expose the provisioner class if its a valid shortcut" do
21
+ instance = @klass.new(@top, :chef_solo)
22
+ assert_equal Vagrant::Provisioners::ChefSolo, instance.provisioner
23
+ end
24
+
25
+ should "expose the provisioner class if its a valid class" do
26
+ instance = @klass.new(@top, Vagrant::Provisioners::ChefSolo)
27
+ assert_equal Vagrant::Provisioners::ChefSolo, instance.provisioner
28
+ end
29
+
30
+ should "have a nil provisioner class if invalid" do
31
+ instance = @klass.new(@top, :i_shall_never_exist)
32
+ assert_nil instance.provisioner
33
+ end
34
+
35
+ should "have a nil config instance if invalid" do
36
+ instance = @klass.new(@top, :i_shall_never_exist)
37
+ assert_nil instance.config
38
+ end
39
+
40
+ should "set the top of the config object to the given top" do
41
+ instance = @klass.new(@top, :chef_solo)
42
+ assert_equal @top, instance.config.top
43
+ end
44
+
45
+ should "configure the provisioner if valid" do
46
+ instance = @klass.new(@top, :chef_solo) do |chef|
47
+ chef.cookbooks_path = "foo"
48
+ end
49
+
50
+ assert_equal "foo", instance.config.cookbooks_path
51
+ end
52
+
53
+ should "configure the provisioner with a hash if valid" do
54
+ instance = @klass.new(@top, :chef_solo, :cookbooks_path => "foo")
55
+ assert_equal "foo", instance.config.cookbooks_path
56
+ end
57
+ end
58
+
59
+ context "validation" do
60
+ setup do
61
+ @errors = Vagrant::Config::ErrorRecorder.new
62
+ end
63
+
64
+ should "be invalid if provisioner is valid" do
65
+ instance = @klass.new(@top, :i_shall_never_exist)
66
+ instance.validate(@errors)
67
+ assert !@errors.errors.empty?
68
+ end
69
+
70
+ should "be invalid if provisioner doesn't inherit from provisioners base" do
71
+ klass = Class.new
72
+ instance = @klass.new(@top, klass)
73
+ instance.validate(@errors)
74
+ assert !@errors.errors.empty?
75
+ end
76
+
77
+ should "be valid with a valid provisioner" do
78
+ instance = @klass.new(@top, :chef_solo) do |chef|
79
+ chef.add_recipe "foo"
80
+ end
81
+
82
+ instance.validate(@errors)
83
+ assert @errors.errors.empty?
84
+ end
85
+
86
+ should "be invalid if a provisioner's config is invalid" do
87
+ instance = @klass.new(@top, :chef_solo)
88
+ instance.validate(@errors)
89
+ assert !@errors.errors.empty?
90
+ end
91
+ end
92
+ end
@@ -75,4 +75,12 @@ class ConfigVMTest < Test::Unit::TestCase
75
75
  assert_equal @username, @config.shared_folder_gid
76
76
  end
77
77
  end
78
+
79
+ context "deprecated config" do
80
+ should "raise an error for provisioner=" do
81
+ assert_raises(Vagrant::Errors::VagrantError) {
82
+ @config.provisioner = :chef_solo
83
+ }
84
+ end
85
+ end
78
86
  end
@@ -5,117 +5,79 @@ class ConfigTest < Test::Unit::TestCase
5
5
  @klass = Vagrant::Config
6
6
  end
7
7
 
8
- context "with an instance" do
9
- setup do
10
- @env = vagrant_env
11
- @instance = @klass.new(@env)
12
- end
8
+ context "with the class" do
9
+ should "allow access to the last proc" do
10
+ foo = mock("object")
11
+ foo.expects(:call).once
13
12
 
14
- should "initially have an empty queue" do
15
- assert @instance.queue.empty?
16
- end
13
+ @klass.run { |config| foo.call }
14
+ value = @klass.last_proc.first
15
+ assert value.is_a?(Proc)
16
+ value.call(nil)
17
17
 
18
- should "reset the config class on load, then execute" do
19
- seq = sequence("sequence")
20
- @klass.expects(:reset!).with(@env).in_sequence(seq)
21
- @klass.expects(:execute!).in_sequence(seq)
22
- @instance.load!
18
+ assert @klass.last_proc.nil?
23
19
  end
20
+ end
24
21
 
25
- should "run the queue in the order given" do
26
- @instance.queue << Proc.new { |config| config.vm.box = "foo" }
27
- @instance.queue << Proc.new { |config| config.vm.box = "bar" }
28
- result = @instance.load!
29
-
30
- assert_equal "bar", result.vm.box
22
+ context "with an instance" do
23
+ setup do
24
+ @instance = @klass.new
31
25
  end
32
26
 
33
- should "allow nested arrays" do
34
- queue = []
35
- queue << Proc.new { |config| config.vm.box = "foo" }
36
- queue << Proc.new { |config| config.vm.box = "bar" }
37
- @instance.queue << queue
38
- result = @instance.load!
27
+ should "load the config files in the given order" do
28
+ names = %w{alpha beta gamma}
39
29
 
40
- assert_equal "bar", result.vm.box
41
- end
30
+ @instance.load_order = [:alpha, :beta]
42
31
 
43
- should "load a file if it exists" do
44
- filename = "foo"
45
- File.expects(:exist?).with(filename).returns(true)
46
- @instance.expects(:load).with(filename).once
32
+ names.each do |name|
33
+ vagrantfile(vagrant_box(name), "config.vm.box = '#{name}'")
34
+ @instance.set(name.to_sym, vagrant_box(name).join("Vagrantfile"))
35
+ end
47
36
 
48
- @instance.queue << filename
49
- @instance.load!
37
+ config = @instance.load(nil)
38
+ assert_equal "beta", config.vm.box
50
39
  end
51
40
 
52
- should "not load a file if it doesn't exist" do
53
- filename = "foo"
54
- File.expects(:exist?).with(filename).returns(false)
55
- @instance.expects(:load).with(filename).never
41
+ should "load the config as procs" do
42
+ @instance.set(:proc, Proc.new { |config| config.vm.box = "proc" })
43
+ @instance.load_order = [:proc]
44
+ config = @instance.load(nil)
56
45
 
57
- @instance.queue << filename
58
- @instance.load!
46
+ assert_equal "proc", config.vm.box
59
47
  end
60
48
 
61
- should "raise an exception if there is a syntax error in a file" do
62
- @instance.queue << "foo"
63
- File.expects(:exist?).with("foo").returns(true)
64
- @instance.expects(:load).with("foo").raises(SyntaxError.new)
49
+ should "load an array of procs" do
50
+ @instance.set(:proc, [Proc.new { |config| config.vm.box = "proc" },
51
+ Proc.new { |config| config.vm.box = "proc2" }])
52
+ @instance.load_order = [:proc]
53
+ config = @instance.load(nil)
65
54
 
66
- assert_raises(Vagrant::Errors::VagrantfileSyntaxError) {
67
- @instance.load!
68
- }
55
+ assert_equal "proc2", config.vm.box
69
56
  end
70
- end
71
57
 
72
- context "resetting" do
73
- setup do
74
- @klass.reset!(vagrant_env)
75
- @klass::Top.any_instance.stubs(:validate!)
76
- @klass.run { |config| }
77
- @klass.execute!
58
+ should "not care if a file doesn't exist" do
59
+ @instance.load_order = [:foo]
60
+ assert_nothing_raised { @instance.set(:foo, "i/dont/exist") }
61
+ assert_nothing_raised { @instance.load(nil) }
78
62
  end
79
63
 
80
- should "return the same config object typically" do
81
- config = @klass.config
82
- assert config.equal?(@klass.config)
83
- end
64
+ should "not reload a file" do
65
+ foo_path = vagrant_box("foo").join("Vagrantfile")
84
66
 
85
- should "create a new object if cleared" do
86
- config = @klass.config
87
- @klass.reset!
88
- assert !config.equal?(@klass.config)
89
- end
67
+ vagrantfile(vagrant_box("foo"))
68
+ @instance.set(:foo, foo_path)
90
69
 
91
- should "empty the proc stack" do
92
- assert !@klass.proc_stack.empty?
93
- @klass.reset!
94
- assert @klass.proc_stack.empty?
70
+ # Nothing should be raised in this case because the file isn't reloaded
71
+ vagrantfile(vagrant_box("foo"), "^%&8318")
72
+ assert_nothing_raised { @instance.set(:foo, foo_path) }
95
73
  end
96
74
 
97
- should "reload the config object based on the given environment" do
98
- env = mock("env")
99
- @klass.expects(:config).with(env).once
100
- @klass.reset!(env)
101
- end
102
- end
103
-
104
- context "initializing" do
105
- setup do
106
- @klass.reset!(vagrant_env)
107
- end
108
-
109
- should "add the given block to the proc stack" do
110
- proc = Proc.new {}
111
- @klass.run(&proc)
112
- assert_equal [proc], @klass.proc_stack
113
- end
75
+ should "raise an exception if there is a syntax error in a file" do
76
+ vagrantfile(vagrant_box("foo"), "^%&8318")
114
77
 
115
- should "return the configuration on execute!" do
116
- @klass.run {}
117
- result = @klass.execute!
118
- assert result.is_a?(@klass::Top)
78
+ assert_raises(Vagrant::Errors::VagrantfileSyntaxError) {
79
+ @instance.set(:foo, vagrant_box("foo").join("Vagrantfile"))
80
+ }
119
81
  end
120
82
  end
121
83
 
@@ -149,7 +111,6 @@ class ConfigTest < Test::Unit::TestCase
149
111
  key = "key#{i}"
150
112
  klass = mock("klass#{i}")
151
113
  instance = mock("instance#{i}")
152
- instance.expects(:env=).with(env)
153
114
  instance.expects(:top=).with() do |top|
154
115
  assert top.is_a?(@klass::Top)
155
116
  true
@@ -165,7 +126,6 @@ class ConfigTest < Test::Unit::TestCase
165
126
  key = "my_foo_bar_key"
166
127
  klass = mock("klass")
167
128
  instance = mock("instance")
168
- instance.stubs(:env=)
169
129
  instance.stubs(:top=)
170
130
  klass.expects(:new).returns(instance)
171
131
  @klass::Top.configures(key, klass)
@@ -17,11 +17,25 @@ class FileDownloaderTest < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  context "downloading" do
20
+ setup do
21
+ clean_paths
22
+ end
23
+
20
24
  should "cp the file" do
21
- path = '/path'
22
- @tempfile.expects(:path).returns(path)
23
- FileUtils.expects(:cp).with(@uri, path)
24
- @downloader.download!(@uri, @tempfile)
25
+ uri = tmp_path.join("foo_source")
26
+ dest = tmp_path.join("foo_dest")
27
+
28
+ # Create the source file, then "download" it
29
+ File.open(uri, "w+") { |f| f.write("FOO") }
30
+ File.open(dest, "w+") do |dest_file|
31
+ @downloader.download!(uri, dest_file)
32
+ end
33
+
34
+ # Finally, verify the destination file was properly created
35
+ assert File.file?(dest)
36
+ File.open(dest) do |f|
37
+ assert_equal "FOO", f.read
38
+ end
25
39
  end
26
40
  end
27
41
 
@@ -4,15 +4,17 @@ require "pathname"
4
4
  class EnvironmentTest < Test::Unit::TestCase
5
5
  setup do
6
6
  @klass = Vagrant::Environment
7
+
8
+ clean_paths
7
9
  end
8
10
 
9
11
  context "class method check virtualbox version" do
10
12
  setup do
11
- VirtualBox.stubs(:version).returns("3.1.4")
13
+ VirtualBox.stubs(:version).returns("4.0.0")
12
14
  end
13
15
 
14
16
  should "not error and exit if everything is good" do
15
- VirtualBox.expects(:version).returns("3.2.4")
17
+ VirtualBox.expects(:version).returns("4.0.0")
16
18
  assert_nothing_raised { @klass.check_virtualbox! }
17
19
  end
18
20
 
@@ -21,17 +23,11 @@ class EnvironmentTest < Test::Unit::TestCase
21
23
  assert_raises(Vagrant::Errors::VirtualBoxNotDetected) { @klass.check_virtualbox! }
22
24
  end
23
25
 
24
- should "error and exit if VirtualBox is lower than version 3.2" do
25
- version = "3.1.12r1041"
26
+ should "error and exit if VirtualBox is lower than version 4.0" do
27
+ version = "3.2.12r1041"
26
28
  VirtualBox.expects(:version).returns(version)
27
29
  assert_raises(Vagrant::Errors::VirtualBoxInvalidVersion) { @klass.check_virtualbox! }
28
30
  end
29
-
30
- should "error and exit for OSE VirtualBox" do
31
- version = "3.2.6_OSE"
32
- VirtualBox.expects(:version).returns(version)
33
- assert_raises(Vagrant::Errors::VirtualBoxInvalidOSE) { @klass.check_virtualbox! }
34
- end
35
31
  end
36
32
 
37
33
  context "initialization" do
@@ -59,8 +55,21 @@ class EnvironmentTest < Test::Unit::TestCase
59
55
  end
60
56
 
61
57
  context "home path" do
58
+ setup do
59
+ @env = @klass.new
60
+ end
61
+
62
62
  should "return the home path if it loaded" do
63
- expected = Pathname.new(File.expand_path(@env.config.vagrant.home, @env.root_path))
63
+ ENV["VAGRANT_HOME"] = nil
64
+
65
+ expected = Pathname.new(File.expand_path(@klass::DEFAULT_HOME))
66
+ assert_equal expected, @env.home_path
67
+ end
68
+
69
+ should "return the home path set by the environmental variable" do
70
+ ENV["VAGRANT_HOME"] = "foo"
71
+
72
+ expected = Pathname.new(File.expand_path(ENV["VAGRANT_HOME"]))
64
73
  assert_equal expected, @env.home_path
65
74
  end
66
75
  end
@@ -391,7 +400,7 @@ class EnvironmentTest < Test::Unit::TestCase
391
400
  create_box_vagrantfile
392
401
  vagrantfile(@env.root_path, "config.vm.box = 'box'")
393
402
 
394
- assert_equal "box.box", @env.config.package.name
403
+ assert_equal "box.box", @env.primary_vm.env.config.package.name
395
404
  end
396
405
 
397
406
  should "load from home path if exists" do
@@ -425,6 +434,21 @@ class EnvironmentTest < Test::Unit::TestCase
425
434
  @env.load_config!
426
435
  assert @env.instance_variable_get(:@logger).nil?
427
436
  end
437
+
438
+ should "be able to reload config" do
439
+ vagrantfile(@env.root_path, "config.vm.box = 'box'")
440
+
441
+ # First load the config normally
442
+ @env.load_config!
443
+ assert_equal "box", @env.config.vm.box
444
+ assert_not_equal "set", @env.config.vm.base_mac
445
+
446
+ # Modify the Vagrantfile and reload it, then verify new results
447
+ # are available
448
+ vagrantfile(@env.root_path, "config.vm.base_mac = 'set'")
449
+ @env.reload_config!
450
+ assert_equal "set", @env.config.vm.base_mac
451
+ end
428
452
  end
429
453
 
430
454
  context "loading home directory" do