runbooks 1.1.3__py3-none-any.whl → 1.1.5__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 (247) 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/WEIGHT_CONFIG_README.md +1 -1
  8. runbooks/cfat/assessment/compliance.py +8 -8
  9. runbooks/cfat/assessment/runner.py +1 -0
  10. runbooks/cfat/cloud_foundations_assessment.py +227 -239
  11. runbooks/cfat/models.py +6 -2
  12. runbooks/cfat/tests/__init__.py +6 -1
  13. runbooks/cli/__init__.py +13 -0
  14. runbooks/cli/commands/cfat.py +274 -0
  15. runbooks/cli/commands/finops.py +1164 -0
  16. runbooks/cli/commands/inventory.py +379 -0
  17. runbooks/cli/commands/operate.py +239 -0
  18. runbooks/cli/commands/security.py +248 -0
  19. runbooks/cli/commands/validation.py +825 -0
  20. runbooks/cli/commands/vpc.py +310 -0
  21. runbooks/cli/registry.py +107 -0
  22. runbooks/cloudops/__init__.py +23 -30
  23. runbooks/cloudops/base.py +96 -107
  24. runbooks/cloudops/cost_optimizer.py +549 -547
  25. runbooks/cloudops/infrastructure_optimizer.py +5 -4
  26. runbooks/cloudops/interfaces.py +226 -227
  27. runbooks/cloudops/lifecycle_manager.py +5 -4
  28. runbooks/cloudops/mcp_cost_validation.py +252 -235
  29. runbooks/cloudops/models.py +78 -53
  30. runbooks/cloudops/monitoring_automation.py +5 -4
  31. runbooks/cloudops/notebook_framework.py +179 -215
  32. runbooks/cloudops/security_enforcer.py +125 -159
  33. runbooks/common/accuracy_validator.py +11 -0
  34. runbooks/common/aws_pricing.py +349 -326
  35. runbooks/common/aws_pricing_api.py +211 -212
  36. runbooks/common/aws_profile_manager.py +341 -0
  37. runbooks/common/aws_utils.py +75 -80
  38. runbooks/common/business_logic.py +127 -105
  39. runbooks/common/cli_decorators.py +36 -60
  40. runbooks/common/comprehensive_cost_explorer_integration.py +456 -464
  41. runbooks/common/cross_account_manager.py +198 -205
  42. runbooks/common/date_utils.py +27 -39
  43. runbooks/common/decorators.py +235 -0
  44. runbooks/common/dry_run_examples.py +173 -208
  45. runbooks/common/dry_run_framework.py +157 -155
  46. runbooks/common/enhanced_exception_handler.py +15 -4
  47. runbooks/common/enhanced_logging_example.py +50 -64
  48. runbooks/common/enhanced_logging_integration_example.py +65 -37
  49. runbooks/common/env_utils.py +16 -16
  50. runbooks/common/error_handling.py +40 -38
  51. runbooks/common/lazy_loader.py +41 -23
  52. runbooks/common/logging_integration_helper.py +79 -86
  53. runbooks/common/mcp_cost_explorer_integration.py +478 -495
  54. runbooks/common/mcp_integration.py +63 -74
  55. runbooks/common/memory_optimization.py +140 -118
  56. runbooks/common/module_cli_base.py +37 -58
  57. runbooks/common/organizations_client.py +176 -194
  58. runbooks/common/patterns.py +204 -0
  59. runbooks/common/performance_monitoring.py +67 -71
  60. runbooks/common/performance_optimization_engine.py +283 -274
  61. runbooks/common/profile_utils.py +248 -39
  62. runbooks/common/rich_utils.py +643 -92
  63. runbooks/common/sre_performance_suite.py +177 -186
  64. runbooks/enterprise/__init__.py +1 -1
  65. runbooks/enterprise/logging.py +144 -106
  66. runbooks/enterprise/security.py +187 -204
  67. runbooks/enterprise/validation.py +43 -56
  68. runbooks/finops/__init__.py +29 -33
  69. runbooks/finops/account_resolver.py +1 -1
  70. runbooks/finops/advanced_optimization_engine.py +980 -0
  71. runbooks/finops/automation_core.py +268 -231
  72. runbooks/finops/business_case_config.py +184 -179
  73. runbooks/finops/cli.py +660 -139
  74. runbooks/finops/commvault_ec2_analysis.py +157 -164
  75. runbooks/finops/compute_cost_optimizer.py +336 -320
  76. runbooks/finops/config.py +20 -20
  77. runbooks/finops/cost_optimizer.py +488 -622
  78. runbooks/finops/cost_processor.py +332 -214
  79. runbooks/finops/dashboard_runner.py +1006 -172
  80. runbooks/finops/ebs_cost_optimizer.py +991 -657
  81. runbooks/finops/elastic_ip_optimizer.py +317 -257
  82. runbooks/finops/enhanced_mcp_integration.py +340 -0
  83. runbooks/finops/enhanced_progress.py +40 -37
  84. runbooks/finops/enhanced_trend_visualization.py +3 -2
  85. runbooks/finops/enterprise_wrappers.py +230 -292
  86. runbooks/finops/executive_export.py +203 -160
  87. runbooks/finops/helpers.py +130 -288
  88. runbooks/finops/iam_guidance.py +1 -1
  89. runbooks/finops/infrastructure/__init__.py +80 -0
  90. runbooks/finops/infrastructure/commands.py +506 -0
  91. runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
  92. runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
  93. runbooks/finops/markdown_exporter.py +338 -175
  94. runbooks/finops/mcp_validator.py +1952 -0
  95. runbooks/finops/nat_gateway_optimizer.py +1513 -482
  96. runbooks/finops/network_cost_optimizer.py +657 -587
  97. runbooks/finops/notebook_utils.py +226 -188
  98. runbooks/finops/optimization_engine.py +1136 -0
  99. runbooks/finops/optimizer.py +25 -29
  100. runbooks/finops/rds_snapshot_optimizer.py +367 -411
  101. runbooks/finops/reservation_optimizer.py +427 -363
  102. runbooks/finops/scenario_cli_integration.py +77 -78
  103. runbooks/finops/scenarios.py +1278 -439
  104. runbooks/finops/schemas.py +218 -182
  105. runbooks/finops/snapshot_manager.py +2289 -0
  106. runbooks/finops/tests/test_finops_dashboard.py +3 -3
  107. runbooks/finops/tests/test_reference_images_validation.py +2 -2
  108. runbooks/finops/tests/test_single_account_features.py +17 -17
  109. runbooks/finops/tests/validate_test_suite.py +1 -1
  110. runbooks/finops/types.py +3 -3
  111. runbooks/finops/validation_framework.py +263 -269
  112. runbooks/finops/vpc_cleanup_exporter.py +191 -146
  113. runbooks/finops/vpc_cleanup_optimizer.py +593 -575
  114. runbooks/finops/workspaces_analyzer.py +171 -182
  115. runbooks/hitl/enhanced_workflow_engine.py +1 -1
  116. runbooks/integration/__init__.py +89 -0
  117. runbooks/integration/mcp_integration.py +1920 -0
  118. runbooks/inventory/CLAUDE.md +816 -0
  119. runbooks/inventory/README.md +3 -3
  120. runbooks/inventory/Tests/common_test_data.py +30 -30
  121. runbooks/inventory/__init__.py +2 -2
  122. runbooks/inventory/cloud_foundations_integration.py +144 -149
  123. runbooks/inventory/collectors/aws_comprehensive.py +28 -11
  124. runbooks/inventory/collectors/aws_networking.py +111 -101
  125. runbooks/inventory/collectors/base.py +4 -0
  126. runbooks/inventory/core/collector.py +495 -313
  127. runbooks/inventory/discovery.md +2 -2
  128. runbooks/inventory/drift_detection_cli.py +69 -96
  129. runbooks/inventory/find_ec2_security_groups.py +1 -1
  130. runbooks/inventory/inventory_mcp_cli.py +48 -46
  131. runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
  132. runbooks/inventory/mcp_inventory_validator.py +549 -465
  133. runbooks/inventory/mcp_vpc_validator.py +359 -442
  134. runbooks/inventory/organizations_discovery.py +56 -52
  135. runbooks/inventory/rich_inventory_display.py +33 -32
  136. runbooks/inventory/unified_validation_engine.py +278 -251
  137. runbooks/inventory/vpc_analyzer.py +733 -696
  138. runbooks/inventory/vpc_architecture_validator.py +293 -348
  139. runbooks/inventory/vpc_dependency_analyzer.py +382 -378
  140. runbooks/inventory/vpc_flow_analyzer.py +3 -3
  141. runbooks/main.py +152 -9147
  142. runbooks/main_final.py +91 -60
  143. runbooks/main_minimal.py +22 -10
  144. runbooks/main_optimized.py +131 -100
  145. runbooks/main_ultra_minimal.py +7 -2
  146. runbooks/mcp/__init__.py +36 -0
  147. runbooks/mcp/integration.py +679 -0
  148. runbooks/metrics/dora_metrics_engine.py +2 -2
  149. runbooks/monitoring/performance_monitor.py +9 -4
  150. runbooks/operate/dynamodb_operations.py +3 -1
  151. runbooks/operate/ec2_operations.py +145 -137
  152. runbooks/operate/iam_operations.py +146 -152
  153. runbooks/operate/mcp_integration.py +1 -1
  154. runbooks/operate/networking_cost_heatmap.py +33 -10
  155. runbooks/operate/privatelink_operations.py +1 -1
  156. runbooks/operate/rds_operations.py +223 -254
  157. runbooks/operate/s3_operations.py +107 -118
  158. runbooks/operate/vpc_endpoints.py +1 -1
  159. runbooks/operate/vpc_operations.py +648 -618
  160. runbooks/remediation/base.py +1 -1
  161. runbooks/remediation/commons.py +10 -7
  162. runbooks/remediation/commvault_ec2_analysis.py +71 -67
  163. runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
  164. runbooks/remediation/multi_account.py +24 -21
  165. runbooks/remediation/rds_snapshot_list.py +91 -65
  166. runbooks/remediation/remediation_cli.py +92 -146
  167. runbooks/remediation/universal_account_discovery.py +83 -79
  168. runbooks/remediation/workspaces_list.py +49 -44
  169. runbooks/security/__init__.py +19 -0
  170. runbooks/security/assessment_runner.py +1150 -0
  171. runbooks/security/baseline_checker.py +812 -0
  172. runbooks/security/cloudops_automation_security_validator.py +509 -535
  173. runbooks/security/compliance_automation_engine.py +17 -17
  174. runbooks/security/config/__init__.py +2 -2
  175. runbooks/security/config/compliance_config.py +50 -50
  176. runbooks/security/config_template_generator.py +63 -76
  177. runbooks/security/enterprise_security_framework.py +1 -1
  178. runbooks/security/executive_security_dashboard.py +519 -508
  179. runbooks/security/integration_test_enterprise_security.py +5 -3
  180. runbooks/security/multi_account_security_controls.py +959 -1210
  181. runbooks/security/real_time_security_monitor.py +422 -444
  182. runbooks/security/run_script.py +1 -1
  183. runbooks/security/security_baseline_tester.py +1 -1
  184. runbooks/security/security_cli.py +143 -112
  185. runbooks/security/test_2way_validation.py +439 -0
  186. runbooks/security/two_way_validation_framework.py +852 -0
  187. runbooks/sre/mcp_reliability_engine.py +6 -6
  188. runbooks/sre/production_monitoring_framework.py +167 -177
  189. runbooks/tdd/__init__.py +15 -0
  190. runbooks/tdd/cli.py +1071 -0
  191. runbooks/utils/__init__.py +14 -17
  192. runbooks/utils/logger.py +7 -2
  193. runbooks/utils/version_validator.py +51 -48
  194. runbooks/validation/__init__.py +6 -6
  195. runbooks/validation/cli.py +9 -3
  196. runbooks/validation/comprehensive_2way_validator.py +754 -708
  197. runbooks/validation/mcp_validator.py +906 -228
  198. runbooks/validation/terraform_citations_validator.py +104 -115
  199. runbooks/validation/terraform_drift_detector.py +447 -451
  200. runbooks/vpc/README.md +617 -0
  201. runbooks/vpc/__init__.py +8 -1
  202. runbooks/vpc/analyzer.py +577 -0
  203. runbooks/vpc/cleanup_wrapper.py +476 -413
  204. runbooks/vpc/cli_cloudtrail_commands.py +339 -0
  205. runbooks/vpc/cli_mcp_validation_commands.py +480 -0
  206. runbooks/vpc/cloudtrail_audit_integration.py +717 -0
  207. runbooks/vpc/config.py +92 -97
  208. runbooks/vpc/cost_engine.py +411 -148
  209. runbooks/vpc/cost_explorer_integration.py +553 -0
  210. runbooks/vpc/cross_account_session.py +101 -106
  211. runbooks/vpc/enhanced_mcp_validation.py +917 -0
  212. runbooks/vpc/eni_gate_validator.py +961 -0
  213. runbooks/vpc/heatmap_engine.py +190 -162
  214. runbooks/vpc/mcp_no_eni_validator.py +681 -640
  215. runbooks/vpc/nat_gateway_optimizer.py +358 -0
  216. runbooks/vpc/networking_wrapper.py +15 -8
  217. runbooks/vpc/pdca_remediation_planner.py +528 -0
  218. runbooks/vpc/performance_optimized_analyzer.py +219 -231
  219. runbooks/vpc/runbooks_adapter.py +1167 -241
  220. runbooks/vpc/tdd_red_phase_stubs.py +601 -0
  221. runbooks/vpc/test_data_loader.py +358 -0
  222. runbooks/vpc/tests/conftest.py +314 -4
  223. runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
  224. runbooks/vpc/tests/test_cost_engine.py +0 -2
  225. runbooks/vpc/topology_generator.py +326 -0
  226. runbooks/vpc/unified_scenarios.py +1302 -1129
  227. runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
  228. runbooks-1.1.5.dist-info/METADATA +328 -0
  229. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/RECORD +233 -200
  230. runbooks/finops/README.md +0 -414
  231. runbooks/finops/accuracy_cross_validator.py +0 -647
  232. runbooks/finops/business_cases.py +0 -950
  233. runbooks/finops/dashboard_router.py +0 -922
  234. runbooks/finops/ebs_optimizer.py +0 -956
  235. runbooks/finops/embedded_mcp_validator.py +0 -1629
  236. runbooks/finops/enhanced_dashboard_runner.py +0 -527
  237. runbooks/finops/finops_dashboard.py +0 -584
  238. runbooks/finops/finops_scenarios.py +0 -1218
  239. runbooks/finops/legacy_migration.py +0 -730
  240. runbooks/finops/multi_dashboard.py +0 -1519
  241. runbooks/finops/single_dashboard.py +0 -1113
  242. runbooks/finops/unlimited_scenarios.py +0 -393
  243. runbooks-1.1.3.dist-info/METADATA +0 -799
  244. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
  245. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
  246. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
  247. {runbooks-1.1.3.dist-info → runbooks-1.1.5.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)