Skip to content

Commit db13ebd

Browse files
committed
Merge pull request #48 from github/cibuild-openldap
Add CI build for OpenLDAP integration
2 parents 7ae8fec + 15953cc commit db13ebd

16 files changed

+1074
-186
lines changed

.travis.yml

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
11
language: ruby
22
rvm:
3-
- 1.9.3
4-
- 2.1.0
3+
- 1.9.3
4+
- 2.1.0
55

6+
env:
7+
- TESTENV=openldap
8+
- TESTENV=apacheds
9+
10+
install:
11+
- if [ "$TESTENV" = "openldap" ]; then ./script/install-openldap; fi
12+
- bundle install
13+
14+
script:
15+
- ./script/cibuild-$TESTENV
16+
17+
matrix:
18+
fast_finish: true
619
notifications:
720
email: false

Gemfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
22

33
# Specify your gem's dependencies in github-ldap.gemspec
44
gemspec
5+
6+
group :test, :development do
7+
gem "byebug", :platforms => [:mri_20, :mri_21]
8+
end

lib/github/ldap/server.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ def self.start_server(options = {})
3838
@server_options[:domain] = @server_options[:user_domain]
3939
@server_options[:tmpdir] ||= server_tmp
4040

41+
@server_options[:quiet] = false if @server_options[:verbose]
42+
4143
@ldap_server = Ladle::Server.new(@server_options)
4244
@ldap_server.start
4345
end

script/cibuild-apacheds

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/usr/bin/env sh
2+
set -e
3+
set -x
4+
5+
cd `dirname $0`/..
6+
7+
bundle exec rake

script/cibuild-openldap

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/usr/bin/env sh
2+
set -e
3+
set -x
4+
5+
cd `dirname $0`/..
6+
7+
bundle exec rake

