98 lines
3.8 KiB
C++
98 lines
3.8 KiB
C++
|
|
// Step 503: Phase 25b Integration Tests (8 tests)
|
||
|
|
|
||
|
|
#include "Phase25bIntegration.h"
|
||
|
|
|
||
|
|
#include <iostream>
|
||
|
|
|
||
|
|
static int passed = 0, failed = 0;
|
||
|
|
#define TEST(name) { std::cout << " " << #name << "... "; }
|
||
|
|
#define PASS() { std::cout << "PASS\n"; ++passed; }
|
||
|
|
#define FAIL(msg) { std::cout << "FAIL: " << msg << "\n"; ++failed; }
|
||
|
|
#define CHECK(cond, msg) if (!(cond)) { FAIL(msg); return; } else {}
|
||
|
|
|
||
|
|
static Phase25bIntegrationResult runNow() {
|
||
|
|
return Phase25bIntegration::run();
|
||
|
|
}
|
||
|
|
|
||
|
|
void test_all_four_scenarios_run_successfully() {
|
||
|
|
TEST(all_four_scenarios_run_successfully);
|
||
|
|
auto r = runNow();
|
||
|
|
CHECK(r.scenarioPass.size() == 4, "expected 4 scenario pass flags");
|
||
|
|
CHECK(r.allScenariosPassed, "all scenarios should pass");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void test_each_scenario_exercises_distinct_workflow_path_signals() {
|
||
|
|
TEST(each_scenario_exercises_distinct_workflow_path_signals);
|
||
|
|
auto r = runNow();
|
||
|
|
CHECK(r.uniqueWorkflowPathsObserved, "expected unique workflow path coverage");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void test_cost_tracking_contains_all_scenarios_and_positive_estimates() {
|
||
|
|
TEST(cost_tracking_contains_all_scenarios_and_positive_estimates);
|
||
|
|
auto r = runNow();
|
||
|
|
CHECK(r.costs.size() == 4, "expected 4 cost snapshots");
|
||
|
|
for (const auto& c : r.costs) {
|
||
|
|
CHECK(c.estimatedTokens > 0, "estimated tokens must be positive");
|
||
|
|
CHECK(c.actualTokens >= 0, "actual tokens must be non-negative");
|
||
|
|
}
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void test_cost_tracking_accuracy_gate_passes_for_integration() {
|
||
|
|
TEST(cost_tracking_accuracy_gate_passes_for_integration);
|
||
|
|
auto r = runNow();
|
||
|
|
CHECK(r.costTrackingAccurate, "cost tracking should be marked accurate");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void test_security_findings_are_aggregated_from_generated_code_paths() {
|
||
|
|
TEST(security_findings_are_aggregated_from_generated_code_paths);
|
||
|
|
auto r = runNow();
|
||
|
|
CHECK(r.totalSecurityFindings > 0, "expected aggregated security findings");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void test_event_stream_captures_start_and_complete_for_each_scenario() {
|
||
|
|
TEST(event_stream_captures_start_and_complete_for_each_scenario);
|
||
|
|
auto r = runNow();
|
||
|
|
CHECK(r.eventStreamComplete, "expected complete start/complete event pairs");
|
||
|
|
CHECK(r.events.size() >= 8, "expected at least start+complete for 4 scenarios");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void test_multi_model_scenario_keeps_review_gates_exercised_in_integration() {
|
||
|
|
TEST(multi_model_scenario_keeps_review_gates_exercised_in_integration);
|
||
|
|
auto r = runNow();
|
||
|
|
CHECK(r.multiModel.reviewGatesExercised, "multi-model review gates should be exercised");
|
||
|
|
CHECK(r.multiModel.reviewGateCount >= 5, "expected review gates from llm + human tasks");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
void test_integration_notes_include_execution_summary_and_status() {
|
||
|
|
TEST(integration_notes_include_execution_summary_and_status);
|
||
|
|
auto r = runNow();
|
||
|
|
CHECK(r.notes.size() >= 2, "expected integration notes");
|
||
|
|
CHECK(r.notes[0].find("integration pipeline executed") != std::string::npos,
|
||
|
|
"missing execution summary");
|
||
|
|
PASS();
|
||
|
|
}
|
||
|
|
|
||
|
|
int main() {
|
||
|
|
std::cout << "Step 503: Phase 25b Integration Tests\n";
|
||
|
|
|
||
|
|
test_all_four_scenarios_run_successfully(); // 1
|
||
|
|
test_each_scenario_exercises_distinct_workflow_path_signals(); // 2
|
||
|
|
test_cost_tracking_contains_all_scenarios_and_positive_estimates(); // 3
|
||
|
|
test_cost_tracking_accuracy_gate_passes_for_integration(); // 4
|
||
|
|
test_security_findings_are_aggregated_from_generated_code_paths(); // 5
|
||
|
|
test_event_stream_captures_start_and_complete_for_each_scenario(); // 6
|
||
|
|
test_multi_model_scenario_keeps_review_gates_exercised_in_integration(); // 7
|
||
|
|
test_integration_notes_include_execution_summary_and_status(); // 8
|
||
|
|
|
||
|
|
std::cout << "\nResults: " << passed << "/" << (passed + failed)
|
||
|
|
<< " passed\n";
|
||
|
|
return failed == 0 ? 0 : 1;
|
||
|
|
}
|