ci: enhance test workflows with dependency fixes and service management improvements
Some checks failed
Documentation Validation / validate-docs (push) Has been cancelled
API Endpoint Tests / test-api-endpoints (push) Successful in 40s
CLI Tests / test-cli (push) Successful in 1m3s
Integration Tests / test-service-integration (push) Successful in 1m19s
Package Tests / test-python-packages (map[name:aitbc-agent-sdk path:packages/py/aitbc-agent-sdk]) (push) Successful in 1m1s
Package Tests / test-python-packages (map[name:aitbc-core path:packages/py/aitbc-core]) (push) Successful in 24s
Package Tests / test-python-packages (map[name:aitbc-crypto path:packages/py/aitbc-crypto]) (push) Successful in 26s
Package Tests / test-javascript-packages (map[name:aitbc-sdk-js path:packages/js/aitbc-sdk]) (push) Successful in 15s
Package Tests / test-python-packages (map[name:aitbc-sdk path:packages/py/aitbc-sdk]) (push) Successful in 27s
Package Tests / test-javascript-packages (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Successful in 1m1s
Python Tests / test-python (push) Successful in 1m28s
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Successful in 47s
Security Scanning / security-scan (push) Successful in 1m23s
Smart Contract Tests / test-solidity (map[name:zk-circuits path:apps/zk-circuits]) (push) Successful in 51s
Systemd Sync / sync-systemd (push) Successful in 6s
Smart Contract Tests / lint-solidity (push) Successful in 1m4s
Some checks failed
Documentation Validation / validate-docs (push) Has been cancelled
API Endpoint Tests / test-api-endpoints (push) Successful in 40s
CLI Tests / test-cli (push) Successful in 1m3s
Integration Tests / test-service-integration (push) Successful in 1m19s
Package Tests / test-python-packages (map[name:aitbc-agent-sdk path:packages/py/aitbc-agent-sdk]) (push) Successful in 1m1s
Package Tests / test-python-packages (map[name:aitbc-core path:packages/py/aitbc-core]) (push) Successful in 24s
Package Tests / test-python-packages (map[name:aitbc-crypto path:packages/py/aitbc-crypto]) (push) Successful in 26s
Package Tests / test-javascript-packages (map[name:aitbc-sdk-js path:packages/js/aitbc-sdk]) (push) Successful in 15s
Package Tests / test-python-packages (map[name:aitbc-sdk path:packages/py/aitbc-sdk]) (push) Successful in 27s
Package Tests / test-javascript-packages (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Successful in 1m1s
Python Tests / test-python (push) Successful in 1m28s
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Successful in 47s
Security Scanning / security-scan (push) Successful in 1m23s
Smart Contract Tests / test-solidity (map[name:zk-circuits path:apps/zk-circuits]) (push) Successful in 51s
Systemd Sync / sync-systemd (push) Successful in 6s
Smart Contract Tests / lint-solidity (push) Successful in 1m4s
🔧 Workflow Enhancements: • Update CLI tests to use dedicated test runner with virtual environment • Add locust dependency to integration and python test workflows • Install Python packages in development mode for proper import testing • Add package import verification in python-tests workflow 🛠️ Package Testing Improvements: • Add Hardhat dependency installation for aitbc-token package • Add
This commit is contained in:
10
cli/pytest.ini
Normal file
10
cli/pytest.ini
Normal file
@@ -0,0 +1,10 @@
|
||||
[pytest]
|
||||
testpaths = cli/tests
|
||||
python_files = test_*.py
|
||||
python_classes = Test*
|
||||
python_functions = test_*
|
||||
addopts = -v --tb=short
|
||||
markers =
|
||||
slow: marks tests as slow
|
||||
integration: marks tests as integration tests
|
||||
unit: marks tests as unit tests
|
||||
1
cli/tests/__init__.py
Normal file
1
cli/tests/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
# CLI Tests Directory
|
||||
102
cli/tests/run_cli_tests.py
Executable file
102
cli/tests/run_cli_tests.py
Executable file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Simple CLI test runner that uses the virtual environment."""
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
def run_cli_test():
|
||||
"""Run basic CLI functionality tests."""
|
||||
print("🧪 Running CLI Tests with Virtual Environment...")
|
||||
|
||||
# Set up environment
|
||||
cli_dir = Path(__file__).parent.parent
|
||||
venv_python = "/opt/aitbc/venv/bin/python"
|
||||
|
||||
# Test 1: CLI help command
|
||||
print("\n1. Testing CLI help command...")
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[venv_python, "aitbc_cli.py", "--help"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(cli_dir)
|
||||
)
|
||||
|
||||
if result.returncode == 0 and "AITBC CLI" in result.stdout:
|
||||
print("✅ CLI help command working")
|
||||
else:
|
||||
print(f"❌ CLI help command failed: {result.stderr}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"❌ CLI help command error: {e}")
|
||||
return False
|
||||
|
||||
# Test 2: CLI list command
|
||||
print("\n2. Testing CLI list command...")
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[venv_python, "aitbc_cli.py", "list"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(cli_dir)
|
||||
)
|
||||
|
||||
if result.returncode == 0:
|
||||
print("✅ CLI list command working")
|
||||
else:
|
||||
print(f"❌ CLI list command failed: {result.stderr}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"❌ CLI list command error: {e}")
|
||||
return False
|
||||
|
||||
# Test 3: CLI blockchain command
|
||||
print("\n3. Testing CLI blockchain command...")
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[venv_python, "aitbc_cli.py", "chain"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(cli_dir)
|
||||
)
|
||||
|
||||
if result.returncode == 0:
|
||||
print("✅ CLI blockchain command working")
|
||||
else:
|
||||
print(f"❌ CLI blockchain command failed: {result.stderr}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"❌ CLI blockchain command error: {e}")
|
||||
return False
|
||||
|
||||
# Test 4: CLI invalid command handling
|
||||
print("\n4. Testing CLI invalid command handling...")
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[venv_python, "aitbc_cli.py", "invalid-command"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(cli_dir)
|
||||
)
|
||||
|
||||
if result.returncode != 0:
|
||||
print("✅ CLI invalid command handling working")
|
||||
else:
|
||||
print("❌ CLI invalid command should have failed")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"❌ CLI invalid command error: {e}")
|
||||
return False
|
||||
|
||||
print("\n✅ All CLI tests passed!")
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = run_cli_test()
|
||||
sys.exit(0 if success else 1)
|
||||
146
cli/tests/test_cli_basic.py
Normal file
146
cli/tests/test_cli_basic.py
Normal file
@@ -0,0 +1,146 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Basic CLI tests for AITBC CLI functionality."""
|
||||
|
||||
import pytest
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# Add CLI to path for imports
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
class TestCLIImports:
|
||||
"""Test CLI module imports."""
|
||||
|
||||
def test_cli_main_import(self):
|
||||
"""Test that main CLI module can be imported."""
|
||||
try:
|
||||
from aitbc_cli import main
|
||||
assert main is not None
|
||||
print("✅ CLI main import successful")
|
||||
except ImportError as e:
|
||||
pytest.fail(f"❌ CLI main import failed: {e}")
|
||||
|
||||
def test_cli_commands_import(self):
|
||||
"""Test that CLI command modules can be imported."""
|
||||
try:
|
||||
from commands.wallet import create_wallet, list_wallets
|
||||
from commands.blockchain import get_blockchain_info
|
||||
assert create_wallet is not None
|
||||
assert list_wallets is not None
|
||||
assert get_blockchain_info is not None
|
||||
print("✅ CLI commands import successful")
|
||||
except ImportError as e:
|
||||
pytest.fail(f"❌ CLI commands import failed: {e}")
|
||||
|
||||
|
||||
class TestCLIBasicFunctionality:
|
||||
"""Test basic CLI functionality."""
|
||||
|
||||
def test_cli_help_output(self):
|
||||
"""Test that CLI help command works."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[sys.executable, "aitbc_cli.py", "--help"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(Path(__file__).parent.parent)
|
||||
)
|
||||
|
||||
assert result.returncode == 0
|
||||
assert "AITBC CLI" in result.stdout
|
||||
assert "usage:" in result.stdout
|
||||
print("✅ CLI help output working")
|
||||
except subprocess.TimeoutExpired:
|
||||
pytest.fail("❌ CLI help command timed out")
|
||||
except Exception as e:
|
||||
pytest.fail(f"❌ CLI help command failed: {e}")
|
||||
|
||||
def test_cli_list_command(self):
|
||||
"""Test that CLI list command works."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[sys.executable, "aitbc_cli.py", "list"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(Path(__file__).parent.parent)
|
||||
)
|
||||
|
||||
# Command should succeed even if no wallets exist
|
||||
assert result.returncode == 0
|
||||
print("✅ CLI list command working")
|
||||
except subprocess.TimeoutExpired:
|
||||
pytest.fail("❌ CLI list command timed out")
|
||||
except Exception as e:
|
||||
pytest.fail(f"❌ CLI list command failed: {e}")
|
||||
|
||||
|
||||
class TestCLIErrorHandling:
|
||||
"""Test CLI error handling."""
|
||||
|
||||
def test_cli_invalid_command(self):
|
||||
"""Test that CLI handles invalid commands gracefully."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[sys.executable, "aitbc_cli.py", "invalid-command"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(Path(__file__).parent.parent)
|
||||
)
|
||||
|
||||
# Should fail gracefully
|
||||
assert result.returncode != 0
|
||||
print("✅ CLI invalid command handling working")
|
||||
except subprocess.TimeoutExpired:
|
||||
pytest.fail("❌ CLI invalid command test timed out")
|
||||
except Exception as e:
|
||||
pytest.fail(f"❌ CLI invalid command test failed: {e}")
|
||||
|
||||
|
||||
class TestCLIConfiguration:
|
||||
"""Test CLI configuration and setup."""
|
||||
|
||||
def test_cli_file_exists(self):
|
||||
"""Test that main CLI file exists."""
|
||||
cli_file = Path(__file__).parent.parent / "aitbc_cli.py"
|
||||
assert cli_file.exists(), f"❌ CLI file not found: {cli_file}"
|
||||
print(f"✅ CLI file exists: {cli_file}")
|
||||
|
||||
def test_cli_file_executable(self):
|
||||
"""Test that CLI file is executable."""
|
||||
cli_file = Path(__file__).parent.parent / "aitbc_cli.py"
|
||||
assert cli_file.is_file(), f"❌ CLI file is not a file: {cli_file}"
|
||||
|
||||
# Check if file has content
|
||||
with open(cli_file, 'r') as f:
|
||||
content = f.read()
|
||||
assert len(content) > 1000, f"❌ CLI file appears empty or too small"
|
||||
assert "def main" in content, f"❌ CLI file missing main function"
|
||||
|
||||
print(f"✅ CLI file is valid: {len(content)} characters")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Run basic tests when executed directly
|
||||
print("🧪 Running basic CLI tests...")
|
||||
|
||||
test_class = TestCLIImports()
|
||||
test_class.test_cli_main_import()
|
||||
test_class.test_cli_commands_import()
|
||||
|
||||
test_class = TestCLIBasicFunctionality()
|
||||
test_class.test_cli_help_output()
|
||||
test_class.test_cli_list_command()
|
||||
|
||||
test_class = TestCLIErrorHandling()
|
||||
test_class.test_cli_invalid_command()
|
||||
|
||||
test_class = TestCLIConfiguration()
|
||||
test_class.test_cli_file_exists()
|
||||
test_class.test_cli_file_executable()
|
||||
|
||||
print("✅ All basic CLI tests passed!")
|
||||
Reference in New Issue
Block a user