Skip to content

Commit c00105e

Browse files
committed
Unit test queued_read and usage
1 parent e0582da commit c00105e

File tree

1 file changed

+82
-2
lines changed

1 file changed

+82
-2
lines changed

test/test_ldap_connection.rb

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,86 @@ def test_write_increments_msgid
6767
end
6868
end
6969

70+
class TestLDAPConnectionSocketReads < Test::Unit::TestCase
71+
def make_message(message_id, app_tag: Net::LDAP::PDU::SearchResult, code: Net::LDAP::ResultCodeSuccess, matched_dn: "", error_message: "")
72+
result = Net::BER::BerIdentifiedArray.new([code, matched_dn, error_message])
73+
result.ber_identifier = app_tag
74+
[message_id, result]
75+
end
76+
77+
def test_queued_read_drains_queue_before_read
78+
result1a = make_message(1, error_message: "one")
79+
result1b = make_message(1, error_message: "two")
80+
81+
mock = flexmock("socket")
82+
mock.should_receive(:read_ber).and_return(result1b)
83+
conn = Net::LDAP::Connection.new(:socket => mock)
84+
85+
conn.message_queue[1].push Net::LDAP::PDU.new(result1a)
86+
87+
assert msg1 = conn.queued_read(1)
88+
assert msg2 = conn.queued_read(1)
89+
90+
assert_equal 1, msg1.message_id
91+
assert_equal "one", msg1.error_message
92+
assert_equal 1, msg2.message_id
93+
assert_equal "two", msg2.error_message
94+
end
95+
96+
def test_queued_read_reads_until_message_id_match
97+
result1 = make_message(1)
98+
result2 = make_message(2)
99+
100+
mock = flexmock("socket")
101+
mock.should_receive(:read_ber).
102+
and_return(result1).
103+
and_return(result2)
104+
conn = Net::LDAP::Connection.new(:socket => mock)
105+
106+
assert result = conn.queued_read(2)
107+
assert_equal 2, result.message_id
108+
assert_equal 1, conn.queued_read(1).message_id
109+
end
110+
111+
def test_queued_read_modify
112+
result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
113+
result2 = make_message(2, app_tag: Net::LDAP::PDU::ModifyResponse)
114+
115+
mock = flexmock("socket")
116+
mock.should_receive(:read_ber).
117+
and_return(result1).
118+
and_return(result2)
119+
mock.should_receive(:write)
120+
conn = Net::LDAP::Connection.new(:socket => mock)
121+
122+
conn.next_msgid # simulates ongoing query
123+
124+
conn.instance_variable_get("@msgid")
125+
126+
assert result = conn.modify(dn: "uid=modified-user1,ou=People,dc=rubyldap,dc=com",
127+
operations: [[:add, :mail, "modified-user1@example.com"]])
128+
assert result.success?
129+
assert_equal 2, result.message_id
130+
end
131+
132+
def test_queued_read_add
133+
result1 = make_message(1, app_tag: Net::LDAP::PDU::SearchResult)
134+
result2 = make_message(2, app_tag: Net::LDAP::PDU::AddResponse)
135+
136+
mock = flexmock("socket")
137+
mock.should_receive(:read_ber).
138+
and_return(result1).
139+
and_return(result2)
140+
mock.should_receive(:write)
141+
conn = Net::LDAP::Connection.new(:socket => mock)
142+
143+
conn.next_msgid # simulates ongoing query
144+
145+
assert result = conn.add(dn: "uid=added-user1,ou=People,dc=rubyldap,dc=com")
146+
assert result.success?
147+
assert_equal 2, result.message_id
148+
end
149+
end
70150

71151
class TestLDAPConnectionErrors < Test::Unit::TestCase
72152
def setup
@@ -79,7 +159,7 @@ def setup
79159
def test_error_failed_operation
80160
ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeUnwillingToPerform, "", "The provided password value was rejected by a password validator: The provided password did not contain enough characters from the character set 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. The minimum number of characters from that set that must be present in user passwords is 1"])
81161
ber.ber_identifier = Net::LDAP::PDU::ModifyResponse
82-
@tcp_socket.should_receive(:read_ber).and_return([2, ber])
162+
@tcp_socket.should_receive(:read_ber).and_return([1, ber])
83163

84164
result = @connection.modify(:dn => "1", :operations => [[:replace, "mail", "something@sothsdkf.com"]])
85165
assert result.failure?, "should be failure"
@@ -89,7 +169,7 @@ def test_error_failed_operation
89169
def test_no_error_on_success
90170
ber = Net::BER::BerIdentifiedArray.new([Net::LDAP::ResultCodeSuccess, "", ""])
91171
ber.ber_identifier = Net::LDAP::PDU::ModifyResponse
92-
@tcp_socket.should_receive(:read_ber).and_return([2, ber])
172+
@tcp_socket.should_receive(:read_ber).and_return([1, ber])
93173

94174
result = @connection.modify(:dn => "1", :operations => [[:replace, "mail", "something@sothsdkf.com"]])
95175
assert result.success?, "should be success"

0 commit comments

Comments
 (0)