I have a testing workflow named "Test Project" set up in GitHub Actions, which includes a Maven test phase invoking a test class called RegistrationTest. This test class uses the GreenMailExtension to test email confirmation functionality. The test runs successfully on my local machine, but when executed on GitHub Runner, I encounter the following error:
com.icegreen.greenmail.smtp.SmtpServer : Can not open server socket for smtp:127.0.0.1:25
java.net.BindException: Permission denied
at java.base/sun.nio.ch.Net.bind0(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.bind(Net.java:555) ~[na:na]
at java.base/sun.nio.ch.Net.bind(Net.java:544) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:648) ~[na:na]
at java.base/java.net.ServerSocket.bind(ServerSocket.java:388) ~[na:na]
at java.base/java.net.ServerSocket.bind(ServerSocket.java:342) ~[na:na]
at com.icegreen.greenmail.server.AbstractServer.openServerSocket(AbstractServer.java:83) ~[greenmail-2.0.0.jar:na]
at com.icegreen.greenmail.server.AbstractServer.initServerSocket(AbstractServer.java:127) ~[greenmail-2.0.0.jar:na]
at com.icegreen.greenmail.server.AbstractServer.run(AbstractServer.java:103) ~[greenmail-2.0.0.jar:na
Spring boot test config:
spring:
mail:
host: 127.0.0.1
port: 25
protocol: smtp
GreenmailExtension:
@RegisterExtension
private static final GreenMailExtension GREEN_MAIL_REGISTRATION = new GreenMailExtension(ServerSetup.SMTP);
Workflow Configuration:
name: Test Project
on:
workflow_dispatch:
push:
branches: develop
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Get code
uses: actions/checkout@v4
- name: Set up JDK and Maven
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Run the Maven verify phase
run: mvn --batch-mode test -X -Dtest=RegistrationTest
Test:
private void testEmailConfirmationReceiving(final String email) throws Exception {
final MimeMessage receivedMessage = getFirstReceivedMimeMessage(GREEN_MAIL_REGISTRATION);
assertEquals(1, receivedMessage.getAllRecipients().length);
assertEquals(email, receivedMessage.getAllRecipients()[0].toString());
assertEquals(EMAIL_CONFIRMATION_SUBJECT, receivedMessage.getSubject());
}
How can I resolve the Permission denied error related to opening a server socket for SMTP when running my RegistrationTest in GitHub Actions?
Was fixed by running the job in separate container: