runbooks 1.1.4__py3-none-any.whl → 1.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. runbooks/__init__.py +31 -2
  2. runbooks/__init___optimized.py +18 -4
  3. runbooks/_platform/__init__.py +1 -5
  4. runbooks/_platform/core/runbooks_wrapper.py +141 -138
  5. runbooks/aws2/accuracy_validator.py +812 -0
  6. runbooks/base.py +7 -0
  7. runbooks/cfat/assessment/compliance.py +1 -1
  8. runbooks/cfat/assessment/runner.py +1 -0
  9. runbooks/cfat/cloud_foundations_assessment.py +227 -239
  10. runbooks/cli/__init__.py +1 -1
  11. runbooks/cli/commands/cfat.py +64 -23
  12. runbooks/cli/commands/finops.py +1005 -54
  13. runbooks/cli/commands/inventory.py +135 -91
  14. runbooks/cli/commands/operate.py +9 -36
  15. runbooks/cli/commands/security.py +42 -18
  16. runbooks/cli/commands/validation.py +432 -18
  17. runbooks/cli/commands/vpc.py +81 -17
  18. runbooks/cli/registry.py +22 -10
  19. runbooks/cloudops/__init__.py +20 -27
  20. runbooks/cloudops/base.py +96 -107
  21. runbooks/cloudops/cost_optimizer.py +544 -542
  22. runbooks/cloudops/infrastructure_optimizer.py +5 -4
  23. runbooks/cloudops/interfaces.py +224 -225
  24. runbooks/cloudops/lifecycle_manager.py +5 -4
  25. runbooks/cloudops/mcp_cost_validation.py +252 -235
  26. runbooks/cloudops/models.py +78 -53
  27. runbooks/cloudops/monitoring_automation.py +5 -4
  28. runbooks/cloudops/notebook_framework.py +177 -213
  29. runbooks/cloudops/security_enforcer.py +125 -159
  30. runbooks/common/accuracy_validator.py +17 -12
  31. runbooks/common/aws_pricing.py +349 -326
  32. runbooks/common/aws_pricing_api.py +211 -212
  33. runbooks/common/aws_profile_manager.py +40 -36
  34. runbooks/common/aws_utils.py +74 -79
  35. runbooks/common/business_logic.py +126 -104
  36. runbooks/common/cli_decorators.py +36 -60
  37. runbooks/common/comprehensive_cost_explorer_integration.py +455 -463
  38. runbooks/common/cross_account_manager.py +197 -204
  39. runbooks/common/date_utils.py +27 -39
  40. runbooks/common/decorators.py +29 -19
  41. runbooks/common/dry_run_examples.py +173 -208
  42. runbooks/common/dry_run_framework.py +157 -155
  43. runbooks/common/enhanced_exception_handler.py +15 -4
  44. runbooks/common/enhanced_logging_example.py +50 -64
  45. runbooks/common/enhanced_logging_integration_example.py +65 -37
  46. runbooks/common/env_utils.py +16 -16
  47. runbooks/common/error_handling.py +40 -38
  48. runbooks/common/lazy_loader.py +41 -23
  49. runbooks/common/logging_integration_helper.py +79 -86
  50. runbooks/common/mcp_cost_explorer_integration.py +476 -493
  51. runbooks/common/mcp_integration.py +99 -79
  52. runbooks/common/memory_optimization.py +140 -118
  53. runbooks/common/module_cli_base.py +37 -58
  54. runbooks/common/organizations_client.py +175 -193
  55. runbooks/common/patterns.py +23 -25
  56. runbooks/common/performance_monitoring.py +67 -71
  57. runbooks/common/performance_optimization_engine.py +283 -274
  58. runbooks/common/profile_utils.py +111 -37
  59. runbooks/common/rich_utils.py +315 -141
  60. runbooks/common/sre_performance_suite.py +177 -186
  61. runbooks/enterprise/__init__.py +1 -1
  62. runbooks/enterprise/logging.py +144 -106
  63. runbooks/enterprise/security.py +187 -204
  64. runbooks/enterprise/validation.py +43 -56
  65. runbooks/finops/__init__.py +26 -30
  66. runbooks/finops/account_resolver.py +1 -1
  67. runbooks/finops/advanced_optimization_engine.py +980 -0
  68. runbooks/finops/automation_core.py +268 -231
  69. runbooks/finops/business_case_config.py +184 -179
  70. runbooks/finops/cli.py +660 -139
  71. runbooks/finops/commvault_ec2_analysis.py +157 -164
  72. runbooks/finops/compute_cost_optimizer.py +336 -320
  73. runbooks/finops/config.py +20 -20
  74. runbooks/finops/cost_optimizer.py +484 -618
  75. runbooks/finops/cost_processor.py +332 -214
  76. runbooks/finops/dashboard_runner.py +1006 -172
  77. runbooks/finops/ebs_cost_optimizer.py +991 -657
  78. runbooks/finops/elastic_ip_optimizer.py +317 -257
  79. runbooks/finops/enhanced_mcp_integration.py +340 -0
  80. runbooks/finops/enhanced_progress.py +32 -29
  81. runbooks/finops/enhanced_trend_visualization.py +3 -2
  82. runbooks/finops/enterprise_wrappers.py +223 -285
  83. runbooks/finops/executive_export.py +203 -160
  84. runbooks/finops/helpers.py +130 -288
  85. runbooks/finops/iam_guidance.py +1 -1
  86. runbooks/finops/infrastructure/__init__.py +80 -0
  87. runbooks/finops/infrastructure/commands.py +506 -0
  88. runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
  89. runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
  90. runbooks/finops/markdown_exporter.py +337 -174
  91. runbooks/finops/mcp_validator.py +1952 -0
  92. runbooks/finops/nat_gateway_optimizer.py +1512 -481
  93. runbooks/finops/network_cost_optimizer.py +657 -587
  94. runbooks/finops/notebook_utils.py +226 -188
  95. runbooks/finops/optimization_engine.py +1136 -0
  96. runbooks/finops/optimizer.py +19 -23
  97. runbooks/finops/rds_snapshot_optimizer.py +367 -411
  98. runbooks/finops/reservation_optimizer.py +427 -363
  99. runbooks/finops/scenario_cli_integration.py +64 -65
  100. runbooks/finops/scenarios.py +1277 -438
  101. runbooks/finops/schemas.py +218 -182
  102. runbooks/finops/snapshot_manager.py +2289 -0
  103. runbooks/finops/types.py +3 -3
  104. runbooks/finops/validation_framework.py +259 -265
  105. runbooks/finops/vpc_cleanup_exporter.py +189 -144
  106. runbooks/finops/vpc_cleanup_optimizer.py +591 -573
  107. runbooks/finops/workspaces_analyzer.py +171 -182
  108. runbooks/integration/__init__.py +89 -0
  109. runbooks/integration/mcp_integration.py +1920 -0
  110. runbooks/inventory/CLAUDE.md +816 -0
  111. runbooks/inventory/__init__.py +2 -2
  112. runbooks/inventory/aws_decorators.py +2 -3
  113. runbooks/inventory/check_cloudtrail_compliance.py +2 -4
  114. runbooks/inventory/check_controltower_readiness.py +152 -151
  115. runbooks/inventory/check_landingzone_readiness.py +85 -84
  116. runbooks/inventory/cloud_foundations_integration.py +144 -149
  117. runbooks/inventory/collectors/aws_comprehensive.py +1 -1
  118. runbooks/inventory/collectors/aws_networking.py +109 -99
  119. runbooks/inventory/collectors/base.py +4 -0
  120. runbooks/inventory/core/collector.py +495 -313
  121. runbooks/inventory/core/formatter.py +11 -0
  122. runbooks/inventory/draw_org_structure.py +8 -9
  123. runbooks/inventory/drift_detection_cli.py +69 -96
  124. runbooks/inventory/ec2_vpc_utils.py +2 -2
  125. runbooks/inventory/find_cfn_drift_detection.py +5 -7
  126. runbooks/inventory/find_cfn_orphaned_stacks.py +7 -9
  127. runbooks/inventory/find_cfn_stackset_drift.py +5 -6
  128. runbooks/inventory/find_ec2_security_groups.py +48 -42
  129. runbooks/inventory/find_landingzone_versions.py +4 -6
  130. runbooks/inventory/find_vpc_flow_logs.py +7 -9
  131. runbooks/inventory/inventory_mcp_cli.py +48 -46
  132. runbooks/inventory/inventory_modules.py +103 -91
  133. runbooks/inventory/list_cfn_stacks.py +9 -10
  134. runbooks/inventory/list_cfn_stackset_operation_results.py +1 -3
  135. runbooks/inventory/list_cfn_stackset_operations.py +79 -57
  136. runbooks/inventory/list_cfn_stacksets.py +8 -10
  137. runbooks/inventory/list_config_recorders_delivery_channels.py +49 -39
  138. runbooks/inventory/list_ds_directories.py +65 -53
  139. runbooks/inventory/list_ec2_availability_zones.py +2 -4
  140. runbooks/inventory/list_ec2_ebs_volumes.py +32 -35
  141. runbooks/inventory/list_ec2_instances.py +23 -28
  142. runbooks/inventory/list_ecs_clusters_and_tasks.py +26 -34
  143. runbooks/inventory/list_elbs_load_balancers.py +22 -20
  144. runbooks/inventory/list_enis_network_interfaces.py +26 -33
  145. runbooks/inventory/list_guardduty_detectors.py +2 -4
  146. runbooks/inventory/list_iam_policies.py +2 -4
  147. runbooks/inventory/list_iam_roles.py +5 -7
  148. runbooks/inventory/list_iam_saml_providers.py +4 -6
  149. runbooks/inventory/list_lambda_functions.py +38 -38
  150. runbooks/inventory/list_org_accounts.py +6 -8
  151. runbooks/inventory/list_org_accounts_users.py +55 -44
  152. runbooks/inventory/list_rds_db_instances.py +31 -33
  153. runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
  154. runbooks/inventory/list_route53_hosted_zones.py +3 -5
  155. runbooks/inventory/list_servicecatalog_provisioned_products.py +37 -41
  156. runbooks/inventory/list_sns_topics.py +2 -4
  157. runbooks/inventory/list_ssm_parameters.py +4 -7
  158. runbooks/inventory/list_vpc_subnets.py +2 -4
  159. runbooks/inventory/list_vpcs.py +7 -10
  160. runbooks/inventory/mcp_inventory_validator.py +554 -468
  161. runbooks/inventory/mcp_vpc_validator.py +359 -442
  162. runbooks/inventory/organizations_discovery.py +63 -55
  163. runbooks/inventory/recover_cfn_stack_ids.py +7 -8
  164. runbooks/inventory/requirements.txt +0 -1
  165. runbooks/inventory/rich_inventory_display.py +35 -34
  166. runbooks/inventory/run_on_multi_accounts.py +3 -5
  167. runbooks/inventory/unified_validation_engine.py +281 -253
  168. runbooks/inventory/verify_ec2_security_groups.py +1 -1
  169. runbooks/inventory/vpc_analyzer.py +735 -697
  170. runbooks/inventory/vpc_architecture_validator.py +293 -348
  171. runbooks/inventory/vpc_dependency_analyzer.py +384 -380
  172. runbooks/inventory/vpc_flow_analyzer.py +1 -1
  173. runbooks/main.py +49 -34
  174. runbooks/main_final.py +91 -60
  175. runbooks/main_minimal.py +22 -10
  176. runbooks/main_optimized.py +131 -100
  177. runbooks/main_ultra_minimal.py +7 -2
  178. runbooks/mcp/__init__.py +36 -0
  179. runbooks/mcp/integration.py +679 -0
  180. runbooks/monitoring/performance_monitor.py +9 -4
  181. runbooks/operate/dynamodb_operations.py +3 -1
  182. runbooks/operate/ec2_operations.py +145 -137
  183. runbooks/operate/iam_operations.py +146 -152
  184. runbooks/operate/networking_cost_heatmap.py +29 -8
  185. runbooks/operate/rds_operations.py +223 -254
  186. runbooks/operate/s3_operations.py +107 -118
  187. runbooks/operate/vpc_operations.py +646 -616
  188. runbooks/remediation/base.py +1 -1
  189. runbooks/remediation/commons.py +10 -7
  190. runbooks/remediation/commvault_ec2_analysis.py +70 -66
  191. runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
  192. runbooks/remediation/multi_account.py +24 -21
  193. runbooks/remediation/rds_snapshot_list.py +86 -60
  194. runbooks/remediation/remediation_cli.py +92 -146
  195. runbooks/remediation/universal_account_discovery.py +83 -79
  196. runbooks/remediation/workspaces_list.py +46 -41
  197. runbooks/security/__init__.py +19 -0
  198. runbooks/security/assessment_runner.py +1150 -0
  199. runbooks/security/baseline_checker.py +812 -0
  200. runbooks/security/cloudops_automation_security_validator.py +509 -535
  201. runbooks/security/compliance_automation_engine.py +17 -17
  202. runbooks/security/config/__init__.py +2 -2
  203. runbooks/security/config/compliance_config.py +50 -50
  204. runbooks/security/config_template_generator.py +63 -76
  205. runbooks/security/enterprise_security_framework.py +1 -1
  206. runbooks/security/executive_security_dashboard.py +519 -508
  207. runbooks/security/multi_account_security_controls.py +959 -1210
  208. runbooks/security/real_time_security_monitor.py +422 -444
  209. runbooks/security/security_baseline_tester.py +1 -1
  210. runbooks/security/security_cli.py +143 -112
  211. runbooks/security/test_2way_validation.py +439 -0
  212. runbooks/security/two_way_validation_framework.py +852 -0
  213. runbooks/sre/production_monitoring_framework.py +167 -177
  214. runbooks/tdd/__init__.py +15 -0
  215. runbooks/tdd/cli.py +1071 -0
  216. runbooks/utils/__init__.py +14 -17
  217. runbooks/utils/logger.py +7 -2
  218. runbooks/utils/version_validator.py +50 -47
  219. runbooks/validation/__init__.py +6 -6
  220. runbooks/validation/cli.py +9 -3
  221. runbooks/validation/comprehensive_2way_validator.py +745 -704
  222. runbooks/validation/mcp_validator.py +906 -228
  223. runbooks/validation/terraform_citations_validator.py +104 -115
  224. runbooks/validation/terraform_drift_detector.py +461 -454
  225. runbooks/vpc/README.md +617 -0
  226. runbooks/vpc/__init__.py +8 -1
  227. runbooks/vpc/analyzer.py +577 -0
  228. runbooks/vpc/cleanup_wrapper.py +476 -413
  229. runbooks/vpc/cli_cloudtrail_commands.py +339 -0
  230. runbooks/vpc/cli_mcp_validation_commands.py +480 -0
  231. runbooks/vpc/cloudtrail_audit_integration.py +717 -0
  232. runbooks/vpc/config.py +92 -97
  233. runbooks/vpc/cost_engine.py +411 -148
  234. runbooks/vpc/cost_explorer_integration.py +553 -0
  235. runbooks/vpc/cross_account_session.py +101 -106
  236. runbooks/vpc/enhanced_mcp_validation.py +917 -0
  237. runbooks/vpc/eni_gate_validator.py +961 -0
  238. runbooks/vpc/heatmap_engine.py +185 -160
  239. runbooks/vpc/mcp_no_eni_validator.py +680 -639
  240. runbooks/vpc/nat_gateway_optimizer.py +358 -0
  241. runbooks/vpc/networking_wrapper.py +15 -8
  242. runbooks/vpc/pdca_remediation_planner.py +528 -0
  243. runbooks/vpc/performance_optimized_analyzer.py +219 -231
  244. runbooks/vpc/runbooks_adapter.py +1167 -241
  245. runbooks/vpc/tdd_red_phase_stubs.py +601 -0
  246. runbooks/vpc/test_data_loader.py +358 -0
  247. runbooks/vpc/tests/conftest.py +314 -4
  248. runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
  249. runbooks/vpc/tests/test_cost_engine.py +0 -2
  250. runbooks/vpc/topology_generator.py +326 -0
  251. runbooks/vpc/unified_scenarios.py +1297 -1124
  252. runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
  253. runbooks-1.1.6.dist-info/METADATA +327 -0
  254. runbooks-1.1.6.dist-info/RECORD +489 -0
  255. runbooks/finops/README.md +0 -414
  256. runbooks/finops/accuracy_cross_validator.py +0 -647
  257. runbooks/finops/business_cases.py +0 -950
  258. runbooks/finops/dashboard_router.py +0 -922
  259. runbooks/finops/ebs_optimizer.py +0 -973
  260. runbooks/finops/embedded_mcp_validator.py +0 -1629
  261. runbooks/finops/enhanced_dashboard_runner.py +0 -527
  262. runbooks/finops/finops_dashboard.py +0 -584
  263. runbooks/finops/finops_scenarios.py +0 -1218
  264. runbooks/finops/legacy_migration.py +0 -730
  265. runbooks/finops/multi_dashboard.py +0 -1519
  266. runbooks/finops/single_dashboard.py +0 -1113
  267. runbooks/finops/unlimited_scenarios.py +0 -393
  268. runbooks-1.1.4.dist-info/METADATA +0 -800
  269. runbooks-1.1.4.dist-info/RECORD +0 -468
  270. {runbooks-1.1.4.dist-info → runbooks-1.1.6.dist-info}/WHEEL +0 -0
  271. {runbooks-1.1.4.dist-info → runbooks-1.1.6.dist-info}/entry_points.txt +0 -0
  272. {runbooks-1.1.4.dist-info → runbooks-1.1.6.dist-info}/licenses/LICENSE +0 -0
  273. {runbooks-1.1.4.dist-info → runbooks-1.1.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,439 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ 🚨 2-Way Validation Framework Test Suite
4
+ DevOps Security Engineer Implementation
5
+
6
+ **SECURITY TEST COORDINATION**:
7
+ - devops-security-engineer [5]: Lead validation testing and certification
8
+ - qa-testing-specialist [3]: Test framework validation and accuracy measurement
9
+ - python-runbooks-engineer [1]: Technical implementation validation
10
+ - enterprise-product-owner [0]: Production readiness approval
11
+
12
+ **TEST SCOPE**:
13
+ - Playwright MCP: UI/browser testing validation achieving >98% success rate
14
+ - AWS MCP: Real AWS API cross-validation achieving >97.5% accuracy
15
+ - Combined Accuracy: ≥97% overall validation requirement
16
+ - Enterprise Compliance: Audit trail and production certification
17
+ """
18
+
19
+ import asyncio
20
+ import sys
21
+ import time
22
+ from pathlib import Path
23
+
24
+ from runbooks.common.rich_utils import (
25
+ console,
26
+ create_panel,
27
+ create_progress_bar,
28
+ create_table,
29
+ print_error,
30
+ print_info,
31
+ print_success,
32
+ print_warning,
33
+ )
34
+ from runbooks.security.two_way_validation_framework import TwoWayValidationFramework
35
+
36
+
37
+ class TwoWayValidationTestSuite:
38
+ """
39
+ Comprehensive test suite for 2-Way Validation Framework
40
+
41
+ Tests both individual components and integrated validation workflow
42
+ to ensure enterprise production readiness certification.
43
+ """
44
+
45
+ def __init__(self, profile: str = "ams-admin-ReadOnlyAccess-909135376185"):
46
+ self.profile = profile
47
+ self.test_results = []
48
+ self.overall_status = "UNKNOWN"
49
+
50
+ async def run_comprehensive_tests(self) -> dict:
51
+ """
52
+ Execute comprehensive 2-way validation test suite
53
+
54
+ Returns:
55
+ dict: Complete test results with pass/fail status
56
+ """
57
+ console.print(
58
+ create_panel(
59
+ "[bold cyan]🧪 2-Way Validation Framework Test Suite[/bold cyan]\n\n"
60
+ f"[dim]Profile: {self.profile}[/dim]\n"
61
+ "[dim]Testing Playwright MCP + AWS MCP Integration[/dim]",
62
+ title="🚨 Starting Security Validation Tests",
63
+ border_style="cyan",
64
+ )
65
+ )
66
+
67
+ print_info("🚀 Executing comprehensive validation test suite...")
68
+
69
+ # Test 1: Framework Initialization
70
+ init_result = await self._test_framework_initialization()
71
+ self.test_results.append(init_result)
72
+
73
+ # Test 2: Playwright MCP Component Testing
74
+ playwright_result = await self._test_playwright_mcp_component()
75
+ self.test_results.append(playwright_result)
76
+
77
+ # Test 3: AWS MCP Component Testing
78
+ aws_mcp_result = await self._test_aws_mcp_component()
79
+ self.test_results.append(aws_mcp_result)
80
+
81
+ # Test 4: Combined Accuracy Calculation
82
+ accuracy_result = await self._test_combined_accuracy_calculation()
83
+ self.test_results.append(accuracy_result)
84
+
85
+ # Test 5: Enterprise Compliance Assessment
86
+ compliance_result = await self._test_enterprise_compliance()
87
+ self.test_results.append(compliance_result)
88
+
89
+ # Test 6: Production Certification Generation
90
+ certification_result = await self._test_production_certification()
91
+ self.test_results.append(certification_result)
92
+
93
+ # Test 7: Full Integration Test
94
+ integration_result = await self._test_full_integration()
95
+ self.test_results.append(integration_result)
96
+
97
+ # Generate test summary
98
+ test_summary = self._generate_test_summary()
99
+
100
+ return test_summary
101
+
102
+ async def _test_framework_initialization(self) -> dict:
103
+ """Test framework initialization and configuration"""
104
+ print_info("🔧 Test 1: Framework Initialization")
105
+
106
+ try:
107
+ # Initialize framework
108
+ framework = TwoWayValidationFramework(profile=self.profile)
109
+
110
+ # Validate initialization
111
+ assert hasattr(framework, "profile")
112
+ assert hasattr(framework, "playwright_target")
113
+ assert hasattr(framework, "aws_mcp_target")
114
+ assert hasattr(framework, "combined_target")
115
+
116
+ # Validate accuracy targets
117
+ assert framework.playwright_target == 0.98
118
+ assert framework.aws_mcp_target == 0.975
119
+ assert framework.combined_target == 0.97
120
+
121
+ print_success("✅ Framework initialization passed")
122
+ return {
123
+ "test": "framework_initialization",
124
+ "status": "PASS",
125
+ "details": "Framework initialized with correct targets and configuration",
126
+ }
127
+
128
+ except Exception as e:
129
+ print_error(f"❌ Framework initialization failed: {str(e)}")
130
+ return {"test": "framework_initialization", "status": "FAIL", "details": f"Initialization error: {str(e)}"}
131
+
132
+ async def _test_playwright_mcp_component(self) -> dict:
133
+ """Test Playwright MCP component validation"""
134
+ print_info("🎭 Test 2: Playwright MCP Component")
135
+
136
+ try:
137
+ framework = TwoWayValidationFramework(profile=self.profile)
138
+
139
+ # Test individual Playwright validation methods
140
+ install_test = await framework._validate_playwright_installation()
141
+ assert install_test["test"] == "playwright_installation"
142
+
143
+ connectivity_test = await framework._validate_playwright_mcp_connectivity()
144
+ assert connectivity_test["test"] == "playwright_mcp_connectivity"
145
+
146
+ automation_test = await framework._validate_browser_automation()
147
+ assert automation_test["test"] == "browser_automation"
148
+
149
+ screenshot_test = await framework._validate_screenshot_capture()
150
+ assert screenshot_test["test"] == "screenshot_capture"
151
+
152
+ visual_test = await framework._validate_visual_testing_framework()
153
+ assert visual_test["test"] == "visual_testing_framework"
154
+
155
+ print_success("✅ Playwright MCP component tests passed")
156
+ return {
157
+ "test": "playwright_mcp_component",
158
+ "status": "PASS",
159
+ "details": "All Playwright MCP validation methods functional",
160
+ }
161
+
162
+ except Exception as e:
163
+ print_error(f"❌ Playwright MCP component failed: {str(e)}")
164
+ return {"test": "playwright_mcp_component", "status": "FAIL", "details": f"Component error: {str(e)}"}
165
+
166
+ async def _test_aws_mcp_component(self) -> dict:
167
+ """Test AWS MCP component validation"""
168
+ print_info("☁️ Test 3: AWS MCP Component")
169
+
170
+ try:
171
+ framework = TwoWayValidationFramework(profile=self.profile)
172
+
173
+ # Test individual AWS MCP validation methods
174
+ cost_test = await framework._validate_cost_explorer_mcp()
175
+ assert cost_test["validation"] == "cost_explorer_mcp"
176
+ assert "accuracy" in cost_test
177
+
178
+ iam_test = await framework._validate_iam_mcp()
179
+ assert iam_test["validation"] == "iam_mcp"
180
+ assert "accuracy" in iam_test
181
+
182
+ cloudwatch_test = await framework._validate_cloudwatch_mcp()
183
+ assert cloudwatch_test["validation"] == "cloudwatch_mcp"
184
+ assert "accuracy" in cloudwatch_test
185
+
186
+ security_test = await framework._validate_security_baseline_mcp()
187
+ assert security_test["validation"] == "security_baseline_mcp"
188
+ assert "accuracy" in security_test
189
+
190
+ print_success("✅ AWS MCP component tests passed")
191
+ return {
192
+ "test": "aws_mcp_component",
193
+ "status": "PASS",
194
+ "details": "All AWS MCP validation methods functional",
195
+ }
196
+
197
+ except Exception as e:
198
+ print_error(f"❌ AWS MCP component failed: {str(e)}")
199
+ return {"test": "aws_mcp_component", "status": "FAIL", "details": f"Component error: {str(e)}"}
200
+
201
+ async def _test_combined_accuracy_calculation(self) -> dict:
202
+ """Test combined accuracy calculation logic"""
203
+ print_info("📊 Test 4: Combined Accuracy Calculation")
204
+
205
+ try:
206
+ framework = TwoWayValidationFramework(profile=self.profile)
207
+
208
+ # Create test data
209
+ playwright_results = {"success_rate": 0.98, "target_met": True}
210
+
211
+ aws_mcp_results = {"accuracy_rate": 0.975, "target_met": True}
212
+
213
+ # Test combined accuracy calculation
214
+ combined_results = framework._calculate_combined_accuracy(playwright_results, aws_mcp_results)
215
+
216
+ # Validate calculation
217
+ expected_accuracy = (0.98 + 0.975) / 2
218
+ assert combined_results["combined_accuracy"] == expected_accuracy
219
+ assert combined_results["target_met"] == True
220
+ assert combined_results["production_ready"] == True
221
+
222
+ print_success("✅ Combined accuracy calculation passed")
223
+ return {
224
+ "test": "combined_accuracy_calculation",
225
+ "status": "PASS",
226
+ "details": f"Accuracy calculation correct: {expected_accuracy * 100:.1f}%",
227
+ }
228
+
229
+ except Exception as e:
230
+ print_error(f"❌ Combined accuracy calculation failed: {str(e)}")
231
+ return {
232
+ "test": "combined_accuracy_calculation",
233
+ "status": "FAIL",
234
+ "details": f"Calculation error: {str(e)}",
235
+ }
236
+
237
+ async def _test_enterprise_compliance(self) -> dict:
238
+ """Test enterprise compliance assessment"""
239
+ print_info("🏢 Test 5: Enterprise Compliance Assessment")
240
+
241
+ try:
242
+ framework = TwoWayValidationFramework(profile=self.profile)
243
+
244
+ # Create test combined results
245
+ combined_results = {"target_met": True, "production_ready": True}
246
+
247
+ # Test compliance assessment
248
+ compliance_results = framework._assess_enterprise_compliance(combined_results)
249
+
250
+ # Validate compliance assessment
251
+ assert "audit_trail_complete" in compliance_results
252
+ assert "security_standards_met" in compliance_results
253
+ assert "accuracy_requirements_met" in compliance_results
254
+ assert "compliance_score" in compliance_results
255
+
256
+ print_success("✅ Enterprise compliance assessment passed")
257
+ return {
258
+ "test": "enterprise_compliance",
259
+ "status": "PASS",
260
+ "details": f"Compliance score: {compliance_results['compliance_score'] * 100:.1f}%",
261
+ }
262
+
263
+ except Exception as e:
264
+ print_error(f"❌ Enterprise compliance assessment failed: {str(e)}")
265
+ return {"test": "enterprise_compliance", "status": "FAIL", "details": f"Compliance error: {str(e)}"}
266
+
267
+ async def _test_production_certification(self) -> dict:
268
+ """Test production certification generation"""
269
+ print_info("🏆 Test 6: Production Certification Generation")
270
+
271
+ try:
272
+ framework = TwoWayValidationFramework(profile=self.profile)
273
+
274
+ # Create test data for certification
275
+ playwright_results = {"success_rate": 0.98, "target_met": True}
276
+
277
+ aws_mcp_results = {"accuracy_rate": 0.975, "target_met": True}
278
+
279
+ combined_results = {"combined_accuracy": 0.9775, "target_met": True, "production_ready": True}
280
+
281
+ compliance_results = {"compliance_score": 1.0, "production_deployment_approved": True}
282
+
283
+ # Test certification generation
284
+ certification = framework._generate_production_certification(
285
+ playwright_results, aws_mcp_results, combined_results, compliance_results
286
+ )
287
+
288
+ # Validate certification
289
+ assert "certification_id" in certification
290
+ assert "overall_status" in certification
291
+ assert certification["overall_status"] == "CERTIFIED"
292
+ assert "evidence_package" in certification
293
+
294
+ print_success("✅ Production certification generation passed")
295
+ return {
296
+ "test": "production_certification",
297
+ "status": "PASS",
298
+ "details": f"Certification: {certification['overall_status']}",
299
+ }
300
+
301
+ except Exception as e:
302
+ print_error(f"❌ Production certification generation failed: {str(e)}")
303
+ return {"test": "production_certification", "status": "FAIL", "details": f"Certification error: {str(e)}"}
304
+
305
+ async def _test_full_integration(self) -> dict:
306
+ """Test full integration workflow"""
307
+ print_info("🔄 Test 7: Full Integration Workflow")
308
+
309
+ try:
310
+ framework = TwoWayValidationFramework(profile=self.profile)
311
+
312
+ # Execute full validation workflow
313
+ certification_results = await framework.execute_comprehensive_validation()
314
+
315
+ # Validate integration results
316
+ assert "certification_id" in certification_results
317
+ assert "overall_status" in certification_results
318
+ assert "playwright_validation" in certification_results
319
+ assert "aws_mcp_validation" in certification_results
320
+ assert "combined_accuracy" in certification_results
321
+ assert "enterprise_compliance" in certification_results
322
+
323
+ # Validate certification evidence
324
+ assert "evidence_package" in certification_results
325
+ assert "validation_metrics" in certification_results["evidence_package"]
326
+
327
+ print_success("✅ Full integration workflow passed")
328
+ return {
329
+ "test": "full_integration",
330
+ "status": "PASS",
331
+ "details": f"Integration complete: {certification_results['overall_status']}",
332
+ }
333
+
334
+ except Exception as e:
335
+ print_error(f"❌ Full integration workflow failed: {str(e)}")
336
+ return {"test": "full_integration", "status": "FAIL", "details": f"Integration error: {str(e)}"}
337
+
338
+ def _generate_test_summary(self) -> dict:
339
+ """Generate comprehensive test summary"""
340
+ print_info("📋 Generating Test Summary...")
341
+
342
+ # Count results
343
+ total_tests = len(self.test_results)
344
+ passed_tests = len([r for r in self.test_results if r["status"] == "PASS"])
345
+ failed_tests = len([r for r in self.test_results if r["status"] == "FAIL"])
346
+
347
+ # Calculate success rate
348
+ success_rate = (passed_tests / total_tests) * 100 if total_tests > 0 else 0
349
+
350
+ # Determine overall status
351
+ if success_rate >= 100:
352
+ self.overall_status = "ALL_TESTS_PASSED"
353
+ status_style = "success"
354
+ status_icon = "✅"
355
+ elif success_rate >= 85:
356
+ self.overall_status = "MOSTLY_PASSED"
357
+ status_style = "warning"
358
+ status_icon = "⚠️"
359
+ else:
360
+ self.overall_status = "TESTS_FAILED"
361
+ status_style = "error"
362
+ status_icon = "❌"
363
+
364
+ # Create test results table
365
+ table = create_table(
366
+ title="🧪 2-Way Validation Test Results",
367
+ columns=[
368
+ {"name": "Test", "style": "bold", "justify": "left"},
369
+ {"name": "Status", "style": "bold", "justify": "center"},
370
+ {"name": "Details", "style": "dim", "justify": "left"},
371
+ ],
372
+ )
373
+
374
+ for result in self.test_results:
375
+ status_text = "✅ PASS" if result["status"] == "PASS" else "❌ FAIL"
376
+ status_style_row = "success" if result["status"] == "PASS" else "error"
377
+
378
+ table.add_row(result["test"], status_text, result["details"], style=status_style_row)
379
+
380
+ console.print(table)
381
+
382
+ # Display overall summary
383
+ summary = f"""[bold {status_style}]{status_icon} Test Suite: {self.overall_status}[/bold {status_style}]
384
+
385
+ [cyan]Total Tests:[/cyan] {total_tests}
386
+ [cyan]Tests Passed:[/cyan] {passed_tests}
387
+ [cyan]Tests Failed:[/cyan] {failed_tests}
388
+ [cyan]Success Rate:[/cyan] {success_rate:.1f}%
389
+
390
+ [dim]2-Way Validation Framework readiness: {"Production Ready" if success_rate >= 100 else "Requires Review"}[/dim]"""
391
+
392
+ console.print(create_panel(summary, title="📊 Test Suite Summary", border_style=status_style))
393
+
394
+ return {
395
+ "test_suite": "2way_validation_framework",
396
+ "total_tests": total_tests,
397
+ "passed_tests": passed_tests,
398
+ "failed_tests": failed_tests,
399
+ "success_rate": success_rate,
400
+ "overall_status": self.overall_status,
401
+ "production_ready": success_rate >= 100,
402
+ "test_results": self.test_results,
403
+ }
404
+
405
+
406
+ async def main():
407
+ """Main test execution function"""
408
+ console.print(
409
+ create_panel(
410
+ "[bold white]🚨 2-Way Validation Framework Test Suite[/bold white]\n\n"
411
+ "[dim]Comprehensive testing of Playwright MCP + AWS MCP integration[/dim]",
412
+ title="🧪 Starting Test Execution",
413
+ border_style="cyan",
414
+ )
415
+ )
416
+
417
+ # Initialize test suite
418
+ profile = sys.argv[1] if len(sys.argv) > 1 else "ams-admin-ReadOnlyAccess-909135376185"
419
+ test_suite = TwoWayValidationTestSuite(profile=profile)
420
+
421
+ # Execute tests
422
+ test_summary = await test_suite.run_comprehensive_tests()
423
+
424
+ # Display final results
425
+ if test_summary["production_ready"]:
426
+ print_success("🏆 2-Way Validation Framework: PRODUCTION READY")
427
+ else:
428
+ print_warning("⚠️ 2-Way Validation Framework: REQUIRES REVIEW")
429
+
430
+ print_info(f"📊 Test Success Rate: {test_summary['success_rate']:.1f}%")
431
+
432
+ # Exit with appropriate code
433
+ return 0 if test_summary["production_ready"] else 1
434
+
435
+
436
+ if __name__ == "__main__":
437
+ # Execute test suite
438
+ exit_code = asyncio.run(main())
439
+ sys.exit(exit_code)