runbooks 1.1.4__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 (228) 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 +138 -35
  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 +11 -0
  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 +63 -74
  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 +201 -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/cloud_foundations_integration.py +144 -149
  113. runbooks/inventory/collectors/aws_comprehensive.py +1 -1
  114. runbooks/inventory/collectors/aws_networking.py +109 -99
  115. runbooks/inventory/collectors/base.py +4 -0
  116. runbooks/inventory/core/collector.py +495 -313
  117. runbooks/inventory/drift_detection_cli.py +69 -96
  118. runbooks/inventory/inventory_mcp_cli.py +48 -46
  119. runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
  120. runbooks/inventory/mcp_inventory_validator.py +549 -465
  121. runbooks/inventory/mcp_vpc_validator.py +359 -442
  122. runbooks/inventory/organizations_discovery.py +55 -51
  123. runbooks/inventory/rich_inventory_display.py +33 -32
  124. runbooks/inventory/unified_validation_engine.py +278 -251
  125. runbooks/inventory/vpc_analyzer.py +732 -695
  126. runbooks/inventory/vpc_architecture_validator.py +293 -348
  127. runbooks/inventory/vpc_dependency_analyzer.py +382 -378
  128. runbooks/inventory/vpc_flow_analyzer.py +1 -1
  129. runbooks/main.py +49 -34
  130. runbooks/main_final.py +91 -60
  131. runbooks/main_minimal.py +22 -10
  132. runbooks/main_optimized.py +131 -100
  133. runbooks/main_ultra_minimal.py +7 -2
  134. runbooks/mcp/__init__.py +36 -0
  135. runbooks/mcp/integration.py +679 -0
  136. runbooks/monitoring/performance_monitor.py +9 -4
  137. runbooks/operate/dynamodb_operations.py +3 -1
  138. runbooks/operate/ec2_operations.py +145 -137
  139. runbooks/operate/iam_operations.py +146 -152
  140. runbooks/operate/networking_cost_heatmap.py +29 -8
  141. runbooks/operate/rds_operations.py +223 -254
  142. runbooks/operate/s3_operations.py +107 -118
  143. runbooks/operate/vpc_operations.py +646 -616
  144. runbooks/remediation/base.py +1 -1
  145. runbooks/remediation/commons.py +10 -7
  146. runbooks/remediation/commvault_ec2_analysis.py +70 -66
  147. runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
  148. runbooks/remediation/multi_account.py +24 -21
  149. runbooks/remediation/rds_snapshot_list.py +86 -60
  150. runbooks/remediation/remediation_cli.py +92 -146
  151. runbooks/remediation/universal_account_discovery.py +83 -79
  152. runbooks/remediation/workspaces_list.py +46 -41
  153. runbooks/security/__init__.py +19 -0
  154. runbooks/security/assessment_runner.py +1150 -0
  155. runbooks/security/baseline_checker.py +812 -0
  156. runbooks/security/cloudops_automation_security_validator.py +509 -535
  157. runbooks/security/compliance_automation_engine.py +17 -17
  158. runbooks/security/config/__init__.py +2 -2
  159. runbooks/security/config/compliance_config.py +50 -50
  160. runbooks/security/config_template_generator.py +63 -76
  161. runbooks/security/enterprise_security_framework.py +1 -1
  162. runbooks/security/executive_security_dashboard.py +519 -508
  163. runbooks/security/multi_account_security_controls.py +959 -1210
  164. runbooks/security/real_time_security_monitor.py +422 -444
  165. runbooks/security/security_baseline_tester.py +1 -1
  166. runbooks/security/security_cli.py +143 -112
  167. runbooks/security/test_2way_validation.py +439 -0
  168. runbooks/security/two_way_validation_framework.py +852 -0
  169. runbooks/sre/production_monitoring_framework.py +167 -177
  170. runbooks/tdd/__init__.py +15 -0
  171. runbooks/tdd/cli.py +1071 -0
  172. runbooks/utils/__init__.py +14 -17
  173. runbooks/utils/logger.py +7 -2
  174. runbooks/utils/version_validator.py +50 -47
  175. runbooks/validation/__init__.py +6 -6
  176. runbooks/validation/cli.py +9 -3
  177. runbooks/validation/comprehensive_2way_validator.py +745 -704
  178. runbooks/validation/mcp_validator.py +906 -228
  179. runbooks/validation/terraform_citations_validator.py +104 -115
  180. runbooks/validation/terraform_drift_detector.py +447 -451
  181. runbooks/vpc/README.md +617 -0
  182. runbooks/vpc/__init__.py +8 -1
  183. runbooks/vpc/analyzer.py +577 -0
  184. runbooks/vpc/cleanup_wrapper.py +476 -413
  185. runbooks/vpc/cli_cloudtrail_commands.py +339 -0
  186. runbooks/vpc/cli_mcp_validation_commands.py +480 -0
  187. runbooks/vpc/cloudtrail_audit_integration.py +717 -0
  188. runbooks/vpc/config.py +92 -97
  189. runbooks/vpc/cost_engine.py +411 -148
  190. runbooks/vpc/cost_explorer_integration.py +553 -0
  191. runbooks/vpc/cross_account_session.py +101 -106
  192. runbooks/vpc/enhanced_mcp_validation.py +917 -0
  193. runbooks/vpc/eni_gate_validator.py +961 -0
  194. runbooks/vpc/heatmap_engine.py +185 -160
  195. runbooks/vpc/mcp_no_eni_validator.py +680 -639
  196. runbooks/vpc/nat_gateway_optimizer.py +358 -0
  197. runbooks/vpc/networking_wrapper.py +15 -8
  198. runbooks/vpc/pdca_remediation_planner.py +528 -0
  199. runbooks/vpc/performance_optimized_analyzer.py +219 -231
  200. runbooks/vpc/runbooks_adapter.py +1167 -241
  201. runbooks/vpc/tdd_red_phase_stubs.py +601 -0
  202. runbooks/vpc/test_data_loader.py +358 -0
  203. runbooks/vpc/tests/conftest.py +314 -4
  204. runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
  205. runbooks/vpc/tests/test_cost_engine.py +0 -2
  206. runbooks/vpc/topology_generator.py +326 -0
  207. runbooks/vpc/unified_scenarios.py +1297 -1124
  208. runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
  209. runbooks-1.1.5.dist-info/METADATA +328 -0
  210. {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/RECORD +214 -193
  211. runbooks/finops/README.md +0 -414
  212. runbooks/finops/accuracy_cross_validator.py +0 -647
  213. runbooks/finops/business_cases.py +0 -950
  214. runbooks/finops/dashboard_router.py +0 -922
  215. runbooks/finops/ebs_optimizer.py +0 -973
  216. runbooks/finops/embedded_mcp_validator.py +0 -1629
  217. runbooks/finops/enhanced_dashboard_runner.py +0 -527
  218. runbooks/finops/finops_dashboard.py +0 -584
  219. runbooks/finops/finops_scenarios.py +0 -1218
  220. runbooks/finops/legacy_migration.py +0 -730
  221. runbooks/finops/multi_dashboard.py +0 -1519
  222. runbooks/finops/single_dashboard.py +0 -1113
  223. runbooks/finops/unlimited_scenarios.py +0 -393
  224. runbooks-1.1.4.dist-info/METADATA +0 -800
  225. {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
  226. {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
  227. {runbooks-1.1.4.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
  228. {runbooks-1.1.4.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)