fission 0.4.0 → 0.5.0.beta.1
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.
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +12 -3
- data/README.md +45 -19
- data/bin/fission +1 -1
- data/fission.gemspec +3 -2
- data/lib/fission.rb +15 -0
- data/lib/fission/action/shell_executor.rb +37 -0
- data/lib/fission/action/snapshot/creator.rb +81 -0
- data/lib/fission/action/snapshot/deleter.rb +85 -0
- data/lib/fission/action/snapshot/lister.rb +90 -0
- data/lib/fission/action/snapshot/reverter.rb +81 -0
- data/lib/fission/action/vm/cloner.rb +191 -0
- data/lib/fission/action/vm/deleter.rb +73 -0
- data/lib/fission/action/vm/lister.rb +138 -0
- data/lib/fission/action/vm/starter.rb +88 -0
- data/lib/fission/action/vm/stopper.rb +79 -0
- data/lib/fission/action/vm/suspender.rb +68 -0
- data/lib/fission/cli.rb +21 -117
- data/lib/fission/command.rb +39 -0
- data/lib/fission/command/clone.rb +11 -6
- data/lib/fission/command/delete.rb +11 -6
- data/lib/fission/command/info.rb +62 -0
- data/lib/fission/command/snapshot_create.rb +9 -3
- data/lib/fission/command/snapshot_delete.rb +38 -0
- data/lib/fission/command/snapshot_list.rb +9 -3
- data/lib/fission/command/snapshot_revert.rb +9 -3
- data/lib/fission/command/start.rb +11 -6
- data/lib/fission/command/status.rb +9 -1
- data/lib/fission/command/stop.rb +9 -3
- data/lib/fission/command/suspend.rb +11 -6
- data/lib/fission/command_helpers.rb +18 -4
- data/lib/fission/command_line_parser.rb +189 -0
- data/lib/fission/config.rb +1 -1
- data/lib/fission/fusion.rb +3 -4
- data/lib/fission/lease.rb +2 -1
- data/lib/fission/metadata.rb +6 -1
- data/lib/fission/response.rb +17 -9
- data/lib/fission/version.rb +1 -1
- data/lib/fission/vm.rb +142 -382
- data/lib/fission/vm_configuration.rb +79 -0
- data/spec/fission/action/execute_shell_command_spec.rb +25 -0
- data/spec/fission/action/snapshot/creator_spec.rb +77 -0
- data/spec/fission/action/snapshot/deleter_spec.rb +84 -0
- data/spec/fission/action/snapshot/lister_spec.rb +67 -0
- data/spec/fission/action/snapshot/reverter_spec.rb +76 -0
- data/spec/fission/action/vm/cloner_spec.rb +198 -0
- data/spec/fission/action/vm/deleter_spec.rb +79 -0
- data/spec/fission/action/vm/lister_spec.rb +164 -0
- data/spec/fission/action/vm/starter_spec.rb +88 -0
- data/spec/fission/action/vm/stopper_spec.rb +71 -0
- data/spec/fission/action/vm/suspender_spec.rb +59 -0
- data/spec/fission/cli_spec.rb +32 -157
- data/spec/fission/command/clone_spec.rb +9 -3
- data/spec/fission/command/delete_spec.rb +11 -3
- data/spec/fission/command/info_spec.rb +130 -0
- data/spec/fission/command/snapshot_create_spec.rb +11 -3
- data/spec/fission/command/snapshot_delete_spec.rb +74 -0
- data/spec/fission/command/snapshot_list_spec.rb +11 -3
- data/spec/fission/command/snapshot_revert_spec.rb +11 -3
- data/spec/fission/command/start_spec.rb +11 -3
- data/spec/fission/command/status_spec.rb +16 -5
- data/spec/fission/command/stop_spec.rb +11 -3
- data/spec/fission/command/suspend_spec.rb +11 -3
- data/spec/fission/command_helpers_spec.rb +27 -5
- data/spec/fission/command_line_parser_spec.rb +267 -0
- data/spec/fission/command_spec.rb +16 -1
- data/spec/fission/config_spec.rb +3 -3
- data/spec/fission/fusion_spec.rb +11 -6
- data/spec/fission/lease_spec.rb +81 -45
- data/spec/fission/metadata_spec.rb +29 -6
- data/spec/fission/response_spec.rb +20 -9
- data/spec/fission/ui_spec.rb +1 -1
- data/spec/fission/vm_configuration_spec.rb +132 -0
- data/spec/fission/vm_spec.rb +393 -750
- data/spec/helpers/command_helpers.rb +1 -1
- metadata +93 -15
- data/.rvmrc +0 -1
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Fission::Command do
         | 
| 4 4 | 
             
              describe 'new' do
         | 
| @@ -13,6 +13,13 @@ describe Fission::Command do | |
| 13 13 | 
             
                end
         | 
| 14 14 | 
             
              end
         | 
| 15 15 |  | 
| 16 | 
            +
              describe 'command_name' do
         | 
| 17 | 
            +
                it 'should return the pretty command name' do
         | 
| 18 | 
            +
                  cmd = Fission::Command.new
         | 
| 19 | 
            +
                  cmd.command_name(Fission::Command::SnapshotList.new).should == 'snapshot list'
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 16 23 | 
             
              describe 'help' do
         | 
| 17 24 | 
             
                it 'should call option_parser on a new instance' do
         | 
| 18 25 | 
             
                  @new_instance_mock = mock('new_instance')
         | 
| @@ -22,6 +29,14 @@ describe Fission::Command do | |
| 22 29 | 
             
                end
         | 
| 23 30 | 
             
              end
         | 
| 24 31 |  | 
| 32 | 
            +
              describe 'summary' do
         | 
| 33 | 
            +
                it "should raise an exception that it's not implemented" do
         | 
| 34 | 
            +
                  lambda {
         | 
| 35 | 
            +
                    Fission::Command.new.summary
         | 
| 36 | 
            +
                  }.should raise_error NotImplementedError
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 25 40 | 
             
              describe 'ui' do
         | 
| 26 41 | 
             
                it 'should load a ui object' do
         | 
| 27 42 | 
             
                  Fission::Command.new.ui.should be_a Fission::UI
         | 
    
        data/spec/fission/config_spec.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Fission::Config do
         | 
| 4 4 | 
             
              describe "init" do
         | 
| @@ -49,7 +49,7 @@ describe Fission::Config do | |
| 49 49 |  | 
| 50 50 | 
             
                it 'should set vmrun_cmd' do
         | 
| 51 51 | 
             
                  @config = Fission::Config.new
         | 
| 52 | 
            -
                  @config.attributes['vmrun_cmd'].should == '/Library/Application | 
| 52 | 
            +
                  @config.attributes['vmrun_cmd'].should == "'/Library/Application Support/VMware Fusion/vmrun' -T fusion"
         | 
| 53 53 | 
             
                end
         | 
| 54 54 |  | 
| 55 55 | 
             
                it 'should set the vmrun_cmd correctly if there is a user specified vmrun bin' do
         | 
| @@ -58,7 +58,7 @@ describe Fission::Config do | |
| 58 58 | 
             
                  end
         | 
| 59 59 |  | 
| 60 60 | 
             
                  @config = Fission::Config.new
         | 
| 61 | 
            -
                  @config.attributes['vmrun_cmd'].should == '/var/tmp/vmrun_bin -T fusion | 
| 61 | 
            +
                  @config.attributes['vmrun_cmd'].should == "'/var/tmp/vmrun_bin' -T fusion"
         | 
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
| 64 64 | 
             
                it 'should use the fusion default lease file' do
         | 
    
        data/spec/fission/fusion_spec.rb
    CHANGED
    
    | @@ -1,21 +1,26 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Fission::Fusion do
         | 
| 4 4 | 
             
              describe 'self.running?' do
         | 
| 5 5 | 
             
                before do
         | 
| 6 6 | 
             
                  @cmd = "ps -ef | grep -v grep | "
         | 
| 7 | 
            -
                  @cmd << "grep -c #{Fission.config['gui_bin'] | 
| 7 | 
            +
                  @cmd << "grep -c '#{Fission.config['gui_bin']}' 2>&1"
         | 
| 8 | 
            +
                  @executor = mock 'executor'
         | 
| 8 9 | 
             
                end
         | 
| 9 10 |  | 
| 10 11 | 
             
                it 'should return a successful response and true if the fusion app is running' do
         | 
| 11 | 
            -
                   | 
| 12 | 
            -
             | 
| 12 | 
            +
                  @executor.should_receive(:execute).and_return({'output' => "1\n"})
         | 
| 13 | 
            +
                  Fission::Action::ShellExecutor.should_receive(:new).
         | 
| 14 | 
            +
                                                 with(@cmd).
         | 
| 15 | 
            +
                                                 and_return(@executor)
         | 
| 13 16 | 
             
                  Fission::Fusion.running?.should == true
         | 
| 14 17 | 
             
                end
         | 
| 15 18 |  | 
| 16 19 | 
             
                it 'should return a successful response and false if the fusion app is not running' do
         | 
| 17 | 
            -
                   | 
| 18 | 
            -
             | 
| 20 | 
            +
                  @executor.should_receive(:execute).and_return({'output' => "0\n"})
         | 
| 21 | 
            +
                  Fission::Action::ShellExecutor.should_receive(:new).
         | 
| 22 | 
            +
                                                 with(@cmd).
         | 
| 23 | 
            +
                                                 and_return(@executor)
         | 
| 19 24 | 
             
                  Fission::Fusion.running?.should == false
         | 
| 20 25 | 
             
                end
         | 
| 21 26 | 
             
              end
         | 
    
        data/spec/fission/lease_spec.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Fission::Lease do
         | 
| 4 4 | 
             
              before do
         | 
| @@ -6,14 +6,22 @@ describe Fission::Lease do | |
| 6 6 | 
             
                                  :mac_address  => '00:0c:29:2b:af:50',
         | 
