Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ env:
- ORACLE_VERSION="${DOCKER_TAG_11G:-11g-r2-xe}" CONNECTION_STR='127.0.0.1:1521/XE' DOCKER_OPTIONS='--shm-size=1g'
- ORACLE_VERSION="${DOCKER_TAG_12C:-12c-r1-se2}" CONNECTION_STR='127.0.0.1:1521/ORCLPDB1' DOCKER_OPTIONS="-v /dev/pdbs:/opt/oracle/oradata/pdbs"
- ORACLE_VERSION="${DOCKER_TAG_12C2:-12c-r2-se2}" CONNECTION_STR='127.0.0.1:1521/ORCLPDB1' DOCKER_OPTIONS="-v /dev/pdbs:/opt/oracle/oradata/pdbs"
- ORACLE_VERSION="${DOCKER_TAG_18:-18c-se2}" CONNECTION_STR='127.0.0.1:1521/ORCLPDB1' DOCKER_OPTIONS="-v /dev/pdbs:/opt/oracle/oradata/pdbs"

cache:
pip: true
Expand Down
1 change: 1 addition & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ We are using private docker images to test utPLSQL for our Travis CI builds. The
* 11g XE R2
* 12c SE R1
* 12c SE R2
* 18c SE

These images are based on the slimmed versions [official dockerfiles released by Oracle](https://github.com/utPLSQL/docker-scripts), but due to licensing restrictions, we can't make the images public.
You can build your own and use it locally, or push to a private docker repository.
Expand Down
8 changes: 8 additions & 0 deletions docs/userguide/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,14 @@ foreach ($i in $urlList) {
}
```

# Supported database versions

The utPLSQL may be installed on any supported version of Oracle Database [see](http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf#page=6)
* 11g R2
* 12c
* 12c R2
* 18c

# Headless installation

To install the utPLSQL into a new database schema and grant it to public, execute the script `install_headless.sql` as SYSDBA.
Expand Down
2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ If you have a great feature in mind, that you would like to see in utPLSQL v3 pl
| Auto Compilation of Tests | Yes | No (Let us know if you use this) |
| Assertion Library | 30 assertions<sup>2</sup> | 26 matchers (13 + 13 negated) |
| Extendable assertions | No | Yes - custom matchers |
| PLSQL Record Assertions | generated code through **utRecEq** Package | [possible on Oracle 12c](https://oracle-base.com/articles/12c/using-the-table-operator-with-locally-defined-types-in-plsql-12cr1) using [cursor matchers](docs/userguide/expectations.md#comparing-cursors)|
| PLSQL Record Assertions | generated code through **utRecEq** Package | [possible on Oracle 12c+](https://oracle-base.com/articles/12c/using-the-table-operator-with-locally-defined-types-in-plsql-12cr1) using [cursor matchers](docs/userguide/expectations.md#comparing-cursors)|
| Test Skeleton Generation | Yes | No (Let us know if you use this) |
| **Test Execution<sup>3</sup>** | | |
| Single Test Package Execution | Yes | Yes |
Expand Down
68 changes: 34 additions & 34 deletions test/api/test_ut_run.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -514,11 +514,27 @@ create or replace package body test_ut_run is
end;

procedure create_test_suite is
l_service_name varchar2(100);
pragma autonomous_transaction;
begin
select global_name into l_service_name from global_name;
execute immediate
'create public database link db_loopback connect to ut3_tester identified by ut3
using ''(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)
(HOST='||sys_context('userenv','SERVER_HOST')||')
(PORT=1521)
)
(CONNECT_DATA=(SERVICE_NAME='||l_service_name||')))''';
execute immediate q'[
create or replace package stateful_package as
function get_state return varchar2;
end;
]';
execute immediate q'[
create or replace package body stateful_package as
g_state varchar2(1) := 'A';
function get_state return varchar2 is begin return g_state; end;
end;
]';
execute immediate q'[
Expand All @@ -527,11 +543,11 @@ create or replace package body test_ut_run is
--%suitepath(test_state)

--%test
--%beforetest(acquire_state,recompile_in_background)
--%beforetest(acquire_state_via_db_link,rebuild_stateful_package)
procedure failing_stateful_test;

procedure recompile_in_background;
procedure acquire_state;
procedure rebuild_stateful_package;
procedure acquire_state_via_db_link;

end;
]';
Expand All @@ -540,39 +556,23 @@ create or replace package body test_ut_run is

procedure failing_stateful_test is
begin
ut3.ut.expect(stateful_package.g_state).to_equal('abc');
ut3.ut.expect(stateful_package.get_state@db_loopback).to_equal('abc');
end;

procedure recompile_in_background is
l_job_name varchar2(30) := 'recreate_stateful_package';
l_cnt integer := 1;
procedure rebuild_stateful_package is
pragma autonomous_transaction;
begin
dbms_scheduler.create_job(
job_name => l_job_name,
job_type => 'PLSQL_BLOCK',
job_action => q'/
begin
execute immediate q'[
create or replace package stateful_package as
g_state varchar2(3) := 'abc';
end;]';
end;/',
start_date => localtimestamp,
enabled => TRUE,
auto_drop => TRUE,
comments => 'one-time job'
);
dbms_lock.sleep(1);
while l_cnt > 0 loop
select count(1) into l_cnt
from dba_scheduler_running_jobs srj
where srj.job_name = l_job_name;
end loop;
execute immediate q'[
create or replace package body stateful_package as
g_state varchar2(3) := 'abc';
function get_state return varchar2 is begin return g_state; end;
end;
]';
end;
procedure acquire_state is

procedure acquire_state_via_db_link is
begin
dbms_output.put_line('stateful_package.g_state='||stateful_package.g_state);
dbms_output.put_line('stateful_package.get_state@db_loopback='||stateful_package.get_state@db_loopback);
end;
end;
}';
Expand All @@ -589,10 +589,9 @@ create or replace package body test_ut_run is
failing_stateful_test [% sec] (FAILED - 1)%
Failures:%
1) failing_stateful_test
ORA-04061: existing state of package "UT3_TESTER.STATEFUL_PACKAGE" has been invalidated
ORA-04065: not executed, altered or dropped package "UT3_TESTER.STATEFUL_PACKAGE"
ORA-06508: PL/SQL: could not find program unit being called: "UT3_TESTER.STATEFUL_PACKAGE"
ORA-06512: at "UT3_TESTER.TEST_STATEFUL", line 5%
ORA-04068: existing state of packages (DB_LOOPBACK) has been discarded
ORA-04061: existing state of package body "UT3_TESTER.STATEFUL_PACKAGE" has been invalidated
ORA-04065: not executed, altered or dropped package body "UT3_TESTER.STATEFUL_PACKAGE"%
ORA-06512: at line 6%
1 tests, 0 failed, 1 errored, 0 disabled, 0 warning(s)%';

Expand All @@ -613,6 +612,7 @@ Failures:%
begin
execute immediate 'drop package stateful_package';
execute immediate 'drop package test_stateful';
begin execute immediate 'drop public database link db_loopback'; exception when others then null; end;
end;

procedure run_in_invalid_state is
Expand Down
1 change: 1 addition & 0 deletions test/api/test_ut_run.pks
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ create or replace package test_ut_run is
--%test(Executes successfully an empty suite)
procedure run_func_empty_suite;

--disabled(Makes session wait for lock on 18.1 due to library cache pin wait)
--%test(ut.run - raises after completing all tests if a test fails with ORA-04068 or ORA-04061)
--%beforetest(create_test_suite)
--%aftertest(drop_test_suite)
Expand Down
58 changes: 0 additions & 58 deletions test/core/test_ut_executable.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -50,32 +50,6 @@ create or replace package body test_ut_executable is
ut.expect(l_executable.get_error_stack_trace()).to_be_like('ORA-06501: PL/SQL: program error%');
end;

procedure create_state_dependant_pkg is
pragma autonomous_transaction;
begin
execute immediate q'[
create or replace package stateful_package as
g_state varchar2(1) := 'A';
end;
]';
execute immediate q'[
create or replace package state_dependant_pkg as
procedure run;
end;
]';
execute immediate q'[
create or replace package body state_dependant_pkg as
procedure run is
x varchar2(30);
begin
if stateful_package.g_state = 'A' then
dbms_output.put_line('stateful_package.g_state = "A"');
end if;
end;
end;
]';
end;

procedure modify_stateful_package is
l_job_name varchar2(30) := 'recreate_stateful_package';
l_cnt integer := 1;
Expand Down Expand Up @@ -104,38 +78,6 @@ create or replace package body test_ut_executable is
end loop;
end;

procedure drop_state_dependant_pkg is
pragma autonomous_transaction;
begin
execute immediate 'drop package state_dependant_pkg';
execute immediate 'drop package stateful_package';
end;


procedure exec_invalid_state_proc is
l_executable ut3.ut_executable;
l_test ut3.ut_test;
l_result boolean;
begin
--Arrange
l_test := ut3.ut_test(a_object_name => 'state_dependant_pkg',a_name => 'state_dependant_pkg');
l_executable := ut3.ut_executable_test( user, 'state_dependant_pkg', 'run', ut3.ut_utils.gc_test_execute );
l_result := l_executable.do_execute(l_test);
ut.expect(l_result).to_be_true;

modify_stateful_package;

l_test := ut3.ut_test(a_object_name => 'state_dependant_pkg',a_name => 'state_dependant_pkg');
l_executable := ut3.ut_executable_test( user, 'state_dependant_pkg', 'run', ut3.ut_utils.gc_test_execute );
--Act
l_result := l_executable.do_execute(l_test);
--Assert
ut.expect(l_result).to_be_false;
ut.expect(l_executable.serveroutput).to_be_null;
ut.expect(l_executable.get_error_stack_trace()).to_be_like('ORA-04061: existing state of package "UT3_TESTER.STATEFUL_PACKAGE" has been invalidated%');
ut.expect(ut3.ut_expectation_processor.invalidation_exception_found()).to_be_true;
end;

procedure form_name is
begin
ut.expect(ut3.ut_executable_test( user, 'package', 'proc', null ).form_name()).to_equal(user||'.package.proc');
Expand Down
8 changes: 0 additions & 8 deletions test/core/test_ut_executable.pks
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,6 @@ create or replace package test_ut_executable is
--%test(Executes a procedure raising exception, saves dbms_output and exception stack trace)
procedure exec_failing_proc;

--%test(Sets state invalid flag when package-state invalidated and saves exception stack trace)
--%beforetest(create_state_dependant_pkg)
--%aftertest(drop_state_dependant_pkg)
procedure exec_invalid_state_proc;

procedure create_state_dependant_pkg;
procedure drop_state_dependant_pkg;

--%endcontext

--%context(form_name)
Expand Down