Skip to main content
Glama
test_secrets.py8.12 kB
"""Tests for Secrets API""" import os import time import pytest from dotenv import load_dotenv from system_initiative_api_client import ApiClient, Configuration from system_initiative_api_client.api.change_sets_api import ChangeSetsApi from system_initiative_api_client.api.components_api import ComponentsApi from system_initiative_api_client.api.secrets_api import SecretsApi from system_initiative_api_client.models.create_change_set_v1_request import CreateChangeSetV1Request from system_initiative_api_client.models.create_component_v1_request import CreateComponentV1Request from system_initiative_api_client.models.create_secret_v1_request import CreateSecretV1Request from system_initiative_api_client.models.update_secret_v1_request import UpdateSecretV1Request # Load environment variables from .env file load_dotenv() @pytest.fixture(scope="module") def api_config(): """Create API configuration from environment variables""" api_token = os.environ.get("SI_API_TOKEN") base_path = os.environ.get("SI_API_BASE_PATH", "https://api.systeminit.com") workspace_id = os.environ.get("SI_WORKSPACE_ID", "") if not api_token: raise ValueError("SI_API_TOKEN environment variable is required") if not workspace_id: raise ValueError("SI_WORKSPACE_ID environment variable is required") config = Configuration(host=base_path) config.access_token = api_token return { "config": config, "workspace_id": workspace_id, } @pytest.fixture(scope="module") def secrets_api(api_config): """Create SecretsApi instance""" api_client = ApiClient(api_config["config"]) api_token = os.environ.get("SI_API_TOKEN") api_client.default_headers['Authorization'] = f"Bearer {api_token}" return SecretsApi(api_client) @pytest.fixture(scope="module") def change_sets_api(api_config): """Create ChangeSetsApi instance""" api_client = ApiClient(api_config["config"]) api_token = os.environ.get("SI_API_TOKEN") api_client.default_headers['Authorization'] = f"Bearer {api_token}" return ChangeSetsApi(api_client) @pytest.fixture(scope="module") def components_api(api_config): """Create ComponentsApi instance""" api_client = ApiClient(api_config["config"]) api_token = os.environ.get("SI_API_TOKEN") api_client.default_headers['Authorization'] = f"Bearer {api_token}" return ComponentsApi(api_client) @pytest.fixture(scope="module") def workspace_id(api_config): """Get workspace ID from config""" return api_config["workspace_id"] @pytest.fixture(scope="module") def change_set_id(change_sets_api, workspace_id): """Create a change set for testing""" change_set_name = f"test-secrets-{int(time.time() * 1000)}" request = CreateChangeSetV1Request(change_set_name=change_set_name) response = change_sets_api.create_change_set( workspace_id=workspace_id, create_change_set_v1_request=request, ) return response.change_set.id def test_create_aws_credential_secret(secrets_api, workspace_id, change_set_id): """Test creating an AWS credential secret""" request = CreateSecretV1Request( name="my-aws-credentials", definition_name="AWS Credential", description="My AWS access credentials", raw_data={ "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", }, ) response = secrets_api.create_secret( workspace_id=workspace_id, change_set_id=change_set_id, create_secret_v1_request=request, ) assert response is not None assert response.secret is not None assert response.secret.name == "my-aws-credentials" assert response.secret.definition == "AWS Credential" assert response.secret.description == "My AWS access credentials" def test_create_aws_credential_secret_and_subscribe_ec2_instance( secrets_api, components_api, workspace_id, change_set_id ): """Test creating an AWS credential secret and subscribing an EC2 instance to it""" # Create the AWS credential secret secret_request = CreateSecretV1Request( name="test-aws-ec2-credentials", definition_name="AWS Credential", description="AWS credentials for EC2 instance", raw_data={ "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", }, ) secret_response = secrets_api.create_secret( workspace_id=workspace_id, change_set_id=change_set_id, create_secret_v1_request=secret_request, ) assert secret_response is not None assert secret_response.secret is not None secret_id = secret_response.secret.id # Create an AWS EC2 Instance component component_request = CreateComponentV1Request( name="test-ec2-instance", schema_name="AWS::EC2::Instance", attributes={ "/secrets/AWS Credential": { "component": secret_id, "path": "/secrets/AWS Credential", }, }, ) component_response = components_api.create_component( workspace_id=workspace_id, change_set_id=change_set_id, create_component_v1_request=component_request, ) assert component_response is not None assert component_response.component is not None def test_update_secret_with_new_data(secrets_api, workspace_id, change_set_id): """Test updating a secret with new data""" # Create the initial secret create_request = CreateSecretV1Request( name="updatable-aws-credentials", definition_name="AWS Credential", description="Initial credentials", raw_data={ "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", }, ) create_response = secrets_api.create_secret( workspace_id=workspace_id, change_set_id=change_set_id, create_secret_v1_request=create_request, ) assert create_response is not None assert create_response.secret is not None secret_id = create_response.secret.id # Update the secret with new data update_request = UpdateSecretV1Request( id=secret_id, name="updated-aws-credentials", description="Updated credentials with new keys", raw_data={ "accessKeyId": "AKIAIOSFODNN7NEWKEY", "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYNEWKEY", }, ) update_response = secrets_api.update_secret( workspace_id=workspace_id, change_set_id=change_set_id, secret_id=secret_id, update_secret_v1_request=update_request, ) assert update_response is not None assert update_response.secret is not None assert update_response.secret.id == secret_id assert update_response.secret.name == "updated-aws-credentials" assert update_response.secret.description == "Updated credentials with new keys" def test_delete_secret(secrets_api, workspace_id, change_set_id): """Test deleting a secret""" # Create a secret to delete create_request = CreateSecretV1Request( name="deletable-aws-credentials", definition_name="AWS Credential", description="Credentials to be deleted", raw_data={ "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", }, ) create_response = secrets_api.create_secret( workspace_id=workspace_id, change_set_id=change_set_id, create_secret_v1_request=create_request, ) assert create_response is not None assert create_response.secret is not None secret_id = create_response.secret.id # Delete the secret delete_response = secrets_api.delete_secret( workspace_id=workspace_id, change_set_id=change_set_id, secret_id=secret_id, ) assert delete_response is not None assert delete_response.success is True

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server