Skip to content

Commit 893076d

Browse files
committed
Use adb-free container image, upgrade instanct client dependencies and fix pytest warnings
1 parent 75c00c1 commit 893076d

33 files changed

Lines changed: 139 additions & 53 deletions

.github/scripts/create_new_user.sh

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,14 @@ set -Exeuo pipefail
44

55
# Parameters
66
DB_USER="${1}"
7-
DB_PASSWORD="${2}"
8-
TARGET_PDB="${3:-FREEPDB1}"
7+
ADMIN_PASSWORD="${2}"
8+
DB_PASSWORD="${3}"
99

10-
# Prepare container switch statement to create user in PDB.
11-
ALTER_SESSION_CMD="ALTER SESSION SET CONTAINER=${TARGET_PDB};"
12-
13-
# 11g XE does not support PDBs, set container switch statement to empty string.
14-
ORACLE_VERSION=$(sqlplus -version | grep "Release" | awk '{ print $3 }')
15-
if [[ "${ORACLE_VERSION}" = "11.2"* ]]; then
16-
ALTER_SESSION_CMD="";
17-
fi;
18-
19-
# Create new user in target PDB
20-
sqlplus -s / as sysdba << EOF
10+
# Create the user through the ADB administrator account.
11+
sqlplus -s "admin/${ADMIN_PASSWORD}@localhost:1521/myatp" << EOF
2112
-- Exit on any errors
2213
WHENEVER SQLERROR EXIT SQL.SQLCODE
23-
${ALTER_SESSION_CMD}
24-
CREATE USER ${DB_USER} IDENTIFIED BY "${DB_PASSWORD}" QUOTA UNLIMITED ON SYSTEM;
25-
GRANT DB_DEVELOPER_ROLE TO ${DB_USER};
14+
CREATE USER ${DB_USER} IDENTIFIED BY "${DB_PASSWORD}" QUOTA UNLIMITED ON DATA;
15+
GRANT CONNECT, CONSOLE_DEVELOPER, DWROLE, RESOURCE TO ${DB_USER};
2616
exit;
2717
EOF
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
sudo apt-get update
22
sudo apt-get install wget libaio1t64
33
sudo mkdir -p /opt/oracle
4-
wget https://download.oracle.com/otn_software/linux/instantclient/2370000/instantclient-basiclite-linux.x64-23.7.0.25.01.zip -P /tmp
5-
sudo unzip /tmp/instantclient-basiclite-linux.x64-23.7.0.25.01.zip -d /opt/oracle
6-
export PATH="$PATH:/opt/oracle/instantclient_23_7"
7-
export LD_LIBRARY_PATH="/opt/oracle/instantclient_23_7:$LD_LIBRARY_PATH"
4+
wget https://download.oracle.com/otn_software/linux/instantclient/2326300/instantclient-basiclite-linux.x64-23.26.3.0.0.zip -P /tmp
5+
sudo unzip /tmp/instantclient-basiclite-linux.x64-23.26.3.0.0.zip -d /opt/oracle
6+
export PATH="$PATH:/opt/oracle/instantclient_23_26"
7+
export LD_LIBRARY_PATH="/opt/oracle/instantclient_23_26:$LD_LIBRARY_PATH"
88
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
99
sudo mkdir -p /opt/tns_admin
1010
echo "DISABLE_OOB=ON" >> /opt/tns_admin/sqlnet.ora
11-

.github/workflows/tests.yaml

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,27 @@ jobs:
1616
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
1717

1818
services:
19-
oracle_db:
20-
image: container-registry.oracle.com/database/free:latest-lite
19+
adb:
20+
image: ghcr.io/oracle/adb-free:latest-26ai
2121
env:
22-
ORACLE_PWD: ${{ secrets.DBT_ORACLE_PASSWORD }}
23-
options: --name oracle_db
22+
WORKLOAD_TYPE: ATP
23+
START_ORDS: "False"
24+
ENABLE_ARCHIVE_LOG: "False"
25+
ADMIN_PASSWORD: ${{ secrets.DBT_ORACLE_ADMIN_PASSWORD }}
26+
WALLET_PASSWORD: ${{ secrets.DBT_ORACLE_TEST_WALLET_PASSWORD }}
2427
ports:
2528
- 1521:1521
29+
options: >-
30+
--name adb
31+
--cap-add SYS_ADMIN
32+
--device /dev/fuse
2633
2734
steps:
2835
- name: Check out dbt-oracle repository code
29-
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
36+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
3037

3138
- name: Set up Python ${{ matrix.python-version }}
32-
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
39+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
3340
with:
3441
python-version: ${{ matrix.python-version }}
3542

