feat: Add PostgreSQL and Redis client support
- Add PostgreSQL client functionality for database interactions. - Add Redis client functionality for cache and data store operations. - Extend Rhai scripting with PostgreSQL and Redis client modules. - Add documentation and test cases for both clients.
This commit is contained in:
		@@ -17,6 +17,8 @@ SAL exposes the following modules to Rhai scripts:
 | 
			
		||||
- Buildah Module: Container image building
 | 
			
		||||
- Nerdctl Module: Container runtime operations
 | 
			
		||||
- RFS Module: Remote file system operations
 | 
			
		||||
- Redis Client Module: Redis database connection and operations
 | 
			
		||||
- PostgreSQL Client Module: PostgreSQL database connection and operations
 | 
			
		||||
 | 
			
		||||
## Running Rhai Scripts
 | 
			
		||||
 | 
			
		||||
@@ -34,6 +36,7 @@ SAL includes test scripts for verifying the functionality of its Rhai integratio
 | 
			
		||||
- [Git Module Tests](git_module_tests.md): Tests for Git repository management and operations
 | 
			
		||||
- [Process Module Tests](process_module_tests.md): Tests for command execution and process management
 | 
			
		||||
- [Redis Client Module Tests](redisclient_module_tests.md): Tests for Redis connection and operations
 | 
			
		||||
- [PostgreSQL Client Module Tests](postgresclient_module_tests.md): Tests for PostgreSQL connection and operations
 | 
			
		||||
- [Text Module Tests](text_module_tests.md): Tests for text manipulation, normalization, replacement, and template rendering
 | 
			
		||||
- [Buildah Module Tests](buildah_module_tests.md): Tests for container and image operations
 | 
			
		||||
- [Nerdctl Module Tests](nerdctl_module_tests.md): Tests for container and image operations using nerdctl
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										114
									
								
								docs/rhai/postgresclient_module_tests.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								docs/rhai/postgresclient_module_tests.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
# PostgreSQL Client Module Tests
 | 
			
		||||
 | 
			
		||||
The PostgreSQL client module provides functions for connecting to and interacting with PostgreSQL databases. These tests verify the functionality of the module.
 | 
			
		||||
 | 
			
		||||
## PostgreSQL Client Features
 | 
			
		||||
 | 
			
		||||
The PostgreSQL client module provides the following features:
 | 
			
		||||
 | 
			
		||||
1. **Basic PostgreSQL Operations**: Execute queries, fetch results, etc.
 | 
			
		||||
2. **Connection Management**: Automatic connection handling and reconnection
 | 
			
		||||
3. **Builder Pattern for Configuration**: Flexible configuration with authentication support
 | 
			
		||||
 | 
			
		||||
## Prerequisites
 | 
			
		||||
 | 
			
		||||
- PostgreSQL server must be running and accessible
 | 
			
		||||
- Environment variables should be set for connection details:
 | 
			
		||||
  - `POSTGRES_HOST`: PostgreSQL server host (default: localhost)
 | 
			
		||||
  - `POSTGRES_PORT`: PostgreSQL server port (default: 5432)
 | 
			
		||||
  - `POSTGRES_USER`: PostgreSQL username (default: postgres)
 | 
			
		||||
  - `POSTGRES_PASSWORD`: PostgreSQL password
 | 
			
		||||
  - `POSTGRES_DB`: PostgreSQL database name (default: postgres)
 | 
			
		||||
 | 
			
		||||
## Test Files
 | 
			
		||||
 | 
			
		||||
### 01_postgres_connection.rhai
 | 
			
		||||
 | 
			
		||||
Tests basic PostgreSQL connection and operations:
 | 
			
		||||
 | 
			
		||||
- Connecting to PostgreSQL
 | 
			
		||||
- Pinging the server
 | 
			
		||||
- Creating a table
 | 
			
		||||
- Inserting data
 | 
			
		||||
- Querying data
 | 
			
		||||
- Dropping a table
 | 
			
		||||
- Resetting the connection
 | 
			
		||||
 | 
			
		||||
### run_all_tests.rhai
 | 
			
		||||
 | 
			
		||||
Runs all PostgreSQL client module tests and provides a summary of the results.
 | 
			
		||||
 | 
			
		||||
## Running the Tests
 | 
			
		||||
 | 
			
		||||
You can run the tests using the `herodo` command:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
herodo --path src/rhai_tests/postgresclient/run_all_tests.rhai
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Or run individual tests:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
herodo --path src/rhai_tests/postgresclient/01_postgres_connection.rhai
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Available Functions
 | 
			
		||||
 | 
			
		||||
### Connection Functions
 | 
			
		||||
 | 
			
		||||
- `pg_connect()`: Connect to PostgreSQL using environment variables
 | 
			
		||||
- `pg_ping()`: Ping the PostgreSQL server to check if it's available
 | 
			
		||||
- `pg_reset()`: Reset the PostgreSQL client connection
 | 
			
		||||
 | 
			
		||||
