Reputation: 47
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?
Upvotes: 0
Views: 187
Reputation: 47
Was fixed by running the job in separate container:
name: Test Project
on:
workflow_dispatch:
push:
branches: [develop, release]
jobs:
test:
runs-on: ubuntu-latest
container:
image: openjdk:17-jdk-slim
env:
REPOSITORY: ${{ github.repository }}
TRIGGERING_ACTOR: ${{ github.triggering_actor }}
SOURCE_BRANCH: ${{ github.ref_name }}
COMMIT: ${{ github.workflow_sha }}
EVENT: ${{ github.event_name}}
steps:
- run: echo "The job was triggered by $TRIGGERING_ACTOR via $EVENT event to $SOURCE_BRANCH branch with commit $COMMIT"
- name: Install Maven
run: |
apt-get update -qy
apt-get install -y maven
mvn -version
- name: Get code
uses: actions/checkout@v4
- run: echo "💡 The $REPOSITORY repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: Run tests
run: mvn --batch-mode test
Upvotes: 0