omf_rc 6.0.0.pre.5 → 6.0.0.pre.6
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/Rakefile +0 -6
 - data/bin/omf_rc +2 -2
 - data/lib/omf_rc/resource_factory.rb +10 -4
 - data/lib/omf_rc/resource_proxy/abstract_resource.rb +120 -79
 - data/lib/omf_rc/resource_proxy/generic_application.rb +471 -0
 - data/lib/omf_rc/resource_proxy/net.rb +7 -0
 - data/lib/omf_rc/resource_proxy/node.rb +33 -7
 - data/lib/omf_rc/resource_proxy/openflow_slice.rb +79 -0
 - data/lib/omf_rc/resource_proxy/openflow_slice_factory.rb +71 -0
 - data/lib/omf_rc/resource_proxy/wlan.rb +20 -0
 - data/lib/omf_rc/resource_proxy_dsl.rb +142 -8
 - data/lib/omf_rc/util/common_tools.rb +61 -0
 - data/lib/omf_rc/util/hostapd.rb +52 -0
 - data/lib/omf_rc/util/ip.rb +28 -0
 - data/lib/omf_rc/util/iw.rb +119 -6
 - data/lib/omf_rc/util/mock.rb +2 -1
 - data/lib/omf_rc/util/openflow_tools.rb +103 -0
 - data/lib/omf_rc/util/platform_tools.rb +164 -0
 - data/lib/omf_rc/util/wpa.rb +42 -0
 - data/lib/omf_rc/version.rb +1 -1
 - data/omf_rc.gemspec +3 -1
 - data/test/fixture/ip/addr_show +5 -0
 - data/test/fixture/iw/info +4 -0
 - data/test/fixture/sys/class/ieee80211/phy0/device/uevent +6 -0
 - data/test/fixture/sys/class/ieee80211/phy0/uevent +0 -0
 - data/test/fixture/sys/class/net/eth0/device/uevent +6 -0
 - data/test/fixture/sys/class/net/eth0/uevent +2 -0
 - data/test/fixture/sys/class/net/wlan0/device/uevent +6 -0
 - data/test/fixture/sys/class/net/wlan0/uevent +3 -0
 - data/test/omf_rc/message_process_error_spec.rb +11 -0
 - data/test/omf_rc/resource_factory_spec.rb +8 -1
 - data/test/omf_rc/resource_proxy/abstract_resource_spec.rb +57 -1
 - data/test/omf_rc/resource_proxy/generic_application_spec.rb +347 -0
 - data/test/omf_rc/resource_proxy/mock_spec.rb +15 -0
 - data/test/omf_rc/resource_proxy/node_spec.rb +32 -1
 - data/test/omf_rc/resource_proxy_dsl_spec.rb +81 -10
 - data/test/omf_rc/util/common_tools_spec.rb +30 -0
 - data/test/omf_rc/util/ip_spec.rb +51 -0
 - data/test/omf_rc/util/iw_spec.rb +136 -25
 - data/test/omf_rc/util/mock_spec.rb +26 -0
 - data/test/omf_rc/util/mod_spec.rb +8 -11
 - data/test/test_helper.rb +11 -0
 - metadata +62 -6
 - data/lib/omf_rc/resource_proxy/wifi.rb +0 -8
 - data/test/mock_helper.rb +0 -15
 
| 
         @@ -0,0 +1,347 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'omf_rc/resource_proxy/generic_application'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            describe OmfRc::ResourceProxy::GenericApplication do
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              before do
         
     | 
| 
      
 9 
     | 
    
         
            +
                @app_test = OmfRc::ResourceFactory.new(:generic_application, { hrn: 'an_application' })
         
     | 
| 
      
 10 
     | 
    
         
            +
                @app_test.comm = MiniTest::Mock.new
         
     | 
| 
      
 11 
     | 
    
         
            +
                @app_test.comm.expect :publish, nil, [String,OmfCommon::Message]
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              describe "when initialised" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                it "must respond to an 'on_app_event' call back" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #OmfRc::ResourceProxy::GenericApplication.method_defined?(:on_app_event).must_equal true
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @app_test.must_respond_to :on_app_event
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                it "must have its properties set to sensible initial values" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @app_test.request_state.to_sym.must_equal :stop
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @app_test.request_tarball_install_path.must_equal '/'
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @app_test.request_force_tarball_install.must_equal 'false'
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @app_test.request_installed.must_equal 'false'
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @app_test.request_map_err_to_out.must_equal 'false'
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                it "must be able to configure/request its basic properties" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  basic_prop = %w(binary_path pkg_tarball pkg_ubuntu pkg_fedora force_tarball_install map_err_to_out tarball_install_path)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  basic_prop.each do |p|
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @app_test.method("configure_#{p}".to_sym).call('foo')
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @app_test.method("request_#{p}".to_sym).call.must_equal 'foo'
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                it "must be able to tell which platform it is running on (either: unknown | ubuntu | fedora)" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @app_test.request_platform.must_match /unknown|ubuntu|fedora/
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                it "must be able to configure its environments property" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # First give it a valid environment property
         
     | 
| 
      
 42 
     | 
    
         
            +
                  test_environments = { 'foo' => 123, 'bar_bar' => 'bar_123' }
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @app_test.method(:configure_environments).call(test_environments)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # Then give it an invalid one, which it should ignore
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @app_test.method(:configure_environments).call(nil)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @app_test.property.environments.must_be_kind_of Hash
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @app_test.property.environments['foo'].must_equal 123
         
     | 
| 
      
 48 
     | 
    
         
            +
                  @app_test.property.environments['bar_bar'].must_equal 'bar_123'
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              describe "when configuring its parameters property" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                it "must be able to set its parameters property" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  # First give it a valid parameter property
         
     | 
| 
      
 55 
     | 
    
         
            +
                  test_params = { :p1 => { :cmd => '--foo', :value => 'foo'} }
         
     | 
| 
      
 56 
     | 
    
         
            +
                  @app_test.method(:configure_parameters).call(test_params)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # Then give it a couple of invalid ones, which it should ignore
         
     | 
