vagrantup 0.1.0
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 +7 -0
 - data/.gitignore +11 -0
 - data/Gemfile +17 -0
 - data/README.md +45 -0
 - data/Rakefile +41 -0
 - data/VERSION +1 -0
 - data/bin/.gitignore +0 -0
 - data/bin/vagrant +15 -0
 - data/bin/vagrant-box +35 -0
 - data/bin/vagrant-down +28 -0
 - data/bin/vagrant-halt +29 -0
 - data/bin/vagrant-init +28 -0
 - data/bin/vagrant-package +30 -0
 - data/bin/vagrant-reload +30 -0
 - data/bin/vagrant-resume +28 -0
 - data/bin/vagrant-ssh +28 -0
 - data/bin/vagrant-suspend +28 -0
 - data/bin/vagrant-up +30 -0
 - data/config/default.rb +29 -0
 - data/lib/vagrant.rb +14 -0
 - data/lib/vagrant/actions/base.rb +93 -0
 - data/lib/vagrant/actions/box/add.rb +22 -0
 - data/lib/vagrant/actions/box/destroy.rb +14 -0
 - data/lib/vagrant/actions/box/download.rb +63 -0
 - data/lib/vagrant/actions/box/unpackage.rb +49 -0
 - data/lib/vagrant/actions/runner.rb +128 -0
 - data/lib/vagrant/actions/vm/destroy.rb +14 -0
 - data/lib/vagrant/actions/vm/down.rb +12 -0
 - data/lib/vagrant/actions/vm/export.rb +41 -0
 - data/lib/vagrant/actions/vm/forward_ports.rb +32 -0
 - data/lib/vagrant/actions/vm/halt.rb +14 -0
 - data/lib/vagrant/actions/vm/import.rb +17 -0
 - data/lib/vagrant/actions/vm/move_hard_drive.rb +53 -0
 - data/lib/vagrant/actions/vm/package.rb +61 -0
 - data/lib/vagrant/actions/vm/provision.rb +71 -0
 - data/lib/vagrant/actions/vm/reload.rb +17 -0
 - data/lib/vagrant/actions/vm/resume.rb +16 -0
 - data/lib/vagrant/actions/vm/shared_folders.rb +69 -0
 - data/lib/vagrant/actions/vm/start.rb +50 -0
 - data/lib/vagrant/actions/vm/suspend.rb +16 -0
 - data/lib/vagrant/actions/vm/up.rb +35 -0
 - data/lib/vagrant/box.rb +129 -0
 - data/lib/vagrant/busy.rb +73 -0
 - data/lib/vagrant/commands.rb +174 -0
 - data/lib/vagrant/config.rb +156 -0
 - data/lib/vagrant/downloaders/base.rb +13 -0
 - data/lib/vagrant/downloaders/file.rb +21 -0
 - data/lib/vagrant/downloaders/http.rb +47 -0
 - data/lib/vagrant/env.rb +140 -0
 - data/lib/vagrant/ssh.rb +43 -0
 - data/lib/vagrant/util.rb +45 -0
 - data/lib/vagrant/vm.rb +57 -0
 - data/script/vagrant-ssh-expect.sh +22 -0
 - data/templates/Vagrantfile +8 -0
 - data/test/test_helper.rb +91 -0
 - data/test/vagrant/actions/base_test.rb +32 -0
 - data/test/vagrant/actions/box/add_test.rb +37 -0
 - data/test/vagrant/actions/box/destroy_test.rb +18 -0
 - data/test/vagrant/actions/box/download_test.rb +118 -0
 - data/test/vagrant/actions/box/unpackage_test.rb +101 -0
 - data/test/vagrant/actions/runner_test.rb +236 -0
 - data/test/vagrant/actions/vm/destroy_test.rb +24 -0
 - data/test/vagrant/actions/vm/down_test.rb +32 -0
 - data/test/vagrant/actions/vm/export_test.rb +88 -0
 - data/test/vagrant/actions/vm/forward_ports_test.rb +50 -0
 - data/test/vagrant/actions/vm/halt_test.rb +27 -0
 - data/test/vagrant/actions/vm/import_test.rb +36 -0
 - data/test/vagrant/actions/vm/move_hard_drive_test.rb +108 -0
 - data/test/vagrant/actions/vm/package_test.rb +155 -0
 - data/test/vagrant/actions/vm/provision_test.rb +103 -0
 - data/test/vagrant/actions/vm/reload_test.rb +44 -0
 - data/test/vagrant/actions/vm/resume_test.rb +27 -0
 - data/test/vagrant/actions/vm/shared_folders_test.rb +117 -0
 - data/test/vagrant/actions/vm/start_test.rb +55 -0
 - data/test/vagrant/actions/vm/suspend_test.rb +27 -0
 - data/test/vagrant/actions/vm/up_test.rb +76 -0
 - data/test/vagrant/box_test.rb +92 -0
 - data/test/vagrant/busy_test.rb +81 -0
 - data/test/vagrant/commands_test.rb +252 -0
 - data/test/vagrant/config_test.rb +123 -0
 - data/test/vagrant/downloaders/base_test.rb +20 -0
 - data/test/vagrant/downloaders/file_test.rb +32 -0
 - data/test/vagrant/downloaders/http_test.rb +40 -0
 - data/test/vagrant/env_test.rb +293 -0
 - data/test/vagrant/ssh_test.rb +95 -0
 - data/test/vagrant/util_test.rb +64 -0
 - data/test/vagrant/vm_test.rb +96 -0
 - metadata +263 -0
 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class BaseActionTest < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              should "include the util class so subclasses have access to it" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                assert Vagrant::Actions::Base.include?(Vagrant::Util)
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              context "base instance" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @mock_vm = mock("vm")
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @base = Vagrant::Actions::Base.new(@mock_vm)
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                should "allow read-only access to the runner" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  assert_equal @mock_vm, @base.runner
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                should "implement prepare which does nothing" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  assert_nothing_raised do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    assert @base.respond_to?(:prepare)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @base.prepare
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                should "implement the execute! method which does nothing" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  assert_nothing_raised do
         
     | 
