Skip to content

Commit

Permalink
Add unit test for DelegateAuthenticator
Browse files Browse the repository at this point in the history
For #197.
  • Loading branch information
rhuss committed May 27, 2015
1 parent 3d85370 commit a4aec09
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 42 deletions.
6 changes: 6 additions & 0 deletions agent/jvm/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-test-util</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,19 @@ public Result authenticate(HttpExchange pHttpExchange) {
return new Failure(401);
}
} catch (final IOException e) {
pHttpExchange.getResponseHeaders().add("X-Error-Details","Cannot call delegate url " + delegateURL + ": " + e);
return new Failure(503);
return prepareFailure(pHttpExchange, "Cannot call delegate url " + delegateURL + ": " + e, 503);
} catch (final IllegalArgumentException e) {
return prepareFailure(pHttpExchange, "Illegal Argument: " + e, 400);
} catch (ParseException e) {
return prepareFailure(pHttpExchange, "Invalid JSON response: " + e, 422);
}
}

private Result prepareFailure(HttpExchange pHttpExchange, String pErrorDetails, int pCode) {
pHttpExchange.getResponseHeaders().add("X-Error-Details", pErrorDetails);
return new Failure(pCode);
}

private PrincipalExtractor createPrincipalExtractor(String pPrincipalExtractorSpec) {
if (pPrincipalExtractorSpec == null || pPrincipalExtractorSpec.startsWith("empty:")) {
return new EmptyPrincipalExtractor();
Expand All @@ -80,7 +88,7 @@ private PrincipalExtractor createPrincipalExtractor(String pPrincipalExtractorSp
// =======================================================================================

private interface PrincipalExtractor {
public HttpPrincipal extract(URLConnection connection) throws IOException;
HttpPrincipal extract(URLConnection connection) throws IOException, ParseException;
}

// Extract principal from a JSON object
Expand All @@ -93,22 +101,18 @@ public JsonPathExtractor(String pPath) {
}

@Override
public HttpPrincipal extract(URLConnection connection) throws IOException {
try {
Object payload = new JSONParser().parse(new InputStreamReader(connection.getInputStream()));
Stack<String> pathElements = EscapeUtil.extractElementsFromPath(path);
Object result = payload;
while (!pathElements.isEmpty()) {
if (result == null) {
throw new IllegalStateException("No path '" + path + "' found in " + payload.toString());
}
String key = pathElements.pop();
result = extractValue(result, key);
public HttpPrincipal extract(URLConnection connection) throws IOException, ParseException {
Object payload = new JSONParser().parse(new InputStreamReader(connection.getInputStream()));
Stack<String> pathElements = EscapeUtil.extractElementsFromPath(path);
Object result = payload;
while (!pathElements.isEmpty()) {
if (result == null) {
throw new IllegalArgumentException("No path '" + path + "' found in " + payload.toString());
}
return new HttpPrincipal(result.toString(),realm);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid JSON content: " + e,e);
String key = pathElements.pop();
result = extractValue(result, key);
}
return new HttpPrincipal(result.toString(),realm);
}

private Object extractValue(Object payload, String key) {
Expand Down Expand Up @@ -163,9 +167,9 @@ public boolean verify(String hostname, SSLSession session) {
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (KeyManagementException e) {
e.printStackTrace();
throw new IllegalArgumentException("Disabling SSL certificate failed: " + e,e);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new IllegalArgumentException("Disabling SSL certificate failed: " + e,e);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
package org.jolokia.jvmagent.security;

import java.lang.reflect.Field;
import java.util.Arrays;

import javax.security.auth.Subject;

import com.sun.net.httpserver.*;
import org.jolokia.config.ConfigKey;
import org.jolokia.test.util.MockLoginContext;
import org.testng.annotations.*;

import static org.easymock.EasyMock.*;
import static org.testng.Assert.*;

public class JaasAuthenticatorTest {
public class JaasAuthenticatorTest extends BaseAuthenticatorTest {

private JaasAuthenticator auth;

Expand Down Expand Up @@ -66,23 +63,4 @@ public void testAuthenticateSuccess() throws Exception {
assertEquals(principal.getUsername(),"roland");
}


private HttpExchange createExchange(Headers respHeaders, String... reqHeaderValues) {
return createExchange(respHeaders,null,reqHeaderValues);
}

private HttpExchange createExchange(Headers respHeaders, Subject subject, String... reqHeaderValues) {
HttpExchange ex = createMock(HttpExchange.class);
Headers reqHeaders = new Headers();
for (int i = 0; i < reqHeaderValues.length; i+=2) {
reqHeaders.put(reqHeaderValues[i], Arrays.asList(reqHeaderValues[i+1]));
}
expect(ex.getResponseHeaders()).andStubReturn(respHeaders);
expect(ex.getRequestHeaders()).andStubReturn(reqHeaders);
if (subject != null) {
ex.setAttribute(ConfigKey.JAAS_SUBJECT_REQUEST_ATTRIBUTE, subject);
}
replay(ex);
return ex;
}
}

0 comments on commit a4aec09

Please sign in to comment.