From c012898c5c6249bd86ef78e0864698c053437c97 Mon Sep 17 00:00:00 2001 From: Alexander Goussas Date: Mon, 29 Dec 2025 09:19:25 -0500 Subject: [PATCH] add a console reporter and sample integration test --- .../reporting/ConsoleReporter.java | 38 ++++++++++++++ .../configvalidator/RuleEngineTest.java | 50 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 lib/src/main/java/io/github/aloussase/configvalidator/reporting/ConsoleReporter.java create mode 100644 lib/src/test/java/io/github/aloussase/configvalidator/RuleEngineTest.java diff --git a/lib/src/main/java/io/github/aloussase/configvalidator/reporting/ConsoleReporter.java b/lib/src/main/java/io/github/aloussase/configvalidator/reporting/ConsoleReporter.java new file mode 100644 index 0000000..8bee272 --- /dev/null +++ b/lib/src/main/java/io/github/aloussase/configvalidator/reporting/ConsoleReporter.java @@ -0,0 +1,38 @@ +package io.github.aloussase.configvalidator.reporting; + +import io.github.aloussase.configvalidator.Validation; + +import java.util.ArrayList; +import java.util.List; + +final public class ConsoleReporter implements ResultsReporter { + @Override + public void report(List validationResults) { + final var errors = new ArrayList(); + int successCount = 0; + + for (final var result : validationResults) { + switch (result) { + case Validation.Error err -> errors.add(err); + default -> successCount += 1; + } + } + + final var sb = new StringBuilder("=== Validation Results ===\n\n"); + + sb + .append("Success: ").append(successCount).append(", ") + .append("Errors: ").append(errors.size()).append("\n"); + + sb.append("Error Report:\n\n"); + + for (final var err : errors) { + sb.append(err.subject().name()); + sb.append(": "); + sb.append(err.message()); + sb.append("\n"); + } + + System.out.println(sb); + } +} diff --git a/lib/src/test/java/io/github/aloussase/configvalidator/RuleEngineTest.java b/lib/src/test/java/io/github/aloussase/configvalidator/RuleEngineTest.java new file mode 100644 index 0000000..115502d --- /dev/null +++ b/lib/src/test/java/io/github/aloussase/configvalidator/RuleEngineTest.java @@ -0,0 +1,50 @@ +package io.github.aloussase.configvalidator; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.github.aloussase.configvalidator.reporting.ConsoleReporter; +import io.github.aloussase.configvalidator.rules.parser.YamlRuleParser; +import io.github.aloussase.configvalidator.sources.AndesConfigurationVariableSource; +import okhttp3.OkHttpClient; +import org.junit.jupiter.api.Test; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.stream.Collectors; + +class RuleEngineTest { + + /// NOTE: This test is not to be run in CI. + @Test + public void test() { + final var apiUrl = System.getenv("ANDES_API_URL"); + final var bluePrint = System.getenv("ANDES_BLUEPRINT"); + final var authToken = System.getenv("ANDES_AUTH_TOKEN"); + final var deploymentId = System.getenv("ANDES_DEPLOYMENT_ID"); + + if (apiUrl == null || authToken == null || deploymentId == null || bluePrint == null) { + return; + } + + final var reporter = new ConsoleReporter(); + final var parser = new YamlRuleParser(); + + final var httpClient = new OkHttpClient.Builder().build(); + final var objectMapper = new ObjectMapper(); + final var dataSource = new AndesConfigurationVariableSource(httpClient, apiUrl, bluePrint, authToken, deploymentId, objectMapper); + + final var engine = new RuleEngine(reporter, parser, dataSource); + + try ( + final var is = new InputStreamReader(getClass().getResourceAsStream("/sample-rules.yaml")); + final var br = new BufferedReader(is) + ) { + engine.run( + br.lines().collect(Collectors.joining("\n")), + "DEV" + ); + } catch (IOException ignored) { + } + } + +} \ No newline at end of file -- 2.43.0