1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.http.impl.auth;
28
29 import java.io.ByteArrayInputStream;
30 import java.io.ByteArrayOutputStream;
31 import java.io.ObjectInputStream;
32 import java.io.ObjectOutputStream;
33
34 import org.apache.commons.codec.binary.Base64;
35 import org.apache.http.Consts;
36 import org.apache.http.Header;
37 import org.apache.http.HttpRequest;
38 import org.apache.http.auth.AUTH;
39 import org.apache.http.auth.AuthScheme;
40 import org.apache.http.auth.UsernamePasswordCredentials;
41 import org.apache.http.message.BasicHeader;
42 import org.apache.http.message.BasicHttpRequest;
43 import org.apache.http.protocol.BasicHttpContext;
44 import org.apache.http.protocol.HttpContext;
45 import org.apache.http.util.EncodingUtils;
46 import org.junit.Assert;
47 import org.junit.Test;
48
49
50
51
52 public class TestBasicScheme {
53
54 @Test
55 public void testBasicAuthenticationEmptyChallenge() throws Exception {
56 final String challenge = "Basic";
57 final Header header = new BasicHeader(AUTH.WWW_AUTH, challenge);
58 final AuthScheme authscheme = new BasicScheme();
59 authscheme.processChallenge(header);
60 Assert.assertNull(authscheme.getRealm());
61 }
62
63 @Test
64 public void testBasicAuthenticationWith88591Chars() throws Exception {
65 final int[] germanChars = { 0xE4, 0x2D, 0xF6, 0x2D, 0xFc };
66 final StringBuilder buffer = new StringBuilder();
67 for (final int germanChar : germanChars) {
68 buffer.append((char)germanChar);
69 }
70
71 final UsernamePasswordCredentials creds = new UsernamePasswordCredentials("dh", buffer.toString());
72 final BasicScheme authscheme = new BasicScheme(Consts.ISO_8859_1);
73
74 final HttpRequest request = new BasicHttpRequest("GET", "/");
75 final HttpContext context = new BasicHttpContext();
76 final Header header = authscheme.authenticate(creds, request, context);
77 Assert.assertEquals("Basic ZGg65C32Lfw=", header.getValue());
78 }
79
80 @Test
81 public void testBasicAuthentication() throws Exception {
82 final UsernamePasswordCredentials creds =
83 new UsernamePasswordCredentials("testuser", "testpass");
84
85 final Header challenge = new BasicHeader(AUTH.WWW_AUTH, "Basic realm=\"test\"");
86
87 final BasicScheme authscheme = new BasicScheme();
88 authscheme.processChallenge(challenge);
89
90 final HttpRequest request = new BasicHttpRequest("GET", "/");
91 final HttpContext context = new BasicHttpContext();
92 final Header authResponse = authscheme.authenticate(creds, request, context);
93
94 final String expected = "Basic " + EncodingUtils.getAsciiString(
95 Base64.encodeBase64(EncodingUtils.getAsciiBytes("testuser:testpass")));
96 Assert.assertEquals(AUTH.WWW_AUTH_RESP, authResponse.getName());
97 Assert.assertEquals(expected, authResponse.getValue());
98 Assert.assertEquals("test", authscheme.getRealm());
99 Assert.assertTrue(authscheme.isComplete());
100 Assert.assertFalse(authscheme.isConnectionBased());
101 }
102
103 @Test
104 public void testBasicProxyAuthentication() throws Exception {
105 final UsernamePasswordCredentials creds =
106 new UsernamePasswordCredentials("testuser", "testpass");
107
108 final Header challenge = new BasicHeader(AUTH.PROXY_AUTH, "Basic realm=\"test\"");
109
110 final BasicScheme authscheme = new BasicScheme();
111 authscheme.processChallenge(challenge);
112
113 final HttpRequest request = new BasicHttpRequest("GET", "/");
114 final HttpContext context = new BasicHttpContext();
115 final Header authResponse = authscheme.authenticate(creds, request, context);
116
117 final String expected = "Basic " + EncodingUtils.getAsciiString(
118 Base64.encodeBase64(EncodingUtils.getAsciiBytes("testuser:testpass")));
119 Assert.assertEquals(AUTH.PROXY_AUTH_RESP, authResponse.getName());
120 Assert.assertEquals(expected, authResponse.getValue());
121 Assert.assertEquals("test", authscheme.getRealm());
122 Assert.assertTrue(authscheme.isComplete());
123 Assert.assertFalse(authscheme.isConnectionBased());
124 }
125
126 @Test
127 public void testSerialization() throws Exception {
128 final Header challenge = new BasicHeader(AUTH.PROXY_AUTH, "Basic realm=\"test\"");
129
130 final BasicScheme basicScheme = new BasicScheme();
131 basicScheme.processChallenge(challenge);
132
133 final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
134 final ObjectOutputStream out = new ObjectOutputStream(buffer);
135 out.writeObject(basicScheme);
136 out.flush();
137 final byte[] raw = buffer.toByteArray();
138 final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(raw));
139 final BasicScheme authScheme = (BasicScheme) in.readObject();
140
141 Assert.assertEquals(basicScheme.getSchemeName(), authScheme.getSchemeName());
142 Assert.assertEquals(basicScheme.getRealm(), authScheme.getRealm());
143 Assert.assertEquals(basicScheme.isComplete(), authScheme.isComplete());
144 Assert.assertEquals(true, basicScheme.isProxy());
145 }
146
147 @Test
148 public void testSerializationUnchallenged() throws Exception {
149 final BasicScheme basicScheme = new BasicScheme();
150
151 final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
152 final ObjectOutputStream out = new ObjectOutputStream(buffer);
153 out.writeObject(basicScheme);
154 out.flush();
155 final byte[] raw = buffer.toByteArray();
156 final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(raw));
157 final BasicScheme authScheme = (BasicScheme) in.readObject();
158
159 Assert.assertEquals(basicScheme.getSchemeName(), authScheme.getSchemeName());
160 Assert.assertEquals(basicScheme.getRealm(), authScheme.getRealm());
161 Assert.assertEquals(basicScheme.isComplete(), authScheme.isComplete());
162 Assert.assertEquals(false, basicScheme.isProxy());
163 }
164
165 }