| 
      
 58 
     | 
    
         
            +
                  @app_test.stub :log_inform_error, nil do
         
     | 
| 
      
 59 
     | 
    
         
            +
                    @app_test.method(:configure_parameters).call(nil)
         
     | 
| 
      
 60 
     | 
    
         
            +
                   @app_test.method(:configure_parameters).call( { :p1 => nil } )
         
     | 
| 
      
 61 
     | 
    
         
            +
                 end
         
     | 
| 
      
 62 
     | 
    
         
            +
                  @app_test.property.parameters.must_be_kind_of Hash
         
     | 
| 
      
 63 
     | 
    
         
            +
                  @app_test.property.parameters[:p1].must_be_kind_of Hash
         
     | 
| 
      
 64 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:cmd].must_equal '--foo'
         
     | 
| 
      
 65 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:value].must_equal 'foo'
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                it "must be able to merge new parameters into existing ones" do
         
     | 
| 
      
 69 
     | 
    
         
            +
                  old_params = { :p1 => { :cmd => '--foo', :default => 'old_foo'} }
         
     | 
| 
      
 70 
     | 
    
         
            +
                  @app_test.property.parameters = old_params
         
     | 
| 
      
 71 
     | 
    
         
            +
                  new_params = { :p1 => { :default => 'new_foo', :value => 'val_foo'},
         
     | 
| 
      
 72 
     | 
    
         
            +
                                 :p2 => { :cmd => 'bar', :default => 'bar_bar'} }
         
     | 
| 
      
 73 
     | 
    
         
            +
                  @app_test.method(:configure_parameters).call(new_params)
         
     | 
| 
      
 74 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:cmd].must_equal '--foo'
         
     | 
| 
      
 75 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:default].must_equal 'new_foo'
         
     | 
| 
      
 76 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:value].must_equal 'val_foo'
         
     | 
| 
      
 77 
     | 
    
         
            +
                  @app_test.property.parameters[:p2][:cmd].must_equal 'bar'
         
     | 
| 
      
 78 
     | 
    
         
            +
                  @app_test.property.parameters[:p2][:default].must_equal 'bar_bar'
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                it "must be able to sanitize its parameters property" do
         
     | 
| 
      
 82 
     | 
    
         
            +
                  test_params = { :p1 => { :mandatory => 'true', :dynamic => false},
         
     | 
| 
      
 83 
     | 
    
         
            +
                                  :p2 => { :mandatory => true, :dynamic => 'false'},
         
     | 
| 
      
 84 
     | 
    
         
            +
                                  :p3 => { :type => 'Boolean', :default => true, :value => 'false'},
         
     | 
| 
      
 85 
     | 
    
         
            +
                                  :p4 => { :type => 'Boolean', :default => 'true', :value => false} }
         
     | 
| 
      
 86 
     | 
    
         
            +
                  @app_test.method(:configure_parameters).call(test_params)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:mandatory].must_be_kind_of TrueClass
         
     | 
| 
      
 88 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:dynamic].must_be_kind_of FalseClass
         
     | 
| 
      
 89 
     | 
    
         
            +
                  @app_test.property.parameters[:p2][:mandatory].must_be_kind_of TrueClass
         
     | 
| 
      
 90 
     | 
    
         
            +
                  @app_test.property.parameters[:p2][:dynamic].must_be_kind_of FalseClass
         
     | 
| 
      
 91 
     | 
    
         
            +
                  @app_test.property.parameters[:p3][:default].must_be_kind_of TrueClass
         
     | 
| 
      
 92 
     | 
    
         
            +
                  @app_test.property.parameters[:p3][:value].must_be_kind_of FalseClass
         
     | 
| 
      
 93 
     | 
    
         
            +
                  @app_test.property.parameters[:p4][:default].must_be_kind_of TrueClass
         
     | 
| 
      
 94 
     | 
    
         
            +
                  @app_test.property.parameters[:p4][:value].must_be_kind_of FalseClass
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                it "must be able to validate the correct type of a defined parameter" do
         
     | 
| 
      
 98 
     | 
    
         
            +
                  test_params = { :p1 => { :type => 'String', :default => 'foo', :value => 'bar'},
         
     | 
| 
      
 99 
     | 
    
         
            +
                                  :p2 => { :type => 'Numeric', :default => 123, :value => 456},
         
     | 
| 
      
 100 
     | 
    
         
            +
                                  :p3 => { :type => 'Boolean', :default => true, :value => true},
         
     | 
| 
      
 101 
     | 
    
         
            +
                                  :p4 => { :type => 'Boolean'},
         
     | 
| 
      
 102 
     | 
    
         
            +
                                  :p5 => { :type => 'Boolean', :default => true},
         
     | 
| 
      
 103 
     | 
    
         
            +
                                  :p6 => { :type => 'Boolean', :value => true},
         
     | 
| 
      
 104 
     | 
    
         
            +
                                  :p7 => { :type => 'Numeric'},
         
     | 
| 
      
 105 
     | 
    
         
            +
                                  :p8 => { :type => 'Numeric', :default => 123},
         
     | 
| 
      
 106 
     | 
    
         
            +
                                  :p9 => { :type => 'Numeric', :value => 123} }
         
     | 
| 
      
 107 
     | 
    
         
            +
                  @app_test.method(:configure_parameters).call(test_params)
         
     | 
| 
      
 108 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:default].must_be_kind_of String
         
     | 
| 
      
 109 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:value].must_be_kind_of String
         
     | 
| 
      
 110 
     | 
    
         
            +
                  @app_test.property.parameters[:p2][:default].must_be_kind_of Numeric
         
     | 
| 
      
 111 
     | 
    
         
            +
                  @app_test.property.parameters[:p2][:value].must_be_kind_of Numeric
         
     | 
| 
      
 112 
     | 
    
         
            +
                  @app_test.property.parameters[:p3][:default].must_be_kind_of TrueClass
         
     | 
