Home Rspec. The tested code is automatically started after test
Reply: 0

Rspec. The tested code is automatically started after test

user2844
1#
user2844 Published in June 23, 2018, 4:29 am

I have a problem with the testing the Sensu Plugin. Everytime when I start rspec to test plugin it test it, but anyway at the end of test, the original plugin is started automatically. So I have in my console:

Finished in 0 seconds (files took 0.1513 seconds to load) 
1 example, 0 failures 
CheckDisk OK:       # This comes from the plugin

Short explanation how my system works: Plugin call system 'wmic' command, processes it, checks the conditions about the disk parameters and returns the exit statuses (ok, critical, etc) Rspec mocks the response from system and sets into the input of plugin. At the end rspec checks the plugin exit status when the mocked input is given.

My plugin looks like that:

require 'rubygems' if RUBY_VERSION < '1.9.0'
require 'sensu-plugin/check/cli'

class CheckDisk < Sensu::Plugin::Check::CLI
  def initialize
    super
    @crit_fs = []
  end

  def get_wmic
    `wmic volume where DriveType=3 list brief`
  end

  def read_wmic
    get_wmic
    # do something, fill the class variables with system response  
  end

  def run
   severity = "ok"
   msg = ""
   read_wmic
   unless @crit_fs.empty?
     severity = "critical"  
  end  
  case severity
    when /ok/
      ok msg
    when /warning/
      warning msg
    when /critical/
      critical msg
    end
  end
end

Here is my test in Rspec:

require_relative '../check-disk.rb'
require 'rspec'

  def loadFile
    #Load template of system output when ask 'wmic volume(...)
  end

  def fillParametersInTemplate (template, parameters)
    #set mocked disk parameters in template
  end

  def initializeMocks (options)
    mockedSysOutput = fillParametersInTemplate @loadedTemplate, options 
    po = String.new(mockedSysOutput)
    allow(checker).to receive(:get_wmic).and_return(po) #mock system call here
  end

  describe CheckDisk do
    let(:checker) { described_class.new }
    before(:each) do   
       @loadedTemplate = loadFile   
       def checker.critical(*_args)
          exit 2
       end    
     end

  context "When % of free disk space = 10 >" do 
    options = {:diskName => 'C:\\', :diskSize => 1000, :diskFreeSpace => 100}       
    it 'Returns ok exit status ' do      
      begin                   
        initializeMocks options
        checker.run 
      rescue SystemExit => e 
        exit_code = e.status   
      end 
      expect(exit_code).to eq 0
    end  
  end 
end

I know that I can just put "exit 0" after the last example, but this is not a solution because when I will try to start many spec files it will exit after the first one. How to start only test, without running the plugin? Maybe someone can help me and show how to handle with such problem? Thank you.

You need to login account before you can post.

About| Privacy statement| Terms of Service| Advertising| Contact us| Help| Sitemap|
Processed in 0.308555 second(s) , Gzip On .

© 2016 Powered by mzan.com design MATCHINFO