aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--leap_cli.gemspec2
-rw-r--r--lib/leap_cli/commands/ca.rb28
-rw-r--r--lib/leap_cli/commands/node.rb32
-rw-r--r--lib/leap_cli/commands/vagrant.rb42
-rw-r--r--lib/leap_cli/version.rb2
-rw-r--r--lib/lib_ext/gli.rb8
-rw-r--r--test/test_helper.rb32
-rw-r--r--test/unit/command_line_test.rb12
-rw-r--r--test/unit/config_object_list_test.rb2
-rw-r--r--test/unit/config_object_test.rb2
10 files changed, 102 insertions, 60 deletions
diff --git a/leap_cli.gemspec b/leap_cli.gemspec
index 2bd2929..77d6dd1 100644
--- a/leap_cli.gemspec
+++ b/leap_cli.gemspec
@@ -46,7 +46,7 @@ spec = Gem::Specification.new do |s|
#s.add_development_dependency('aruba')
# console gems
- s.add_runtime_dependency('gli','~> 2.3')
+ s.add_runtime_dependency('gli','~> 2.5.0')
s.add_runtime_dependency('command_line_reporter')
s.add_runtime_dependency('highline')
s.add_runtime_dependency('paint')
diff --git a/lib/leap_cli/commands/ca.rb b/lib/leap_cli/commands/ca.rb
index f471b5a..d6fd975 100644
--- a/lib/leap_cli/commands/ca.rb
+++ b/lib/leap_cli/commands/ca.rb
@@ -7,11 +7,11 @@ module LeapCli; module Commands
desc "Manage X.509 certificates"
#long_desc ""
- command :cert do |c|
+ command :cert do |cert|
- c.desc 'Creates a Certificate Authority (private key and CA certificate)'
- c.command :ca do |c|
- c.action do |global_options,options,args|
+ cert.desc 'Creates a Certificate Authority (private key and CA certificate)'
+ cert.command :ca do |ca|
+ ca.action do |global_options,options,args|
assert_files_missing! :ca_cert, :ca_key
assert_config! 'provider.ca.name'
assert_config! 'provider.ca.bit_size'
@@ -48,10 +48,10 @@ module LeapCli; module Commands
end
end
- c.desc 'Creates or renews a X.509 certificate/key pair for a single node or all nodes'
- c.arg_name 'node-name', :optional => false
- c.command :update do |c|
- c.action do |global_options,options,args|
+ cert.desc 'Creates or renews a X.509 certificate/key pair for a single node or all nodes'
+ cert.arg_name 'node-name', :optional => false
+ cert.command :update do |update|
+ update.action do |global_options,options,args|
assert_files_exist! :ca_cert, :ca_key, :msg => 'Run `leap cert ca` to create them'
assert_config! 'provider.ca.server_certificates.bit_size'
assert_config! 'provider.ca.server_certificates.digest'
@@ -70,9 +70,9 @@ module LeapCli; module Commands
end
end
- c.desc 'Creates a Diffie-Hellman parameter file' # (needed for server-side of some TLS connections)
- c.command :dh do |c|
- c.action do |global_options,options,args|
+ cert.desc 'Creates a Diffie-Hellman parameter file' # (needed for server-side of some TLS connections)
+ cert.command :dh do |dh|
+ dh.action do |global_options,options,args|
long_running do
if cmd_exists?('certtool')
log 0, 'Generating DH parameters (takes a long time)...'
@@ -104,10 +104,10 @@ module LeapCli; module Commands
# nice details about CSRs:
# http://www.redkestrel.co.uk/Articles/CSR.html
#
- c.desc 'Creates a CSR for use in buying a commercial X.509 certificate'
- c.command :csr do |c|
+ cert.desc 'Creates a CSR for use in buying a commercial X.509 certificate'
+ cert.command :csr do |csr|
#c.switch 'sign', :desc => 'additionally creates a cert that is signed by your own CA (recommended only for testing)', :negatable => false
- c.action do |global_options,options,args|
+ csr.action do |global_options,options,args|
assert_config! 'provider.domain'
assert_config! 'provider.name'
assert_config! 'provider.default_language'
diff --git a/lib/leap_cli/commands/node.rb b/lib/leap_cli/commands/node.rb
index aa9610f..9bf27e2 100644
--- a/lib/leap_cli/commands/node.rb
+++ b/lib/leap_cli/commands/node.rb
@@ -8,19 +8,19 @@ module LeapCli; module Commands
##
desc 'Node management'
- command :node do |c|
- c.desc 'Create a new configuration file for a node'
- c.command :add do |c|
- c.action do |global_options,options,args|
+ command :node do |node|
+ node.desc 'Create a new configuration file for a node'
+ node.command :add do |add|
+ add.action do |global_options,options,args|
log 'not yet implemented'
end
end
- c.desc 'Bootstraps a node, setting up ssh keys and installing prerequisites'
- c.arg_name 'node-name', :optional => false, :multiple => false
- c.command :init do |c|
- c.switch 'echo', :desc => 'if set, passwords are visible as you type them (default is hidden)', :negatable => false
- c.action do |global_options,options,args|
+ node.desc 'Bootstraps a node, setting up ssh keys and installing prerequisites'
+ node.arg_name 'node-name', :optional => false, :multiple => false
+ node.command :init do |init|
+ init.switch 'echo', :desc => 'if set, passwords are visible as you type them (default is hidden)', :negatable => false
+ init.action do |global_options,options,args|
node = get_node_from_args(args)
ping_node(node)
save_public_host_key(node)
@@ -33,17 +33,17 @@ module LeapCli; module Commands
end
end
- c.desc 'Renames a node file, and all its related files'
- c.command :mv do |c|
- c.action do |global_options,options,args|
+ node.desc 'Renames a node file, and all its related files'
+ node.command :mv do |mv|
+ mv.action do |global_options,options,args|
log 'not yet implemented'
end
end
- c.desc 'Removes a node file, and all its related files'
- c.arg_name '<node-name>', :optional => false, :multiple => false
- c.command :rm do |c|
- c.action do |global_options,options,args|
+ node.desc 'Removes a node file, and all its related files'
+ node.arg_name '<node-name>', :optional => false, :multiple => false
+ node.command :rm do |rm|
+ rm.action do |global_options,options,args|
log 'not yet implemented'
end
end
diff --git a/lib/leap_cli/commands/vagrant.rb b/lib/leap_cli/commands/vagrant.rb
index eaf070f..f3c3c33 100644
--- a/lib/leap_cli/commands/vagrant.rb
+++ b/lib/leap_cli/commands/vagrant.rb
@@ -5,47 +5,47 @@ module LeapCli; module Commands
desc "Manage local virtual machines"
long_desc "This command provides a convient way to manage Vagrant-based virtual machines. If node-filter argument is missing, the command runs on all local virtual machines. The Vagrantfile is automatically generated in 'test/Vagrantfile'. If you want to run vagrant commands manually, cd to 'test'."
- command :local do |c|
- c.desc 'Starts up the virtual machine(s)'
- c.arg_name 'node-filter', :optional => true #, :multiple => false
- c.command :start do |c|
- c.action do |global_options,options,args|
+ command :local do |local|
+ local.desc 'Starts up the virtual machine(s)'
+ local.arg_name 'node-filter', :optional => true #, :multiple => false
+ local.command :start do |start|
+ start.action do |global_options,options,args|
vagrant_setup
vagrant_command(["up", "sandbox on"], args)
end
end
- c.desc 'Shuts down the virtual machine(s)'
- c.arg_name 'node-filter', :optional => true #, :multiple => false
- c.command :stop do |c|
- c.action do |global_options,options,args|
+ local.desc 'Shuts down the virtual machine(s)'
+ local.arg_name 'node-filter', :optional => true #, :multiple => false
+ local.command :stop do |stop|
+ stop.action do |global_options,options,args|
vagrant_setup
vagrant_command("halt", args)
end
end
- c.desc 'Resets virtual machine(s) to a pristine state'
- c.arg_name 'node-filter', :optional => true #, :multiple => false
- c.command :reset do |c|
- c.action do |global_options,options,args|
+ local.desc 'Resets virtual machine(s) to a pristine state'
+ local.arg_name 'node-filter', :optional => true #, :multiple => false
+ local.command :reset do |reset|
+ reset.action do |global_options,options,args|
vagrant_setup
vagrant_command("sandbox rollback", args)
end
end
- c.desc 'Destroys the virtual machine(s), reclaiming the disk space'
- c.arg_name 'node-filter', :optional => true #, :multiple => false
- c.command :destroy do |c|
- c.action do |global_options,options,args|
+ local.desc 'Destroys the virtual machine(s), reclaiming the disk space'
+ local.arg_name 'node-filter', :optional => true #, :multiple => false
+ local.command :destroy do |destroy|
+ destroy.action do |global_options,options,args|
vagrant_setup
vagrant_command("destroy", args)
end
end
- c.desc 'Print the status of local virtual machine(s)'
- c.arg_name 'node-filter', :optional => true #, :multiple => false
- c.command :status do |c|
- c.action do |global_options,options,args|
+ local.desc 'Print the status of local virtual machine(s)'
+ local.arg_name 'node-filter', :optional => true #, :multiple => false
+ local.command :status do |status|
+ status.action do |global_options,options,args|
vagrant_setup
vagrant_command("status", args)
end
diff --git a/lib/leap_cli/version.rb b/lib/leap_cli/version.rb
index 0dbd215..7851676 100644
--- a/lib/leap_cli/version.rb
+++ b/lib/leap_cli/version.rb
@@ -1,6 +1,6 @@
module LeapCli
unless defined?(LeapCli::VERSION)
- VERSION = '0.1.3'
+ VERSION = '0.1.4'
SUMMARY = 'Command line interface to the LEAP platform'
DESCRIPTION = 'The command "leap" can be used to manage a bevy of servers running the LEAP platform from the comfort of your own home.'
REQUIRE_PATHS = ['lib', 'vendor/supply_drop/lib', 'vendor/certificate_authority/lib']
diff --git a/lib/lib_ext/gli.rb b/lib/lib_ext/gli.rb
index 32ae0bc..f9b03be 100644
--- a/lib/lib_ext/gli.rb
+++ b/lib/lib_ext/gli.rb
@@ -19,10 +19,10 @@ module GLI
# build a list of commands, sort them so the commands with subcommands are at the bottom
commands = @sorter.call(@app.commands_declaration_order.reject(&:nodoc)).sort do |a,b|
- if a.commands.any? && b.commands.any?; a.name <=> b.name
+ if a.commands.any? && b.commands.any?; a.name.to_s <=> b.name.to_s
elsif a.commands.any?; 1
elsif b.commands.any?; -1
- else; a.name <=> b.name
+ else; a.name.to_s <=> b.name.to_s
end
end
@@ -33,7 +33,7 @@ module GLI
command_info_list << [name, command.description]
if command.commands.any?
@sorter.call(command.commands_declaration_order).each do |cmd|
- command_info_list << [SUB_CMD_INDENT + command.name.to_s + " " + cmd.names,cmd.description + (command.get_default_command == cmd.name ? " (default)" : "")]
+ command_info_list << [SUB_CMD_INDENT + command.name.to_s + " " + cmd.names, cmd.description + (command.get_default_command == cmd.name ? " (default)" : "")]
end
end
end
@@ -43,7 +43,7 @@ module GLI
stringio = StringIO.new
command_formatter.output(stringio)
commands = stringio.string
- global_option_descriptions = OptionsFormatter.new(global_flags_and_switches,@wrapper_class).format
+ global_option_descriptions = OptionsFormatter.new(global_flags_and_switches, @sorter, @wrapper_class).format
GLOBAL_HELP.result(binding)
end
end
diff --git a/test/test_helper.rb b/test/test_helper.rb
index e761086..94bb2b4 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -4,16 +4,46 @@ require 'minitest/autorun'
require 'leap_cli'
class MiniTest::Unit::TestCase
+ attr_accessor :ruby_path
# Add global extensions to the test case class here
+ def setup
+ LeapCli::Path.set_platform_path(test_platform_path)
+ LeapCli::Path.set_provider_path(test_provider_path)
+ end
+
def manager
@manager ||= begin
- LeapCli::Path.set_root(File.dirname(__FILE__))
manager = LeapCli::Config::Manager.new
manager.load
manager
end
end
+ def base_path
+ File.expand_path '../..', __FILE__
+ end
+
+ def leap_bin(*args)
+ `#{ruby_path} #{base_path}/bin/leap #{args.join ' '}`
+ end
+
+ def test_platform_path
+ "#{base_path}/test/leap_platform"
+ end
+
+ def test_provider_path
+ "#{base_path}/test/provider"
+ end
+
+ def with_multiple_rubies(&block)
+ ['ruby1.8', 'ruby1.9.1'].each do |ruby|
+ self.ruby_path = `which #{ruby}`.strip
+ next unless ruby_path.chars.any?
+ yield
+ end
+ self.ruby_path = ""
+ end
+
end
diff --git a/test/unit/command_line_test.rb b/test/unit/command_line_test.rb
new file mode 100644
index 0000000..ec4c2d6
--- /dev/null
+++ b/test/unit/command_line_test.rb
@@ -0,0 +1,12 @@
+require File.expand_path('test_helper', File.dirname(__FILE__))
+
+class CommandLineTest < MiniTest::Unit::TestCase
+
+ def test_help
+ with_multiple_rubies do
+ output = leap_bin('help')
+ assert_equal 0, $?, "help should exit 0 -- #{output}"
+ end
+ end
+
+end
diff --git a/test/unit/config_object_list_test.rb b/test/unit/config_object_list_test.rb
index a3b76f2..a507094 100644
--- a/test/unit/config_object_list_test.rb
+++ b/test/unit/config_object_list_test.rb
@@ -1,6 +1,6 @@
require File.dirname(__FILE__) + '/test_helper'
-class TestMeme < MiniTest::Unit::TestCase
+class ConfigObjectListTest < MiniTest::Unit::TestCase
def test_node_search
nodes = manager.nodes['name' => 'vpn1']
diff --git a/test/unit/config_object_test.rb b/test/unit/config_object_test.rb
index 0c293c2..b981f3b 100644
--- a/test/unit/config_object_test.rb
+++ b/test/unit/config_object_test.rb
@@ -1,6 +1,6 @@
require File.expand_path('test_helper', File.dirname(__FILE__))
-class TestMeme < MiniTest::Unit::TestCase
+class ConfigObjectTest < MiniTest::Unit::TestCase
def test_bracket_lookup
domain = manager.provider.domain