Home » Java » Enterprise Java » X-Mas Musings – Do Not Use Random Server Port in Grails Integration Tests

About Ted Vinke

Ted Vinke

Ted is a Java software engineer with a passion for Web development and JVM languages and works for First8, a Java Web development company in the Netherlands.

X-Mas Musings – Do Not Use Random Server Port in Grails Integration Tests

December is for many people a period of reflection or thought. So I decided to reflect upon last year’s things and thoughts — each day until Christmas. This is day 4.

For a Grails integration test it is useful to know at what port your application is currently running.

Spring Boot — and consequently Grails which is built on top of it — exposes the at-startup-randomly-selected port through a property, called local.server.port.

When Googling it for Grails specifically, one usually comes on mrhaki’s Grails Goodness: Use Random Server Port In Integration Tests page — an excellent source of Grails Goodness – which clearly shows how to get the value of the local.server.port property using @Value.

You can see it in action below, in my own example.

import grails.plugins.rest.client.RestBuilder
import grails.plugins.rest.client.RestResponse
import grails.test.mixin.integration.Integration
import org.springframework.beans.factory.annotation.Value
import spock.lang.Specification

@Integration
class SomeIntegrationSpec extends Specification {

  @Value('${local.server.port}')
  Integer serverPort

  void "health check works"() {

    when:
    String url = "http://localhost:${serverPort}/example/health"
    def response = new RestBuilder().get(url)

    then:
    response.status == 200
  }
}

Somewhere last year I realized: I don’t need this at all.

@Integration
class SomeIntegrationSpec extends Specification {

  // no serverPort!

  void "health check works"() {

    when:
    String url = "http://localhost:${serverPort}/example/health"
    def response = new RestBuilder().get(url)

    then:
    response.status == 200
  }
}

WAT? No serverPort property — and you’re still using it in "http://localhost:${serverPort}/example/health"?

Jip, at least in Grails 3.3.0 this functionality, the exact property Integer serverPort initialized with the corrct value, is added to the test class directly by the @Integration annotation — specifically: its AST transformation helper class.

As Bristish fiction author Arthur C. Clarke already stated:

Any sufficiently advanced annotation is indistinguishable from magic.

So true.

Published on Java Code Geeks with permission by Ted Vinke, partner at our JCG program. See the original article here: X-Mas Musings #4 – Do Not Use Random Server Port in Grails Integration Tests

Opinions expressed by Java Code Geeks contributors are their own.

Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
Email address:

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz