()
| 576 | |
| 577 | #[test] |
| 578 | fn test_privilege_functions() { |
| 579 | let conn = Connection::open_in_memory().unwrap(); |
| 580 | register_system_functions(&conn).unwrap(); |
| 581 | |
| 582 | // Test pg_has_role - 2 parameter version (current user) |
| 583 | let has_role_2p: i32 = conn.query_row( |
| 584 | "SELECT pg_has_role('pg_read_all_data', 'USAGE')", |
| 585 | [], |
| 586 | |row| row.get(0) |
| 587 | ).unwrap(); |
| 588 | assert_eq!(has_role_2p, 1); // true |
| 589 | |
| 590 | // Test pg_has_role - 3 parameter version |
| 591 | let has_role_3p: i32 = conn.query_row( |
| 592 | "SELECT pg_has_role('postgres', 'pg_read_all_data', 'USAGE')", |
| 593 | [], |
| 594 | |row| row.get(0) |
| 595 | ).unwrap(); |
| 596 | assert_eq!(has_role_3p, 1); // true |
| 597 | |
| 598 | // Test pg_has_role - security-sensitive role should return false |
| 599 | let has_sensitive_role: i32 = conn.query_row( |
| 600 | "SELECT pg_has_role('pg_read_server_files', 'USAGE')", |
| 601 | [], |
| 602 | |row| row.get(0) |
| 603 | ).unwrap(); |
| 604 | assert_eq!(has_sensitive_role, 0); // false |
| 605 | |
| 606 | // Test has_database_privilege |
| 607 | let has_db_priv: i32 = conn.query_row( |
| 608 | "SELECT has_database_privilege('postgres', 'main', 'CREATE')", |
| 609 | [], |
| 610 | |row| row.get(0) |
| 611 | ).unwrap(); |
| 612 | assert_eq!(has_db_priv, 1); // true |
| 613 | |
| 614 | // Test has_schema_privilege |
| 615 | let has_schema_priv: i32 = conn.query_row( |
| 616 | "SELECT has_schema_privilege('postgres', 'public', 'CREATE')", |
| 617 | [], |
| 618 | |row| row.get(0) |
| 619 | ).unwrap(); |
| 620 | assert_eq!(has_schema_priv, 1); // true |
| 621 | |
| 622 | // Test has_table_privilege - 2 parameter version (current user) |
| 623 | let has_table_priv_2p: i32 = conn.query_row( |
| 624 | "SELECT has_table_privilege('pg_class', 'SELECT')", |
| 625 | [], |
| 626 | |row| row.get(0) |
| 627 | ).unwrap(); |
| 628 | assert_eq!(has_table_priv_2p, 1); // true - can read system catalogs |
| 629 | |
| 630 | // Test has_table_privilege - 3 parameter version |
| 631 | let has_table_priv_3p: i32 = conn.query_row( |
| 632 | "SELECT has_table_privilege('postgres', 'pg_class', 'SELECT')", |
| 633 | [], |
| 634 | |row| row.get(0) |
| 635 | ).unwrap(); |
nothing calls this directly
no test coverage detected