X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=ruby%2Flib%2Fruby%2Fgems%2F1.8%2Fgems%2Factiveldap-1.2.4%2Ftest%2Ftest_user.rb;fp=ruby%2Flib%2Fruby%2Fgems%2F1.8%2Fgems%2Factiveldap-1.2.4%2Ftest%2Ftest_user.rb;h=824e73db47e099bbbbaadb728283e0099774e8d6;hb=80a647f166ccf0ef42768dcda8135b1d405dc15e;hp=0000000000000000000000000000000000000000;hpb=05ad905dae7df28a0baeee7739c8aab3de34c138;p=redminele%2Fredminele.git diff --git a/ruby/lib/ruby/gems/1.8/gems/activeldap-1.2.4/test/test_user.rb b/ruby/lib/ruby/gems/1.8/gems/activeldap-1.2.4/test/test_user.rb new file mode 100644 index 0000000..824e73d --- /dev/null +++ b/ruby/lib/ruby/gems/1.8/gems/activeldap-1.2.4/test/test_user.rb @@ -0,0 +1,217 @@ +require 'al-test-utils' + +class TestUser < Test::Unit::TestCase + include AlTestUtils + + # This adds all required attributes and writes + def test_add + ensure_delete_user("test-user") do |uid| + user = @user_class.new(uid) + + assert(user.new_entry?, "#{uid} must not exist in LDAP prior to testing") + + assert_equal(['posixAccount', 'person'].sort, user.classes.sort, + "Class User's ldap_mapping should specify " + + "['posixAccount', 'person']. This was not returned.") + + user.add_class('posixAccount', 'shadowAccount', + 'person', 'inetOrgPerson', 'organizationalPerson') + + cn = 'Test User (Default Language)' + user.cn = cn + assert_equal(cn, user.cn, 'user.cn should have returned "#{cn}"') + + # test force_array + assert_equal([cn], user.cn(true), + 'user.cn(true) should have returned "[#{cn}]"') + + cn = {'lang-en-us' => 'Test User (EN-US Language)'} + user.cn = cn + # Test subtypes + assert_equal(cn, user.cn, 'user.cn should match') + + cn = ['Test User (Default Language)', + {'lang-en-us' => ['Test User (EN-US Language)', 'Foo']}] + user.cn = cn + # Test multiple entries with subtypes + assert_equal(cn, user.cn, + 'This should have returned an array of a ' + + 'normal cn and a lang-en-us cn.') + + uid_number = "9000" + user.uid_number = uid_number + assert_equal(uid_number.to_i, user.uid_number) + assert_equal(uid_number, user.uid_number_before_type_cast) + + gid_number = 9000 + user.gid_number = gid_number + assert_equal(gid_number, user.gid_number) + assert_equal(gid_number, user.gid_number_before_type_cast) + + home_directory = '/home/foo' + user.home_directory = home_directory + # just for sanity's sake + assert_equal(home_directory, user.home_directory, + 'This should be #{home_directory.dump}.') + assert_equal([home_directory], user.home_directory(true), + 'This should be [#{home_directory.dump}].') + + see_also = "cn=XXX,dc=local,dc=net" + user.see_also = see_also + assert_equal(ActiveLdap::DN.parse(see_also), user.see_also) + + see_also = ActiveLdap::DN.parse(see_also) + user.see_also = see_also + assert_equal(see_also, user.see_also) + + assert(!user.valid?) + assert(user.errors.invalid?(:sn)) + errors = %w(person organizationalPerson + inetOrgPerson).collect do |object_class| + if ActiveLdap.get_text_supported? + format = _("is required attribute by objectClass '%s': " \ + "aliases: %s") + format = user._(format) + format % [user.class.human_object_class_name(object_class), + user.class.human_attribute_name("surname")] + else + format = "is required attribute by objectClass '%s': aliases: %s" + user._(format) % [object_class, "surname"] + end + end + assert_equal(errors.sort, user.errors.on(:sn).sort) + user.sn = ['User'] + assert(user.valid?) + assert_equal(0, user.errors.size) + + assert_nothing_raised {user.save!} + + user.user_certificate = certificate + user.jpeg_photo = jpeg_photo + + assert(ActiveLdap::Base.schema.attribute('jpegPhoto').binary?, + 'jpegPhoto is binary?') + + assert(ActiveLdap::Base.schema.attribute('userCertificate').binary?, + 'userCertificate is binary?') + assert_nothing_raised {user.save!} + end + end + + + # This tests the reload of a binary_required type + def test_binary_required + require 'openssl' + make_temporary_user do |user, password| + # validate add + user.user_certificate = nil + assert_nil(user.user_certificate) + assert_nothing_raised() { user.save! } + assert_nil(user.user_certificate) + + user.user_certificate = {"binary" => [certificate]} + assert_equal(certificate, user.user_certificate) + assert_nothing_raised() { user.save! } + assert_equal(certificate, user.user_certificate) + + # now test modify + user.user_certificate = nil + assert_nil(user.user_certificate) + assert_nothing_raised() { user.save! } + assert_nil(user.user_certificate) + + user.user_certificate = certificate + assert_equal(certificate, user.user_certificate) + assert_nothing_raised() { user.save! } + + # validate modify + user = @user_class.find(user.uid) + assert_equal(certificate, user.user_certificate) + + expected_cert = OpenSSL::X509::Certificate.new(certificate) + actual_cert = user.user_certificate + actual_cert = OpenSSL::X509::Certificate.new(actual_cert) + assert_equal(expected_cert.subject.to_s, + actual_cert.subject.to_s, + 'Cert must parse correctly still') + end + end + + def test_binary_required_nested + make_temporary_user do |user, password| + user.user_certificate = {"lang-en" => [certificate]} + assert_equal({'lang-en' => certificate}, + user.user_certificate) + assert_nothing_raised() { user.save! } + assert_equal({'lang-en' => certificate}, + user.user_certificate) + end + end + + # This tests the reload of a binary type (not forced!) + def test_binary + make_temporary_user do |user, password| + # reload and see what happens + assert_equal(jpeg_photo, user.jpeg_photo, + "This should have been equal to #{jpeg_photo_path.dump}") + + # now test modify + user.jpeg_photo = nil + assert_nil(user.jpeg_photo) + assert_nothing_raised() { user.save! } + assert_nil(user.jpeg_photo) + + user.jpeg_photo = jpeg_photo + assert_equal(jpeg_photo, user.jpeg_photo) + assert_nothing_raised() { user.save! } + + # now validate modify + user = @user_class.find(user.uid) + assert_equal(jpeg_photo, user.jpeg_photo) + end + end + + # This tests the removal of a objectclass + def test_remove_object_class + make_temporary_user do |user, password| + assert_nil(user.shadow_max, + 'Should get the default nil value for shadowMax') + + # Remove shadowAccount + user.remove_class('shadowAccount') + assert(user.valid?) + assert_nothing_raised() { user.save! } + + assert_raise(NoMethodError, + 'shadowMax should not be defined anymore' ) do + user.shadow_max + end + end + end + + + # Just modify a few random attributes + def test_modify_with_subtypes + make_temporary_user do |user, password| + cn = ['Test User', {'lang-en-us' => ['Test User', 'wad']}] + user.cn = cn + assert_nothing_raised() { user.save! } + + user = @user_class.find(user.uid) + assert_equal(cn, user.cn, + 'Making sure a modify with mixed subtypes works') + end + end + + # This tests some invalid input handling + def test_invalid_input + end + + # This tests deletion + def test_destroy + make_temporary_user do |user, password| + user.destroy + assert(user.new_entry?, 'user should no longer exist') + end + end +end