Skip to content

[DPE-7520] Test that the charmed_read role cannot write data #945

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 74 commits into from
Jun 13, 2025
Merged
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
e1a14e0
Implement instance level predefined roles
shayancanonical May 6, 2025
23c1ea0
Merge branch '16/edge' into feature/16_predefined_instance_roles
shayancanonical May 6, 2025
a5c6442
Fix minor bug introduced while rebasing off of 16/edge
shayancanonical May 6, 2025
09c4a71
Add integration test for charmed_read and charmed_dml roles
shayancanonical May 6, 2025
d778bba
Revert all major changes except introduction of predefined roles
shayancanonical May 7, 2025
873132e
Sweep diff and minor bug fixes
shayancanonical May 7, 2025
0dc8d3d
Avoid creating set_user extension
shayancanonical May 7, 2025
1764971
Merge branch '16/edge' into feature/16_predefined_instance_roles
shayancanonical May 7, 2025
fead5cd
Port Carl's fix for broken unit tests
shayancanonical May 7, 2025
2c0f822
Merge branch '16/edge' into feature/16_predefined_instance_roles
shayancanonical May 7, 2025
c848782
Merge branch '16/edge' into feature/16_predefined_instance_roles
shayancanonical May 28, 2025
e49e999
Create set_up_predefined_catalog_roles_function
marceloneppel May 29, 2025
5724320
Fix linting and run function on database creation
marceloneppel May 29, 2025
8da9ab5
Add login hook function
marceloneppel May 29, 2025
e4bc8d2
Escalate relation users
marceloneppel May 29, 2025
8094e4f
Merge branch '16/edge' into feature/16_predefined_instance_roles
shayancanonical May 30, 2025
2f204a9
Add integration test
marceloneppel May 30, 2025
0dd22ed
Fix unit test
marceloneppel May 30, 2025
d453455
Merge remote-tracking branch 'origin/feature/16_predefined_instance_r…
marceloneppel May 30, 2025
2fc6e5c
Check for no write permissions for relation user
marceloneppel May 30, 2025
fea0148
Don't set up catalog roles if they already exist
marceloneppel May 30, 2025
1c5a911
Test database creation permission
marceloneppel May 30, 2025
6a083c5
Improve logs and move cleanup process to the beginning of the test
marceloneppel Jun 2, 2025
16d6783
Wait for relation to be removed and retrieve primary
marceloneppel Jun 2, 2025
fe5ce8f
Handle re-relation
marceloneppel Jun 2, 2025
43493d4
Add test for removing and re-adding relation
marceloneppel Jun 2, 2025
1005f7e
Test roles after database re-creation
marceloneppel Jun 2, 2025
c526616
Test table creation failure for charmed_databases_owner user
marceloneppel Jun 2, 2025
5de77d0
Deduplicate relations retrieval code
marceloneppel Jun 2, 2025
ff5dd37
Check that the relation user can escalate to the database owner user …
marceloneppel Jun 2, 2025
1d170ff
Check escalation back to charmed_databases_owner
marceloneppel Jun 3, 2025
44beefa
Test permissions on newly created database
marceloneppel Jun 3, 2025
883c4ba
Check database owner user permissions in the newly created database
marceloneppel Jun 3, 2025
4eb981b
Reduce duplicated code with check_connected_user helper function
marceloneppel Jun 3, 2025
8b85257
Reduce more duplicated code with check_connected_user helper function
marceloneppel Jun 3, 2025
e669da3
Bump library
marceloneppel Jun 3, 2025
17e7e4a
Fix test_charmed_read_role
marceloneppel Jun 3, 2025
f1d3293
Remove admin and postgres roles
marceloneppel Jun 3, 2025
3aba882
Create DBA role
marceloneppel Jun 4, 2025
e16567d
Bump postgresql charm lib for 16/edge to v1 due to backwards incompat…
shayancanonical Jun 4, 2025
2c15212
Remove admin role test
marceloneppel Jun 4, 2025
f711479
Add DBA user test
marceloneppel Jun 4, 2025
1fed145
Test DBA role in replica
marceloneppel Jun 4, 2025
c8efa82
Grant reset_user function to DBA role
marceloneppel Jun 4, 2025
6cd2a85
Test set_user function for unprivileged users
marceloneppel Jun 4, 2025
e42e220
Reduce duplicate code in check_connected_user helper function
marceloneppel Jun 4, 2025
fbebe06
Merge remote-tracking branch 'origin/feature/16_predefined_instance_r…
marceloneppel Jun 4, 2025
3ae3885
Merge remote-tracking branch 'origin/feature/16_predefined_dba_role' …
marceloneppel Jun 4, 2025
fb566b5
Merge remote-tracking branch 'origin/feature/16_predefined_roles_clea…
marceloneppel Jun 4, 2025
5f2328e
Fix charmed_databases_owner permissions
marceloneppel Jun 4, 2025
3deb576
Fix test_charmed_dba_role
marceloneppel Jun 4, 2025
c78e2ff
Merge branch '16/edge' into feature/16_predefined_instance_roles
shayancanonical Jun 5, 2025
526bf2d
Re-add mistakenly removed patch statements
shayancanonical Jun 5, 2025
fd41021
Merge remote-tracking branch 'origin/feature/16_predefined_instance_r…
marceloneppel Jun 5, 2025
fa1efa7
Merge remote-tracking branch 'origin/feature/16_predefined_dba_role' …
marceloneppel Jun 5, 2025
4084579
Merge remote-tracking branch 'origin/feature/16_predefined_roles_clea…
marceloneppel Jun 5, 2025
f3eceba
Merge remote-tracking branch 'origin/16/edge' into feature/16_predefi…
marceloneppel Jun 5, 2025
9721e91
Merge remote-tracking branch 'origin/feature/16_predefined_dba_role' …
marceloneppel Jun 5, 2025
7f98938
Merge remote-tracking branch 'origin/feature/16_predefined_roles_clea…
marceloneppel Jun 5, 2025
40c2051
Merge remote-tracking branch 'origin/16/edge' into feature/16_predefi…
marceloneppel Jun 6, 2025
d121c1f
Merge remote-tracking branch 'origin/feature/16_predefined_dba_role' …
marceloneppel Jun 6, 2025
71fb74f
Merge remote-tracking branch 'origin/feature/16_predefined_roles_clea…
marceloneppel Jun 6, 2025
dc5b01e
Reset connection to None before creating a new connection
marceloneppel Jun 6, 2025
262dc2b
Merge remote-tracking branch 'origin/feature/16_predefined_dba_role' …
marceloneppel Jun 6, 2025
0848dcf
Remove irrelevant test and increase timeout
marceloneppel Jun 6, 2025
32f4f56
Merge remote-tracking branch 'origin/feature/16_predefined_roles_clea…
marceloneppel Jun 6, 2025
24605d9
Merge remote-tracking branch 'origin/16/edge' into feature/16_predefi…
marceloneppel Jun 7, 2025
4f2f0e2
Merge remote-tracking branch 'origin/feature/16_predefined_roles_clea…
marceloneppel Jun 7, 2025
32663cb
Merge remote-tracking branch 'origin/16/edge' into feature/16_predefi…
marceloneppel Jun 8, 2025
71feb7b
Test that the charmed_read role cannot write data
marceloneppel Jun 9, 2025
c4b1386
Merge remote-tracking branch 'origin/16/edge' into test-charmed-read-…
marceloneppel Jun 9, 2025
99f498c
Add check for charmed_read role not being able to write data to an ex…
marceloneppel Jun 11, 2025
5be6d94
Fix data used to perform insert
marceloneppel Jun 11, 2025
d67738f
Merge remote-tracking branch 'origin/16/edge' into test-charmed-read-…
marceloneppel Jun 13, 2025
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
14 changes: 14 additions & 0 deletions tests/integration/test_predefined_roles.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ async def test_charmed_read_role(ops_test: OpsTest):
connection.autocommit = True

