@@ -697,19 +697,33 @@ create or replace package body test_ut_run is
697697 execute immediate q'[drop package empty_suite]';
698698 end;
699699
700- procedure create_test_suite is
700+ procedure create_db_link is
701701 l_service_name varchar2(100);
702702 pragma autonomous_transaction;
703703 begin
704704 select global_name into l_service_name from global_name;
705705 execute immediate
706- 'create public database link db_loopback connect to ut3_tester identified by ut3
707- using ''(DESCRIPTION=
708- (ADDRESS=(PROTOCOL=TCP)
709- (HOST='||sys_context('userenv','SERVER_HOST')||')
706+ 'create public database link db_loopback connect to ut3_tester identified by ut3
707+ using ''(DESCRIPTION=
708+ (ADDRESS=(PROTOCOL=TCP)
709+ (HOST='||sys_context('userenv','SERVER_HOST')||')
710710 (PORT=1521)
711711 )
712712 (CONNECT_DATA=(SERVICE_NAME='||l_service_name||')))''';
713+ end;
714+
715+ procedure drop_db_link is
716+ begin
717+ execute immediate 'drop public database link db_loopback';
718+ exception
719+ when others then
720+ null;
721+ end;
722+
723+ procedure create_test_suite is
724+ pragma autonomous_transaction;
725+ begin
726+ create_db_link;
713727 execute immediate q'[
714728 create or replace package stateful_package as
715729 function get_state return varchar2;
@@ -796,7 +810,7 @@ Failures:%
796810 begin
797811 execute immediate 'drop package stateful_package';
798812 execute immediate 'drop package test_stateful';
799- begin execute immediate 'drop public database link db_loopback'; exception when others then null; end ;
813+ drop_db_link ;
800814 end;
801815
802816 procedure run_in_invalid_state is
@@ -942,5 +956,60 @@ Failures:%
942956 begin
943957 execute immediate 'drop package bad_annotations';
944958 end;
959+
960+ procedure savepoints_on_db_links is
961+ l_results clob;
962+ begin
963+ ut3.ut.run('test_distributed_savepoint');
964+ l_results := core.get_dbms_output_as_clob();
965+ ut.expect(l_results).to_be_like('%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%');
966+ end;
967+
968+ procedure create_suite_with_link is
969+ pragma autonomous_transaction;
970+ begin
971+ create_db_link;
972+ execute immediate 'create table tst(id number(18,0))';
973+ execute immediate q'[
974+ create or replace package test_distributed_savepoint is
975+ --%suite
976+ --%suitepath(alltests)
977+
978+ --%beforeall
979+ procedure setup;
980+
981+ --%test
982+ procedure test;
983+ end;]';
984+
985+ execute immediate q'[
986+ create or replace package body test_distributed_savepoint is
987+
988+ g_expected constant integer := 1;
989+
990+ procedure setup is
991+ begin
992+ insert into tst@db_loopback values(g_expected);
993+ end;
994+
995+ procedure test is
996+ l_actual integer := 0;
997+ begin
998+ select id into l_actual from tst@db_loopback;
999+
1000+ ut.expect(l_actual).to_equal(g_expected);
1001+ end;
1002+
1003+ end;]';
1004+ end;
1005+
1006+ procedure drop_suite_with_link is
1007+ pragma autonomous_transaction;
1008+ begin
1009+ execute immediate 'drop table tst';
1010+ execute immediate 'drop package test_distributed_savepoint';
1011+ drop_db_link;
1012+ end;
1013+
9451014end;
9461015/
0 commit comments