| 7 7 | 
             
                                  :start        => '2011/10/11 01:50:58',
         | 
| 8 8 | 
             
                                  :end          => '2011/10/11 02:20:58' },
         | 
| 9 | 
            +
                                { :ip_address   => '172.16.248.170',
         | 
| 10 | 
            +
                                  :mac_address  => '00:0c:29:b3:63:d0',
         | 
| 11 | 
            +
                                  :start        => '2010/03/01 00:54:52',
         | 
| 12 | 
            +
                                  :end          => '2010/03/01 01:24:52' },
         | 
| 9 13 | 
             
                                { :ip_address   => '172.16.248.132',
         | 
| 10 14 | 
             
                                  :mac_address  => '00:0c:29:10:23:57',
         | 
| 11 15 | 
             
                                  :start        => '2010/07/12 21:31:28',
         | 
| 12 16 | 
             
                                  :end          => '2010/07/12 22:01:28' },
         | 
| 13 | 
            -
                                { :ip_address   => '172.16.248. | 
| 17 | 
            +
                                { :ip_address   => '172.16.248.150',
         | 
| 14 18 | 
             
                                  :mac_address  => '00:0c:29:b3:63:d0',
         | 
| 15 19 | 
             
                                  :start        => '2010/05/27 00:54:52',
         | 
| 16 20 | 
             
                                  :end          => '2010/05/27 01:24:52' },
         | 
| 21 | 
            +
                                { :ip_address   => '172.16.248.130',
         | 
| 22 | 
            +
                                  :mac_address  => '00:0c:29:b3:63:d0',
         | 
| 23 | 
            +
                                  :start        => '2010/04/15 00:54:52',
         | 
| 24 | 
            +
                                  :end          => '2010/04/15 01:24:52' },
         | 
| 17 25 | 
             
                                { :ip_address   => '172.16.248.129',
         | 
| 18 26 | 
             
                                  :mac_address  => '00:0c:29:0a:e9:b3',
         | 
| 19 27 | 
             
                                  :start        => '2010/02/16 23:16:05',
         | 
| @@ -26,16 +34,26 @@ lease 172.16.248.197 { | |
| 26 34 | 
             
                ends 2 2011/10/11 02:20:58;
         | 
| 27 35 | 
             
                hardware ethernet 00:0c:29:2b:af:50;
         | 
| 28 36 | 
             
            }
         | 
| 37 | 
            +
            lease 172.16.248.170 {
         | 
| 38 | 
            +
                starts 4 2010/03/01 00:54:52;
         | 
| 39 | 
            +
                ends 4 2010/03/01 01:24:52;
         | 
| 40 | 
            +
                hardware ethernet 00:0c:29:b3:63:d0;
         | 
| 41 | 
            +
            }
         | 
| 29 42 | 
             
            lease 172.16.248.132 {
         | 
| 30 43 | 
             
                starts 1 2010/07/12 21:31:28;
         | 
| 31 44 | 
             
                ends 1 2010/07/12 22:01:28;
         | 
| 32 45 | 
             
                hardware ethernet 00:0c:29:10:23:57;
         | 
| 33 46 | 
             
            }
         | 
| 34 | 
            -
            lease 172.16.248. | 
| 47 | 
            +
            lease 172.16.248.150 {
         | 
| 35 48 | 
             
                starts 4 2010/05/27 00:54:52;
         | 
| 36 49 | 
             
                ends 4 2010/05/27 01:24:52;
         | 
| 37 50 | 
             
                hardware ethernet 00:0c:29:b3:63:d0;
         | 
| 38 51 | 
             
            }
         | 
| 52 | 
            +
            lease 172.16.248.130 {
         | 
| 53 | 
            +
                starts 4 2010/04/15 00:54:52;
         | 
| 54 | 
            +
                ends 4 2010/04/15 01:24:52;
         | 
| 55 | 
            +
                hardware ethernet 00:0c:29:b3:63:d0;
         | 
| 56 | 
            +
            }
         | 
| 39 57 | 
             
            lease 172.16.248.129 {
         | 
| 40 58 | 
             
                starts 2 2010/02/16 23:16:05;
         | 
| 41 59 | 
             
                ends 2 2010/02/16 23:46:05;
         | 
| @@ -44,10 +62,6 @@ lease 172.16.248.129 { | |
| 44 62 | 
             
              end
         | 
| 45 63 |  | 
| 46 64 | 
             
              describe 'new' do
         | 
| 47 | 
            -
                { :ip_address   => '127.0.0.1',
         | 
| 48 | 
            -
                  :mac_address  => '00:00:00:00:00:00',
         | 
| 49 | 
            -
                  :start        => '2004/07/25 17:18:00',
         | 
| 50 | 
            -
                  :end          => '2004/07/25 18:18:00' }
         | 
| 51 65 | 
             
                it 'should set the ip address' do
         | 
| 52 66 | 
             
                  lease = Fission::Lease.new :ip_address => '127.0.0.1'
         | 
| 53 67 | 
             
                  lease.ip_address.should == '127.0.0.1'
         | 
| @@ -84,52 +98,63 @@ lease 172.16.248.129 { | |
| 84 98 | 
             
              end
         | 
| 85 99 |  | 
| 86 100 | 
             
              describe 'self.all' do
         | 
| 87 | 
            -
                it 'should query the configured lease file' do
         | 
| 88 | 
            -
                  File.should_receive(:read).with(Fission.config['lease_file']).
         | 
| 89 | 
            -
                                             and_return('')
         | 
| 90 | 
            -
             | 
| 91 | 
            -
                  Fission::Lease.all
         | 
| 92 | 
            -
                end
         | 
| 93 101 |  | 
| 94 | 
            -
                 | 
| 95 | 
            -
                   | 
| 96 | 
            -
             | 
| 102 | 
            +
                context 'when the lease file exists' do
         | 
| 103 | 
            +
                  before do
         | 
| 104 | 
            +
                    File.should_receive(:file?).
         | 
| 105 | 
            +
                         with(Fission.config['lease_file']).
         | 
| 106 | 
            +
                         and_return(true)
         | 
| 107 | 
            +
                  end
         | 
| 97 108 |  | 
| 98 | 
            -
                   | 
| 99 | 
            -
                     | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
                                       :end         => DateTime.parse(lease[:end])
         | 
| 109 | 
            +
                  it 'returns a response with the list of the found leases' do
         | 
| 110 | 
            +
                    File.should_receive(:read).
         | 
| 111 | 
            +
                         with(Fission.config['lease_file']).
         | 
| 112 | 
            +
                         and_return(@lease_file_content)
         | 
| 103 113 |  | 
| 104 | 
            -
             | 
| 114 | 
            +
                    example_leases = @lease_info.collect do |lease|
         | 
| 115 | 
            +
                      Fission::Lease.new :ip_address  => lease[:ip_address],
         | 
| 116 | 
            +
                                         :mac_address => lease[:mac_address],
         | 
| 117 | 
            +
                                         :start       => DateTime.parse(lease[:start]),
         | 
| 118 | 
            +
                                         :end         => DateTime.parse(lease[:end])
         | 
| 119 | 
            +
                    end
         | 
| 105 120 |  | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 121 | 
            +
                    response = Fission::Lease.all
         | 
| 122 | 
            +
                    response.should be_a_successful_response
         | 
| 108 123 |  | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 124 | 
            +
                    response.data.each do |lease|
         | 
| 125 | 
            +
                      example_lease = example_leases.select { |l| l.ip_address == lease.ip_address }
         | 
| 111 126 |  | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 127 | 
            +
                      [:ip_address, :mac_address, :start, :end].each do |attrib|
         | 
| 128 | 
            +
                        lease.send(attrib).should == example_lease.first.send(attrib)
         | 
| 129 | 
            +
                      end
         | 
| 114 130 | 
             
                    end
         | 
| 131 | 
            +
             | 
| 115 132 | 
             
                  end
         | 
| 116 133 |  | 
| 117 | 
            -
             | 
| 134 | 
            +
                  it 'a response with an empty list if there are no leases found' do
         | 
| 135 | 
            +
                    File.should_receive(:read).
         | 
| 136 | 
            +
                         with(Fission.config['lease_file']).
         | 
| 137 | 
            +
                         and_return('')
         | 
| 138 | 
            +
                    response = Fission::Lease.all
         | 
| 139 | 
            +
                    response.should be_a_successful_response
         | 
| 140 | 
            +
                    response.data.should == []
         | 
| 141 | 
            +
                  end
         | 
| 118 142 |  | 
| 119 | 
            -
                it 'should return a successful response with an empty list if there are no leases found' do
         | 
| 120 | 
            -
                  File.should_receive(:read).with(Fission.config['lease_file']).
         | 
| 121 | 
            -
                                             and_return('')
         | 
| 122 | 
            -
                  response = Fission::Lease.all
         | 
| 123 | 
            -
                  response.should be_a_successful_response
         | 
| 124 | 
            -
                  response.data.should == []
         | 
| 125 143 | 
             
                end
         | 
| 126 144 |  | 
| 127 | 
            -
                 | 
| 128 | 
            -
                   | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
                   | 
| 145 | 
            +
                context 'when the lease file does not exist' do
         | 
| 146 | 
            +
                  before do
         | 
| 147 | 
            +
                    File.should_receive(:file?).
         | 
| 148 | 
            +
                         with(Fission.config['lease_file']).
         | 
| 149 | 
            +
                         and_return(false)
         | 
| 150 | 
            +
                  end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                  it 'should return an unsuccessful response if the configured lease file does not exist' do
         | 
| 153 | 
            +
                    response = Fission::Lease.all
         | 
| 154 | 
            +
                    error_string = "Unable to find the lease file '#{Fission.config['lease_file']}'"
         | 
| 155 | 
            +
                    response.should be_an_unsuccessful_response(error_string)
         | 
| 156 | 
            +
                  end
         | 
| 157 | 
            +
             | 
| 133 158 | 
             
                end
         | 
| 134 159 |  | 
| 135 160 | 
             
              end
         | 
| @@ -137,16 +162,27 @@ lease 172.16.248.129 { | |
| 137 162 | 
             
              describe 'self.find_by_mac_address' do
         | 
| 138 163 | 
             
                describe 'when able to get all of the leases' do
         | 
| 139 164 | 
             
                  before do
         | 
| 140 | 
            -
                    File. | 
| 141 | 
            -
             | 
| 165 | 
            +
                    File.stub(:file?).and_return(true)
         | 
| 166 | 
            +
                    File.stub(:read).and_return(@lease_file_content)
         | 
| 142 167 | 
             
                  end
         | 
| 143 168 |  | 
| 144 | 
            -
                   | 
| 169 | 
            +
                  context 'when there are multiple leases for the mac address' do
         | 
| 170 | 
            +
                    it 'should return the lease with the latest expiration' do
         | 
| 171 | 
            +
                      response = Fission::Lease.find_by_mac_address '00:0c:29:b3:63:d0'
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                      response.should be_a_successful_response
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                      response.data.ip_address.should == '172.16.248.150'
         | 
| 176 | 
            +
                      response.data.mac_address.should == '00:0c:29:b3:63:d0'
         | 
| 177 | 
            +
                      response.data.start.should == DateTime.parse('2010/05/27 00:54:52')
         | 
| 178 | 
            +
                      response.data.end.should == DateTime.parse('2010/05/27 01:24:52')
         | 
| 179 | 
            +
                    end
         | 
| 180 | 
            +
                  end
         | 
| 145 181 |  | 
| 182 | 
            +
                  it 'should return a response with the lease associated with the provided mac address' do
         | 
| 146 183 | 
             
                    response = Fission::Lease.find_by_mac_address '00:0c:29:10:23:57'
         | 
| 147 184 |  | 
| 148 185 | 
             
                    response.should be_a_successful_response
         | 
| 149 | 
            -
             | 
| 150 186 | 
             
                    response.data.ip_address.should == '172.16.248.132'
         | 
| 151 187 | 
             
                    response.data.mac_address.should == '00:0c:29:10:23:57'
         | 
| 152 188 | 
             
                    response.data.start.should == DateTime.parse('2010/07/12 21:31:28')
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Fission::Metadata do
         | 
| 4 4 | 
             
              before do
         | 
| @@ -23,13 +23,16 @@ describe Fission::Metadata do | |
| 23 23 |  | 
| 24 24 | 
             
              describe 'delete_vm_restart_document' do
         | 
| 25 25 | 
             
                before do
         | 
| 26 | 
            -
                   | 
| 26 | 
            +
                  vm_dir = Fission.config['vm_dir']
         | 
| 27 | 
            +
                  @foo_vm_dir = File.join vm_dir, 'foo.vmwarevm'
         | 
| 28 | 
            +
                  @bar_vm_dir = File.join vm_dir, 'bar.vmwarevm'
         | 
| 29 | 
            +
                  @data = { 'PLRestartDocumentPaths' => [@foo_vm_dir, @bar_vm_dir]}
         | 
| 27 30 | 
             
                  @metadata.content = @data
         | 
| 28 31 | 
             
                end
         | 
| 29 32 |  | 
| 30 33 | 
             
                it 'should remove the vm item from the list if the vm path is in the list' do
         | 
| 31 34 | 
             
                  @metadata.delete_vm_restart_document(Fission::VM.new('foo').path)
         | 
| 32 | 
            -
                  @metadata.content.should == { 'PLRestartDocumentPaths' => [ | 
| 35 | 
            +
                  @metadata.content.should == { 'PLRestartDocumentPaths' => [@bar_vm_dir]}
         | 
| 33 36 | 
             
                end
         | 
| 34 37 |  | 
| 35 38 | 
             
                it 'should not doing anything if the vm is not in the list' do
         | 
| @@ -47,7 +50,9 @@ describe Fission::Metadata do | |
| 47 50 |  | 
| 48 51 | 
             
              describe 'delete_vm_favorite_entry' do
         | 
| 49 52 | 
             
                before do
         | 
| 50 | 
            -
                   | 
| 53 | 
            +
                  foo_vm_dir = File.join Fission.config['vm_dir'], 'foo.vmwarevm'
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  @data = { 'VMFavoritesListDefaults2' => [{'path' => foo_vm_dir}] }
         | 
| 51 56 | 
             
                  @metadata.content = @data
         | 
| 52 57 | 
             
                end
         | 
| 53 58 |  | 
| @@ -60,6 +65,22 @@ describe Fission::Metadata do | |
| 60 65 | 
             
                  @metadata.delete_vm_favorite_entry(Fission::VM.new('bar').path)
         | 
| 61 66 | 
             
                  @metadata.content.should == @data
         | 
| 62 67 | 
             
                end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                it 'should ignore VMFavoritesListDefaults2 in Fussion 5' do
         | 
| 70 | 
            +
                  data = {}
         | 
| 71 | 
            +
                  @metadata.content = data
         | 
| 72 | 
            +
                  @metadata.delete_vm_favorite_entry(Fission::VM.new('bar').path)
         | 
| 73 | 
            +
                  @metadata.content.should == data
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                it 'should remove the vm item from the list in Fussion 5' do
         | 
| 77 | 
            +
                  foo_vm_dir = File.join Fission.config['vm_dir'], 'foo.vmwarevm'
         | 
| 78 | 
            +
                  data = {"fusionInitialSessions" => [{"documentPath" => foo_vm_dir}]}
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  @metadata.content = data
         | 
| 81 | 
            +
                  @metadata.delete_vm_favorite_entry(Fission::VM.new('foo').path)
         | 
| 82 | 
            +
                  @metadata.content.should == { 'fusionInitialSessions' => []}
         | 
| 83 | 
            +
                end
         | 
| 63 84 | 
             
              end
         | 
| 64 85 |  | 
| 65 86 | 
             
              describe 'self.delete_vm_info' do
         | 
| @@ -68,16 +89,18 @@ describe Fission::Metadata do | |
| 68 89 | 
             
                  @md_mock.should_receive(:load)
         | 
| 69 90 | 
             
                  @md_mock.should_receive(:save)
         | 
| 70 91 | 
             
                  Fission::Metadata.stub!(:new).and_return(@md_mock)
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  @foo_vm_dir = File.join Fission.config['vm_dir'], 'foo.vmwarevm'
         | 
| 71 94 | 
             
                end
         | 
| 72 95 |  | 
| 73 96 | 
             
                it 'should remove the vm from the restart document list' do
         | 
| 74 | 
            -
                  @md_mock.should_receive(:delete_vm_restart_document).with( | 
| 97 | 
            +
                  @md_mock.should_receive(:delete_vm_restart_document).with(@foo_vm_dir)
         | 
| 75 98 | 
             
                  @md_mock.stub!(:delete_vm_favorite_entry)
         | 
| 76 99 | 
             
                  Fission::Metadata.delete_vm_info(Fission::VM.new('foo').path)
         | 
| 77 100 | 
             
                end
         | 
| 78 101 |  | 
| 79 102 | 
             
                it 'should remove the vm from the favorite list' do
         | 
| 80 | 
            -
                  @md_mock.should_receive(:delete_vm_favorite_entry).with( | 
| 103 | 
            +
                  @md_mock.should_receive(:delete_vm_favorite_entry).with(@foo_vm_dir)
         | 
| 81 104 | 
             
                  @md_mock.stub!(:delete_vm_restart_document)
         | 
| 82 105 | 
             
                  Fission::Metadata.delete_vm_info(Fission::VM.new('foo').path)
         | 
| 83 106 | 
             
                end
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Fission::Response do
         | 
| 4 4 | 
             
              describe 'initialize' do
         | 
| @@ -58,23 +58,34 @@ describe Fission::Response do | |
| 58 58 | 
             
                end
         | 
| 59 59 | 
             
              end
         | 
| 60 60 |  | 
| 61 | 
            -
              describe 'self. | 
| 61 | 
            +
              describe 'self.from_shell_executor' do
         | 
| 62 | 
            +
                before do
         | 
| 63 | 
            +
                  @process_status = mock 'process status'
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 62 66 | 
             
                it 'should return a response object' do
         | 
| 63 | 
            -
                   | 
| 67 | 
            +
                  @process_status.stub(:exitstatus).and_return(0)
         | 
| 68 | 
            +
                  executor = {'process_status' => @process_status}
         | 
| 69 | 
            +
                  Fission::Response.from_shell_executor(executor).should be_a Fission::Response
         | 
| 64 70 | 
             
                end
         | 
| 65 71 |  | 
| 66 72 | 
             
                it 'should set the code to the exit status' do
         | 
| 67 | 
            -
                   | 
| 68 | 
            -
                   | 
| 73 | 
            +
                  @process_status.stub(:exitstatus).and_return(55)
         | 
| 74 | 
            +
                  executor = {'process_status' => @process_status}
         | 
| 75 | 
            +
                  Fission::Response.from_shell_executor(executor).code.should == 55
         | 
| 69 76 | 
             
                end
         | 
| 70 77 |  | 
| 71 78 | 
             
                it 'should set the message if the command was unsuccessful' do
         | 
| 72 | 
            -
                   | 
| 73 | 
            -
                   | 
| 79 | 
            +
                  @process_status.stub(:exitstatus).and_return(55)
         | 
| 80 | 
            +
                  executor = {'process_status' => @process_status,
         | 
| 81 | 
            +
                              'output'         => 'foo'}
         | 
| 82 | 
            +
                  Fission::Response.from_shell_executor(executor).message.should == 'foo'
         | 
| 74 83 | 
             
                end
         | 
| 75 84 | 
             
                it 'should not set the message if the command was successful' do
         | 
| 76 | 
            -
                   | 
| 77 | 
            -
                   | 
| 85 | 
            +
                  @process_status.stub(:exitstatus).and_return(0)
         | 
| 86 | 
            +
                  executor = {'process_status' => @process_status,
         | 
| 87 | 
            +
                              'output'         => 'foo'}
         | 
| 88 | 
            +
                  Fission::Response.from_shell_executor(executor).message.should == ''
         | 
| 78 89 | 
             
                end
         | 
| 79 90 |  | 
| 80 91 | 
             
              end
         | 
    
        data/spec/fission/ui_spec.rb
    CHANGED
    
    
| @@ -0,0 +1,132 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Fission::VMConfiguration do
         | 
| 4 | 
            +
              before do
         | 
| 5 | 
            +
                @vm = Fission::VM.new 'foo'
         | 
| 6 | 
            +
                @conf_file_response_mock = mock 'conf_file_response'
         | 
| 7 | 
            +
                @conf_file_response_mock.stub_as_successful @conf_file_path
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              describe 'config_data' do
         | 
| 11 | 
            +
                before do
         | 
| 12 | 
            +
                  @vm.stub(:exists?).and_return(true)
         | 
| 13 | 
            +
                  @vm_config = Fission::VMConfiguration.new @vm
         | 
| 14 | 
            +
                  @vm.stub(:conf_file).and_return(@conf_file_response_mock)
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                it "should return an unsuccessful response if the vm doesn't exist" do
         | 
| 18 | 
            +
                  @vm.stub(:exists?).and_return(false)
         | 
| 19 | 
            +
                  @vm_config.config_data.should be_an_unsuccessful_response 'VM does not exist'
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                it 'should return an unsuccessful response if unable to figure out the conf file' do
         | 
| 23 | 
            +
                  @conf_file_response_mock.stub_as_unsuccessful
         | 
| 24 | 
            +
                  @vm_config.config_data.should be_an_unsuccessful_response
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                context 'when the vm exists and the conf file can be found' do
         | 
| 28 | 
            +
                  before do
         | 
| 29 | 
            +
                    @conf_file_io = StringIO.new
         | 
| 30 | 
            +
                    vmx_content = '.encoding = "UTF-8"
         | 
| 31 | 
            +
            config.version = "8"
         | 
| 32 | 
            +
            virtualHW.version = "7"
         | 
| 33 | 
            +
            scsi0.present = "TRUE"
         | 
| 34 | 
            +
            scsi0.virtualDev = "lsilogic"
         | 
| 35 | 
            +
            memsize = "384"
         | 
| 36 | 
            +
            scsi0:0.present = "TRUE"
         | 
| 37 | 
            +
            scsi0:0.fileName = "u10_04-000001.vmdk"
         | 
| 38 | 
            +
            ethernet0.present = "TRUE"
         | 
| 39 | 
            +
            ethernet0.connectionType = "nat"
         | 
| 40 | 
            +
            ethernet0.wakeOnPcktRcv = "FALSE"
         | 
| 41 | 
            +
            ethernet0.addressType = "generated"
         | 
| 42 | 
            +
            ethernet0.linkStatePropagation.enable = "TRUE"
         | 
| 43 | 
            +
            ehci.present = "TRUE"
         | 
| 44 | 
            +
            pciBridge4.virtualDev = "pcieRootPort"
         | 
| 45 | 
            +
            pciBridge4.functions = "8"
         | 
| 46 | 
            +
            vmci0.present = "TRUE"
         | 
| 47 | 
            +
            roamingVM.exitBehavior = "go"
         | 
| 48 | 
            +
            tools.syncTime = "TRUE"
         | 
| 49 | 
            +
            displayName = "u10_04"
         | 
| 50 | 
            +
            guestOS = "ubuntu"
         | 
| 51 | 
            +
            nvram = "u10_04.nvram"
         | 
| 52 | 
            +
            virtualHW.productCompatibility = "hosted"
         | 
| 53 | 
            +
            tools.upgrade.policy = "upgradeAtPowerCycle"
         | 
| 54 | 
            +
            extendedConfigFile = "u10_04.vmxf"
         | 
| 55 | 
            +
            serial0.present = "FALSE"
         | 
| 56 | 
            +
            usb.present = "FALSE"
         | 
| 57 | 
            +
            checkpoint.vmState = "u10_04.vmss"
         | 
| 58 | 
            +
            ethernet0.generatedAddress = "00:0c:29:c4:94:22"
         | 
| 59 | 
            +
            uuid.location = "56 4d 4b e9 1a bb 22 3a-b0 91 06 4e b4 c4 94 22"
         | 
| 60 | 
            +
            uuid.bios = "56 4d 4b e9 1a bb 22 3a-b0 91 06 4e b4 c4 94 22"
         | 
| 61 | 
            +
            cleanShutdown = "TRUE"
         | 
| 62 | 
            +
            scsi0:0.redo = ""
         | 
| 63 | 
            +
            scsi0.pciSlotNumber = "16"
         | 
| 64 | 
            +
            ethernet0.pciSlotNumber = "32"
         | 
| 65 | 
            +
            ethernet0.generatedAddressOffset = "0"
         | 
| 66 | 
            +
            vmci0.id = "-1262185438"
         | 
| 67 | 
            +
            tools.remindInstall = "TRUE"'
         | 
| 68 | 
            +
                    @conf_file_io.string = vmx_content
         | 
| 69 | 
            +
                    File.should_receive(:readlines).with(@conf_file_path).
         | 
| 70 | 
            +
                                                     and_return(@conf_file_io.string.split(/$/))
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  it 'should return a successful response' do
         | 
| 74 | 
            +
                    @vm_config.config_data.should be_a_successful_response
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  it 'should return the data as a hash like object' do
         | 
| 78 | 
            +
                    config = @vm_config.config_data
         | 
| 79 | 
            +
                    config.data.should respond_to :keys
         | 
| 80 | 
            +
                    config.data.should respond_to :values
         | 
| 81 | 
            +
                    config.data.should respond_to :each_pair
         | 
| 82 | 
            +
                    config.data.should respond_to :[]
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  it 'should return accurate data' do
         | 
| 86 | 
            +
                    expected_data = { '.encoding' => 'UTF-8',
         | 
| 87 | 
            +
                                      'config.version' => '8',
         | 
| 88 | 
            +
                                      'virtualHW.version' => '7',
         | 
| 89 | 
            +
                                      'scsi0.present' => 'TRUE',
         | 
| 90 | 
            +
                                      'scsi0.virtualDev' => 'lsilogic',
         | 
| 91 | 
            +
                                      'memsize' => '384',
         | 
| 92 | 
            +
                                      'scsi0:0.present' => 'TRUE',
         | 
| 93 | 
            +
                                      'scsi0:0.fileName' => 'u10_04-000001.vmdk',
         | 
| 94 | 
            +
                                      'ethernet0.present' => 'TRUE',
         | 
| 95 | 
            +
                                      'ethernet0.connectionType' => 'nat',
         | 
| 96 | 
            +
                                      'ethernet0.wakeOnPcktRcv' => 'FALSE',
         | 
| 97 | 
            +
                                      'ethernet0.addressType' => 'generated',
         | 
| 98 | 
            +
                                      'ethernet0.linkStatePropagation.enable' => 'TRUE',
         | 
| 99 | 
            +
                                      'ehci.present' => 'TRUE',
         | 
| 100 | 
            +
                                      'pciBridge4.virtualDev' => 'pcieRootPort',
         | 
| 101 | 
            +
                                      'pciBridge4.functions' => '8',
         | 
| 102 | 
            +
                                      'vmci0.present' => 'TRUE',
         | 
| 103 | 
            +
                                      'roamingVM.exitBehavior' => 'go',
         | 
| 104 | 
            +
                                      'tools.syncTime' => 'TRUE',
         | 
| 105 | 
            +
                                      'displayName' => 'u10_04',
         | 
| 106 | 
            +
                                      'guestOS' => 'ubuntu',
         | 
| 107 | 
            +
                                      'nvram' => 'u10_04.nvram',
         | 
| 108 | 
            +
                                      'virtualHW.productCompatibility' => 'hosted',
         | 
| 109 | 
            +
                                      'tools.upgrade.policy' => 'upgradeAtPowerCycle',
         | 
| 110 | 
            +
                                      'extendedConfigFile' => 'u10_04.vmxf',
         | 
| 111 | 
            +
                                      'serial0.present' => 'FALSE',
         | 
| 112 | 
            +
                                      'usb.present' => 'FALSE',
         | 
| 113 | 
            +
                                      'checkpoint.vmState' => 'u10_04.vmss',
         | 
| 114 | 
            +
                                      'ethernet0.generatedAddress' => '00:0c:29:c4:94:22',
         | 
| 115 | 
            +
                                      'uuid.location' => '56 4d 4b e9 1a bb 22 3a-b0 91 06 4e b4 c4 94 22',
         | 
| 116 | 
            +
                                      'uuid.bios' => '56 4d 4b e9 1a bb 22 3a-b0 91 06 4e b4 c4 94 22',
         | 
| 117 | 
            +
                                      'cleanShutdown' => 'TRUE',
         | 
| 118 | 
            +
                                      'scsi0:0.redo' => '',
         | 
| 119 | 
            +
                                      'scsi0.pciSlotNumber' => '16',
         | 
| 120 | 
            +
                                      'ethernet0.pciSlotNumber' => '32',
         | 
| 121 | 
            +
                                      'ethernet0.generatedAddressOffset' => '0',
         | 
| 122 | 
            +
                                      'vmci0.id' => '-1262185438',
         | 
| 123 | 
            +
                                      'tools.remindInstall' => 'TRUE' }
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                    config = @vm_config.config_data
         | 
| 126 | 
            +
                    config.data.should == expected_data
         | 
| 127 | 
            +
                  end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
              end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            end
         |