Skip to content

Commit 52d8364

Browse files
Test suite improvements.
1 parent 34817b2 commit 52d8364

File tree

7 files changed

+505
-36
lines changed

7 files changed

+505
-36
lines changed

tests/ext/test_env.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929

3030
import configparser
3131
import os
32-
import secrets
33-
import string
3432

3533
dir_name = os.path.dirname(os.path.dirname(__file__))
3634
file_name = os.path.join(dir_name, os.path.basename(__file__))
@@ -75,7 +73,3 @@ def get_extended_config_str(name, fallback=None):
7573
return _extended_config.parser.get(
7674
_extended_config.section_name, name, fallback=fallback
7775
)
78-
79-
80-
def get_random_string(length=10):
81-
return "".join(secrets.choice(string.ascii_letters) for i in range(length))

tests/sql/create_schema.sql

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,20 @@ begin
632632
end;
633633
/
634634

635+
create procedure &main_user..proc_Test2 (
636+
a_InValue varchar2,
637+
a_InOutValue in out number,
638+
a_OutValue out boolean
639+
) as
640+
begin
641+
a_InOutValue := a_InOutValue * length(a_InValue);
642+
a_OutValue := false;
643+
if length(a_InValue) >= 2 then
644+
a_OutValue := true;
645+
end if;
646+
end;
647+
/
648+
635649
create procedure &main_user..proc_TestNoArgs as
636650
begin
637651
null;
@@ -659,6 +673,19 @@ begin
659673
end;
660674
/
661675

676+
create function &main_user..func_Test2 (
677+
a_String varchar2,
678+
a_ExtraAmount number,
679+
a_Boolean boolean
680+
) return number as
681+
begin
682+
if a_Boolean then
683+
return length(a_String) + a_ExtraAmount;
684+
end if;
685+
return length(a_String) - a_ExtraAmount;
686+
end;
687+
/
688+
662689
create function &main_user..func_TestNoArgs
663690
return number as
664691
begin

tests/test_4100_cursor_callproc.py

Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,306 @@ def test_4110(self):
144144
self.assertEqual(results, ["hi", 10])
145145
self.assertEqual(out_value.getvalue(), 2.0)
146146

