summaryrefslogtreecommitdiff
path: root/tests/test-ssh-list-authorized-keys
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-ssh-list-authorized-keys')
-rwxr-xr-xtests/test-ssh-list-authorized-keys78
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