| 
      
 113 
     | 
    
         
            +
                  @app_test.property.parameters[:p3][:value].must_be_kind_of TrueClass
         
     | 
| 
      
 114 
     | 
    
         
            +
                  @app_test.property.parameters[:p4][:default].must_be_nil
         
     | 
| 
      
 115 
     | 
    
         
            +
                  @app_test.property.parameters[:p4][:value].must_be_nil
         
     | 
| 
      
 116 
     | 
    
         
            +
                  @app_test.property.parameters[:p5][:default].must_be_kind_of TrueClass
         
     | 
| 
      
 117 
     | 
    
         
            +
                  @app_test.property.parameters[:p6][:value].must_be_kind_of TrueClass
         
     | 
| 
      
 118 
     | 
    
         
            +
                  @app_test.property.parameters[:p7][:default].must_be_nil
         
     | 
| 
      
 119 
     | 
    
         
            +
                  @app_test.property.parameters[:p7][:value].must_be_nil
         
     | 
| 
      
 120 
     | 
    
         
            +
                  @app_test.property.parameters[:p8][:default].must_be_kind_of Numeric
         
     | 
| 
      
 121 
     | 
    
         
            +
                  @app_test.property.parameters[:p9][:value].must_be_kind_of Numeric
         
     | 
| 
      
 122 
     | 
    
         
            +
                end
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                it "must be able to detect incorrect type setting for a defined parameter, and DO NOT update the parameter in that case" do
         
     | 
| 
      
 125 
     | 
    
         
            +
                  old_params = { :p1 => { :type => 'String', :value => 'foo'},
         
     | 
| 
      
 126 
     | 
    
         
            +
                                 :p2 => { :type => 'Numeric', :default => 123, :value => 456 },
         
     | 
| 
      
 127 
     | 
    
         
            +
                                 :p3 => { :type => 'Boolean', :default => true, :value => true} }
         
     | 
| 
      
 128 
     | 
    
         
            +
                  @app_test.property.parameters = old_params
         
     | 
| 
      
 129 
     | 
    
         
            +
                  new_params = { :p1 => { :type => 'String', :value => true},
         
     | 
| 
      
 130 
     | 
    
         
            +
                                 :p2 => { :type => 'Numeric', :default => 456, :value => '456' },
         
     | 
| 
      
 131 
     | 
    
         
            +
                                 :p3 => { :type => 'Boolean', :default => 123, :value => false} }
         
     | 
| 
      
 132 
     | 
    
         
            +
                  @app_test.stub :log_inform_error, nil do
         
     | 
| 
      
 133 
     | 
    
         
            +
                    @app_test.method(:configure_parameters).call(new_params)
         
     | 
| 
      
 134 
     | 
    
         
            +
                  end
         
     | 
| 
      
 135 
     | 
    
         
            +
                  @app_test.property.parameters[:p1][:value].must_equal 'foo'
         
     | 
| 
      
 136 
     | 
    
         
            +
                  @app_test.property.parameters[:p2][:default].must_equal 123
         
     | 
| 
      
 137 
     | 
    
         
            +
                  @app_test.property.parameters[:p2][:value].must_equal 456
         
     | 
| 
      
 138 
     | 
    
         
            +
                  @app_test.property.parameters[:p3][:default].must_be_kind_of TrueClass
         
     | 
| 
      
 139 
     | 
    
         
            +
                  @app_test.property.parameters[:p3][:value].must_be_kind_of TrueClass
         
     | 
| 
      
 140 
     | 
    
         
            +
                end
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                it "must update any valid dynamic parameter with the given value" do
         
     | 
| 
      
 143 
     | 
    
         
            +
                  # set the parameter as dynamic
         
     | 
| 
      
 144 
     | 
    
         
            +
                  params1 = { :p1 => { :cmd => '--foo', :default => 'old_foo', :dynamic => true} }
         
     | 
| 
      
 145 
     | 
    
         
            +
                  @app_test.method(:configure_parameters).call(params1)
         
     | 
| 
      
 146 
     | 
    
         
            +
                  # then update it
         
     | 
| 
      
 147 
     | 
    
         
            +
                  params2 = { :p1 => { :value => 'bar'} }
         
     | 
| 
      
 148 
     | 
    
         
            +
                  @app_test.property.state = :run
         
     | 
| 
      
 149 
     | 
    
         
            +
                  class ExecApp
         
     | 
| 
      
 150 
     | 
    
         
            +
                    def initialize(app_id, res, cmd_line, err_out_map); end
         
     | 
| 
      
 151 
     | 
    
         
            +
                    def ExecApp.[](id); return ExecApp.new(nil,nil,nil,nil) end
         
     | 
| 
      
 152 
     | 
    
         
            +
                    def stdin(msg); msg.must_equal '--foo bar' end
         
     | 
| 
      
 153 
     | 
    
         
            +
                  end
         
     | 
| 
      
 154 
     | 
    
         
            +
                  @app_test.method(:configure_parameters).call(params2)
         
     | 
| 
      
 155 
     | 
    
         
            +
                end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
              end
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
              describe "when receiving an event from a running application instance" do
         
     | 
| 
      
 160 
     | 
    
         
            +
                it "must publish an INFORM message to relay that event" do
         
     | 
| 
      
 161 
     | 
    
         
            +
                  @app_test.on_app_event('STDOUT', 'app_instance_id', 'Some text here').must_be_nil
         
     | 
| 
      
 162 
     | 
    
         
            +
                  assert @app_test.comm.verify
         
     | 
| 
      
 163 
     | 
    
         
            +
                end
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
                it "must increments its event_sequence after publishig that INFORM message" do
         
     | 
| 
      
 166 
     | 
    
         
            +
                  i = @app_test.property.event_sequence
         
     | 
| 
      
 167 
     | 
    
         
            +
                  @app_test.on_app_event('STDOUT', 'app_instance_id', 'Some text here')
         
     | 
| 
      
 168 
     | 
    
         
            +
                  @app_test.property.event_sequence.must_equal i+1
         
     | 