with connection.cursor() as cursor:
logger.info("Checking that the charmed_read role can read from the database")
cursor.execute("RESET ROLE;")
cursor.execute(
"SELECT table_name FROM information_schema.tables WHERE table_name NOT LIKE 'pg_%' AND table_name NOT LIKE 'sql_%' AND table_type <> 'VIEW';"
Expand All @@ -118,6 +119,19 @@ async def test_charmed_read_role(ops_test: OpsTest):
assert data == sorted(["test_data", "test_data_2"]), (
"Unexpected data in charmed_read_database with charmed_read role"
)
logger.info("Checking that the charmed_read role cannot create a new table")
with pytest.raises(psycopg2.errors.InsufficientPrivilege):
cursor.execute("CREATE TABLE test_table_2 (id INTEGER);")
connection.close()

with psycopg2.connect(connection_string) as connection, connection.cursor() as cursor:
logger.info("Checking that the charmed_read role cannot write to an existing table")
cursor.execute("RESET ROLE;")
with pytest.raises(psycopg2.errors.InsufficientPrivilege):
cursor.execute(
"INSERT INTO test_table (data) VALUES ('test_data_3'), ('test_data_4');"
)
connection.close()

await ops_test.model.applications[DATABASE_APP_NAME].remove_relation(
f"{DATABASE_APP_NAME}:database", f"{DATA_INTEGRATOR_APP_NAME}:postgresql"
Expand Down
Loading