|
1 | 1 | require_relative '../test_helper' |
2 | 2 |
|
3 | | -# NOTE: Since this strategy is targeted at ActiveDirectory and we don't have |
4 | | -# AD setup in CI, we stub out actual queries and test against what AD *would* |
5 | | -# respond with. |
| 3 | +class GitHubLdapActiveDirectoryMembershipValidatorsStubbedTest < GitHub::Ldap::Test |
| 4 | + # Only run when AD integration tests aren't run |
| 5 | + def run(*) |
| 6 | + self.class.test_env != "activedirectory" ? super : self |
| 7 | + end |
6 | 8 |
|
7 | | -class GitHubLdapActiveDirectoryMembershipValidatorsTest < GitHub::Ldap::Test |
8 | 9 | def setup |
9 | 10 | @ldap = GitHub::Ldap.new(options.merge(search_domains: %w(dc=github,dc=com))) |
10 | 11 | @domain = @ldap.domain("dc=github,dc=com") |
@@ -66,3 +67,60 @@ def test_does_not_validate_user_not_in_any_group |
66 | 67 | end |
67 | 68 | end |
68 | 69 | end |
| 70 | + |
| 71 | +# See test/support/vm/activedirectory/README.md for details |
| 72 | +class GitHubLdapActiveDirectoryMembershipValidatorsIntegrationTest < GitHub::Ldap::Test |
| 73 | + # Only run this test suite if ActiveDirectory is configured |
| 74 | + def run(*) |
| 75 | + self.class.test_env == "activedirectory" ? super : self |
| 76 | + end |
| 77 | + |
| 78 | + def setup |
| 79 | + @ldap = GitHub::Ldap.new(options) |
| 80 | + @domain = @ldap.domain(options[:search_domains]) |
| 81 | + @entry = @domain.user?('user1') |
| 82 | + @validator = GitHub::Ldap::MembershipValidators::ActiveDirectory |
| 83 | + end |
| 84 | + |
| 85 | + def make_validator(groups) |
| 86 | + groups = @domain.groups(groups) |
| 87 | + @validator.new(@ldap, groups) |
| 88 | + end |
| 89 | + |
| 90 | + def test_validates_user_in_group |
| 91 | + validator = make_validator(%w(nested-group1)) |
| 92 | + assert validator.perform(@entry) |
| 93 | + end |
| 94 | + |
| 95 | + def test_validates_user_in_child_group |
| 96 | + validator = make_validator(%w(n-depth-nested-group1)) |
| 97 | + assert validator.perform(@entry) |
| 98 | + end |
| 99 | + |
| 100 | + def test_validates_user_in_grandchild_group |
| 101 | + validator = make_validator(%w(n-depth-nested-group2)) |
| 102 | + assert validator.perform(@entry) |
| 103 | + end |
| 104 | + |
| 105 | + def test_validates_user_in_great_grandchild_group |
| 106 | + validator = make_validator(%w(n-depth-nested-group3)) |
| 107 | + assert validator.perform(@entry) |
| 108 | + end |
| 109 | + |
| 110 | + def test_does_not_validate_user_not_in_group |
| 111 | + validator = make_validator(%w(ghe-admins)) |
| 112 | + refute validator.perform(@entry) |
| 113 | + end |
| 114 | + |
| 115 | + def test_does_not_validate_user_not_in_any_group |
| 116 | + skip "update AD ldif to have a groupless user" |
| 117 | + @entry = @domain.user?('groupless-user1') |
| 118 | + validator = make_validator(%w(all-users)) |
| 119 | + refute validator.perform(@entry) |
| 120 | + end |
| 121 | + |
| 122 | + def test_validates_user_in_posix_group |
| 123 | + validator = make_validator(%w(posix-group1)) |
| 124 | + assert validator.perform(@entry) |
| 125 | + end |
| 126 | +end |
0 commit comments