| 
      
 169 
     | 
    
         
            +
                end
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                it "must switch its state to 'stop' if the event is of a type 'DONE'" do
         
     | 
| 
      
 172 
     | 
    
         
            +
                  @app_test.on_app_event('DONE.OK', 'app_instance_id', 'Some text here')
         
     | 
| 
      
 173 
     | 
    
         
            +
                  @app_test.request_state.to_sym.must_equal :stop
         
     | 
| 
      
 174 
     | 
    
         
            +
                end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                it "must set installed property to true if the event is 'DONE.OK' and the app_id's suffix is '_INSTALL'" do
         
     | 
| 
      
 177 
     | 
    
         
            +
                  @app_test.on_app_event('DONE.OK', 'app_instance_id_INSTALL', 'Some text here')
         
     | 
| 
      
 178 
     | 
    
         
            +
                  @app_test.request_state.to_sym.must_equal :stop
         
     | 
| 
      
 179 
     | 
    
         
            +
                  @app_test.request_installed.must_equal "true"
         
     | 
| 
      
 180 
     | 
    
         
            +
                end
         
     | 
| 
      
 181 
     | 
    
         
            +
              end
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
              describe "when configuring its state property to :install" do
         
     | 
| 
      
 184 
     | 
    
         
            +
                it "must do nothing if its original state is not :stop" do
         
     | 
| 
      
 185 
     | 
    
         
            +
                  @app_test.property.state = :run
         
     | 
| 
      
 186 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:install)
         
     | 
| 
      
 187 
     | 
    
         
            +
                  @app_test.property.state.must_equal :run
         
     | 
| 
      
 188 
     | 
    
         
            +
                end
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
                it "must do nothing if its original state is :stop and it is already installed" do
         
     | 
| 
      
 191 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 192 
     | 
    
         
            +
                  @app_test.property.installed = true
         
     | 
| 
      
 193 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:install)
         
     | 
| 
      
 194 
     | 
    
         
            +
                  @app_test.property.state.must_equal :stop
         
     | 
| 
      
 195 
     | 
    
         
            +
                end
         
     | 
| 
      
 196 
     | 
    
         
            +
             
     | 
| 
      
 197 
     | 
    
         
            +
                it "must use the tarball install method if it does not know its OS platform or if force_tarball_install is set" do
         
     | 
| 
      
 198 
     | 
    
         
            +
                  @app_test.property.pkg_tarball = 'foo'
         
     | 
| 
      
 199 
     | 
    
         
            +
                  @app_test.property.tarball_install_path = '/bar/'
         
     | 
| 
      
 200 
     | 
    
         
            +
                  @stub_tarball_tasks = Proc.new do |pkg,path|
         
     | 
| 
      
 201 
     | 
    
         
            +
                    pkg.must_equal 'foo'
         
     | 
| 
      
 202 
     | 
    
         
            +
                    path.must_equal '/bar/'
         
     | 
| 
      
 203 
     | 
    
         
            +
                    @did_call_install_tarball = true
         
     | 
| 
      
 204 
     | 
    
         
            +
                  end
         
     | 
| 
      
 205 
     | 
    
         
            +
                  def call_configure
         
     | 
| 
      
 206 
     | 
    
         
            +
                    @app_test.stub :install_tarball, @stub_tarball_tasks do
         
     | 
| 
      
 207 
     | 
    
         
            +
                      @app_test.method(:configure_state).call(:install).must_equal :install
         
     | 
| 
      
 208 
     | 
    
         
            +
                      @did_call_install_tarball.must_equal true
         
     | 
| 
      
 209 
     | 
    
         
            +
                    end
         
     | 
| 
      
 210 
     | 
    
         
            +
                  end
         
     | 
| 
      
 211 
     | 
    
         
            +
                  # Unknown Platform...
         
     | 
| 
      
 212 
     | 
    
         
            +
                  @did_call_install_tarball = false
         
     | 
| 
      
 213 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 214 
     | 
    
         
            +
                  @app_test.property.installed = false
         
     | 
| 
      
 215 
     | 
    
         
            +
                  @app_test.property.platform = :unknown
         
     | 
| 
      
 216 
     | 
    
         
            +
                  call_configure
         
     | 
| 
      
 217 
     | 
    
         
            +
                  # Force Install Tarball...
         
     | 
| 
      
 218 
     | 
    
         
            +
                  @did_call_install_tarball = false
         
     | 
| 
      
 219 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 220 
     | 
    
         
            +
                  @app_test.property.installed = false
         
     | 
| 
      
 221 
     | 
    
         
            +
                  @app_test.property.platform = :ubuntu
         
     | 
| 
      
 222 
     | 
    
         
            +
                  @app_test.property.force_tarball_install = true
         
     | 
| 
      
 223 
     | 
    
         
            +
                  call_configure
         
     | 
| 
      
 224 
     | 
    
         
            +
                end
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
                it "must use the ubuntu install method if its OS platform is ubuntu" do
         
     | 
| 
      
 227 
     | 
    
         
            +
                  @did_call_install_ubuntu = false
         
     | 
| 
      
 228 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 229 
     | 
    
         
            +
                  @app_test.property.installed = false
         
     | 
| 
      
 230 
     | 
    
         
            +
                  @app_test.property.platform = :ubuntu
         
     | 
| 
      
 231 
     | 
    
         
            +
                  @app_test.property.pkg_ubuntu = 'foo'
         
     | 
| 
      
 232 
     | 
    
         
            +
                  @stub_ubuntu_tasks = Proc.new do |pkg|
         
     | 
| 
      
 233 
     | 
    
         
            +
                    pkg.must_equal 'foo'
         
     | 
| 
      
 234 
     | 
    
         
            +
                    @did_call_install_ubuntu = true
         
     | 
| 
      
 235 
     | 
    
         
            +
                  end
         
     | 
| 
      
 236 
     | 
    
         
            +
                  @app_test.stub :install_ubuntu, @stub_ubuntu_tasks do
         
     | 