@@ -38,17 +45,18 @@ jobs:
3845
chmod +x ${{ github.workspace }}/.github/scripts/install_oracle_instantclient.sh
3946
${{ github.workspace }}/.github/scripts/install_oracle_instantclient.sh
4047
41-
- name: Copy Create User script
42-
run: |
43-
chmod +x ${{ github.workspace }}/.github/scripts/create_new_user.sh
44-
docker cp ${{ github.workspace }}/.github/scripts/create_new_user.sh oracle_db:/home/oracle/create_new_user.sh
45-
4648
- name: Create dbt test users
4749
run: |
48-
docker exec oracle_db /home/oracle/create_new_user.sh dbt_test ${{ secrets.DBT_ORACLE_PASSWORD }}
49-
docker exec oracle_db /home/oracle/create_new_user.sh dbt_test_user_1 ${{ secrets.DBT_ORACLE_PASSWORD }}
50-
docker exec oracle_db /home/oracle/create_new_user.sh dbt_test_user_2 ${{ secrets.DBT_ORACLE_PASSWORD }}
51-
docker exec oracle_db /home/oracle/create_new_user.sh dbt_test_user_3 ${{ secrets.DBT_ORACLE_PASSWORD }}
50+
chmod +x ${{ github.workspace }}/.github/scripts/create_new_user.sh
51+
docker cp ${{ github.workspace }}/.github/scripts/create_new_user.sh adb:/tmp/create_new_user.sh
52+
docker exec adb /tmp/create_new_user.sh dbt_test \
53+
'${{ secrets.DBT_ORACLE_ADMIN_PASSWORD }}' '${{ secrets.DBT_ORACLE_PASSWORD }}'
54+
docker exec adb /tmp/create_new_user.sh dbt_test_user_1 \
55+
'${{ secrets.DBT_ORACLE_ADMIN_PASSWORD }}' '${{ secrets.DBT_ORACLE_PASSWORD }}'
56+
docker exec adb /tmp/create_new_user.sh dbt_test_user_2 \
57+
'${{ secrets.DBT_ORACLE_ADMIN_PASSWORD }}' '${{ secrets.DBT_ORACLE_PASSWORD }}'
58+
docker exec adb /tmp/create_new_user.sh dbt_test_user_3 \
59+
'${{ secrets.DBT_ORACLE_ADMIN_PASSWORD }}' '${{ secrets.DBT_ORACLE_PASSWORD }}'
5260
5361
- name: Install dbt-oracle with core dependencies
5462
run: |
@@ -69,10 +77,10 @@ jobs:
6977
DBT_ORACLE_PORT: 1521
7078
DBT_ORACLE_SCHEMA: DBT_TEST
7179
DBT_ORACLE_PASSWORD: ${{ secrets.DBT_ORACLE_PASSWORD }}
72-
DBT_ORACLE_DATABASE: FREEPDB1
73-
DBT_ORACLE_SERVICE: FREEPDB1
80+
DBT_ORACLE_DATABASE: MYATP
81+
DBT_ORACLE_SERVICE: MYATP
7482
DBT_ORACLE_PROTOCOL: tcp
75-
LD_LIBRARY_PATH: /opt/oracle/instantclient_23_7
83+
LD_LIBRARY_PATH: /opt/oracle/instantclient_23_26
7684
TNS_ADMIN: /opt/tns_admin
7785
DBT_TEST_USER_1: DBT_TEST_USER_1
7886
DBT_TEST_USER_2: DBT_TEST_USER_2
@@ -88,8 +96,8 @@ jobs:
8896
DBT_ORACLE_PORT: 1521
8997
DBT_ORACLE_SCHEMA: DBT_TEST
9098
DBT_ORACLE_PASSWORD: ${{ secrets.DBT_ORACLE_PASSWORD }}
91-
DBT_ORACLE_DATABASE: FREEPDB1
92-
DBT_ORACLE_SERVICE: FREEPDB1
99+
DBT_ORACLE_DATABASE: MYATP
100+
DBT_ORACLE_SERVICE: MYATP
93101
DBT_ORACLE_PROTOCOL: tcp
94102
DISABLE_OOB: on
95103
TNS_ADMIN: /opt/tns_admin

tests/functional/adapter/constraints/test_constraints.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ def data_types(self, schema_int_type, int_type, string_type):
8080
class TestOracleTableConstraintsColumnsEqual(OracleColumnsEqualSetup, BaseTableConstraintsColumnsEqual):
8181