| 
      
 27 
     | 
    
         
            +
                    assert @base.respond_to?(:execute!)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @base.execute!
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class AddBoxActionTest < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              setup do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @runner, @vm, @action = mock_action(Vagrant::Actions::Box::Add)
         
     | 
| 
      
 6 
     | 
    
         
            +
                mock_config
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              context "prepare" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @default_order = [Vagrant::Actions::Box::Download, Vagrant::Actions::Box::Unpackage]
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @runner.stubs(:directory).returns("foo")
         
     | 
| 
      
 13 
     | 
    
         
            +
                  File.stubs(:exists?).returns(false)
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def setup_action_expectations
         
     | 
| 
      
 17 
     | 
    
         
            +
                  default_seq = sequence("default_seq")
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @default_order.each do |action|
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @runner.expects(:add_action).with(action).once.in_sequence(default_seq)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                should "setup the proper sequence of actions" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  setup_action_expectations
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @action.prepare
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                should "result in an action exception if the box already exists" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  File.expects(:exists?).once.returns(true)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @runner.expects(:name).twice.returns('foo')
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @runner.expects(:add_action).never
         
     | 
| 
      
 32 
     | 
    
         
            +
                  assert_raise Vagrant::Actions::ActionException do
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @action.prepare
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class DestroyBoxActionTest < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              setup do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @name = "foo"
         
     | 
| 
      
 6 
     | 
    
         
            +
                @dir = "foo"
         
     | 
| 
      
 7 
     | 
    
         
            +
                @runner, @vm, @action = mock_action(Vagrant::Actions::Box::Destroy)
         
     | 
| 
      
 8 
     | 
    
         
            +
                @runner.stubs(:directory).returns(@dir)
         
     | 
| 
      
 9 
     | 
    
         
            +
                mock_config
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              context "executing" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                should "rm_rf the directory" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                  FileUtils.expects(:rm_rf).with(@dir).once
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @action.execute!
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,118 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class DownloadBoxActionTest < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              setup do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @uri = "foo.com"
         
     | 
| 
      
 6 
     | 
    
         
            +
                @runner, @vm, @action = mock_action(Vagrant::Actions::Box::Download)
         
     | 
| 
      
 7 
     | 
    
         
            +
                @runner.stubs(:uri).returns(@uri)
         
     | 
| 
      
 8 
     | 
    
         
            +
                @runner.stubs(:temp_path=)
         
     | 
| 
      
 9 
     | 
    
         
            +
                mock_config
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                Vagrant::Env.stubs(:tmp_path).returns("foo")
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              context "preparing" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @uri = mock("uri")
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @uri.stubs(:is_a?).returns(false)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  URI.stubs(:parse).returns(@uri)
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                should "raise an exception if no URI type is matched" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @uri.stubs(:is_a?).returns(false)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  assert_raises(Vagrant::Actions::ActionException) {
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @action.prepare
         
     | 
| 
      
 25 
     | 
    
         
            +
                  }
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                should "set the downloader to file if URI is generic" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @uri.stubs(:is_a?).with(URI::Generic).returns(true)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @action.prepare
         
     | 
| 
      
 31 
     | 
    
         
            +
                  assert @action.downloader.is_a?(Vagrant::Downloaders::File)
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                should "set the downloader to HTTP if URI is HTTP" do
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @uri.stubs(:is_a?).with(URI::HTTP).returns(true)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  @action.prepare
         
     | 
| 
      
 37 
     | 
    
         
            +
                  assert @action.downloader.is_a?(Vagrant::Downloaders::HTTP)
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              context "executing" do
         
     | 
| 
      
 42 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @path = "foo"
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  @tempfile = mock("tempfile")
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @tempfile.stubs(:path).returns(@path)
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  @action.stubs(:with_tempfile).yields(@tempfile)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @action.stubs(:download_to)
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                should "make a tempfile and copy the URI contents to it" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @action.expects(:with_tempfile).yields(@tempfile)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  @action.expects(:download_to).with(@tempfile)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  @action.execute!
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                should "save the tempfile path" do
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @runner.expects(:temp_path=).with(@path).once
         
     | 
| 
      
 60 
     | 
    
         
            +
                  @action.execute!
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
              context "rescue" do
         
     | 
| 
      
 65 
     | 
    
         
            +
                should "call cleanup method" do
         
     | 
| 
      
 66 
     | 
    
         
            +
                  @action.expects(:cleanup).once
         
     | 
| 
      
 67 
     | 
    
         
            +
                  @action.rescue(nil)
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
              context "tempfile" do
         
     | 
| 
      
 72 
     | 
    
         
            +
                should "create a tempfile in the vagrant tmp directory" do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  Tempfile.expects(:open).with(Vagrant::Actions::Box::Download::BASENAME, Vagrant::Env.tmp_path).once
         
     | 
| 
      
 74 
     | 
    
         
            +
                  @action.with_tempfile
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                should "yield the tempfile object" do
         
     | 
| 
      
 78 
     | 
    
         
            +
                  @tempfile = mock("tempfile")
         
     | 
| 
      
 79 
     | 
    
         
            +
                  Tempfile.expects(:open).yields(@tempfile)
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  @action.with_tempfile do |otherfile|
         
     | 
| 
      
 82 
     | 
    
         
            +
                    assert @tempfile.equal?(otherfile)
         
     | 
| 
      
 83 
     | 
    
         
            +
                  end
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
              context "cleaning up" do
         
     | 
| 
      
 88 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 89 
     | 
    
         
            +
                  @temp_path = "foo"
         
     | 
| 
      
 90 
     | 
    
         
            +
                  @runner.stubs(:temp_path).returns(@temp_path)
         
     | 
| 
      
 91 
     | 
    
         
            +
                  File.stubs(:exist?).returns(true)
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                should "delete the temporary file if it exists" do
         
     | 
| 
      
 95 
     | 
    
         
            +
                  File.expects(:unlink).with(@temp_path).once
         
     | 
| 
      
 96 
     | 
    
         
            +
                  @action.cleanup
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                should "not delete anything if it doesn't exist" do
         
     | 
| 
      
 100 
     | 
    
         
            +
                  File.stubs(:exist?).returns(false)
         
     | 
| 
      
 101 
     | 
    
         
            +
                  File.expects(:unlink).never
         
     | 
| 
      
 102 
     | 
    
         
            +
                  @action.cleanup
         
     | 
| 
      
 103 
     | 
    
         
            +
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
              end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
              context "downloading" do
         
     | 
| 
      
 107 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 108 
     | 
    
         
            +
                  @downloader = mock("downloader")
         
     | 
| 
      
 109 
     | 
    
         
            +
                  @action.stubs(:downloader).returns(@downloader)
         
     | 
| 
      
 110 
     | 
    
         
            +
                end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                should "call download! on the download with the URI and tempfile" do
         
     | 
| 
      
 113 
     | 
    
         
            +
                  tempfile = "foo"
         
     | 
| 
      
 114 
     | 
    
         
            +
                  @downloader.expects(:download!).with(@runner.uri, tempfile)
         
     | 
| 
      
 115 
     | 
    
         
            +
                  @action.download_to(tempfile)
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
              end
         
     | 
| 
      
 118 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,101 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class UnpackageBoxActionTest < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              setup do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @runner, @vm, @action = mock_action(Vagrant::Actions::Box::Unpackage)
         
     | 
| 
      
 6 
     | 
    
         
            +
                @runner.stubs(:name).returns("foo")
         
     | 
| 
      
 7 
     | 
    
         
            +
                @runner.stubs(:temp_path).returns("bar")
         
     | 
| 
      
 8 
     | 
    
         
            +
                mock_config
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                Vagrant::Env.stubs(:boxes_path).returns("bar")
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              context "executing" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @runner.stubs(:invoke_around_callback).yields
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                should "execute the proper actions in the proper order" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  exec_seq = sequence("exec_seq")
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @action.expects(:setup_box_dir).in_sequence(exec_seq)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @action.expects(:decompress).in_sequence(exec_seq)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @action.execute!
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                should "execute it in a around block" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @runner.expects(:invoke_around_callback).with(:unpackage).once
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @action.execute!
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              context "rescuing" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 33 
     | 
    
         
            +
                  File.stubs(:directory?).returns(false)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  FileUtils.stubs(:rm_rf)
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  @box_dir = mock("foo")
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @action.stubs(:box_dir).returns(@box_dir)
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                should "do nothing if a directory doesn't exist" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  FileUtils.expects(:rm_rf).never
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @action.rescue(nil)
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                should "remove the box directory if it exists" do
         
     | 
| 
      
 46 
     | 
    
         
            +
                  File.expects(:directory?).returns(true)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  FileUtils.expects(:rm_rf).with(@box_dir).once
         
     | 
| 
      
 48 
     | 
    
         
            +
                  @action.rescue(nil)
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              context "box directory" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                should "return the runner directory" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  result = mock("object")
         
     | 
| 
      
 55 
     | 
    
         
            +
                  @runner.expects(:directory).once.returns(result)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  assert result.equal?(@action.box_dir)
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              context "setting up the box directory" do
         
     | 
| 
      
 61 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 62 
     | 
    
         
            +
                  File.stubs(:directory?).returns(false)
         
     | 
| 
      
 63 
     | 
    
         
            +
                  FileUtils.stubs(:mkdir_p)
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  @box_dir = "foo"
         
     | 
| 
      
 66 
     | 
    
         
            +
                  @action.stubs(:box_dir).returns(@box_dir)
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                should "error and exit if the directory exists" do
         
     | 
| 
      
 70 
     | 
    
         
            +
                  File.expects(:directory?).returns(true)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @action.expects(:error_and_exit).once
         
     | 
| 
      
 72 
     | 
    
         
            +
                  @action.setup_box_dir
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                should "create the directory" do
         
     | 
| 
      
 76 
     | 
    
         
            +
                  FileUtils.expects(:mkdir_p).with(@box_dir).once
         
     | 
| 
      
 77 
     | 
    
         
            +
                  @action.setup_box_dir
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
              context "decompressing" do
         
     | 
| 
      
 82 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 83 
     | 
    
         
            +
                  @box_dir = "foo"
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  @action.stubs(:box_dir).returns(@box_dir)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  Dir.stubs(:chdir).yields
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                should "change to the box directory" do
         
     | 
| 
      
 90 
     | 
    
         
            +
                  Dir.expects(:chdir).with(@box_dir)
         
     | 
| 
      
 91 
     | 
    
         
            +
                  @action.decompress
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                should "open the tar file within the new directory, and extract it all" do
         
     | 
| 
      
 95 
     | 
    
         
            +
                  @tar = mock("tar")
         
     | 
| 
      
 96 
     | 
    
         
            +
                  @tar.expects(:extract_all).once
         
     | 
| 
      
 97 
     | 
    
         
            +
                  Tar.expects(:open).with(@runner.temp_path, anything, anything, anything).yields(@tar)
         
     | 
| 
      
 98 
     | 
    
         
            +
                  @action.decompress
         
     | 
| 
      
 99 
     | 
    
         
            +
                end
         
     | 
| 
      
 100 
     | 
    
         
            +
              end
         
     | 
| 
      
 101 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,236 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class ActionRunnerTest < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
              def mock_fake_action
         
     | 
| 
      
 5 
     | 
    
         
            +
                action = mock("action")
         
     | 
| 
      
 6 
     | 
    
         
            +
                action.stubs(:prepare)
         
     | 
| 
      
 7 
     | 
    
         
            +
                action.stubs(:execute!)
         
     | 
| 
      
 8 
     | 
    
         
            +
                action.stubs(:cleanup)
         
     | 
| 
      
 9 
     | 
    
         
            +
                action
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              context "callbacks" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @runner = Vagrant::Actions::Runner.new
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                context "around callbacks" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  should "invoke before/after_name for around callbacks" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    block_obj = mock("block_obj")
         
     | 
| 
      
 20 
     | 
    
         
            +
                    around_seq = sequence("around_seq")
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @runner.expects(:invoke_callback).with(:before_foo).once.in_sequence(around_seq)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    block_obj.expects(:foo).once.in_sequence(around_seq)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @runner.expects(:invoke_callback).with(:after_foo).once.in_sequence(around_seq)
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                    @runner.invoke_around_callback(:foo) do
         
     | 
| 
      
 26 
     | 
    
         
            +
                      block_obj.foo
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  should "forward arguments to invoke_callback" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @runner.expects(:invoke_callback).with(:before_foo, "foo").once
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @runner.expects(:invoke_callback).with(:after_foo, "foo").once
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @runner.invoke_around_callback(:foo, "foo") do; end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                should "not invoke callback on actions which don't respond to it" do
         
     | 
| 
      
 38 
     | 
    
         
            +
                  action = mock("action")
         
     | 
| 
      
 39 
     | 
    
         
            +
                  action.stubs(:respond_to?).with(:foo).returns(false)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  action.expects(:foo).never
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  assert_nothing_raised do
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @runner.actions << action
         
     | 
| 
      
 44 
     | 
    
         
            +
                    @runner.invoke_callback(:foo)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                should "invoke callback on actions which do respond to the method" do
         
     | 
| 
      
 49 
     | 
    
         
            +
                  action = mock("action")
         
     | 
| 
      
 50 
     | 
    
         
            +
                  action.expects(:foo).once
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  @runner.actions << action
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @runner.invoke_callback(:foo)
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                should "collect all the results and return them as an array" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  result = []
         
     | 
| 
      
 58 
     | 
    
         
            +
                  3.times do |i|
         
     | 
| 
      
 59 
     | 
    
         
            +
                    action = mock("action#{i}")
         
     | 
| 
      
 60 
     | 
    
         
            +
                    action.expects(:foo).returns("foo#{i}").once
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                    @runner.actions << action
         
     | 
| 
      
 63 
     | 
    
         
            +
                    result << "foo#{i}"
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  assert_equal result, @runner.invoke_callback(:foo)
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
              context "finding actions" do
         
     | 
| 
      
 71 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 72 
     | 
    
         
            +
                  @runner = Vagrant::Actions::Runner.new
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                should "return nil if the action could not be found" do
         
     | 
| 
      
 76 
     | 
    
         
            +
                  assert_nil @runner.find_action(Vagrant::Actions::VM::Export)
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                should "return the first instance of the action found" do
         
     | 
| 
      
 80 
     | 
    
         
            +
                  @runner.add_action(Vagrant::Actions::VM::Export)
         
     | 
| 
      
 81 
     | 
    
         
            +
                  @runner.add_action(Vagrant::Actions::VM::Export)
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                  assert @runner.actions[0].equal?(@runner.find_action(Vagrant::Actions::VM::Export))
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
              context "adding actions" do
         
     | 
| 
      
 88 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 89 
     | 
    
         
            +
                  @runner = Vagrant::Actions::Runner.new
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                should "initialize the action when added" do
         
     | 
| 
      
 93 
     | 
    
         
            +
                  action_klass = mock("action_class")
         
     | 
| 
      
 94 
     | 
    
         
            +
                  action_inst = mock("action_inst")
         
     | 
| 
      
 95 
     | 
    
         
            +
                  action_klass.expects(:new).once.returns(action_inst)
         
     | 
| 
      
 96 
     | 
    
         
            +
                  @runner.add_action(action_klass)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  assert_equal 1, @runner.actions.length
         
     | 
| 
      
 98 
     | 
    
         
            +
                end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                should "initialize the action with given arguments when added" do
         
     | 
| 
      
 101 
     | 
    
         
            +
                  action_klass = mock("action_class")
         
     | 
| 
      
 102 
     | 
    
         
            +
                  action_klass.expects(:new).with(@runner, "foo", "bar").once
         
     | 
| 
      
 103 
     | 
    
         
            +
                  @runner.add_action(action_klass, "foo", "bar")
         
     | 
| 
      
 104 
     | 
    
         
            +
                end
         
     | 
| 
      
 105 
     | 
    
         
            +
              end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
              context "class method execute" do
         
     | 
| 
      
 108 
     | 
    
         
            +
                should "run actions on class method execute!" do
         
     | 
| 
      
 109 
     | 
    
         
            +
                  vm = mock("vm")
         
     | 
| 
      
 110 
     | 
    
         
            +
                  execute_seq = sequence("execute_seq")
         
     | 
| 
      
 111 
     | 
    
         
            +
                  Vagrant::Actions::Runner.expects(:new).returns(vm).in_sequence(execute_seq)
         
     | 
| 
      
 112 
     | 
    
         
            +
                  vm.expects(:add_action).with("foo").in_sequence(execute_seq)
         
     | 
| 
      
 113 
     | 
    
         
            +
                  vm.expects(:execute!).once.in_sequence(execute_seq)
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                  Vagrant::Actions::Runner.execute!("foo")
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                should "forward arguments to add_action on class method execute!" do
         
     | 
| 
      
 119 
     | 
    
         
            +
                  vm = mock("vm")
         
     | 
| 
      
 120 
     | 
    
         
            +
                  execute_seq = sequence("execute_seq")
         
     | 
