require 'rubygems'

require 'bundler/setup'

Bundler.require

require 'yaml'
require 'shellwords'

`mkdir -p tmp`

module TestHelpers
  def provider_up
    `cd tmp && ../lib/provider up -o /vagrant/tmp/logger.log`
  end

  def destroy_container!
    `cd tmp && ../lib/provider destroy -o /vagrant/tmp/logger.log`
    `rm -f tmp/config.yml`
  end

  def restore_rinetd_conf!
    `sudo cp /vagrant/cache/rinetd.conf /etc/rinetd.conf`
    `sudo service rinetd restart`
  end

  def configure_box_with(opts)
    opts = opts.dup
    opts.keys.each do |key|
      opts[key.to_s] = opts.delete(key)
    end
    File.open('./tmp/config.yml', 'w') { |f| f.puts YAML::dump(opts) }
  end

  def provider_ssh(options)
    options = options.map { |opt, val| "-#{opt} #{Shellwords.escape val}" }
    options = options.join(' ')
    `cd tmp && ../lib/provider ssh #{options}`
  end
end

RSpec.configure do |config|
  config.treat_symbols_as_metadata_keys_with_true_values = true
  config.run_all_when_everything_filtered = true
  config.filter_run :focus

  config.include TestHelpers

  # Run specs in random order to surface order dependencies. If you find an
  # order dependency and want to debug it, you can fix the order by providing
  # the seed, which is printed after each run.
  #     --seed 1234
  config.order = 'random'

  config.after :all do
    destroy_container!
    restore_rinetd_conf!
  end
end