From a8efdb865dbea99e619c0353d707da39118e6e28 Mon Sep 17 00:00:00 2001 From: elijah Date: Sat, 9 Jul 2016 02:45:23 -0700 Subject: test: added test of quick start tutorial commands --- Rakefile | 1 + bin/leap | 3 + lib/leap_cli/bootstrap.rb | 4 +- lib/leap_cli/core_ext/hash.rb | 19 ++++++ lib/leap_cli/leapfile.rb | 5 -- lib/leap_cli/log.rb | 2 +- lib/leap_cli/path.rb | 2 +- test/test_helper.rb | 54 ++++++++++----- test/unit/command_line_test.rb | 2 +- test/unit/config_object_list_test.rb | 2 +- test/unit/config_object_test.rb | 2 +- test/unit/quick_start_test.rb | 127 +++++++++++++++++++++++++++++++++++ test/unit/test_helper.rb | 2 +- 13 files changed, 198 insertions(+), 27 deletions(-) create mode 100644 test/unit/quick_start_test.rb diff --git a/Rakefile b/Rakefile index 72ae223..cef5976 100644 --- a/Rakefile +++ b/Rakefile @@ -83,6 +83,7 @@ end Rake::TestTask.new do |t| t.pattern = "test/unit/*_test.rb" + t.warning = false end task :default => :test diff --git a/bin/leap b/bin/leap index 7247168..b2eca90 100755 --- a/bin/leap +++ b/bin/leap @@ -14,6 +14,7 @@ else $VERBOSE=nil DEBUG=false end +TEST = false LEAP_CLI_BASE_DIR = File.expand_path('..', File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__)) @@ -90,6 +91,8 @@ module LeapCli::Commands end if DEBUG raise exc + else + exit(1) end end end diff --git a/lib/leap_cli/bootstrap.rb b/lib/leap_cli/bootstrap.rb index f33aa42..75edf5b 100644 --- a/lib/leap_cli/bootstrap.rb +++ b/lib/leap_cli/bootstrap.rb @@ -159,7 +159,9 @@ module LeapCli # Yes, hacky. # def leapfile_optional?(argv) - if argv.include?('--version') + if TEST + return true + elsif argv.include?('--version') return true else without_flags = argv.select {|i| i !~ /^-/} diff --git a/lib/leap_cli/core_ext/hash.rb b/lib/leap_cli/core_ext/hash.rb index 7df33b2..4eb3af3 100644 --- a/lib/leap_cli/core_ext/hash.rb +++ b/lib/leap_cli/core_ext/hash.rb @@ -32,4 +32,23 @@ class Hash replace(deep_merge(other_hash)) end + # + # A recursive symbolize_keys + # + unless Hash.method_defined?(:symbolize_keys) + def symbolize_keys + self.inject({}) {|result, (key, value)| + new_key = case key + when String then key.to_sym + else key + end + new_value = case value + when Hash then symbolize_keys(value) + else value + end + result[new_key] = new_value + result + } + end + end end diff --git a/lib/leap_cli/leapfile.rb b/lib/leap_cli/leapfile.rb index 3dadf66..0b56b71 100644 --- a/lib/leap_cli/leapfile.rb +++ b/lib/leap_cli/leapfile.rb @@ -150,11 +150,6 @@ module LeapCli return search_dir end - # to be overridden - def validate - return true - end - def method_missing(method, *args) if method =~ /=$/ self.instance_variable_set('@' + method.to_s.sub('=',''), args.first) diff --git a/lib/leap_cli/log.rb b/lib/leap_cli/log.rb index 203d92e..01d372c 100644 --- a/lib/leap_cli/log.rb +++ b/lib/leap_cli/log.rb @@ -89,7 +89,7 @@ module LeapCli if title title = title.to_s end - unless message && @log_level >= level + if @log_level < level || (title.nil? && message.nil?) return end diff --git a/lib/leap_cli/path.rb b/lib/leap_cli/path.rb index 11fc0f1..a78dbd2 100644 --- a/lib/leap_cli/path.rb +++ b/lib/leap_cli/path.rb @@ -3,7 +3,7 @@ require 'fileutils' module LeapCli; module Path def self.platform - @platform + @platform ||= nil end def self.provider_base diff --git a/test/test_helper.rb b/test/test_helper.rb index f7ec6d9..e0cd1e1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -7,6 +7,7 @@ require 'gli' require 'fileutils' DEBUG = true +TEST = true module LeapCli::Commands extend GLI::App @@ -19,7 +20,7 @@ class Minitest::Test def initialize(*args) super(*args) - LeapCli::Bootstrap::setup([], test_provider_path) + LeapCli::Bootstrap::setup([], provider_path) LeapCli::Bootstrap::load_libraries(LeapCli::Commands) end @@ -43,33 +44,56 @@ class Minitest::Test end def leap_bin(*args) - `cd #{test_provider_path} && #{ruby_path} #{base_path}/bin/leap --no-color #{args.join ' '}` + cmd = "cd #{provider_path} && #{base_path}/bin/leap --no-color #{args.join ' '}" + `#{cmd}` end - def test_provider_path + def leap_bin!(*args) + output = leap_bin(*args) + exit_code = $? + assert_equal 0, exit_code, + "The command `leap #{args.join(' ')}` should have exited 0 " + + "(was #{exit_code}).\n" + + "Output was: #{output}" + output + end + + def provider_path "#{base_path}/test/provider" end + # + # for tests, we assume that the leap_platform code is + # in a sister directory to leap_cli. + # + def platform_path + "#{base_path}/../leap_platform" + end + def cleanup_files(*args) - Dir.chdir(test_provider_path) do + Dir.chdir(provider_path) do args.each do |file| FileUtils.rm_r(file) if File.exist?(file) end end end + # + # we no longer support ruby 1.8, but this might be useful in the future + # def with_multiple_rubies(&block) - if ENV["RUBY"] - ENV["RUBY"].split(',').each do |ruby| - self.ruby_path = `which #{ruby}`.strip - next unless ruby_path.chars.any? - yield - end - else - self.ruby_path = `which ruby`.strip - yield - end - self.ruby_path = "" + yield + # if ENV["RUBY"] + # ENV["RUBY"].split(',').each do |ruby| + # self.ruby_path = `which #{ruby}`.strip + # next unless ruby_path.chars.any? + # yield + # end + # else + # self.ruby_path = `which ruby`.strip + # yield + # end + # self.ruby_path = "" end end diff --git a/test/unit/command_line_test.rb b/test/unit/command_line_test.rb index bab8792..0f452ab 100644 --- a/test/unit/command_line_test.rb +++ b/test/unit/command_line_test.rb @@ -1,4 +1,4 @@ -require File.expand_path('../test_helper', __FILE__) +require_relative 'test_helper' class CommandLineTest < Minitest::Test diff --git a/test/unit/config_object_list_test.rb b/test/unit/config_object_list_test.rb index c4f37d8..042a742 100644 --- a/test/unit/config_object_list_test.rb +++ b/test/unit/config_object_list_test.rb @@ -1,4 +1,4 @@ -require File.expand_path('../test_helper', __FILE__) +require_relative 'test_helper' class ConfigObjectListTest < Minitest::Test diff --git a/test/unit/config_object_test.rb b/test/unit/config_object_test.rb index 54b45d1..88e11e6 100644 --- a/test/unit/config_object_test.rb +++ b/test/unit/config_object_test.rb @@ -1,4 +1,4 @@ -require File.expand_path('../test_helper', __FILE__) +require_relative 'test_helper' class ConfigObjectTest < Minitest::Test diff --git a/test/unit/quick_start_test.rb b/test/unit/quick_start_test.rb new file mode 100644 index 0000000..d26f9c8 --- /dev/null +++ b/test/unit/quick_start_test.rb @@ -0,0 +1,127 @@ +require_relative 'test_helper' + +# +# Runs all the commands in https://leap.se/quick-start +# + +Minitest.after_run { + FileUtils.rm_r(QuickStartTest::TMP_PROVIDER) +} + +class QuickStartTest < Minitest::Test + + # very reasonable to have ordered tests in this case, actually + i_suck_and_my_tests_are_order_dependent! + + TMP_PROVIDER = Dir.mktmpdir("test_leap_provider_") + + # + # use minimal bit sizes for our test. + # + PROVIDER_JSON = <