| 
      
 121 
     | 
    
         
            +
                  Vagrant::Actions::Runner.expects(:new).returns(vm).in_sequence(execute_seq)
         
     | 
| 
      
 122 
     | 
    
         
            +
                  vm.expects(:add_action).with("foo", "bar", "baz").in_sequence(execute_seq)
         
     | 
| 
      
 123 
     | 
    
         
            +
                  vm.expects(:execute!).once.in_sequence(execute_seq)
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                  Vagrant::Actions::Runner.execute!("foo", "bar", "baz")
         
     | 
| 
      
 126 
     | 
    
         
            +
                end
         
     | 
| 
      
 127 
     | 
    
         
            +
              end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
              context "instance method execute" do
         
     | 
| 
      
 130 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 131 
     | 
    
         
            +
                  @runner = Vagrant::Actions::Runner.new
         
     | 
| 
      
 132 
     | 
    
         
            +
                end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                should "clear the actions and run a single action if given to execute!" do
         
     | 
| 
      
 135 
     | 
    
         
            +
                  action = mock("action")
         
     | 
| 
      
 136 
     | 
    
         
            +
                  run_action = mock("action_run")
         
     | 
| 
      
 137 
     | 
    
         
            +
                  run_class = mock("run_class")
         
     | 
| 
      
 138 
     | 
    
         
            +
                  run_class.expects(:new).once.returns(run_action)
         
     | 
| 
      
 139 
     | 
    
         
            +
                  @runner.actions << action
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                  [:prepare, :execute!, :cleanup].each do |method|
         
     | 
| 
      
 142 
     | 
    
         
            +
                    action.expects(method).never
         
     | 
| 
      
 143 
     | 
    
         
            +
                    run_action.expects(method).once
         
     | 
| 
      
 144 
     | 
    
         
            +
                  end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                  @runner.execute!(run_class)
         
     | 
| 
      
 147 
     | 
    
         
            +
                end
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                should "clear actions after running execute!" do
         
     | 
| 
      
 150 
     | 
    
         
            +
                  @runner.actions << mock_fake_action
         
     | 
| 
      
 151 
     | 
    
         
            +
                  @runner.actions << mock_fake_action
         
     | 
| 
      
 152 
     | 
    
         
            +
                  assert !@runner.actions.empty? # sanity
         
     | 
| 
      
 153 
     | 
    
         
            +
                  @runner.execute!
         
     | 
| 
      
 154 
     | 
    
         
            +
                  assert @runner.actions.empty?
         
     | 
| 
      
 155 
     | 
    
         
            +
                end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                should "run #prepare on all actions, then #execute!" do
         
     | 
| 
      
 158 
     | 
    
         
            +
                  action_seq = sequence("action_seq")
         
     | 
| 
      
 159 
     | 
    
         
            +
                  actions = []
         
     | 
| 
      
 160 
     | 
    
         
            +
                  5.times do |i|
         
     | 
| 
      
 161 
     | 
    
         
            +
                    action = mock("action#{i}")
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                    @runner.actions << action
         
     | 
| 
      
 164 
     | 
    
         
            +
                    actions << action
         
     | 
| 
      
 165 
     | 
    
         
            +
                  end
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
                  [:prepare, :execute!, :cleanup].each do |method|
         
     | 
| 
      
 168 
     | 
    
         
            +
                    actions.each do |action|
         
     | 
| 
      
 169 
     | 
    
         
            +
                      action.expects(method).once.in_sequence(action_seq)
         
     | 
| 
      
 170 
     | 
    
         
            +
                    end
         
     | 
| 
      
 171 
     | 
    
         
            +
                  end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                  @runner.execute!
         
     | 
| 
      
 174 
     | 
    
         
            +
                end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                context "exceptions" do
         
     | 
| 
      
 177 
     | 
    
         
            +
                  setup do
         
     | 
| 
      
 178 
     | 
    
         
            +
                    @actions = [mock_fake_action, mock_fake_action]
         
     | 
