yaroslav96
yaroslav96

Reputation: 47

GitHub Actions: Permission denied when running GreenMailExtension for SMTP in test workflow

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

Answers (1)

yaroslav96
yaroslav96

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

Related Questions