diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/test_helper.rb | 54 | ||||
-rw-r--r-- | test/unit/command_line_test.rb | 2 | ||||
-rw-r--r-- | test/unit/config_object_list_test.rb | 2 | ||||
-rw-r--r-- | test/unit/config_object_test.rb | 2 | ||||
-rw-r--r-- | test/unit/quick_start_test.rb | 127 | ||||
-rw-r--r-- | test/unit/test_helper.rb | 2 |
6 files changed, 170 insertions, 19 deletions
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 = <<HERE +{ + "domain": "example.org", + "name": { + "en": "Example" + }, + "description": { + "en": "Example" + }, + "languages": ["en"], + "default_language": "en", + "enrollment_policy": "open", + "contacts": { + "default": "root@localhost" + }, + "ca": { + "bit_size": 1024, + "client_certificates": { + "bit_size": 1024, + "digest": "SHA1", + "life_span": "100 years" + }, + "life_span": "100 years", + "server_certificates": { + "bit_size": 1024, + "digest": "SHA1", + "life_span": "100 years" + } + } +} +HERE + + def provider_path + TMP_PROVIDER + end + + def test_01_new + output = leap_bin! "new --contacts me@example.org --domain example.org --name Example --platform='#{platform_path}' ." + assert_file "Leapfile" + assert_file "provider.json" + assert_dir "nodes" + File.write(File.join(provider_path, 'provider.json'), PROVIDER_JSON) + end + + def test_02_ca + leap_bin! "cert ca" + assert_dir "files/ca" + assert_file "files/ca/ca.crt" + assert_file "files/ca/ca.key" + end + + def test_03_csr + leap_bin! "cert csr" + assert_file "files/cert/example.org.csr" + assert_file "files/cert/example.org.crt" + assert_file "files/cert/example.org.key" + end + + def test_04_nodes + leap_bin! "node add wildebeest ip_address:1.1.1.2 services:webapp,couchdb" + leap_bin! "node add hippo ip_address:1.1.1.3 services:static" + assert_file "nodes/wildebeest.json" + assert_dir "files/nodes/wildebeest" + assert_file "files/nodes/wildebeest/wildebeest.crt" + assert_file "files/nodes/wildebeest/wildebeest.key" + end + + def test_05_compile + user_dir = File.join(provider_path, 'users', 'dummy') + user_key = File.join(user_dir, 'dummy_ssh.pub') + FileUtils.mkdir_p(user_dir) + File.write(user_key, 'ssh-rsa dummydummydummy') + + leap_bin! "compile" + assert_file "hiera/wildebeest.yaml" + assert_file "hiera/hippo.yaml" + end + + def test_06_rename + leap_bin! "node mv hippo hippopotamus" + assert_file "nodes/hippopotamus.json" + assert_dir "files/nodes/hippopotamus" + assert_file "files/nodes/hippopotamus/hippopotamus.key" + end + + def test_07_rm + leap_bin! "node rm hippopotamus" + assert_file_missing "nodes/hippopotamus.json" + assert_file_missing "files/nodes/hippopotamus/hippopotamus.key" + end + + def assert_file(path) + assert File.exist?(File.join(provider_path, path)), "The file `#{path}` should exist in #{provider_path}. Actual: \n#{provider_files}" + end + + def assert_file_missing(path) + assert !File.exist?(File.join(provider_path, path)), "The file `#{path}` should NOT exist in #{provider_path}." + end + + def assert_dir(path) + assert Dir.exist?(File.join(provider_path, path)), "The directory `#{path}` should exist in #{provider_path}. Actual: \n#{provider_files}" + end + + def provider_files + `cd #{provider_path} && find .` + end +end diff --git a/test/unit/test_helper.rb b/test/unit/test_helper.rb index 25a36de..057e4b7 100644 --- a/test/unit/test_helper.rb +++ b/test/unit/test_helper.rb @@ -1 +1 @@ -require File.expand_path('../../test_helper', __FILE__) +require_relative '../test_helper' |