| 
      
 179 
     | 
    
         
            +
                    @actions.each do |a|
         
     | 
| 
      
 180 
     | 
    
         
            +
                      a.stubs(:rescue)
         
     | 
| 
      
 181 
     | 
    
         
            +
                      @runner.actions << a
         
     | 
| 
      
 182 
     | 
    
         
            +
                    end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                    @exception = Exception.new
         
     | 
| 
      
 185 
     | 
    
         
            +
                  end
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
                  should "call #rescue on each action if an exception is raised during execute!" do
         
     | 
| 
      
 188 
     | 
    
         
            +
                    @actions.each do |a|
         
     | 
| 
      
 189 
     | 
    
         
            +
                      a.expects(:rescue).with(@exception).once
         
     | 
| 
      
 190 
     | 
    
         
            +
                    end
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
                    @actions[0].stubs(:execute!).raises(@exception)
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                    @runner.expects(:error_and_exit).never
         
     | 
| 
      
 195 
     | 
    
         
            +
                    assert_raises(Exception) { @runner.execute! }
         
     | 
| 
      
 196 
     | 
    
         
            +
                  end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
                  should "call #rescue on each action if an exception is raised during prepare" do
         
     | 
| 
      
 199 
     | 
    
         
            +
                    @actions.each do |a|
         
     | 
| 
      
 200 
     | 
    
         
            +
                      a.expects(:rescue).with(@exception).once
         
     | 
| 
      
 201 
     | 
    
         
            +
                    end
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
                    @actions[0].stubs(:prepare).raises(@exception)
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
                    @runner.expects(:error_and_exit).never
         
     | 
| 
      
 206 
     | 
    
         
            +
                    assert_raises(Exception) { @runner.execute! }
         
     | 
| 
      
 207 
     | 
    
         
            +
                  end
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
                  should "call error_and_exit if it is an ActionException" do
         
     | 
| 
      
 210 
     | 
    
         
            +
                    msg = "Message"
         
     | 
| 
      
 211 
     | 
    
         
            +
                    @exception = Vagrant::Actions::ActionException.new(msg)
         
     | 
| 
      
 212 
     | 
    
         
            +
                    @actions[0].stubs(:prepare).raises(@exception)
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
                    @runner.expects(:error_and_exit).with(msg).once
         
     | 
| 
      
 215 
     | 
    
         
            +
                    @runner.execute!
         
     | 
| 
      
 216 
     | 
    
         
            +
                  end
         
     | 
| 
      
 217 
     | 
    
         
            +
                end
         
     | 
| 
      
 218 
     | 
    
         
            +
              end
         
     | 
| 
      
 219 
     | 
    
         
            +
             
     | 
| 
      
 220 
     | 
    
         
            +
              context "actions" do
         
     | 
| 
      
 221 
     | 
    
         
            +
                setup do
         
     | 
| 
      
 222 
     | 
    
         
            +
                  @runner = Vagrant::Actions::Runner.new
         
     | 
| 
      
 223 
     | 
    
         
            +
                end
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                should "setup actions to be an array" do
         
     | 
| 
      
 226 
     | 
    
         
            +
                  assert_nil @runner.instance_variable_get(:@actions)
         
     | 
| 
      
 227 
     | 
    
         
            +
                  actions = @runner.actions
         
     | 
| 
      
 228 
     | 
    
         
            +
                  assert actions.is_a?(Array)
         
     | 
| 
      
 229 
     | 
    
         
            +
                  assert actions.equal?(@runner.actions)
         
     | 
| 
      
 230 
     | 
    
         
            +
                end
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
                should "be empty initially" do
         
     | 
| 
      
 233 
     | 
    
         
            +
                  assert @runner.actions.empty?
         
     | 
| 
      
 234 
     | 
    
         
            +
                end
         
     | 
| 
      
 235 
     | 
    
         
            +
              end
         
     | 
| 
      
 236 
     | 
    
         
            +
            end
         
     |