Files
GoMFT/internal/encryption/audit/security_test_framework_test.go
T
StarFleetCPTN 31871bd16e feat: Implement storage provider management functionality
- Added new routes and handlers for managing storage providers, including creation, editing, and deletion.
- Introduced a new StorageProvider form component for user input.
- Enhanced the database schema to support storage provider references in transfer configurations.
- Implemented encryption for sensitive fields in storage provider data.
- Added tests for storage provider API endpoints and integration with the database.
- Updated frontend components to support storage provider selection and testing.
2025-04-16 17:18:53 -07:00

197 lines
5.5 KiB
Go

package audit
import (
"bytes"
"os"
"reflect"
"testing"
"time"
"github.com/starfleetcptn/gomft/internal/encryption"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func setupTestFramework(t *testing.T) (*SecurityTestingFramework, *bytes.Buffer) {
// Create audit log buffer
logBuffer := new(bytes.Buffer)
// Create auditor
auditor, err := New()
require.NoError(t, err)
// Set auditor to use buffer
auditValue := reflect.ValueOf(auditor).Elem()
if logField := auditValue.FieldByName("logWriter"); logField.IsValid() && logField.CanSet() {
logField.Set(reflect.ValueOf(logBuffer))
}
if errorField := auditValue.FieldByName("errorWriter"); errorField.IsValid() && errorField.CanSet() {
errorField.Set(reflect.ValueOf(logBuffer))
}
// Create monitor
monitor := NewSecurityMonitor(auditor)
// Create framework
framework := NewSecurityTestingFramework(auditor, monitor)
framework.SetVerbose(true)
return framework, logBuffer
}
func setupTestEncryptionService(t *testing.T) *encryption.EncryptionService {
// Setup test key
os.Setenv("TEST_ENCRYPTION_KEY", "dGVzdGtleXRlc3RrZXl0ZXN0a2V5dGVzdGtleXRlc3Q=") // base64 test key
t.Cleanup(func() {
os.Unsetenv("TEST_ENCRYPTION_KEY")
})
// Create key manager
keyManager := encryption.NewKeyManager("TEST_ENCRYPTION_KEY")
err := keyManager.Initialize()
require.NoError(t, err)
// Create encryption service
service, err := encryption.NewEncryptionService(keyManager)
require.NoError(t, err)
return service
}
func TestNewSecurityTestingFramework(t *testing.T) {
auditor, err := New()
require.NoError(t, err)
monitor := NewSecurityMonitor(auditor)
framework := NewSecurityTestingFramework(auditor, monitor)
assert.Equal(t, auditor, framework.auditor)
assert.Equal(t, monitor, framework.monitor)
assert.Equal(t, "security_test_results", framework.testOutputDir)
assert.Equal(t, BasicTesting, framework.testLevel)
assert.Equal(t, os.Stdout, framework.logOutput)
assert.False(t, framework.verbose)
}
func TestSecurityTestingFramework_SetMethods(t *testing.T) {
framework, _ := setupTestFramework(t)
// Test SetOutputDirectory
framework.SetOutputDirectory("test_dir")
assert.Equal(t, "test_dir", framework.testOutputDir)
// Test SetTestingLevel
framework.SetTestingLevel(ComprehensiveTesting)
assert.Equal(t, ComprehensiveTesting, framework.testLevel)
// Test SetVerbose
framework.SetVerbose(true)
assert.True(t, framework.verbose)
// Test SetLogOutput
buffer := new(bytes.Buffer)
framework.SetLogOutput(buffer)
assert.Equal(t, buffer, framework.logOutput)
}
func TestSecurityTestingFramework_BenchmarkEncryptionPerformance(t *testing.T) {
framework, _ := setupTestFramework(t)
service := setupTestEncryptionService(t)
// Run a very short benchmark
metrics, err := framework.BenchmarkEncryptionPerformance(service, 1024, 100*time.Millisecond)
require.NoError(t, err)
// Verify metrics are populated
assert.True(t, metrics.OperationsPerSecond > 0)
assert.True(t, metrics.AverageLatency > 0)
assert.True(t, metrics.MemoryUsageMB >= 0)
assert.True(t, metrics.CPUUsagePercent >= 0)
}
func TestSecurityTestingFramework_VerifyKeyRotation(t *testing.T) {
framework, _ := setupTestFramework(t)
// Setup two different encryption services with different keys
oldKeyEnv := "TEST_OLD_KEY"
newKeyEnv := "TEST_NEW_KEY"
os.Setenv(oldKeyEnv, "b2xka2V5b2xka2V5b2xka2V5b2xka2V5b2xka2V5b2xk")
os.Setenv(newKeyEnv, "bmV3a2V5bmV3a2V5bmV3a2V5bmV3a2V5bmV3a2V5bmV3")
t.Cleanup(func() {
os.Unsetenv(oldKeyEnv)
os.Unsetenv(newKeyEnv)
})
// Create old key manager and service
oldKeyManager := encryption.NewKeyManager(oldKeyEnv)
err := oldKeyManager.Initialize()
require.NoError(t, err)
oldService, err := encryption.NewEncryptionService(oldKeyManager)
require.NoError(t, err)
// Create new key manager and service
newKeyManager := encryption.NewKeyManager(newKeyEnv)
err = newKeyManager.Initialize()
require.NoError(t, err)
newService, err := encryption.NewEncryptionService(newKeyManager)
require.NoError(t, err)
// Test data
testData := []byte("This is some test data for key rotation verification")
// Run verification
result, err := framework.VerifyKeyRotation(oldService, newService, testData)
require.NoError(t, err)
assert.True(t, result.Success)
assert.Contains(t, result.Details, "Successfully verified key rotation")
}
func TestSecurityTestingFramework_VerifyNoSensitiveDataInLogs(t *testing.T) {
framework, _ := setupTestFramework(t)
// Sensitive data to check
sensitiveData := "very_sensitive_password_123!"
// Run verification
result, err := framework.VerifyNoSensitiveDataInLogs(sensitiveData)
require.NoError(t, err)
assert.True(t, result.Success)
assert.Contains(t, result.Details, "Successfully verified that sensitive data is properly sanitized")
}
func TestSecurityTestingFramework_RunAllTests(t *testing.T) {
framework, _ := setupTestFramework(t)
service := setupTestEncryptionService(t)
// Run tests at basic level
results, err := framework.RunAllTests(service)
require.NoError(t, err)
// Should have 3 basic tests
assert.Equal(t, 3, len(results))
// Set to extended level and run again
framework.SetTestingLevel(ExtendedTesting)
results, err = framework.RunAllTests(service)
require.NoError(t, err)
// Should have 3 basic + 3 extended tests
assert.Equal(t, 6, len(results))
// Set to comprehensive level and run again
framework.SetTestingLevel(ComprehensiveTesting)
results, err = framework.RunAllTests(service)
require.NoError(t, err)
// Should have 3 basic + 3 extended + 4 comprehensive tests
assert.Equal(t, 10, len(results))
}