script/install-openldap

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env sh
2+
set -e
3+
set -x
4+
5+
BASE_PATH="$( cd `dirname $0`/../test/fixtures/openldap && pwd )"
6+
SEED_PATH="$( cd `dirname $0`/../test/fixtures/common && pwd )"
7+
8+
DEBIAN_FRONTEND=noninteractive sudo -E apt-get install -y --force-yes slapd time ldap-utils
9+
10+
sudo /etc/init.d/slapd stop
11+
12+
TMPDIR=$(mktemp -d)
13+
cd $TMPDIR
14+
15+
# Delete data and reconfigure.
16+
sudo cp -v /var/lib/ldap/DB_CONFIG ./DB_CONFIG
17+
sudo rm -rf /etc/ldap/slapd.d/*
18+
sudo rm -rf /var/lib/ldap/*
19+
sudo cp -v ./DB_CONFIG /var/lib/ldap/DB_CONFIG
20+
sudo slapadd -F /etc/ldap/slapd.d -b "cn=config" -l $BASE_PATH/slapd.conf.ldif
21+
# Load memberof and ref-int overlays and configure them.
22+
sudo slapadd -F /etc/ldap/slapd.d -b "cn=config" -l $BASE_PATH/memberof.ldif
23+
24+
# Add base domain.
25+
sudo slapadd -F /etc/ldap/slapd.d <<EOM
26+
dn: dc=github,dc=com
27+
objectClass: top
28+
objectClass: domain
29+
dc: github
30+
EOM
31+
32+
sudo chown -R openldap.openldap /etc/ldap/slapd.d
33+
sudo chown -R openldap.openldap /var/lib/ldap
34+
35+
sudo /etc/init.d/slapd start
36+
37+
# Import seed data.
38+
# NOTE: use ldapadd in order for memberOf and refint to apply, instead of:
39+
# /vagrant/services/ldap/openldap/seed.rb | sudo slapadd -F /etc/ldap/slapd.d
40+
cat $SEED_PATH/seed.ldif |
41+
/usr/bin/time sudo ldapadd -x -D "cn=admin,dc=github,dc=com" -w passworD1 \
42+
-h localhost -p 389
43+
44+
sudo rm -rf $TMPDIR

test/domain_test.rb

Lines changed: 66 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ def setup
77
end
88

99
def test_user_valid_login
10-
user = @domain.valid_login?('calavera', 'passworD1')
11-
assert_equal 'uid=calavera,dc=github,dc=com', user.dn
10+
assert user = @domain.valid_login?('user1', 'passworD1')
11+
assert_equal 'uid=user1,ou=People,dc=github,dc=com', user.dn
1212
end
1313

1414
def test_user_with_invalid_password
15-
assert !@domain.valid_login?('calavera', 'foo'),
16-
"Login `calavera` expected to be invalid with password `foo`"
15+
assert !@domain.valid_login?('user1', 'foo'),
16+
"Login `user1` expected to be invalid with password `foo`"
1717
end
1818

1919
def test_user_with_invalid_login
@@ -22,115 +22,118 @@ def test_user_with_invalid_login
2222
end
2323

2424
def test_groups_in_server
25-
assert_equal 2, @domain.groups(%w(Enterprise People)).size
25+
assert_equal 2, @domain.groups(%w(ghe-users ghe-admins)).size
2626
end
2727

2828
def test_user_in_group
29-
user = @domain.valid_login?('calavera', 'passworD1')
29+
assert user = @domain.valid_login?('user1', 'passworD1')
3030

31-
assert @domain.is_member?(user, %w(Enterprise People)),
32-
"Expected `Enterprise` or `Poeple` to include the member `#{user.dn}`"
31+
assert @domain.is_member?(user, %w(ghe-users ghe-admins)),
32+
"Expected `ghe-users` or `ghe-admins` to include the member `#{user.dn}`"
3333
end
3434

3535
def test_user_not_in_different_group
36-
user = @domain.valid_login?('calavera', 'passworD1')
36+
user = @domain.valid_login?('user1', 'passworD1')
3737

38-
assert !@domain.is_member?(user, %w(People)),
39-
"Expected `Poeple` not to include the member `#{user.dn}`"
38+
refute @domain.is_member?(user, %w(ghe-admins)),
39+
"Expected `ghe-admins` not to include the member `#{user.dn}`"
4040
end
4141

4242
def test_user_without_group
43-
user = @domain.valid_login?('ldaptest', 'secret')
43+
user = @domain.valid_login?('groupless-user1', 'passworD1')
4444

45-
assert !@domain.is_member?(user, %w(People)),
46-
"Expected `People` not to include the member `#{user.dn}`"
45+
assert !@domain.is_member?(user, %w(all-users)),
46+
"Expected `all-users` not to include the member `#{user.dn}`"
4747
end
4848

49-
def test_authenticate_doesnt_return_invalid_users
50-
user = @domain.authenticate!('calavera', 'passworD1')
51-
assert_equal 'uid=calavera,dc=github,dc=com', user.dn
49+
def test_authenticate_returns_valid_users
50+
user = @domain.authenticate!('user1', 'passworD1')
51+
assert_equal 'uid=user1,ou=People,dc=github,dc=com', user.dn
5252
end
5353

5454
def test_authenticate_doesnt_return_invalid_users
55-
assert !@domain.authenticate!('calavera', 'foo'),
55+
refute @domain.authenticate!('user1', 'foo'),
5656
"Expected `authenticate!` to not return an invalid user"
5757
end
5858

5959
def test_authenticate_check_valid_user_and_groups
60-
user = @domain.authenticate!('calavera', 'passworD1', %w(Enterprise People))
60+
user = @domain.authenticate!('user1', 'passworD1', %w(ghe-users ghe-admins))
6161

62-
assert_equal 'uid=calavera,dc=github,dc=com', user.dn
62+
assert_equal 'uid=user1,ou=People,dc=github,dc=com', user.dn
6363
end
6464

6565
def test_authenticate_doesnt_return_valid_users_in_different_groups
66-
assert !@domain.authenticate!('calavera', 'passworD1', %w(People)),
66+
refute @domain.authenticate!('user1', 'passworD1', %w(ghe-admins)),
6767
"Expected `authenticate!` to not return an user"
6868
end
6969

7070
def test_membership_empty_for_non_members
71-
user = @ldap.domain('uid=calavera,dc=github,dc=com').bind
71+
user = @ldap.domain('uid=user1,ou=People,dc=github,dc=com').bind
7272

73-
assert @domain.membership(user, %w(People)).empty?,
74-
"Expected `calavera` not to be a member of `People`."
73+
assert @domain.membership(user, %w(ghe-admins)).empty?,
74+
"Expected `user1` not to be a member of `ghe-admins`."
7575
end
7676

7777
def test_membership_groups_for_members
78-
user = @ldap.domain('uid=calavera,dc=github,dc=com').bind
79-
groups = @domain.membership(user, %w(Enterprise People))
78+
user = @ldap.domain('uid=user1,ou=People,dc=github,dc=com').bind
79+
groups = @domain.membership(user, %w(ghe-users ghe-admins))
8080

8181
assert_equal 1, groups.size
82-
assert_equal 'cn=Enterprise,ou=Group,dc=github,dc=com', groups.first.dn
82+
assert_equal 'cn=ghe-users,ou=Groups,dc=github,dc=com', groups.first.dn
8383
end
8484

8585
def test_membership_with_virtual_attributes
8686
ldap = GitHub::Ldap.new(options.merge(virtual_attributes: true))
87-
user = ldap.domain('uid=calavera,dc=github,dc=com').bind
88-
user[:memberof] = 'cn=Enterprise,ou=Group,dc=github,dc=com'
87+
88+
user = ldap.domain('uid=user1,ou=People,dc=github,dc=com').bind
89+
user[:memberof] = 'cn=ghe-admins,ou=Groups,dc=github,dc=com'
8990

9091
domain = ldap.domain("dc=github,dc=com")
91-
groups = domain.membership(user, %w(Enterprise People))
92+
groups = domain.membership(user, %w(ghe-admins))
9293

9394
assert_equal 1, groups.size
94-
assert_equal 'cn=Enterprise,ou=Group,dc=github,dc=com', groups.first.dn
95+
assert_equal 'cn=ghe-admins,ou=Groups,dc=github,dc=com', groups.first.dn
9596
end
9697

9798
def test_search
9899
assert 1, @domain.search(
99100
attributes: %w(uid),
100-
filter: Net::LDAP::Filter.eq('uid', 'calavera')).size
101+
filter: Net::LDAP::Filter.eq('uid', 'user1')).size
101102
end
102103

103104
def test_search_override_base_name
104105
assert 1, @domain.search(
105106
base: "this base name is incorrect",
106107
attributes: %w(uid),
107-
filter: Net::LDAP::Filter.eq('uid', 'calavera')).size
108+
filter: Net::LDAP::Filter.eq('uid', 'user1')).size
108109
end
109110

110111
def test_user_exists
111-
assert_equal 'uid=calavera,dc=github,dc=com', @domain.user?('calavera').dn
112+
assert user = @domain.user?('user1')
113+
assert_equal 'uid=user1,ou=People,dc=github,dc=com', user.dn
112114
end
113115

114116
def test_user_wildcards_are_filtered
115-
assert !@domain.user?('cal*'), 'Expected uid `cal*` to not complete'
117+
refute @domain.user?('user*'), 'Expected uid `user*` to not complete'
116118
end
117119

118120
def test_user_does_not_exist
119-
assert !@domain.user?('foobar'), 'Expected uid `foobar` to not exist.'
121+
refute @domain.user?('foobar'), 'Expected uid `foobar` to not exist.'
120122
end
121123

122124
def test_user_returns_every_attribute
123-
assert_equal ['calavera@github.com'], @domain.user?('calavera')[:mail]
125+
assert user = @domain.user?('user1')
126+
assert_equal ['user1@github.com'], user[:mail]
124127
end
125128

126129
def test_auth_binds
127-
user = @domain.user?('calavera')
128-
assert @domain.auth(user, 'passworD1'), 'Expected user to be bound.'
130+
assert user = @domain.user?('user1')
131+
assert @domain.auth(user, 'passworD1'), 'Expected user to bind'
129132
end
130133

131134
def test_auth_does_not_bind
132-
user = @domain.user?('calavera')
133-
assert !@domain.auth(user, 'foo'), 'Expected user not to be bound.'
135+
assert user = @domain.user?('user1')
136+
refute @domain.auth(user, 'foo'), 'Expected user not not bind'
134137
end
135138
end
136139

@@ -143,72 +146,54 @@ class GitHubLdapDomainUnauthenticatedTest < GitHub::Ldap::UnauthenticatedTest
143146
end
144147

145148
class GitHubLdapDomainNestedGroupsTest < GitHub::Ldap::Test
146-
def self.test_server_options
147-
{user_fixtures: FIXTURES.join('github-with-subgroups.ldif').to_s}
148-
end
149-
150149
def setup
151150
@ldap = GitHub::Ldap.new(options)
152151
@domain = @ldap.domain("dc=github,dc=com")
153152
end
154153

155154
def test_membership_in_subgroups
156-
user = @ldap.domain('uid=rubiojr,ou=users,dc=github,dc=com').bind
155+
user = @ldap.domain('uid=user1,ou=People,dc=github,dc=com').bind
157156

158-
assert @domain.is_member?(user, %w(enterprise-ops)),
159-
"Expected `enterprise-ops` to include the member `#{user.dn}`"
157+
assert @domain.is_member?(user, %w(nested-groups)),
158+
"Expected `nested-groups` to include the member `#{user.dn}`"
160159
end
161160

162161
def test_membership_in_deeply_nested_subgroups
163-
assert user = @ldap.domain('uid=user1.1.1.1,ou=users,dc=github,dc=com').bind
162+
assert user = @ldap.domain('uid=user1,ou=People,dc=github,dc=com').bind
164163

165-
assert @domain.is_member?(user, %w(group1)),
166-
"Expected `group1` to include the member `#{user.dn}` via deep recursion"
164+
assert @domain.is_member?(user, %w(n-depth-nested-group4)),
165+
"Expected `n-depth-nested-group4` to include the member `#{user.dn}` via deep recursion"
167166
end
168167
end
169168

170169
class GitHubLdapPosixGroupsWithRecursionFallbackTest < GitHub::Ldap::Test
171-
def self.test_server_options
172-
{
173-
custom_schemas: FIXTURES.join('posixGroup.schema.ldif'),
174-
user_fixtures: FIXTURES.join('github-with-posixGroups.ldif').to_s,
175-
# so we exercise the recursive group search fallback
176-
recursive_group_search_fallback: true
177-
}
178-
end
179-
180170
def setup
181-
@ldap = GitHub::Ldap.new(options)
171+
opts = options.merge \
172+
recursive_group_search_fallback: true
173+
@ldap = GitHub::Ldap.new(opts)
182174
@domain = @ldap.domain("dc=github,dc=com")
183-
@cn = "enterprise-posix-devs"
175+
@cn = "posix-group1"
184176
end
185177

186178
def test_membership_for_posixGroups
187-
assert user = @ldap.domain('uid=mtodd,ou=users,dc=github,dc=com').bind
179+
assert user = @ldap.domain('uid=user1,ou=People,dc=github,dc=com').bind
188180

189181
assert @domain.is_member?(user, [@cn]),
190182
"Expected `#{@cn}` to include the member `#{user.dn}`"
191183
end
192184
end
193185

194186
class GitHubLdapPosixGroupsWithoutRecursionTest < GitHub::Ldap::Test
195-
def self.test_server_options
196-
{
197-
custom_schemas: FIXTURES.join('posixGroup.schema.ldif'),
198-
user_fixtures: FIXTURES.join('github-with-posixGroups.ldif').to_s,
199-
# so we test the test the non-recursive group membership search
200-
recursive_group_search_fallback: false
201-
}
202-
end
203-
204187
def setup
205-
@ldap = GitHub::Ldap.new(options)
188+
opts = options.merge \
189+
recursive_group_search_fallback: false
190+
@ldap = GitHub::Ldap.new(opts)
206191
@domain = @ldap.domain("dc=github,dc=com")
207-
@cn = "enterprise-posix-devs"
192+
@cn = "posix-group1"
208193
end
209194

210195
def test_membership_for_posixGroups
211-
assert user = @ldap.domain('uid=mtodd,ou=users,dc=github,dc=com').bind
196+
assert user = @ldap.domain('uid=user1,ou=People,dc=github,dc=com').bind
212197

213198
assert @domain.is_member?(user, [@cn]),
214199
"Expected `#{@cn}` to include the member `#{user.dn}`"
@@ -218,25 +203,17 @@ def test_membership_for_posixGroups
218203
# Specifically testing that this doesn't break when posixGroups are not
219204
# supported.
220205
class GitHubLdapWithoutPosixGroupsTest < GitHub::Ldap::Test
221-
def self.test_server_options
222-
{
223-
custom_schemas: FIXTURES.join('posixGroup.schema.ldif'),
224-
user_fixtures: FIXTURES.join('github-with-posixGroups.ldif').to_s,
225-
# so we test the test the non-recursive group membership search
226-
recursive_group_search_fallback: false,
227-
# explicitly disable posixGroup support (even if the schema supports it)
228-
posix_support: false
229-
}
230-
end
231-
232206
def setup
233-
@ldap = GitHub::Ldap.new(options)
207+
opts = options.merge \
208+
recursive_group_search_fallback: false, # test non-recursive group membership search
209+
posix_support: false # disable posixGroup support
210+
@ldap = GitHub::Ldap.new(opts)
234211
@domain = @ldap.domain("dc=github,dc=com")
235-
@cn = "enterprise-posix-devs"
212+
@cn = "posix-group1"
236213
end
237214

238215
def test_membership_for_posixGroups
239-
assert user = @ldap.domain('uid=mtodd,ou=users,dc=github,dc=com').bind
216+
assert user = @ldap.domain('uid=user1,ou=People,dc=github,dc=com').bind
240217

241218
refute @domain.is_member?(user, [@cn]),
242219
"Expected `#{@cn}` to not include the member `#{user.dn}`"

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy