Merge branch '3.0.x'

Closes gh-35255
This commit is contained in:
Andy Wilkinson 2023-05-03 17:45:17 +01:00
commit 8494ad82cd
2 changed files with 31 additions and 7 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -38,7 +38,9 @@ public class MailHealthIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Builder builder) throws Exception {
builder.withDetail("location", this.mailSender.getHost() + ":" + this.mailSender.getPort());
int port = this.mailSender.getPort();
builder.withDetail("location", (port == JavaMailSenderImpl.DEFAULT_PORT) ? this.mailSender.getHost()
: this.mailSender.getHost() + ":" + this.mailSender.getPort());
this.mailSender.testConnection();
builder.up();
}

View File

@ -56,25 +56,47 @@ class MailHealthIndicatorTests {
session.addProvider(new Provider(Type.TRANSPORT, "success", SuccessTransport.class.getName(), "Test", "1.0.0"));
this.mailSender = mock(JavaMailSenderImpl.class);
given(this.mailSender.getHost()).willReturn("smtp.acme.org");
given(this.mailSender.getPort()).willReturn(25);
given(this.mailSender.getSession()).willReturn(session);
this.indicator = new MailHealthIndicator(this.mailSender);
}
@Test
void smtpIsUp() {
void smtpOnDefaultPortIsUp() {
given(this.mailSender.getPort()).willReturn(-1);
given(this.mailSender.getProtocol()).willReturn("success");
Health health = this.indicator.health();
assertThat(health.getStatus()).isEqualTo(Status.UP);
assertThat(health.getDetails()).containsEntry("location", "smtp.acme.org:25");
assertThat(health.getDetails()).containsEntry("location", "smtp.acme.org");
}
@Test
void smtpIsDown() throws MessagingException {
void smtpOnDefaultPortIsDown() throws MessagingException {
given(this.mailSender.getPort()).willReturn(-1);
willThrow(new MessagingException("A test exception")).given(this.mailSender).testConnection();
Health health = this.indicator.health();
assertThat(health.getStatus()).isEqualTo(Status.DOWN);
assertThat(health.getDetails()).containsEntry("location", "smtp.acme.org:25");
assertThat(health.getDetails()).containsEntry("location", "smtp.acme.org");
Object errorMessage = health.getDetails().get("error");
assertThat(errorMessage).isNotNull();
assertThat(errorMessage.toString().contains("A test exception")).isTrue();
}
@Test
void smtpOnCustomPortIsUp() {
given(this.mailSender.getPort()).willReturn(1234);
given(this.mailSender.getProtocol()).willReturn("success");
Health health = this.indicator.health();
assertThat(health.getStatus()).isEqualTo(Status.UP);
assertThat(health.getDetails()).containsEntry("location", "smtp.acme.org:1234");
}
@Test
void smtpOnCustomPortIsDown() throws MessagingException {
given(this.mailSender.getPort()).willReturn(1234);
willThrow(new MessagingException("A test exception")).given(this.mailSender).testConnection();
Health health = this.indicator.health();
assertThat(health.getStatus()).isEqualTo(Status.DOWN);
assertThat(health.getDetails()).containsEntry("location", "smtp.acme.org:1234");
Object errorMessage = health.getDetails().get("error");
assertThat(errorMessage).isNotNull();
assertThat(errorMessage.toString()).contains("A test exception");