summaryrefslogtreecommitdiff
path: root/tests/test-ssh-list-authorized-keys
blob: eac8d2dae1dca0049d1ca63f6e65dca8fc0a2211 (plain)
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