Two critical fixes for successful pipeline execution: 1. GitLab CI YAML Syntax Fix (.gitlab-ci.yml:84-86) - Wrapped echo commands containing colons in single quotes - Root cause: YAML parser interprets `"text: value"` as key-value pairs - Solution: Single quotes force literal string interpretation - Impact: Enables Docker build pipeline execution 2. Trading Service Compilation Fix (trading_service/src/services/enhanced_ml.rs:1328-1348) - Added missing early stopping fields to PPOConfig initialization - Fields: early_stopping_enabled, early_stopping_patience, early_stopping_min_delta, early_stopping_min_epochs - Values: Disabled by default for paper trading (early_stopping_enabled: false) - Impact: Resolves pre-push hook compilation error Technical Details: - YAML Issue: Colons followed by spaces trigger mapping syntax parsing - Single quotes preserve shell variable expansion while forcing literal YAML strings - Early stopping config matches PPOConfig struct updates from Wave D - Default values: patience=5, min_delta=0.001, min_epochs=10 Validated: - ✅ YAML syntax validated with PyYAML - ✅ trading_service compilation successful (cargo check) - ✅ Ready for GitLab CI/CD pipeline execution 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
66 lines
2.6 KiB
Rust
66 lines
2.6 KiB
Rust
// Suppress false-positive unused_crate_dependencies warnings
|
|
// dev-dependencies are shared across ALL test targets in the crate
|
|
// This test may not use all deps, but they are required by other integration tests
|
|
#![allow(unused_crate_dependencies)]
|
|
|
|
/// Security audit test for Wave 155 encryption implementation
|
|
/// This test creates token files and does NOT clean them up for manual inspection
|
|
|
|
#[tokio::test]
|
|
#[ignore = "Ignored by default since it leaves files for inspection"]
|
|
async fn security_audit_create_persistent_tokens() {
|
|
use std::path::PathBuf;
|
|
use tli::auth::token_manager::{FileTokenStorage, TokenStorage};
|
|
|
|
// Create persistent test directory
|
|
let test_dir = PathBuf::from("/tmp/foxhunt_security_audit_wave155");
|
|
|
|
// Clean up old test data
|
|
let _ = std::fs::remove_dir_all(&test_dir);
|
|
|
|
// Create new storage
|
|
let storage = FileTokenStorage::with_directory(test_dir.clone()).unwrap();
|
|
|
|
// Create tokens with sensitive data patterns
|
|
let jwt_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SENSITIVE_SIGNATURE_DATA";
|
|
let refresh_token =
|
|
"Bearer_refresh_token_SECRET_KEY_12345_CONFIDENTIAL_DATA_PASSWORD_CREDENTIALS";
|
|
|
|
// Store tokens
|
|
storage.store_access_token(jwt_token).await.unwrap();
|
|
storage.store_refresh_token(refresh_token).await.unwrap();
|
|
|
|
// Verify roundtrip works
|
|
let retrieved_access = storage.get_access_token().await.unwrap().unwrap();
|
|
let retrieved_refresh = storage.get_refresh_token().await.unwrap().unwrap();
|
|
|
|
assert_eq!(retrieved_access, jwt_token, "Access token roundtrip failed");
|
|
assert_eq!(
|
|
retrieved_refresh, refresh_token,
|
|
"Refresh token roundtrip failed"
|
|
);
|
|
|
|
println!("\n=== Wave 155 Security Audit ===");
|
|
println!(
|
|
"\n✅ Tokens created successfully at: {}",
|
|
test_dir.display()
|
|
);
|
|
println!("✅ Encryption roundtrip verified");
|
|
println!("\n📋 Manual inspection instructions:");
|
|
println!(" 1. Check files exist: ls -la {}", test_dir.display());
|
|
println!(
|
|
" 2. Check ENC: prefix: head -c 4 {}/access_token",
|
|
test_dir.display()
|
|
);
|
|
println!(
|
|
" 3. Check for plaintext: strings {}/access_token | grep -i 'bearer\\|jwt\\|secret'",
|
|
test_dir.display()
|
|
);
|
|
println!(
|
|
" 4. Check permissions: stat {} /access_token",
|
|
test_dir.display()
|
|
);
|
|
println!("\n⚠️ NOTE: Files are NOT cleaned up for manual inspection");
|
|
println!(" Cleanup command: rm -rf {}", test_dir.display());
|
|
}
|