Module: CorePluginFunctionalHelper
- Includes:
- CorePluginBaseHelper
- Defined in:
- lib/plugins/shared/core_plugin_test_helper.rb
Constant Summary collapse
- TRAIN_CONNECTION =
- Train.create('local', command_runner: :generic).connection 
Instance Method Summary collapse
- #__find_plugin_path_from_caller(frames_back = 2) ⇒ Object
- #__make_empty_plugin_file_data_structure ⇒ Object
- #__make_plugin_file_data_structure_with_path(path) ⇒ Object
- #run_inspec_process(command_line, opts = {}) ⇒ Object
- 
  
    
      #run_inspec_process_with_this_plugin(command_line, opts = {})  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    This helper does some fancy footwork to make InSpec think a plugin under development is temporarily installed. 
Instance Method Details
#__find_plugin_path_from_caller(frames_back = 2) ⇒ Object
| 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | # File 'lib/plugins/shared/core_plugin_test_helper.rb', line 107 def __find_plugin_path_from_caller(frames_back = 2) caller_path = Pathname.new(caller_locations(frames_back, 1).first.absolute_path) # Typical caller path: # /Users/cwolfe/sandbox/inspec-resource-lister/test/functional/inspec_resource_lister_test.rb # We want: # /Users/cwolfe/sandbox/inspec-resource-lister/lib/inspec-resource-lister.rb cursor = caller_path until cursor.basename.to_s == 'test' && cursor.parent.basename.to_s =~ /^(inspec|train)-/ cursor = cursor.parent break if cursor.nil? end raise 'Could not comprehend plugin project directory structure' if cursor.nil? project_dir = cursor.parent plugin_name = project_dir.basename entry_point = File.join(project_dir.to_s, 'lib', plugin_name.to_s + '.rb') raise 'Could not find plugin entry point' unless File.exist?(entry_point) entry_point end | 
#__make_empty_plugin_file_data_structure ⇒ Object
| 139 140 141 142 143 144 145 | # File 'lib/plugins/shared/core_plugin_test_helper.rb', line 139 def __make_empty_plugin_file_data_structure # TODO: dry this up, refs #3350 { 'plugins_config_version' => '1.0.0', 'plugins' => [], } end | 
#__make_plugin_file_data_structure_with_path(path) ⇒ Object
| 127 128 129 130 131 132 133 134 135 136 137 | # File 'lib/plugins/shared/core_plugin_test_helper.rb', line 127 def __make_plugin_file_data_structure_with_path(path) # TODO: dry this up, refs #3350 plugin_name = File.basename(path, '.rb') data = __make_empty_plugin_file_data_structure data['plugins'] << { 'name' => plugin_name, 'installation_type' => 'path', 'installation_path' => path, } data end | 
#run_inspec_process(command_line, opts = {}) ⇒ Object
| 56 57 58 59 60 61 62 63 64 | # File 'lib/plugins/shared/core_plugin_test_helper.rb', line 56 def run_inspec_process(command_line, opts = {}) prefix = '' if opts.key?(:prefix) prefix = opts[:prefix] elsif opts.key?(:env) prefix = opts[:env].to_a.map { |assignment| "#{assignment[0]}=#{assignment[1]}" }.join(' ') end Inspec::FuncTestRunResult.new(TRAIN_CONNECTION.run_command("#{prefix} #{inspec_bin_path} #{command_line}")) end | 
#run_inspec_process_with_this_plugin(command_line, opts = {}) ⇒ Object
This helper does some fancy footwork to make InSpec think a plugin under development is temporarily installed.
| 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | # File 'lib/plugins/shared/core_plugin_test_helper.rb', line 77 def run_inspec_process_with_this_plugin(command_line, opts = {}) plugin_path = __find_plugin_path_from_caller # If it looks like it is a core plugin under test, don't add it to the plugin file # since the loader will auto-load it anyway if plugin_path.include?('lib/plugins/inspec-') plugin_file_data = __make_empty_plugin_file_data_structure else plugin_file_data = __make_plugin_file_data_structure_with_path(plugin_path) end Dir.mktmpdir do |tmp_dir| opts[:pre_run]&.call(plugin_file_data, tmp_dir) plugin_file_path = File.join(tmp_dir, 'plugins.json') # HACK: If the block cleared the hash, take that to mean it will provide a plugins.json file of its own. File.write(plugin_file_path, JSON.generate(plugin_file_data)) unless plugin_file_data.empty? opts[:env] ||= {} opts[:env]['INSPEC_CONFIG_DIR'] = tmp_dir run_result = run_inspec_process(command_line, opts) # Read the resulting plugins.json into memory, if any if File.exist?(plugin_file_path) run_result.payload.plugin_data = JSON.parse(File.read(plugin_file_path)) end opts[:post_run]&.call(run_result, tmp_dir) run_result end end |