diff options
Diffstat (limited to 'tests/test-ssh-list-authorized-keys')
-rwxr-xr-x | tests/test-ssh-list-authorized-keys | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/test-ssh-list-authorized-keys b/tests/test-ssh-list-authorized-keys new file mode 100755 index 0000000..eac8d2d --- /dev/null +++ b/tests/test-ssh-list-authorized-keys @@ -0,0 +1,78 @@ +#!/bin/env ruby + +EXIT_ON_FAILURE = true +THIS_DIR = File.dirname(__FILE__) +IS_IN_BUILD_TREE = File::file? "#{THIS_DIR}/../bin/common.rb.in" +TOOLS_DIR = (IS_IN_BUILD_TREE) ? "#{THIS_DIR}/../bin" : "#{THIS_DIR}/.." +TEST_CMD = "PARABOLA_HACKERS_YAMLDIR=#{THIS_DIR}/ #{TOOLS_DIR}/ssh-list-authorized-keys" + +LOGINS_KEY = 'logins' +EXPECTED_KEY = 'expected' +ACTUAL_KEY = 'actual' +RESULT_KEY = 'result' +GIT_LOGIN = 'git' +REPO_LOGIN = 'repo' +DESIGN_LOGIN = 'design' +HACKER_1_LOGIN = 'hacker-1' +PACKAGER_1_LOGIN = 'packager-1' +PACKAGER_2_LOGIN = 'packager-2' +DESIGNER_1_LOGIN = 'designer-1' +DESIGNER_2_LOGIN = 'designer-2' +FELLOW_1_LOGIN = 'fellow-1' +ROOT_LOGIN = 'root' +UNKNOWN_LOGIN = 'unknown' +HACKER_1_KEY_1 = "HACKER-1-SSH-1 Hacker 1 (hacker-1) <hacker-1@parabola.nu>" +PACKAGER_1_KEY_1 = "PACKAGER-1-SSH-1 Packager 1 (packager-1) <packager-1@parabola.nu>" +PACKAGER_2_KEY_1 = "PACKAGER-2-SSH-1 Packager 2 (packager-2) <packager-2@parabola.nu>" +DESIGNER_1_KEY_1 = "DESIGNER-1-SSH-1 Designer 1 (designer-1) <designer-1@parabola.nu>" +DESIGNER_1_KEY_2 = "DESIGNER-1-SSH-2 Designer 1 (designer-1) <designer-1@other.email>" +DESIGNER_2_KEY_1 = '' +FELLOW_1_KEY = "FELLOW-1-SSH-1 Fellow 1 (fellow-1) <fellow-1@parabola.nu>" +NO_SHELL_KEYS = '' +GIT_ACCESS_KEYS = [ HACKER_1_KEY_1 ] +REPO_ACCESS_KEYS = [ HACKER_1_KEY_1 , PACKAGER_1_KEY_1 , PACKAGER_2_KEY_1 ] +DESIGN_ACCESS_KEYS = [ HACKER_1_KEY_1 , DESIGNER_1_KEY_1 , DESIGNER_1_KEY_2 ] +TESTS = +[ + { LOGINS_KEY => HACKER_1_LOGIN , EXPECTED_KEY => "#{HACKER_1_KEY_1}\n" } , + { LOGINS_KEY => PACKAGER_1_LOGIN , EXPECTED_KEY => NO_SHELL_KEYS } , + { LOGINS_KEY => PACKAGER_2_LOGIN , EXPECTED_KEY => NO_SHELL_KEYS } , + { LOGINS_KEY => DESIGNER_1_LOGIN , EXPECTED_KEY => NO_SHELL_KEYS } , + { LOGINS_KEY => DESIGNER_2_LOGIN , EXPECTED_KEY => NO_SHELL_KEYS } , + { LOGINS_KEY => FELLOW_1_LOGIN , EXPECTED_KEY => NO_SHELL_KEYS } , + { LOGINS_KEY => ROOT_LOGIN , EXPECTED_KEY => NO_SHELL_KEYS } , + { LOGINS_KEY => UNKNOWN_LOGIN , EXPECTED_KEY => NO_SHELL_KEYS } , + { LOGINS_KEY => GIT_LOGIN , EXPECTED_KEY => "#{GIT_ACCESS_KEYS .join "\n"}\n" } , + { LOGINS_KEY => REPO_LOGIN , EXPECTED_KEY => "#{REPO_ACCESS_KEYS .join "\n"}\n" } , + { LOGINS_KEY => DESIGN_LOGIN , EXPECTED_KEY => "#{DESIGN_ACCESS_KEYS.join "\n"}\n" } +] + + +def run_test test_data + expected = test_data[EXPECTED_KEY] + logins = test_data[LOGINS_KEY ] + actual = `#{TEST_CMD} #{logins}` + result = expected == actual + + puts " TEST: " + ((result) ? "PASS" : "FAIL") + " '#{logins}'" + puts "==================\n" + + " ==== expected ====\n#{expected}" + + " ==== actual ====\n#{actual }" + + "==================" unless result + exit false unless result || ! EXIT_ON_FAILURE + + test_data[ACTUAL_KEY] = actual + test_data[RESULT_KEY] = result + test_data +end + + +results = TESTS .map { | test_data | run_test test_data } +failed_tests = results.reject { | test_data | test_data[RESULT_KEY] } +n_tests = TESTS.size +n_failed = failed_tests.size +n_passed = n_tests - n_failed + +puts " RESULT: #{n_passed}/#{n_tests} tests passed" + +exit n_passed == n_tests |