summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Rakefile1
-rwxr-xr-xbin/leap3
-rw-r--r--lib/leap_cli/bootstrap.rb4
-rw-r--r--lib/leap_cli/core_ext/hash.rb19
-rw-r--r--lib/leap_cli/leapfile.rb5
-rw-r--r--lib/leap_cli/log.rb2
-rw-r--r--lib/leap_cli/path.rb2
-rw-r--r--test/test_helper.rb54
-rw-r--r--test/unit/command_line_test.rb2
-rw-r--r--test/unit/config_object_list_test.rb2
-rw-r--r--test/unit/config_object_test.rb2
-rw-r--r--test/unit/quick_start_test.rb127
-rw-r--r--test/unit/test_helper.rb2
13 files changed, 198 insertions, 27 deletions
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 = <<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'