8282
@pytest.fixture(scope="class")
83+
@classmethod
8384
def models(self):
8485
return {
8586
"my_model_wrong_order.sql": my_model_wrong_order_sql,
@@ -91,6 +92,7 @@ def models(self):
9192
class TestOracleViewConstraintsColumnsEqual(OracleColumnsEqualSetup, BaseViewConstraintsColumnsEqual):
9293

9394
@pytest.fixture(scope="class")
95+
@classmethod
9496
def models(self):
9597
return {
9698
"my_model_wrong_order.sql": my_model_view_wrong_order_sql,
@@ -102,6 +104,7 @@ def models(self):
102104
class TestOracleIncrementalConstraintsColumnsEqual(OracleColumnsEqualSetup, BaseIncrementalConstraintsColumnsEqual):
103105

104106
@pytest.fixture(scope="class")
107+
@classmethod
105108
def models(self):
106109
return {
107110
"my_model_wrong_order.sql": my_model_incremental_wrong_order_sql,
@@ -113,77 +116,89 @@ def models(self):
113116
class TestOracleTableConstraintsDdlEnforcement(BaseConstraintsRuntimeDdlEnforcement):
114117

115118
@pytest.fixture(scope="class")
119+
@classmethod
116120
def models(self):
117121
return {
118122
"my_model.sql": my_model_wrong_order_sql,
119123
"constraints_schema.yml": model_schema_yml,
120124
}
121125

122126
@pytest.fixture(scope="class")
127+
@classmethod
123128
def expected_sql(self):
124129
return _expected_sql_oracle
125130

126131

127132
class TestOracleIncrementalConstraintsDdlEnforcement(BaseIncrementalConstraintsRuntimeDdlEnforcement):
128133

129134
@pytest.fixture(scope="class")
135+
@classmethod
130136
def models(self):
131137
return {
132138
"my_model.sql": my_model_incremental_wrong_order_sql,
133139
"constraints_schema.yml": model_schema_yml,
134140
}
135141

136142
@pytest.fixture(scope="class")
143+
@classmethod
137144
def expected_sql(self):
138145
return _expected_sql_oracle
139146

140147

141148
class TestOracleTableConstraintsRollback(BaseConstraintsRollback):
142149

143150
@pytest.fixture(scope="class")
151+
@classmethod
144152
def models(self):
145153
return {
146154
"my_model.sql": my_model_sql,
147155
"constraints_schema.yml": model_schema_yml,
148156
}
149157

150158
@pytest.fixture(scope="class")
159+
@classmethod
151160
def null_model_sql(self):
152161
return my_model_with_nulls_sql
153162

154163
@pytest.fixture(scope="class")
164+
@classmethod
155165
def expected_error_messages(self):
156166
return ["ORA-01400: cannot insert NULL into"]
157167

158168

159169
class TestOracleIncrementalConstraintsRollback(BaseIncrementalConstraintsRollback):
160170

161171
@pytest.fixture(scope="class")
172+
@classmethod
162173
def models(self):
163174
return {
164175
"my_model.sql": my_incremental_model_sql,
165176
"constraints_schema.yml": model_schema_yml,
166177
}
167178

168179
@pytest.fixture(scope="class")
180+
@classmethod
169181
def null_model_sql(self):
170182
return my_model_incremental_with_nulls_sql
171183

172184
@pytest.fixture(scope="class")
185+
@classmethod
173186
def expected_error_messages(self):
174187
return ["ORA-01400: cannot insert NULL into"]
175188

176189

177190
class TestOracleModelConstraintsRuntimeEnforcement(BaseModelConstraintsRuntimeEnforcement):
178191

179192
@pytest.fixture(scope="class")
193+
@classmethod
180194
def models(self):
181195
return {
182196
"my_model.sql": my_model_sql,
183197
"constraints_schema.yml": constrained_model_schema_yml,
184198
}
185199

186200
@pytest.fixture(scope="class")
201+
@classmethod
187202
def expected_sql(self):
188203
return """
189204
create table <model_identifier> (

tests/functional/adapter/incremental_materialization/quotes/test_quote_special_characters_and_keywords.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,15 @@
5656
class TestIncrementalMergeQuoteWithKeywordsandSpecialChars:
5757

5858
@pytest.fixture(scope="class")
59+
@classmethod
5960
def seeds(self):
6061
return {
6162
"seed.csv": seed_csv,
6263
"add_new_rows.sql": seeds__add_new_rows_sql
6364
}
6465

6566
@pytest.fixture(scope="class")
67+
@classmethod
6668
def models(self):
6769
return {
6870
"my_incr_model.sql": my_incr_model_sql,
@@ -137,4 +139,3 @@ def test_run_dbt(self, project):
137139
result = project.run_sql(used_id_5_query, fetch="all")
138140
assert result == expected_result
139141

140-

tests/functional/adapter/incremental_materialization/quotes/test_quoted_columns_incremental_insert.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,15 @@
5555
class TestIncrementalInsertQuotedColumnsAllCols:
5656

5757
@pytest.fixture(scope="class")
58+
@classmethod
5859
def seeds(self):
5960
return {
6061
"seed.csv": seed_csv,
6162
"add_new_rows.sql": seeds__add_new_rows_sql
6263
}
6364

6465
@pytest.fixture(scope="class")
66+
@classmethod
6567
def models(self):
6668
return {
6769
"my_incr_model.sql": my_incr_model_sql,
@@ -130,4 +132,3 @@ def test_run_dbt(self, project):
130132
result = project.run_sql(used_id_5_query, fetch="all")
131133
assert result == expected_result
132134

133-

tests/functional/adapter/incremental_materialization/quotes/test_quotes_enabled_in_model.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,20 +77,23 @@
7777
class TestIncrementalMergeQuotedColumnsConfigYml:
7878

7979
@pytest.fixture(scope="class")
80+
@classmethod
8081
def seeds(self):
8182
return {
8283
"seed.csv": seed_csv,
8384
"add_new_rows.sql": seeds__add_new_rows_sql
8485
}
8586

8687
@pytest.fixture(scope="class")
88+
@classmethod
8789
def models(self):
8890
return {
8991
"my_incr_model.sql": my_incr_model_sql,
9092
"schema.yml": model_yml
9193
}
9294

9395
@pytest.fixture(scope="class")
96+
@classmethod
9497
def project_config_update(self):
9598
return {
9699
"seeds": {
@@ -143,4 +146,3 @@ def test_run_dbt(self, project):
143146
result = project.run_sql(used_id_5_query, fetch="all")
144147
assert result == expected_result
145148

146-

tests/functional/adapter/incremental_materialization/sync_schema/test_quote_special_characters_and_keywords.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
class TestSyncSchemaIncrementalMergeQuotedColumns:
7171

7272
@pytest.fixture(scope="class")
73+
@classmethod
7374
def seeds(self):
7475
return {
7576
"seed.csv": seed_csv,
@@ -79,6 +80,7 @@ def seeds(self):
7980
}
8081

8182
@pytest.fixture(scope="class")
83+
@classmethod
8284
def models(self):
8385
return {
8486
"my_incr_model.sql": my_incr_model_sql,
@@ -157,4 +159,3 @@ def test_run_dbt(self, project):
157159
result = project.run_sql(used_id_5_query, fetch="all")
158160
assert result == expected_result
159161

160-

tests/functional/adapter/incremental_materialization/test_incremental_microbatch.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
class TestMicrobatch(BaseMicrobatch):
2323
@pytest.fixture(scope="class")
24+
@classmethod
2425
def input_model_sql(self) -> str:
2526
return """
2627
{{ config(materialized='table', event_time='event_time') }}
@@ -32,6 +33,7 @@ def input_model_sql(self) -> str:
3233
"""
3334

3435
@pytest.fixture(scope="class")
36+
@classmethod
3537
def insert_two_rows_sql(self, project) -> str:
3638
test_schema_relation = project.adapter.Relation.create(
3739
database=project.database, schema=project.test_schema

tests/functional/adapter/incremental_materialization/test_incremental_predicates.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@
4545
class TestIncrementalPredicatesMergeOracle(BaseIncrementalPredicates):
4646

4747
@pytest.fixture(scope="class")
48+
@classmethod
4849
def models(self):
4950
return {
5051
"delete_insert_incremental_predicates.sql": models__delete_insert_incremental_predicates_sql
5152
}
5253

5354
@pytest.fixture(scope="class")
55+
@classmethod
5456
def project_config_update(self):
5557
return {
5658
"models": {
@@ -65,12 +67,14 @@ def project_config_update(self):
6567
class TestPredicatesMergeOracle(BaseIncrementalPredicates):
6668

6769
@pytest.fixture(scope="class")
70+
@classmethod
6871
def models(self):
6972
return {
7073
"delete_insert_incremental_predicates.sql": models__delete_insert_incremental_predicates_sql
7174
}
7275

7376
@pytest.fixture(scope="class")
77+
@classmethod
7478
def project_config_update(self):
7579
return {
7680
"models": {

0 commit comments

Comments
 (0)