1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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
|