1 #define SQUID_UNIT_TEST 1
5 #include "authenticate.h"
6 #include "AuthUserRequest.h"
7 #include "AuthScheme.h"
8 #include "AuthConfig.h"
11 CPPUNIT_TEST_SUITE_REGISTRATION( testAuth
);
12 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthConfig
);
13 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthUserRequest
);
14 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthBasicUserRequest
);
15 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthDigestUserRequest
);
16 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthNTLMUserRequest
);
17 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthNegotiateUserRequest
);
19 /* Instantiate all auth framework types */
21 testAuth::instantiate()
24 char const * stub_config
="auth_param digest program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd\n"
25 "auth_param digest children 5\n"
26 "auth_param digest realm Squid proxy-caching web server\n"
27 "auth_param digest nonce_garbage_interval 5 minutes\n"
28 "auth_param digest nonce_max_duration 30 minutes\n"
29 "auth_param digest nonce_max_count 50\n";
33 find_proxy_auth(char const *type
)
35 char const * proxy_auths
[][2]= { {"basic","Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="},
37 {"digest", "Digest username=\"robertdig\", realm=\"Squid proxy-caching web server\", nonce=\"yy8rQXjEWwixXVBj\", uri=\"/images/bg8.gif\", response=\"f75a7d3edd48d93c681c75dc4fb58700\", qop=auth, nc=00000012, cnonce=\"e2216641961e228e\" "},
39 {"negotiate", "Negotiate "}
42 for (unsigned count
= 0; count
< 4 ; count
++) {
43 if (strcasecmp(type
, proxy_auths
[count
][0]) == 0)
44 return proxy_auths
[count
][1];
52 getConfig(char const *type_str
)
54 Vector
<AuthConfig
*> &config
= Config
.authConfiguration
;
55 /* find a configuration for the scheme */
56 AuthConfig
*scheme
= AuthConfig::Find (type_str
);
59 /* Create a configuration */
60 AuthScheme
*theScheme
;
62 if ((theScheme
= AuthScheme::Find(type_str
)) == NULL
) {
63 fatalf("Unknown authentication scheme '%s'.\n", type_str
);
66 config
.push_back(theScheme
->createConfig());
67 scheme
= config
.back();
76 setup_scheme(AuthConfig
*scheme
, char const **params
, unsigned param_count
)
78 Vector
<AuthConfig
*> &config
= Config
.authConfiguration
;
80 for (unsigned position
=0; position
< param_count
; position
++) {
81 char *param_str
=xstrdup(params
[position
]);
82 strtok(param_str
, w_space
);
83 scheme
->parse(scheme
, config
.size(), param_str
);
91 static bool setup(false);
98 Vector
<AuthConfig
*> &config
= Config
.authConfiguration
;
100 char const *digest_parms
[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd",
104 char const *basic_parms
[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd",
108 char const *ntlm_parms
[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd"};
110 char const *negotiate_parms
[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd"};
112 struct _scheme_params
{
115 unsigned paramlength
;
118 params
[]={ {"digest", digest_parms
, 2},
119 {"basic", basic_parms
, 2},
120 {"ntlm", ntlm_parms
, 1},
121 {"negotiate", negotiate_parms
, 1}
124 for (unsigned scheme
=0; scheme
< 4; scheme
++)
125 setup_scheme(getConfig(params
[scheme
].name
), params
[scheme
].params
, params
[scheme
].paramlength
);
127 authenticateInit(&config
);
132 /* AuthConfig::CreateAuthUser works for all
133 * authentication types
136 testAuthConfig::create()
141 for (AuthScheme::const_iterator i
= AuthScheme::Schemes().begin(); i
!= AuthScheme::Schemes().end(); ++i
) {
142 AuthUserRequest
*authRequest
= AuthConfig::CreateAuthUser(find_proxy_auth((*i
)->type()));
143 CPPUNIT_ASSERT(authRequest
!= NULL
);
149 /* AuthUserRequest::scheme returns the correct scheme for all
150 * authentication types
153 testAuthUserRequest::scheme()
158 for (AuthScheme::const_iterator i
= AuthScheme::Schemes().begin(); i
!= AuthScheme::Schemes().end(); ++i
) {
159 // create a user request
160 // check its scheme matches *i
161 AuthUserRequest
*authRequest
= AuthConfig::CreateAuthUser(find_proxy_auth((*i
)->type()));
162 CPPUNIT_ASSERT_EQUAL(authRequest
->scheme(), *i
);
166 #include "auth/basic/auth_basic.h"
167 /* AuthBasicUserRequest::AuthBasicUserRequest works
170 testAuthBasicUserRequest::construction()
172 AuthBasicUserRequest();
173 AuthBasicUserRequest
*temp
=new AuthBasicUserRequest();
178 testAuthBasicUserRequest::username()
180 AuthBasicUserRequest();
181 AuthBasicUserRequest
*temp
=new AuthBasicUserRequest();
182 BasicUser
*basic_auth
=new BasicUser(AuthConfig::Find("basic"));
183 basic_auth
->username("John");
184 temp
->user(basic_auth
);
185 basic_auth
->addRequest(temp
);
186 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp
->username()));
190 #include "auth/digest/auth_digest.h"
191 /* AuthDigestUserRequest::AuthDigestUserRequest works
194 testAuthDigestUserRequest::construction()
196 AuthDigestUserRequest();
197 AuthDigestUserRequest
*temp
=new AuthDigestUserRequest();
202 testAuthDigestUserRequest::username()
204 AuthDigestUserRequest();
205 AuthDigestUserRequest
*temp
=new AuthDigestUserRequest();
206 DigestUser
*user
=new DigestUser(AuthConfig::Find("digest"));
207 user
->username("John");
209 user
->addRequest(temp
);
210 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp
->username()));
214 #include "auth/ntlm/auth_ntlm.h"
215 /* AuthNTLMUserRequest::AuthNTLMUserRequest works
218 testAuthNTLMUserRequest::construction()
220 AuthNTLMUserRequest();
221 AuthNTLMUserRequest
*temp
=new AuthNTLMUserRequest();
226 testAuthNTLMUserRequest::username()
228 AuthNTLMUserRequest();
229 AuthNTLMUserRequest
*temp
=new AuthNTLMUserRequest();
230 NTLMUser
*user
=new NTLMUser(AuthConfig::Find("ntlm"));
231 user
->username("John");
233 user
->addRequest(temp
);
234 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp
->username()));
238 #include "auth/negotiate/auth_negotiate.h"
239 /* AuthNegotiateUserRequest::AuthNegotiateUserRequest works
242 testAuthNegotiateUserRequest::construction()
244 AuthNegotiateUserRequest();
245 AuthNegotiateUserRequest
*temp
=new AuthNegotiateUserRequest();
250 testAuthNegotiateUserRequest::username()
252 AuthNegotiateUserRequest();
253 AuthNegotiateUserRequest
*temp
=new AuthNegotiateUserRequest();
254 NegotiateUser
*user
=new NegotiateUser(AuthConfig::Find("negotiate"));
255 user
->username("John");
257 user
->addRequest(temp
);
258 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp
->username()));