Skip to content

Commit

Permalink
provide configuration options for client connection timeouts
Browse files Browse the repository at this point in the history
closes #29
  • Loading branch information
sargue committed Jun 9, 2018
1 parent 2f3f967 commit 42aad6c
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 1 deletion.
54 changes: 54 additions & 0 deletions src/main/java/net/sargue/mailgun/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public class Configuration {
private String apiUrl = "https://api.mailgun.net/v3";
private String domain;
private String apiKey;
private int connectTimeout = 0;
private int readTimeout = 0;
private MultivaluedMap<String,String> defaultParameters = new MultivaluedHashMap<>();

private MailRequestCallbackFactory mailRequestCallbackFactory = null;
Expand Down Expand Up @@ -161,6 +163,40 @@ public Configuration apiUrl(String apiUrl) {
return this;
}

/**
* Connect timeout interval, in milliseconds.
* <p>
* A value of zero (0) is equivalent to an interval of infinity.
* </p>
* <p>
* The default value is infinity (0).
* </p>
*
* @param connectTimeout the connect timeout interval, in milliseconds
* @return this configuration
*/
public Configuration connectTimeout(int connectTimeout) {
this.connectTimeout = connectTimeout;
return this;
}

/**
* Read timeout interval, in milliseconds.
* <p>
* A value of zero (0) is equivalent to an interval of infinity.
* </p>
* <p>
* The default value is infinity (0).
* </p>
*
* @param readTimeout the read timeout interval, in milliseconds
* @return this configuration
*/
public Configuration readTimeout(int readTimeout) {
this.readTimeout = readTimeout;
return this;
}

/**
* Adds a new value to the specified default parameter.
* <p>
Expand Down Expand Up @@ -265,6 +301,24 @@ public String apiUrl() {
return apiUrl;
}

/**
* Returns the configured connect timeout.
*
* @return the configured connect timeout, in milliseconds
*/
public int connectTimeout() {
return connectTimeout;
}

/**
* Returns the configured read timeout.
*
* @return the configured read timeout, in milliseconds
*/
public int readTimeout() {
return readTimeout;
}

/**
* Returns the internal map of default parameters.
*
Expand Down
14 changes: 13 additions & 1 deletion src/main/java/net/sargue/mailgun/Mail.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@

import org.glassfish.jersey.client.JerseyClientBuilder;

import javax.ws.rs.client.*;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.InvocationCallback;
import java.util.List;

import static org.glassfish.jersey.client.ClientProperties.CONNECT_TIMEOUT;
import static org.glassfish.jersey.client.ClientProperties.READ_TIMEOUT;

/**
* Representation of a Mailgun's mail request.
* <p>
Expand Down Expand Up @@ -136,6 +142,12 @@ void configureClient(Client client) {

private Invocation.Builder request() {
Client client = JerseyClientBuilder.newClient();

if (configuration.connectTimeout() != 0)
client.property(CONNECT_TIMEOUT, configuration.connectTimeout());
if (configuration.readTimeout() != 0)
client.property(READ_TIMEOUT, configuration.readTimeout());

configureClient(client);
return client
.register(configuration.httpAuthenticationFeature())
Expand Down
30 changes: 30 additions & 0 deletions src/test/java/net/sargue/mailgun/test/ConfigurationTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -151,4 +151,34 @@ public boolean filter(Mail mail) {

assertSame(filter, configuration.mailSendFilter());
}

@Test
public void testConnectTimeout() {
Configuration configuration = new Configuration()
.connectTimeout(42);

assertEquals(42, configuration.connectTimeout());
}

@Test
public void testDefaultConnectTimeout() {
Configuration configuration = new Configuration();

assertEquals(0, configuration.connectTimeout());
}

@Test
public void testReadTimeout() {
Configuration configuration = new Configuration()
.readTimeout(42);

assertEquals(42, configuration.readTimeout());
}

@Test
public void testDefaultReadTimeout() {
Configuration configuration = new Configuration();

assertEquals(0, configuration.readTimeout());
}
}

0 comments on commit 42aad6c

Please sign in to comment.