| 
      
 237 
     | 
    
         
            +
                    @app_test.method(:configure_state).call(:install).must_equal :install
         
     | 
| 
      
 238 
     | 
    
         
            +
                    @did_call_install_ubuntu.must_equal true
         
     | 
| 
      
 239 
     | 
    
         
            +
                  end
         
     | 
| 
      
 240 
     | 
    
         
            +
                end
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
                it "must use the fedora install method if its OS platform is fedora" do
         
     | 
| 
      
 243 
     | 
    
         
            +
                  @did_call_install_fedora = false
         
     | 
| 
      
 244 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 245 
     | 
    
         
            +
                  @app_test.property.installed = false
         
     | 
| 
      
 246 
     | 
    
         
            +
                  @app_test.property.platform = :fedora
         
     | 
| 
      
 247 
     | 
    
         
            +
                  @app_test.property.pkg_fedora = 'foo'
         
     | 
| 
      
 248 
     | 
    
         
            +
                  @stub_fedora_tasks = Proc.new do |pkg|
         
     | 
| 
      
 249 
     | 
    
         
            +
                    pkg.must_equal 'foo'
         
     | 
| 
      
 250 
     | 
    
         
            +
                    @did_call_install_fedora = true
         
     | 
| 
      
 251 
     | 
    
         
            +
                  end
         
     | 
| 
      
 252 
     | 
    
         
            +
                  @app_test.stub :install_fedora, @stub_fedora_tasks do
         
     | 
| 
      
 253 
     | 
    
         
            +
                    @app_test.method(:configure_state).call(:install).must_equal :install
         
     | 
| 
      
 254 
     | 
    
         
            +
                    @did_call_install_fedora.must_equal true
         
     | 
| 
      
 255 
     | 
    
         
            +
                  end
         
     | 
| 
      
 256 
     | 
    
         
            +
                end
         
     | 
| 
      
 257 
     | 
    
         
            +
              end
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
              describe "when configuring its state property to :run" do
         
     | 
| 
      
 260 
     | 
    
         
            +
                it "must do nothing if its original state is :install" do
         
     | 
| 
      
 261 
     | 
    
         
            +
                  @app_test.property.state = :install
         
     | 
| 
      
 262 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:run)
         
     | 
| 
      
 263 
     | 
    
         
            +
                  @app_test.property.state.must_equal :install
         
     | 
| 
      
 264 
     | 
    
         
            +
                end
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
                it "must get back to the :run state if its original state is :pause" do
         
     | 
| 
      
 267 
     | 
    
         
            +
                  @app_test.property.state = :pause
         
     | 
| 
      
 268 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:run)
         
     | 
| 
      
 269 
     | 
    
         
            +
                  @app_test.property.state.must_equal :run
         
     | 
| 
      
 270 
     | 
    
         
            +
                end
         
     | 
| 
      
 271 
     | 
    
         
            +
             
     | 
| 
      
 272 
     | 
    
         
            +
                it "must do nothing if its binary path is not set" do
         
     | 
| 
      
 273 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 274 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:run)
         
     | 
| 
      
 275 
     | 
    
         
            +
                  @app_test.property.state.must_equal :stop
         
     | 
| 
      
 276 
     | 
    
         
            +
                end
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
                it "must start an app using ExecApp and a correct command line if its original state is :stop" do
         
     | 
| 
      
 279 
     | 
    
         
            +
                  class ExecApp
         
     | 
| 
      
 280 
     | 
    
         
            +
                    def initialize(app_id, res, cmd_line, err_out_map)
         
     | 
| 
      
 281 
     | 
    
         
            +
                      app_id.must_equal "an_application"
         
     | 
| 
      
 282 
     | 
    
         
            +
                      res.must_be_kind_of OmfRc::ResourceProxy::AbstractResource
         
     | 
| 
      
 283 
     | 
    
         
            +
                      cmd_line.must_equal "env -i FOO=123 BAR_BAR='bar_123' my_cmd  123 -param1 bar p3  hello "
         
     | 
| 
      
 284 
     | 
    
         
            +
                      err_out_map.must_equal false
         
     | 
| 
      
 285 
     | 
    
         
            +
                    end
         
     | 
| 
      
 286 
     | 
    
         
            +
                  end
         
     | 
| 
      
 287 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 288 
     | 
    
         
            +
                  @app_test.property.binary_path = "my_cmd"
         
     | 
| 
      
 289 
     | 
    
         
            +
                  test_env = { 'foo' => 123, 'bar_bar' => 'bar_123' }
         
     | 
| 
      
 290 
     | 
    
         
            +
                  test_params = { :p1 => { :type => 'String', :mandatory => true, :cmd => '-param1', :default => 'foo', :value => 'bar', :order => 2},
         
     | 
| 
      
 291 
     | 
    
         
            +
                                  :p2 => { :type => 'Numeric', :mandatory => true, :default => 123, :order => 1 },
         
     | 
| 
      
 292 
     | 
    
         
            +
                                  :p3 => { :type => 'Boolean', :cmd => 'p3', :default => false, :value => true},
         
     | 
| 
      
 293 
     | 
    
         
            +
                                  :p4 => { :type => 'String', :default => 'hi', :value => 'hello'},
         
     | 
| 
      
 294 
     | 
    
         
            +
                                  :p5 => { :type => 'Numeric', :default => 456}, }
         
     | 
| 
      
 295 
     | 
    
         
            +
                  @app_test.method(:configure_environments).call(test_env)
         
     | 
| 
      
 296 
     | 
    
         
            +
                  @app_test.method(:configure_parameters).call(test_params)
         
     | 
| 
      
 297 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:run)
         
     | 
| 
      
 298 
     | 
    
         
            +
                  @app_test.property.state.must_equal :run
         
     | 
| 
      
 299 
     | 
    
         
            +
                end
         
     | 
| 
      
 300 
     | 
    
         
            +
              end
         
     | 
| 
      
 301 
     | 
    
         
            +
             
     | 
