@@ -28,7 +28,7 @@ def test_convenience_filters
28
28
assert_equal ( "(uid=\\ 2A)" , Filter . equals ( "uid" , "*" ) . to_s )
29
29
assert_equal ( "(uid=\\ 28*)" , Filter . begins ( "uid" , "(" ) . to_s )
30
30
assert_equal ( "(uid=*\\ 29)" , Filter . ends ( "uid" , ")" ) . to_s )
31
- assert_equal ( "(uid=*\\ 5C*)" , Filter . contains ( "uid" , "\\ " ) . to_s )
31
+ assert_equal ( "(uid=*\\ 5C*)" , Filter . contains ( "uid" , "\\ " ) . to_s )
32
32
end
33
33
34
34
def test_c2
@@ -120,3 +120,99 @@ def test_ber_from_rfc2254_filter
120
120
end
121
121
end
122
122
end
123
+
124
+ # tests ported over from rspec. Not sure if these overlap with the above
125
+ # https://github.com/ruby-ldap/ruby-net-ldap/pull/121
126
+ class TestFilterRSpec < Test ::Unit ::TestCase
127
+ def test_ex_convert
128
+ assert_equal '(foo:=bar)' , Net ::LDAP ::Filter . ex ( 'foo' , 'bar' ) . to_s
129
+ end
130
+
131
+ def test_ex_rfc2254_roundtrip
132
+ filter = Net ::LDAP ::Filter . ex ( 'foo' , 'bar' )
133
+ assert_equal filter , Net ::LDAP ::Filter . from_rfc2254 ( filter . to_s )
134
+ end
135
+
136
+ def test_ber_conversion
137
+ filter = Net ::LDAP ::Filter . ex ( 'foo' , 'bar' )
138
+ ber = filter . to_ber
139
+ assert_equal filter , Net ::LDAP ::Filter . parse_ber ( ber . read_ber ( Net ::LDAP ::AsnSyntax ) )
140
+ end
141
+
142
+ [
143
+ '(o:dn:=Ace Industry)' ,
144
+ '(:dn:2.4.8.10:=Dino)' ,
145
+ '(cn:dn:1.2.3.4.5:=John Smith)' ,
146
+ '(sn:dn:2.4.6.8.10:=Barbara Jones)' ,
147
+ '(&(sn:dn:2.4.6.8.10:=Barbara Jones))'
148
+ ] . each_with_index do |filter_str , index |
149
+ define_method "test_decode_filter_#{ index } " do
150
+ filter = Net ::LDAP ::Filter . from_rfc2254 ( filter_str )
151
+ assert_kind_of Net ::LDAP ::Filter , filter
152
+ end
153
+
154
+ define_method "test_ber_conversion_#{ index } " do
155
+ filter = Net ::LDAP ::Filter . from_rfc2254 ( filter_str )
156
+ ber = Net ::LDAP ::Filter . from_rfc2254 ( filter_str ) . to_ber
157
+ assert_equal filter , Net ::LDAP ::Filter . parse_ber ( ber . read_ber ( Net ::LDAP ::AsnSyntax ) )
158
+ end
159
+ end
160
+
161
+ def test_apostrophes
162
+ assert_equal "(uid=O'Keefe)" , Net ::LDAP ::Filter . construct ( "uid=O'Keefe" ) . to_rfc2254
163
+ end
164
+
165
+ def test_equals
166
+ assert_equal Net ::LDAP ::Filter . eq ( 'dn' , 'f\2Aoo' ) , Net ::LDAP ::Filter . equals ( 'dn' , 'f*oo' )
167
+ end
168
+
169
+ def test_begins
170
+ assert_equal Net ::LDAP ::Filter . eq ( 'dn' , 'f\2Aoo*' ) , Net ::LDAP ::Filter . begins ( 'dn' , 'f*oo' )
171
+ end
172
+
173
+ def test_ends
174
+ assert_equal Net ::LDAP ::Filter . eq ( 'dn' , '*f\2Aoo' ) , Net ::LDAP ::Filter . ends ( 'dn' , 'f*oo' )
175
+ end
176
+
177
+ def test_contains
178
+ assert_equal Net ::LDAP ::Filter . eq ( 'dn' , '*f\2Aoo*' ) , Net ::LDAP ::Filter . contains ( 'dn' , 'f*oo' )
179
+ end
180
+
181
+ def test_escape
182
+ # escapes nul, *, (, ) and \\
183
+ assert_equal "\\ 00\\ 2A\\ 28\\ 29\\ 5C" , Net ::LDAP ::Filter . escape ( "\0 *()\\ " )
184
+ end
185
+
186
+ def test_well_known_ber_string
187
+ ber = "\xa4 \x2d " \
188
+ "\x04 \x0b " "objectclass" \
189
+ "\x30 \x1e " \
190
+ "\x80 \x08 " "foo" "*\\ " "bar" \
191
+ "\x81 \x08 " "foo" "*\\ " "bar" \
192
+ "\x82 \x08 " "foo" "*\\ " "bar" . b
193
+
194
+ [
195
+ "foo" "\\ 2A\\ 5C" "bar" ,
196
+ "foo" "\\ 2a\\ 5c" "bar" ,
197
+ "foo" "\\ 2A\\ 5c" "bar" ,
198
+ "foo" "\\ 2a\\ 5C" "bar"
199
+ ] . each do |escaped |
200
+ # unescapes escaped characters
201
+ filter = Net ::LDAP ::Filter . eq ( "objectclass" , "#{ escaped } *#{ escaped } *#{ escaped } " )
202
+ assert_equal ber , filter . to_ber
203
+ end
204
+ end
205
+
206
+ def test_parse_ber_escapes_characters
207
+ ber = "\xa4 \x2d " \
208
+ "\x04 \x0b " "objectclass" \
209
+ "\x30 \x1e " \
210
+ "\x80 \x08 " "foo" "*\\ " "bar" \
211
+ "\x81 \x08 " "foo" "*\\ " "bar" \
212
+ "\x82 \x08 " "foo" "*\\ " "bar" . b
213
+
214
+ escaped = Net ::LDAP ::Filter . escape ( "foo" "*\\ " "bar" )
215
+ filter = Net ::LDAP ::Filter . parse_ber ( ber . read_ber ( Net ::LDAP ::AsnSyntax ) )
216
+ assert_equal "(objectclass=#{ escaped } *#{ escaped } *#{ escaped } )" , filter . to_s
217
+ end
218
+ end
0 commit comments