### Query Functions
 | 
			
		||||
 | 
			
		||||
- `pg_execute(query)`: Execute a query and return the number of affected rows
 | 
			
		||||
- `pg_query(query)`: Execute a query and return the results as an array of maps
 | 
			
		||||
- `pg_query_one(query)`: Execute a query and return a single row as a map
 | 
			
		||||
 | 
			
		||||
## Authentication Support
 | 
			
		||||
 | 
			
		||||
The PostgreSQL client module will support authentication using the builder pattern in a future update.
 | 
			
		||||
 | 
			
		||||
The backend implementation is ready, but the Rhai bindings are still in development.
 | 
			
		||||
 | 
			
		||||
When implemented, the builder pattern will support the following configuration options:
 | 
			
		||||
 | 
			
		||||
- Host: Set the PostgreSQL host
 | 
			
		||||
- Port: Set the PostgreSQL port
 | 
			
		||||
- User: Set the PostgreSQL username
 | 
			
		||||
- Password: Set the PostgreSQL password
 | 
			
		||||
- Database: Set the PostgreSQL database name
 | 
			
		||||
- Application name: Set the application name
 | 
			
		||||
- Connection timeout: Set the connection timeout in seconds
 | 
			
		||||
- SSL mode: Set the SSL mode
 | 
			
		||||
 | 
			
		||||
## Example Usage
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
// Connect to PostgreSQL
 | 
			
		||||
if (pg_connect()) {
 | 
			
		||||
    print("Connected to PostgreSQL!");
 | 
			
		||||
 | 
			
		||||
    // Create a table
 | 
			
		||||
    let create_table_query = "CREATE TABLE IF NOT EXISTS test_table (id SERIAL PRIMARY KEY, name TEXT)";
 | 
			
		||||
    pg_execute(create_table_query);
 | 
			
		||||
 | 
			
		||||
    // Insert data
 | 
			
		||||
    let insert_query = "INSERT INTO test_table (name) VALUES ('test')";
 | 
			
		||||
    pg_execute(insert_query);
 | 
			
		||||
 | 
			
		||||
    // Query data
 | 
			
		||||
    let select_query = "SELECT * FROM test_table";
 | 
			
		||||
    let results = pg_query(select_query);
 | 
			
		||||
 | 
			
		||||
    // Process results
 | 
			
		||||
    for (result in results) {
 | 
			
		||||
        print(`ID: ${result.id}, Name: ${result.name}`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Clean up
 | 
			
		||||
    let drop_query = "DROP TABLE test_table";
 | 
			
		||||
    pg_execute(drop_query);
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
@@ -2,6 +2,16 @@
 | 
			
		||||
 | 
			
		||||
This document describes the test scripts for the Redis client module in the SAL library. These tests verify the functionality of the Redis client module's connection management and Redis operations.
 | 
			
		||||
 | 
			
		||||
## Redis Client Features
 | 
			
		||||
 | 
			
		||||
The Redis client module provides the following features:
 | 
			
		||||
 | 
			
		||||
1. **Basic Redis Operations**: SET, GET, DEL, etc.
 | 
			
		||||
2. **Hash Operations**: HSET, HGET, HGETALL, HDEL
 | 
			
		||||
3. **List Operations**: RPUSH, LPUSH, LLEN, LRANGE
 | 
			
		||||
4. **Connection Management**: Automatic connection handling and reconnection
 | 
			
		||||
5. **Builder Pattern for Configuration**: Flexible configuration with authentication support
 | 
			
		||||
 | 
			
		||||
## Test Structure
 | 
			
		||||
 | 
			
		||||
The tests are organized into two main scripts:
 | 
			
		||||
@@ -75,6 +85,24 @@ These tests require a Redis server to be running and accessible. The tests will
 | 
			
		||||
 | 
			
		||||
If no Redis server is available, the tests will be skipped rather than failing.
 | 
			
		||||
 | 
			
		||||
## Authentication Support
 | 
			
		||||
 | 
			
		||||
The Redis client module will support authentication using the builder pattern in a future update.
 | 
			
		||||
 | 
			
		||||
The backend implementation is ready, but the Rhai bindings are still in development.
 | 
			
		||||
 | 
			
		||||
When implemented, the builder pattern will support the following configuration options:
 | 
			
		||||
 | 
			
		||||
- Host: Set the Redis host
 | 
			
		||||
- Port: Set the Redis port
 | 
			
		||||
- Database: Set the Redis database number
 | 
			
		||||
- Username: Set the Redis username (Redis 6.0+)
 | 
			
		||||
- Password: Set the Redis password
 | 
			
		||||
- TLS: Enable/disable TLS
 | 
			
		||||
- Unix socket: Enable/disable Unix socket
 | 
			
		||||
- Socket path: Set the Unix socket path
 | 
			
		||||
- Connection timeout: Set the connection timeout in seconds
 | 
			
		||||
 | 
			
		||||
## Adding New Tests
 | 
			
		||||
 | 
			
		||||
To add a new test:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user