| 
      
 302 
     | 
    
         
            +
              describe "when configuring its state property to :pause" do
         
     | 
| 
      
 303 
     | 
    
         
            +
                it "must do nothing if its original state is :stop or :install" do
         
     | 
| 
      
 304 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 305 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:pause)
         
     | 
| 
      
 306 
     | 
    
         
            +
                  @app_test.property.state.must_equal :stop
         
     | 
| 
      
 307 
     | 
    
         
            +
                  @app_test.property.state = :install
         
     | 
| 
      
 308 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:pause)
         
     | 
| 
      
 309 
     | 
    
         
            +
                  @app_test.property.state.must_equal :install
         
     | 
| 
      
 310 
     | 
    
         
            +
                end
         
     | 
| 
      
 311 
     | 
    
         
            +
             
     | 
| 
      
 312 
     | 
    
         
            +
                it "must do switch its state to :pause if its original state is :run or :pause" do
         
     | 
| 
      
 313 
     | 
    
         
            +
                  @app_test.property.state = :run
         
     | 
| 
      
 314 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:pause)
         
     | 
| 
      
 315 
     | 
    
         
            +
                  @app_test.property.state.must_equal :pause
         
     | 
| 
      
 316 
     | 
    
         
            +
                  @app_test.property.state = :pause
         
     | 
| 
      
 317 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:pause)
         
     | 
| 
      
 318 
     | 
    
         
            +
                  @app_test.property.state.must_equal :pause
         
     | 
| 
      
 319 
     | 
    
         
            +
                end
         
     | 
| 
      
 320 
     | 
    
         
            +
              end
         
     | 
| 
      
 321 
     | 
    
         
            +
             
     | 
| 
      
 322 
     | 
    
         
            +
              describe "when configuring its state property to :stop" do
         
     | 
| 
      
 323 
     | 
    
         
            +
                it "must do nothing if its original state is :stop or :install" do
         
     | 
| 
      
 324 
     | 
    
         
            +
                  @app_test.property.state = :stop
         
     | 
| 
      
 325 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:pause)
         
     | 
| 
      
 326 
     | 
    
         
            +
                  @app_test.property.state.must_equal :stop
         
     | 
| 
      
 327 
     | 
    
         
            +
                  @app_test.property.state = :install
         
     | 
| 
      
 328 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:pause)
         
     | 
| 
      
 329 
     | 
    
         
            +
                  @app_test.property.state.must_equal :install
         
     | 
| 
      
 330 
     | 
    
         
            +
                end
         
     | 
| 
      
 331 
     | 
    
         
            +
             
     | 
| 
      
 332 
     | 
    
         
            +
                it "must stop its running application if its original state is :run or :pause" do
         
     | 
| 
      
 333 
     | 
    
         
            +
                  @app_test.property.state = :run
         
     | 
| 
      
 334 
     | 
    
         
            +
                  class ExecApp
         
     | 
| 
      
 335 
     | 
    
         
            +
                    def initialize(app_id, res, cmd_line, err_out_map); end
         
     | 
| 
      
 336 
     | 
    
         
            +
                    def ExecApp.[](id); return ExecApp.new(nil,nil,nil,nil) end
         
     | 
| 
      
 337 
     | 
    
         
            +
                    def stdin(msg); msg.must_equal 'exit' end
         
     | 
| 
      
 338 
     | 
    
         
            +
                    def signal(sig); sig.must_equal 'TERM' end
         
     | 
| 
      
 339 
     | 
    
         
            +
                    def kill(sig); sig.must_equal 'KILL' end
         
     | 
| 
      
 340 
     | 
    
         
            +
                  end
         
     | 
| 
      
 341 
     | 
    
         
            +
                  @app_test.method(:configure_state).call(:stop)
         
     | 
| 
      
 342 
     | 
    
         
            +
                  @app_test.property.state.must_equal :stop
         
     | 
| 
      
 343 
     | 
    
         
            +
                end
         
     | 
| 
      
 344 
     | 
    
         
            +
              end
         
     | 
| 
      
 345 
     | 
    
         
            +
             
     | 
| 
      
 346 
     | 
    
         
            +
             
     | 
| 
      
 347 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'omf_rc/resource_proxy/mock'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe OmfRc::ResourceProxy::Mock do
         
     | 
| 
      
 5 
     | 
    
         
            +
              before do
         
     | 
| 
      
 6 
     | 
    
         
            +
                @mock = OmfRc::ResourceFactory.new(:mock, hrn: 'mock_test')
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              describe "when included in the resource instance" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                it "must provide hooks" do
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @mock.before_ready
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @mock.before_release
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -2,9 +2,40 @@ require 'test_helper' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'omf_rc/resource_proxy/node'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            describe OmfRc::ResourceProxy::Node do
         
     | 
| 
      
 5 
     | 
    
         
            +
              before do
         
     | 
| 
      
 6 
     | 
    
         
            +
                @node = OmfRc::ResourceFactory.new(:node, hrn: 'node_test')
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       5 
9 
     | 
    
         
             
              describe "when included in the resource instance" do
         
     | 
| 
       6 
10 
     | 
    
         
             
                it "must be able to tell registered proxies" do
         
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
      
 11 
     | 
    
         
            +
                  @node.request_proxies.must_include :node
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                it "must provide a list of supported network devices" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  devices = [
         
     | 
| 
      
 16 
     | 
    
         
            +
                    { name: 'eth0', driver: 'e1000e', category: 'net', proxy: 'net' },
         
     | 
| 
      
 17 
     | 
    
         
            +
                    { name: 'phy0', driver: 'iwlwifi', category: 'net', subcategory: 'wlan', proxy: 'wlan' }
         
     | 
| 
      
 18 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  Dir.stub :chdir, proc { |*args, &block| block.call } do
         
     | 
| 
      
 21 
     | 
    
         
            +
                    glob_proc = proc do |pattern|
         
     | 
| 
      
 22 
     | 
    
         
            +
                      sys_dir = "#{File.dirname(__FILE__)}/../../fixture/sys/class"
         
     | 
| 
      
 23 
     | 
    
         
            +
                      case pattern
         
     | 
| 
      
 24 
     | 
    
         
            +
                      when "net"
         
     | 
| 
      
 25 
     | 
    
         
            +
                        ["#{sys_dir}/net"]
         
     | 
| 
      
 26 
     | 
    
         
            +
                      when "ieee80211"
         
     | 
| 
      
 27 
     | 
    
         
            +
                        ["#{sys_dir}/ieee80211"]
         
     | 
| 
      
 28 
     | 
    
         
            +
                      when "ieee80211/*"
         
     | 
| 
      
 29 
     | 
    
         
            +
                        ["#{sys_dir}/ieee80211/phy0"]
         
     | 
| 
      
 30 
     | 
    
         
            +
                      when "net/eth*"
         
     | 
| 
      
 31 
     | 
    
         
            +
                        ["#{sys_dir}/net/eth0"]
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                    Dir.stub :glob, glob_proc do
         
     | 
| 
      
 35 
     | 
    
         
            +
                      @node.request_devices.must_be_kind_of Array
         
     | 
| 
      
 36 
     | 
    
         
            +
                      @node.request_devices.must_equal devices
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
       8 
39 
     | 
    
         
             
                end
         
     | 
| 
       9 
40 
     | 
    
         
             
              end
         
     | 
| 
       10 
41 
     | 
    
         
             
            end
         
     | 
| 
         @@ -5,20 +5,57 @@ describe OmfRc::ResourceProxyDSL do 
     | 
|
| 
       5 
5 
     | 
    
         
             
              before do
         
     | 
| 
       6 
6 
     | 
    
         
             
                module OmfRc::Util::MockUtility
         
     | 
| 
       7 
7 
     | 
    
         
             
                  include OmfRc::ResourceProxyDSL
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       8 
9 
     | 
    
         
             
                  configure :alpha
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  request :alpha do |resource|
         
     | 
| 
      
 12 
     | 
    
         
            +
                    resource.uid
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  work :bravo do |resource, *random_arguments, block|
         
     | 
| 
      
 16 
     | 
    
         
            +
                    if block
         
     | 
| 
      
 17 
     | 
    
         
            +
                      block.call("working on #{random_arguments.first}")
         
     | 
| 
      
 18 
     | 
    
         
            +
                    else
         
     | 
| 
      
 19 
     | 
    
         
            +
                      random_arguments.first
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  request :zulu do |resource, options|
         
     | 
| 
      
 24 
     | 
    
         
            +
                    "You called zulu with: #{options.keys.join('|')}"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                module OmfRc::ResourceProxy::MockRootProxy
         
     | 
| 
      
 29 
     | 
    
         
            +
                  include OmfRc::ResourceProxyDSL
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  register_proxy :mock_root_proxy
         
     | 
| 
       10 
32 
     | 
    
         
             
                end
         
     | 
| 
       11 
33 
     | 
    
         | 
| 
       12 
34 
     | 
    
         
             
                module OmfRc::ResourceProxy::MockProxy
         
     | 
| 
       13 
35 
     | 
    
         
             
                  include OmfRc::ResourceProxyDSL
         
     | 
| 
       14 
36 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                  register_proxy :mock_proxy
         
     | 
| 
      
 37 
     | 
    
         
            +
                  register_proxy :mock_proxy, :create_by => :mock_root_proxy
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
       16 
39 
     | 
    
         
             
                  utility :mock_utility
         
     | 
| 
       17 
40 
     | 
    
         | 
| 
       18 
41 
     | 
    
         
             
                  hook :before_ready
         
     | 
| 
       19 
42 
     | 
    
         
             
                  hook :before_release
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                   
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  bravo("printing") do |v|
         
     | 
| 
      
 45 
     | 
    
         
            +
                    request :charlie do
         
     | 
| 
      
 46 
     | 
    
         
            +
                      v
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  request :delta do
         
     | 
| 
      
 51 
     | 
    
         
            +
                    bravo("printing")
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                module OmfRc::ResourceProxy::UselessProxy
         
     | 
| 
      
 56 
     | 
    
         
            +
                  include OmfRc::ResourceProxyDSL
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  register_proxy :useless_proxy
         
     | 
| 
       22 
59 
     | 
    
         
             
                end
         
     | 
| 
       23 
60 
     | 
    
         
             
              end
         
     | 
| 
       24 
61 
     | 
    
         | 
| 
         @@ -28,12 +65,46 @@ describe OmfRc::ResourceProxyDSL do 
     | 
|
| 
       28 
65 
     | 
    
         
             
                end
         
     | 
| 
       29 
66 
     | 
    
         | 
| 
       30 
67 
     | 
    
         
             
                it "must be able to define methods" do
         
     | 
| 
       31 
     | 
    
         
            -
                   
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                   
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                   
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 68 
     | 
    
         
            +
                  %w(configure_alpha request_alpha bravo).each do |m|
         
     | 
| 
      
 69 
     | 
    
         
            +
                    OmfRc::Util::MockUtility.method_defined?(m.to_sym).must_equal true
         
     | 
| 
      
 70 
     | 
    
         
            +
                  end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                  %w(configure_alpha request_alpha before_ready before_release bravo).each do |m|
         
     | 
| 
      
 73 
     | 
    
         
            +
                    OmfRc::ResourceProxy::MockProxy.method_defined?(m.to_sym).must_equal true
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                  mock_proxy = OmfRc::ResourceFactory.new(:mock_proxy)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  mock_proxy.request_alpha.must_equal mock_proxy.uid
         
     | 
| 
      
 78 
     | 
    
         
            +
                  mock_proxy.request_delta.must_equal "printing"
         
     | 
| 
      
 79 
     | 
    
         
            +
                  mock_proxy.request_charlie.must_equal "working on printing"
         
     | 
| 
      
 80 
     | 
    
         
            +
                  mock_proxy.bravo("magic", "second parameter") do |v|
         
     | 
| 
      
 81 
     | 
    
         
            +
                    v.must_equal "working on magic"
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
                  mock_proxy.bravo("something", "something else").must_equal "something"
         
     | 
| 
      
 84 
     | 
    
         
            +
                  mock_proxy.request_zulu(country: 'uk').must_equal "You called zulu with: country"
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                it "must be able to include utility" do
         
     | 
| 
      
 88 
     | 
    
         
            +
                  Class.new do
         
     | 
| 
      
 89 
     | 
    
         
            +
                    include OmfRc::ResourceProxyDSL
         
     | 
| 
      
 90 
     | 
    
         
            +
                    utility :mock_utility
         
     | 
| 
      
 91 
     | 
    
         
            +
                  end.new.must_respond_to :request_alpha
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                it "must log error if utility can't be found" do
         
     | 
| 
      
 95 
     | 
    
         
            +
                  Class.new do
         
     | 
| 
      
 96 
     | 
    
         
            +
                    include OmfRc::ResourceProxyDSL
         
     | 
| 
      
 97 
     | 
    
         
            +
                    utility :wont_be_found_utility
         
     | 
| 
      
 98 
     | 
    
         
            +
                    stub :require, true do
         
     | 
| 
      
 99 
     | 
    
         
            +
                      utility :wont_be_found_utility
         
     | 
| 
      
 100 
     | 
    
         
            +
                    end
         
     | 
| 
      
 101 
     | 
    
         
            +
                  end
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                it "must check new proxy's create_by option when ask a proxy create a new proxy" do
         
     | 
| 
      
 105 
     | 
    
         
            +
                  OmfRc::ResourceFactory.new(:mock_root_proxy).create(:mock_proxy)
         
     | 
| 
      
 106 
     | 
    
         
            +
                  OmfRc::ResourceFactory.new(:mock_root_proxy).create(:useless_proxy)
         
     | 
| 
      
 107 
     | 
    
         
            +
                  lambda { OmfRc::ResourceFactory.new(:useless_proxy).create(:mock_proxy) }.must_raise StandardError
         
     | 
| 
       37 
108 
     | 
    
         
             
                end
         
     | 
| 
       38 
109 
     | 
    
         
             
              end
         
     | 
| 
       39 
110 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'omf_rc/util/common_tools'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe OmfRc::Util::CommonTools do
         
     | 
| 
      
 5 
     | 
    
         
            +
              
         
     | 
| 
      
 6 
     | 
    
         
            +
              describe "when included in the resource proxy" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                before do
         
     | 
| 
      
 8 
     | 
    
         
            +
                  module OmfRc::ResourceProxy::Test
         
     | 
| 
      
 9 
     | 
    
         
            +
                    include OmfRc::ResourceProxyDSL
         
     | 
| 
      
 10 
     | 
    
         
            +
                    register_proxy :test
         
     | 
| 
      
 11 
     | 
    
         
            +
                    utility :common_tools
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
                  # Mocking communicator
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @client = Blather::Client.new
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @stream = MiniTest::Mock.new
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @stream.expect(:send, true, [Blather::Stanza])
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @client.post_init @stream, Blather::JID.new('n@d/r')
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                it "must be able to log and inform error/warn messages" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                  Blather::Client.stub :new, @client do
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @test = OmfRc::ResourceFactory.new(:test)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @client.stub :write, true do
         
     | 
| 
      
 24 
     | 
    
         
            +
                      @test.log_inform_error "bob"
         
     | 
| 
      
 25 
     | 
    
         
            +
                      @test.log_inform_warn "bob"
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,51 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'minitest/mock'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require 'omf_rc/util/ip'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            describe OmfRc::Util::Ip do
         
     | 
| 
      
 7 
     | 
    
         
            +
              describe "when included in the resource instance" do
         
     | 
| 
      
 8 
     | 
    
         
            +
                before do
         
     | 
| 
      
 9 
     | 
    
         
            +
                  module OmfRc::ResourceProxy::IpTest
         
     | 
| 
      
 10 
     | 
    
         
            +
                    include OmfRc::ResourceProxyDSL
         
     | 
| 
      
 11 
     | 
    
         
            +
                    register_proxy :ip_test
         
     | 
| 
      
 12 
     | 
    
         
            +
                    utility :ip
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  @wlan00 = OmfRc::ResourceFactory.new(:ip_test, hrn: 'wlan00')
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @command = MiniTest::Mock.new
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                it "must provide features defined in proxy" do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  %w(request_ip_addr request_mac_addr configure_ip_addr).each do |m|
         
     | 
| 
      
 21 
     | 
    
         
            +
                    OmfRc::Util::Ip.method_defined?(m).must_equal true
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                it "could request ip address of the device" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  Cocaine::CommandLine.stub(:new, @command) do
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @command.expect(:run, fixture("ip/addr_show"))
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @wlan00.request_ip_addr.must_equal "192.168.1.124/24"
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @command.verify
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                it "could request mac address of the device" do
         
     | 
| 
      
 34 
     | 
    
         
            +
                  Cocaine::CommandLine.stub(:new, @command) do
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @command.expect(:run, fixture("ip/addr_show"))
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @wlan00.request_mac_addr.must_equal "00:00:00:29:00:00"
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @command.verify
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                it "could configure the device's prorperty" do
         
     | 
| 
      
 42 
     | 
    
         
            +
                  lambda { @wlan00.configure_ip_addr("192.168.1.124/24") }.must_raise Cocaine::ExitStatusError
         
     | 
| 
      
 43 
     | 
    
         
            +
                  Cocaine::CommandLine.stub(:new, @command) do
         
     | 
| 
      
 44 
     | 
    
         
            +
                    @command.expect(:run, "")
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @command.expect(:run, fixture("ip/addr_show"))
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @wlan00.configure_ip_addr("192.168.1.124/24")
         
     | 
| 
      
 47 
     | 
    
         
            +
                    @command.verify
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
            end
         
     |