147+
def test_4111(self):
148+
"4111 - test callproc with setinputsizes"
149+
out_value = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
150+
self.cursor.setinputsizes(
151+
oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_NUMBER, out_value
152+
)
153+
results = self.cursor.callproc("proc_Test2", ("hi", 5, out_value))
154+
self.assertEqual(results, ["hi", 10, True])
155+
self.assertTrue(out_value.getvalue())
156+
157+
def test_4112(self):
158+
"4112 - test callfunc with setinputsizes"
159+
self.cursor.setinputsizes(
160+
oracledb.DB_TYPE_NUMBER,
161+
oracledb.DB_TYPE_VARCHAR,
162+
oracledb.DB_TYPE_NUMBER,
163+
oracledb.DB_TYPE_BOOLEAN,
164+
)
165+
results = self.cursor.callfunc(
166+
"func_Test2", oracledb.NUMBER, ("hi", 5, True)
167+
)
168+
self.assertEqual(results, 7)
169+
170+
def test_4113(self):
171+
"4113 - test callproc with setinputsizes with kwargs"
172+
out_value = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
173+
self.cursor.setinputsizes(
174+
oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_NUMBER, out_value
175+
)
176+
kwargs = dict(a_OutValue=out_value)
177+
results = self.cursor.callproc("proc_Test2", ("hi", 5), kwargs)
178+
self.assertEqual(results, ["hi", 10])
179+
self.assertTrue(out_value.getvalue())
180+
181+
out_value = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
182+
self.cursor.setinputsizes(
183+
oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_NUMBER, out_value
184+
)
185+
kwargs = dict(a_InValue="hi", a_InOutValue=5, a_OutValue=out_value)
186+
results = self.cursor.callproc("proc_Test2", [], kwargs)
187+
self.assertEqual(results, [])
188+
self.assertTrue(out_value.getvalue())
189+
190+
self.cursor.setinputsizes(
191+
oracledb.DB_TYPE_VARCHAR,
192+
oracledb.DB_TYPE_NUMBER,
193+
oracledb.DB_TYPE_BOOLEAN,
194+
)
195+
kwargs = dict(a_InValue="hi", a_InOutValue=5, a_OutValue=out_value)
196+
results = self.cursor.callproc("proc_Test2", [], kwargs)
197+
self.assertEqual(results, [])
198+
self.assertTrue(out_value.getvalue())
199+
200+
def test_4114(self):
201+
"4114 - test callproc with setinputsizes with kwargs in mixed order"
202+
out_value = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
203+
self.cursor.setinputsizes(
204+
oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_NUMBER, out_value
205+
)
206+
kwargs = dict(a_OutValue=out_value, a_InValue="hi", a_InOutValue=5)
207+
with self.assertRaisesFullCode("ORA-06550"):
208+
results = self.cursor.callproc(
209+
"proc_Test2", keyword_parameters=kwargs
210+
)
211+
self.assertEqual(results, [])
212+
self.assertTrue(out_value.getvalue())
213+
214+
self.cursor.setinputsizes(
215+
oracledb.DB_TYPE_VARCHAR,
216+
oracledb.DB_TYPE_NUMBER,
217+
oracledb.DB_TYPE_BOOLEAN,
218+
)
219+
with self.assertRaisesFullCode("ORA-06550"):
220+
self.cursor.callproc("proc_Test2", keyword_parameters=kwargs)
221+
222+
def test_4115(self):
223+
"4115 - test callfunc with setinputsizes with kwargs"
224+
extra_amount = self.cursor.var(oracledb.DB_TYPE_NUMBER)
225+
extra_amount.setvalue(0, 5)
226+
test_values = [
227+
(["hi"], dict(a_ExtraAmount=extra_amount, a_Boolean=True)),
228+
(
229+
[],
230+
dict(
231+
a_String="hi", a_ExtraAmount=extra_amount, a_Boolean=True
232+
),
233+
),
234+
]
235+
for args, kwargs in test_values:
236+
self.cursor.setinputsizes(
237+
oracledb.DB_TYPE_NUMBER,
238+
oracledb.DB_TYPE_VARCHAR,
239+
oracledb.DB_TYPE_NUMBER,
240+
oracledb.DB_TYPE_BOOLEAN,
241+
)
242+
results = self.cursor.callfunc(
243+
"func_Test2", oracledb.DB_TYPE_NUMBER, args, kwargs
244+
)
245+
self.assertEqual(results, 7)
246+
247+
def test_4116(self):
248+
"4116 - test callproc with setinputsizes with extra arguments"
249+
out_value = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
250+
test_values = [
251+
(("hi", 5, out_value), None),
252+
(("hi",), dict(a_InOutValue=5, a_OutValue=out_value)),
253+
([], dict(a_InValue="hi", a_InOutValue=5, a_OutValue=out_value)),
254+
]
255+
for args, kwargs in test_values:
256+
self.cursor.setinputsizes(
257+
oracledb.DB_TYPE_VARCHAR,
258+
oracledb.NUMBER,
259+
out_value,
260+
oracledb.DB_TYPE_VARCHAR, # extra argument
261+
)
262+
with self.assertRaisesFullCode("ORA-01036", "DPY-4009"):
263+
self.cursor.callproc("proc_Test2", args, kwargs)
264+
265+
def test_4117(self):
266+
"4117 - test callfunc with setinputsizes with extra arguments"
267+
extra_amount = self.cursor.var(oracledb.DB_TYPE_NUMBER)
268+
extra_amount.setvalue(0, 5)
269+
test_values = [
270+
(["hi", extra_amount], None),
271+
(["hi"], dict(a_ExtraAmount=extra_amount)),
272+
([], dict(a_ExtraAmount=extra_amount, a_String="hi")),
273+
]
274+
for args, kwargs in test_values:
275+
self.cursor.setinputsizes(
276+
oracledb.DB_TYPE_NUMBER,
277+
oracledb.DB_TYPE_VARCHAR,
278+
oracledb.DB_TYPE_NUMBER,
279+
oracledb.DB_TYPE_BOOLEAN,
280+
oracledb.DB_TYPE_VARCHAR, # extra argument
281+
)
282+
with self.assertRaisesFullCode("ORA-01036", "DPY-4009"):
283+
self.cursor.callfunc(
284+
"func_Test2", oracledb.DB_TYPE_NUMBER, args, kwargs
285+
)
286+
287+
def test_4118(self):
288+
"4118 - test callproc with setinputsizes with too few parameters"
289+
out_value = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
290+
291+
# setinputsizes for 2 args (missed 1 args)
292+
self.cursor.setinputsizes(
293+
oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_NUMBER
294+
)
295+
results = self.cursor.callproc("proc_Test2", ("hi", 5, out_value))
296+
self.assertEqual(results, ["hi", 10, out_value.getvalue()])
297+
self.assertTrue(out_value.getvalue())
298+
299+
# setinputsizes for 2 args (missed 1 kwargs)
300+
self.cursor.setinputsizes(
301+
oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_NUMBER
302+
)
303+
kwargs = dict(a_OutValue=out_value)
304+
results = self.cursor.callproc("proc_Test2", ("hi", 5), kwargs)
305+
self.assertEqual(results, ["hi", 10])
306+
self.assertTrue(out_value.getvalue())
307+
308+
# setinputsizes for 1 args (missed 2 args)
309+
self.cursor.setinputsizes(oracledb.DB_TYPE_VARCHAR)
310+
results = self.cursor.callproc("proc_Test2", ("hi", 5, out_value))
311+
self.assertEqual(results, ["hi", 10, out_value.getvalue()])
312+
self.assertTrue(out_value.getvalue())
313+
314+
# setinputsizes for 1 args (missed 1 args and 1 kwargs)
315+
self.cursor.setinputsizes(oracledb.DB_TYPE_VARCHAR)
316+
kwargs = dict(a_OutValue=out_value)
317+
results = self.cursor.callproc("proc_Test2", ("hi", 5), kwargs)
318+
self.assertEqual(results, ["hi", 10])
319+
self.assertTrue(out_value.getvalue())
320+
321+
# setinputsizes for 2 kwargs (missed 1 kwargs)
322+
self.cursor.setinputsizes(
323+
oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_NUMBER
324+
)
325+
kwargs = dict(a_InValue="hi", a_InOutValue=5, a_OutValue=out_value)
326+
results = self.cursor.callproc("proc_Test2", [], kwargs)
327+
self.assertEqual(results, [])
328+
self.assertTrue(out_value.getvalue())
329+
330+
def test_4119(self):
331+
"""
332+
4119 - test callproc with setinputsizes with wrong order of parameters
333+
"""
334+
# setinputsizes for 2 args (missed 1 kwargs)
335+
out_value = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
336+
self.cursor.setinputsizes(bool, oracledb.DB_TYPE_VARCHAR)
337+
kwargs = dict(a_OutValue=out_value)
338+
with self.assertRaisesFullCode("ORA-06550"):
339+
self.cursor.callproc("proc_Test2", ["hi", 5], kwargs)
340+
341+
# setinputsizes for 2 kwargs (missed 1 kwargs)
342+
self.cursor.setinputsizes(bool, oracledb.DB_TYPE_VARCHAR)
343+
kwargs = dict(a_InValue="hi", a_InOutValue=5, a_OutValue=out_value)
344+
with self.assertRaisesFullCode("ORA-06550"):
345+
self.cursor.callproc("proc_Test2", [], kwargs)
346+
347+
def test_4120(self):
348+
"4120 - test callfunc with setinputsizes with too few parameters"
349+
# setinputsizes for return_type and 1 kwargs (missed 2 kwargs)
350+
bool_var = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
351+
bool_var.setvalue(0, False)
352+
kwargs = dict(a_Boolean=bool_var, a_String="hi", a_ExtraAmount=3)
353+
self.cursor.setinputsizes(oracledb.NUMBER, oracledb.DB_TYPE_VARCHAR)
354+
results = self.cursor.callfunc(
355+
"func_Test2", oracledb.NUMBER, [], kwargs
356+
)
357+
self.assertEqual(results, -1)
358+
359+
# setinputsizes for return_type (missed 3 kwargs)
360+
bool_var.setvalue(0, False)
361+
kwargs = dict(a_Boolean=bool_var, a_String="hi", a_ExtraAmount=1)
362+
self.cursor.setinputsizes(oracledb.NUMBER)
363+
results = self.cursor.callfunc(
364+
"func_Test2", oracledb.NUMBER, [], kwargs
365+
)
366+
self.assertEqual(results, 1)
367+
368+
# setinputsizes for return_type (missed 3 args)
369+
bool_var.setvalue(0, True)
370+
self.cursor.setinputsizes(oracledb.NUMBER)
371+
results = self.cursor.callfunc(
372+
"func_Test2", oracledb.NUMBER, ["hi", 2, bool_var]
373+
)
374+
self.assertEqual(results, 4)
375+
376+
def test_4121(self):
377+
"""
378+
4121 - test callfunc with setinputsizes with wrong order of parameters
379+
"""
380+
# setinputsizes for 2 args (missed 2 kwargs)
381+
bool_var = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
382+
bool_var.setvalue(0, True)
383+
self.cursor.setinputsizes(oracledb.NUMBER, oracledb.DB_TYPE_BOOLEAN)
384+
kwargs = dict(a_Boolean=bool_var)
385+
with self.assertRaisesFullCode("ORA-06550"):
386+
self.cursor.callfunc(
387+
"func_Test2", oracledb.NUMBER, ["hi", bool_var], kwargs
388+
)
389+
390+
def test_4122(self):
391+
"4122 - test callfunc with setinputsizes without type for return_type"
392+
# setinputsizes for 1 args and 1 kwargs
393+
bool_var = self.cursor.var(oracledb.DB_TYPE_BOOLEAN)
394+
bool_var.setvalue(0, False)
395+
self.cursor.setinputsizes(oracledb.NUMBER, oracledb.DB_TYPE_BOOLEAN)
396+
kwargs = dict(a_Boolean=bool_var)
397+
with self.assertRaisesFullCode("ORA-06550"):
398+
self.cursor.callfunc(
399+
"func_Test2", oracledb.DB_TYPE_NUMBER, ["hi"], kwargs
400+
)
401+
402+
# setinputsizes for 2 kwargs (missed 1 kwargs)
403+
bool_var.setvalue(0, False)
404+
kwargs = dict(a_Boolean=bool_var, a_String="hi", a_ExtraAmount=0)
405+
self.cursor.setinputsizes(
406+
oracledb.DB_TYPE_BOOLEAN, oracledb.DB_TYPE_VARCHAR
407+
)
408+
results = self.cursor.callfunc(
409+
"func_Test2", oracledb.DB_TYPE_NUMBER, [], kwargs
410+
)
411+
self.assertEqual(results, 2)
412+
413+
# setinputsizes for 2 args and 1 kwargs
414+
bool_var.setvalue(0, False)
415+
self.cursor.setinputsizes(
416+
oracledb.DB_TYPE_BOOLEAN, oracledb.DB_TYPE_NUMBER
417+
)
418+
kwargs = dict(a_Boolean=bool_var)
419+
results = self.cursor.callfunc(
420+
"func_Test2", oracledb.DB_TYPE_NUMBER, ["Bye", 2], kwargs
421+
)
422+
self.assertEqual(results, 1)
423+
424+
# setinputsizes for 2 args (missed 1 args)
425+
bool_var.setvalue(0, False)
426+
self.cursor.setinputsizes(
427+
oracledb.DB_TYPE_BOOLEAN, oracledb.DB_TYPE_NUMBER
428+
)
429+
kwargs = dict(a_Boolean=bool_var)
430+
results = self.cursor.callfunc(
431+
"func_Test2", oracledb.DB_TYPE_NUMBER, ["Light", -1, bool_var]
432+
)
433+
self.assertEqual(results, 6)
434+
435+
def test_4123(self):
436+
"4123 - test executing a procedure with callfunc"
437+
with self.assertRaisesFullCode("ORA-06550"):
438+
self.cursor.callfunc(
439+
"proc_Test2", oracledb.NUMBER, ("hello", 3, False)
440+
)
441+
442+
def test_4124(self):
443+
"4124 - test executing a function with callproc"
444+
with self.assertRaisesFullCode("ORA-06550"):
445+
self.cursor.callproc("func_Test2", ("hello", 5, True))
446+
147447

148448
if __name__ == "__main__":
149449
test_env.run_test_cases()

0 commit comments

Comments
 (0)