setAuthenticationChain();
_testDigestSuccess();
}
static void _testDigestSuccess() throws Exception {
TestHttpClient client = new TestHttpClient();
HttpGet get = new HttpGet(DefaultServer.getDefaultServerURL());
HttpResponse result = client.execute(get);
assertEquals(StatusCodes.UNAUTHORIZED, result.getStatusLine().getStatusCode());
Header[] values = result.getHeaders(WWW_AUTHENTICATE.toString());
String value = getAuthHeader(DIGEST, values);
Map<DigestWWWAuthenticateToken, String> parsedHeader = DigestWWWAuthenticateToken.parseHeader(value.substring(7));
assertEquals(REALM_NAME, parsedHeader.get(DigestWWWAuthenticateToken.REALM));
assertEquals(DigestAlgorithm.MD5.getToken(), parsedHeader.get(DigestWWWAuthenticateToken.ALGORITHM));
assertEquals(DigestQop.AUTH.getToken(), parsedHeader.get(DigestWWWAuthenticateToken.MESSAGE_QOP));
String clientNonce = createNonce();
int nonceCount = 1;
String nonce = parsedHeader.get(DigestWWWAuthenticateToken.NONCE);
String opaque = parsedHeader.get(DigestWWWAuthenticateToken.OPAQUE);
assertNotNull(opaque);
// Send 5 requests with an incrementing nonce count on each call.
for (int i = 0; i < 5; i++) {
client = new TestHttpClient();
get = new HttpGet(DefaultServer.getDefaultServerURL());
int thisNonceCount = nonceCount++;
String authorization = createAuthorizationLine("userOne", "passwordOne", "GET", "/", nonce, thisNonceCount,
clientNonce, opaque);
get.addHeader(AUTHORIZATION.toString(), authorization);
result = client.execute(get);
assertEquals(StatusCodes.OK, result.getStatusLine().getStatusCode());
values = result.getHeaders("ProcessedBy");
assertEquals(1, values.length);
assertEquals("ResponseHandler", values[0].getValue());