use of net.ripe.rpki.validator3.domain.CertificateTreeValidationRun in project rpki-validator-3 by RIPE-NCC.
the class CertificateTreeValidationServiceTest method should_report_proper_error_when_repository_is_available_but_no_manifest.
@Test
public void should_report_proper_error_when_repository_is_available_but_no_manifest() {
KeyPair childKeyPair = KEY_PAIR_FACTORY.generate();
TrustAnchor ta = factory.createTypicalTa(childKeyPair);
trustAnchors.add(ta);
RpkiRepository repository = rpkiRepositories.register(ta, TA_RRDP_NOTIFY_URI, RpkiRepository.Type.RRDP);
repository.setDownloaded();
entityManager.flush();
final URI manifestUri = ta.getCertificate().getManifestUri();
final Optional<RpkiObject> mft = rpkiObjects.all().filter(o -> o.getLocations().contains(manifestUri.toASCIIString())).findFirst();
mft.ifPresent(m -> rpkiObjects.remove(m));
entityManager.flush();
subject.validate(ta.getId());
entityManager.flush();
List<CertificateTreeValidationRun> completed = validationRuns.findAll(CertificateTreeValidationRun.class);
assertThat(completed).hasSize(1);
final List<ValidationCheck> checks = completed.get(0).getValidationChecks();
assertThat(checks.get(0).getKey()).isEqualTo(ValidationString.VALIDATOR_NO_LOCAL_MANIFEST_NO_MANIFEST_IN_REPOSITORY);
assertThat(checks.get(0).getParameters()).isEqualTo(Collections.singletonList(repository.getRrdpNotifyUri()));
}
use of net.ripe.rpki.validator3.domain.CertificateTreeValidationRun in project rpki-validator-3 by RIPE-NCC.
the class CertificateTreeValidationService method validate.
@Transactional(Transactional.TxType.REQUIRED)
public void validate(long trustAnchorId) {
Map<URI, RpkiRepository> registeredRepositories = new HashMap<>();
entityManager.setFlushMode(FlushModeType.COMMIT);
TrustAnchor trustAnchor = trustAnchors.get(trustAnchorId);
log.info("starting tree validation for {}", trustAnchor);
CertificateTreeValidationRun validationRun = new CertificateTreeValidationRun(trustAnchor);
validationRuns.add(validationRun);
String trustAnchorLocation = trustAnchor.getLocations().get(0);
ValidationResult validationResult = ValidationResult.withLocation(trustAnchorLocation);
try {
X509ResourceCertificate certificate = trustAnchor.getCertificate();
validationResult.rejectIfNull(certificate, VALIDATOR_TRUST_ANCHOR_CERTIFICATE_AVAILABLE);
if (certificate == null) {
return;
}
CertificateRepositoryObjectValidationContext context = new CertificateRepositoryObjectValidationContext(URI.create(trustAnchorLocation), certificate);
certificate.validate(trustAnchorLocation, context, null, null, VALIDATION_OPTIONS, validationResult);
if (validationResult.hasFailureForCurrentLocation()) {
return;
}
URI locationUri = Objects.firstNonNull(certificate.getRrdpNotifyUri(), certificate.getRepositoryUri());
validationResult.warnIfNull(locationUri, VALIDATOR_TRUST_ANCHOR_CERTIFICATE_RRDP_NOTIFY_URI_OR_REPOSITORY_URI_PRESENT);
if (locationUri == null) {
return;
}
validationRun.getValidatedObjects().addAll(validateCertificateAuthority(trustAnchor, registeredRepositories, context, validationResult));
entityManager.setFlushMode(FlushModeType.AUTO);
if (isValidationRunCompleted(validationResult)) {
trustAnchor.markInitialCertificateTreeValidationRunCompleted();
if (!settings.isInitialValidationRunCompleted() && trustAnchors.allInitialCertificateTreeValidationRunsCompleted()) {
settings.markInitialValidationRunCompleted();
log.info("All trust anchors have completed their initial certificate tree validation run, validator is now ready");
}
}
validatedRpkiObjects.update(trustAnchor, validationRun.getValidatedObjects());
} finally {
validationRun.completeWith(validationResult);
log.info("tree validation {} for {}", validationRun.getStatus(), trustAnchor);
}
}
use of net.ripe.rpki.validator3.domain.CertificateTreeValidationRun in project rpki-validator-3 by RIPE-NCC.
the class CertificateTreeValidationServiceTest method should_register_rpki_repositories.
@Test
public void should_register_rpki_repositories() {
TrustAnchor ta = factory.createRipeNccTrustAnchor();
trustAnchors.add(ta);
subject.validate(ta.getId());
entityManager.flush();
List<CertificateTreeValidationRun> completed = validationRuns.findAll(CertificateTreeValidationRun.class);
assertThat(completed).hasSize(1);
CertificateTreeValidationRun result = completed.get(0);
assertThat(result.getStatus()).isEqualTo(SUCCEEDED);
assertThat(rpkiRepositories.findAll(null, null)).first().extracting(RpkiRepository::getStatus, RpkiRepository::getLocationUri).containsExactly(RpkiRepository.Status.PENDING, "https://rrdp.ripe.net/notification.xml");
assertThat(ta.isInitialCertificateTreeValidationRunCompleted()).as("trust anchor initial validation run completed").isFalse();
assertThat(settings.isInitialValidationRunCompleted()).as("validator initial validation run completed").isFalse();
}
use of net.ripe.rpki.validator3.domain.CertificateTreeValidationRun in project rpki-validator-3 by RIPE-NCC.
the class CertificateTreeValidationServiceTest method should_validate_minimal_trust_anchor.
@Test
@Ignore("Fix it --- if fails if TrustAnchorControllerTest is not run before it")
public void should_validate_minimal_trust_anchor() {
TrustAnchor ta = factory.createTrustAnchor(x -> {
});
trustAnchors.add(ta);
RpkiRepository repository = rpkiRepositories.register(ta, TA_RRDP_NOTIFY_URI, RpkiRepository.Type.RRDP);
repository.setDownloaded();
entityManager.flush();
subject.validate(ta.getId());
entityManager.flush();
List<CertificateTreeValidationRun> completed = validationRuns.findAll(CertificateTreeValidationRun.class);
assertThat(completed).hasSize(1);
CertificateTreeValidationRun result = completed.get(0);
assertThat(result.getValidationChecks()).isEmpty();
assertThat(result.getStatus()).isEqualTo(SUCCEEDED);
assertThat(result.getValidatedObjects()).extracting((x) -> x.getLocations().first()).containsExactlyInAnyOrder("rsync://rpki.test/test-trust-anchor.mft", "rsync://rpki.test/test-trust-anchor.crl");
assertThat(ta.isInitialCertificateTreeValidationRunCompleted()).as("trust anchor initial validation run completed").isTrue();
assertThat(settings.isInitialValidationRunCompleted()).as("validator initial validation run completed").isFalse();
}
Aggregations