Tests 1
This commit is contained in:
parent
d98e575795
commit
4592dc1a82
|
@ -1,11 +0,0 @@
|
|||
package org.hl7.fhir.r5.utils.client;
|
||||
|
||||
import org.hl7.fhir.utilities.http.ManagedWebAccess;
|
||||
import org.junit.BeforeClass;
|
||||
|
||||
public class ManagedWebAccessAuthTests {
|
||||
@BeforeClass
|
||||
public static void setUp() {
|
||||
ManagedWebAccess.setUserAgent("hapi-fhir-testing-client");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,164 @@
|
|||
package org.hl7.fhir.utilities.http;
|
||||
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.mockwebserver.MockResponse;
|
||||
import okhttp3.mockwebserver.MockWebServer;
|
||||
import okhttp3.mockwebserver.RecordedRequest;
|
||||
import org.apache.commons.net.util.Base64;
|
||||
import org.hl7.fhir.utilities.settings.ServerDetailsPOJO;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class ManagedWebAccessAuthTests {
|
||||
|
||||
|
||||
public static final String DUMMY_AGENT = "dummyAgent";
|
||||
public static final String DUMMY_USERNAME = "dummy1";
|
||||
public static final String DUMMY_PASSWORD = "pass1";
|
||||
|
||||
public static final String DUMMY_TOKEN = "dummyToken";
|
||||
private static final String DUMMY_API_KEY = "dummyApiKey";
|
||||
private MockWebServer server;
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
setupMockServer();
|
||||
}
|
||||
|
||||
void setupMockServer() {
|
||||
server = new MockWebServer();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBaseCase() throws IOException, InterruptedException {
|
||||
HttpUrl serverUrl = server.url("blah/blah/blah?arg=blah");
|
||||
|
||||
server.enqueue(
|
||||
new MockResponse()
|
||||
.setBody("Dummy Response").setResponseCode(200)
|
||||
);
|
||||
|
||||
ManagedFhirWebAccessBuilder builder = new ManagedFhirWebAccessBuilder("dummyAgent", null);
|
||||
HTTPResult result = builder.httpCall(new HTTPRequest().withUrl(serverUrl.toString()).withMethod(HTTPRequest.HttpMethod.GET));
|
||||
|
||||
assertThat(result.getCode()).isEqualTo(200);
|
||||
assertThat(result.getContentAsString()).isEqualTo("Dummy Response");
|
||||
|
||||
RecordedRequest packageRequest = server.takeRequest();
|
||||
|
||||
assert packageRequest.getRequestUrl() != null;
|
||||
assertExpectedHeaders(packageRequest, serverUrl.url().toString(), "GET");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testBasicAuthCase() throws IOException, InterruptedException {
|
||||
|
||||
|
||||
ManagedFhirWebAccessBuilder builder = new ManagedFhirWebAccessBuilder("dummyAgent", null).withBasicAuth("dummy1", "pass1");
|
||||
|
||||
testBasicServerAuth(builder);
|
||||
}
|
||||
|
||||
private void testBasicServerAuth(ManagedFhirWebAccessBuilder builder) throws IOException, InterruptedException {
|
||||
HttpUrl serverUrl = server.url("blah/blah/blah?arg=blah");
|
||||
|
||||
server.enqueue(
|
||||
new MockResponse()
|
||||
.setBody("Dummy Response").setResponseCode(200)
|
||||
);
|
||||
HTTPResult result = builder.httpCall(new HTTPRequest().withUrl(serverUrl.toString()).withMethod(HTTPRequest.HttpMethod.GET));
|
||||
|
||||
assertThat(result.getCode()).isEqualTo(200);
|
||||
assertThat(result.getContentAsString()).isEqualTo("Dummy Response");
|
||||
|
||||
RecordedRequest packageRequest = server.takeRequest();
|
||||
|
||||
assert packageRequest.getRequestUrl() != null;
|
||||
assertExpectedHeaders(packageRequest, serverUrl.url().toString(), "GET");
|
||||
|
||||
byte[] b = Base64.encodeBase64((DUMMY_USERNAME + ":" + DUMMY_PASSWORD).getBytes(StandardCharsets.US_ASCII));
|
||||
String b64 = new String(b, StandardCharsets.US_ASCII);
|
||||
|
||||
assertThat(packageRequest.getHeader("Authorization")).isEqualTo("Basic " + b64);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTokenAuthCase() throws IOException, InterruptedException {
|
||||
HttpUrl serverUrl = server.url("blah/blah/blah?arg=blah");
|
||||
|
||||
server.enqueue(
|
||||
new MockResponse()
|
||||
.setBody("Dummy Response").setResponseCode(200)
|
||||
);
|
||||
|
||||
ManagedFhirWebAccessBuilder builder = new ManagedFhirWebAccessBuilder("dummyAgent", null).withToken(DUMMY_TOKEN);
|
||||
HTTPResult result = builder.httpCall(new HTTPRequest().withUrl(serverUrl.toString()).withMethod(HTTPRequest.HttpMethod.GET));
|
||||
|
||||
assertThat(result.getCode()).isEqualTo(200);
|
||||
assertThat(result.getContentAsString()).isEqualTo("Dummy Response");
|
||||
|
||||
RecordedRequest packageRequest = server.takeRequest();
|
||||
|
||||
assert packageRequest.getRequestUrl() != null;
|
||||
assertExpectedHeaders(packageRequest, serverUrl.url().toString(), "GET");
|
||||
|
||||
assertThat(packageRequest.getHeader("Authorization")).isEqualTo("Bearer " + DUMMY_TOKEN);
|
||||
}
|
||||
|
||||
private static void assertExpectedHeaders(RecordedRequest packageRequest, String expectedUrl, String expectedHttpMethod) {
|
||||
assertThat(packageRequest.getRequestUrl().toString()).isEqualTo(expectedUrl);
|
||||
assertThat(packageRequest.getMethod()).isEqualTo(expectedHttpMethod);
|
||||
assertThat(packageRequest.getHeader("User-Agent")).isEqualTo(DUMMY_AGENT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testApiKeyAuthCase() throws IOException, InterruptedException {
|
||||
HttpUrl serverUrl = server.url("blah/blah/blah?arg=blah");
|
||||
|
||||
server.enqueue(
|
||||
new MockResponse()
|
||||
.setBody("Dummy Response").setResponseCode(200)
|
||||
);
|
||||
|
||||
ManagedFhirWebAccessBuilder builder = new ManagedFhirWebAccessBuilder("dummyAgent", null).withApiKey(DUMMY_API_KEY);
|
||||
HTTPResult result = builder.httpCall(new HTTPRequest().withUrl(serverUrl.toString()).withMethod(HTTPRequest.HttpMethod.GET));
|
||||
|
||||
assertThat(result.getCode()).isEqualTo(200);
|
||||
assertThat(result.getContentAsString()).isEqualTo("Dummy Response");
|
||||
|
||||
RecordedRequest packageRequest = server.takeRequest();
|
||||
|
||||
assert packageRequest.getRequestUrl() != null;
|
||||
assertExpectedHeaders(packageRequest, serverUrl.url().toString(), "GET");
|
||||
|
||||
assertThat(packageRequest.getHeader("Api-Key")).isEqualTo(DUMMY_API_KEY);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testServerAuthFromSettings() throws IOException, InterruptedException {
|
||||
ManagedFhirWebAccessBuilder builder = new ManagedFhirWebAccessBuilder(
|
||||
"dummyAgent",
|
||||
List.of(getBasicAuthServerPojo()));
|
||||
|
||||
testBasicServerAuth(builder);
|
||||
}
|
||||
|
||||
private ServerDetailsPOJO getBasicAuthServerPojo() {
|
||||
ServerDetailsPOJO pojo = new ServerDetailsPOJO(
|
||||
server.url("").toString(),
|
||||
"basic",
|
||||
"dummyServerType",
|
||||
DUMMY_USERNAME,
|
||||
DUMMY_PASSWORD,
|
||||
null, null);
|
||||
return pojo;
|
||||
}
|
||||
}
|
|
@ -46,6 +46,8 @@ public class ManagedFhirWebAccessBuilder extends ManagedWebAccessBuilderBase<Man
|
|||
|
||||
public ManagedFhirWebAccessBuilder(String userAgent, List<ServerDetailsPOJO> serverAuthDetails) {
|
||||
super(userAgent, serverAuthDetails);
|
||||
this.timeout = 5000;
|
||||
this.timeoutUnit = TimeUnit.MILLISECONDS;
|
||||
}
|
||||
|
||||
protected HTTPRequest httpRequestWithDefaultHeaders(HTTPRequest request) {
|
||||
|
|
|
@ -29,6 +29,8 @@ public class ManagedWebAccessBuilder extends ManagedWebAccessBuilderBase<Managed
|
|||
String auth = getUsername() +":"+ getPassword();
|
||||
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(StandardCharsets.UTF_8));
|
||||
headers.put("Authorization", "Basic " + new String(encodedAuth));
|
||||
} else if (getAuthenticationMode() == HTTPAuthenticationMode.APIKEY) {
|
||||
headers.put("Api-Key", getToken());
|
||||
}
|
||||
|
||||
if (getUserAgent() != null) {
|
||||
|
|
|
@ -52,6 +52,12 @@ public abstract class ManagedWebAccessBuilderBase<B extends ManagedWebAccessBuil
|
|||
return self();
|
||||
}
|
||||
|
||||
public B withApiKey(String apiKey) {
|
||||
this.authenticationMode = HTTPAuthenticationMode.APIKEY;
|
||||
this.token = apiKey;
|
||||
return self();
|
||||
}
|
||||
|
||||
public B withNoneAuth() {
|
||||
this.authenticationMode = HTTPAuthenticationMode.NONE;
|
||||
setAllAuthHeadersToNull();
|
||||
|
|
Loading…
Reference in New Issue