Attachment #8848144: patch for test basic for bug #41489

View | Details | Raw Unified | Return to bug 41489
Collapse All | Expand All

(-)a/netwerk/test/unit/test_authentication.js (-1 / +36 lines)
Line     Link Here 
 Lines 18-33   XPCOMUtils.defineLazyGetter(this, "PORT" Link Here 
18
});
18
});
19
19
20
const FLAG_RETURN_FALSE   = 1 << 0;
20
const FLAG_RETURN_FALSE   = 1 << 0;
21
const FLAG_WRONG_PASSWORD = 1 << 1;
21
const FLAG_WRONG_PASSWORD = 1 << 1;
22
const FLAG_BOGUS_USER = 1 << 2;
22
const FLAG_BOGUS_USER = 1 << 2;
23
const FLAG_PREVIOUS_FAILED = 1 << 3;
23
const FLAG_PREVIOUS_FAILED = 1 << 3;
24
const CROSS_ORIGIN = 1 << 4;
24
const CROSS_ORIGIN = 1 << 4;
25
const FLAG_NO_REALM = 1 << 5;
25
const FLAG_NO_REALM = 1 << 5;
26
const FLAG_UTF8_USER = 1 << 6;
27
const userUTF8 = "\u0443\u0442\u04448";
26
28
27
const nsIAuthPrompt2 = Components.interfaces.nsIAuthPrompt2;
29
const nsIAuthPrompt2 = Components.interfaces.nsIAuthPrompt2;
28
const nsIAuthInformation = Components.interfaces.nsIAuthInformation;
30
const nsIAuthInformation = Components.interfaces.nsIAuthInformation;
29
31
30
32
31
function AuthPrompt1(flags) {
33
function AuthPrompt1(flags) {
32
  this.flags = flags;
34
  this.flags = flags;
33
}
35
}
 Lines 154-169   AuthPrompt2.prototype = { Link Here 
154
    if (this.flags & FLAG_RETURN_FALSE)
156
    if (this.flags & FLAG_RETURN_FALSE)
155
    {
157
    {
156
      this.flags |= FLAG_PREVIOUS_FAILED;
158
      this.flags |= FLAG_PREVIOUS_FAILED;
157
      return false;
159
      return false;
158
    }
160
    }
159
161
160
    if (this.flags & FLAG_BOGUS_USER)
162
    if (this.flags & FLAG_BOGUS_USER)
161
      this.user = "foo\nbar";
163
      this.user = "foo\nbar";
164
    if (this.flags & FLAG_UTF8_USER)
165
      this.user = userUTF8;
162
166
163
    authInfo.username = this.user;
167
    authInfo.username = this.user;
164
    if (this.flags & FLAG_WRONG_PASSWORD) {
168
    if (this.flags & FLAG_WRONG_PASSWORD) {
165
      authInfo.password = this.pass + ".wrong";
169
      authInfo.password = this.pass + ".wrong";
166
      this.flags |= FLAG_PREVIOUS_FAILED;
170
      this.flags |= FLAG_PREVIOUS_FAILED;
167
      // Now clear the flag to avoid an infinite loop
171
      // Now clear the flag to avoid an infinite loop
168
      this.flags &= ~FLAG_WRONG_PASSWORD;
172
      this.flags &= ~FLAG_WRONG_PASSWORD;
169
    } else {
173
    } else {
 Lines 302-331   function makeChan(url, loadingUrl) { Link Here 
302
    });
306
    });
303
}
307
}
304
308
305
var tests = [test_noauth, test_returnfalse1, test_wrongpw1, test_prompt1,
309
var tests = [test_noauth, test_returnfalse1, test_wrongpw1, test_prompt1,
306
             test_prompt1CrossOrigin, test_prompt2CrossOrigin,
310
             test_prompt1CrossOrigin, test_prompt2CrossOrigin,
307
             test_returnfalse2, test_wrongpw2, test_prompt2, test_ntlm,
311
             test_returnfalse2, test_wrongpw2, test_prompt2, test_ntlm,
308
             test_basicrealm, test_digest_noauth, test_digest,
312
             test_basicrealm, test_digest_noauth, test_digest,
309
             test_digest_bogus_user, test_short_digest, test_large_realm,
313
             test_digest_bogus_user, test_short_digest, test_large_realm,
310
             test_large_domain];
314
             test_large_domain, test_basic_charset];
311
315
312
var current_test = 0;
316
var current_test = 0;
313
317
314
var httpserv = null;
318
var httpserv = null;
315
319
316
function run_test() {
320
function run_test() {
317
  httpserv = new HttpServer();
321
  httpserv = new HttpServer();
318
322
319
  httpserv.registerPathHandler("/auth", authHandler);
323
  httpserv.registerPathHandler("/auth", authHandler);
320
  httpserv.registerPathHandler("/auth/ntlm/simple", authNtlmSimple);
324
  httpserv.registerPathHandler("/auth/ntlm/simple", authNtlmSimple);
321
  httpserv.registerPathHandler("/auth/realm", authRealm);
325
  httpserv.registerPathHandler("/auth/realm", authRealm);
322
  httpserv.registerPathHandler("/auth/digest", authDigest);
326
  httpserv.registerPathHandler("/auth/digest", authDigest);
323
  httpserv.registerPathHandler("/auth/short_digest", authShortDigest);
327
  httpserv.registerPathHandler("/auth/short_digest", authShortDigest);
328
  httpserv.registerPathHandler("/auth/charset", authBasicCharset);
324
  httpserv.registerPathHandler("/largeRealm", largeRealm);
329
  httpserv.registerPathHandler("/largeRealm", largeRealm);
325
  httpserv.registerPathHandler("/largeDomain", largeDomain);
330
  httpserv.registerPathHandler("/largeDomain", largeDomain);
326
331
327
  httpserv.start(-1);
332
  httpserv.start(-1);
328
333
329
  tests[0]();
334
  tests[0]();
330
}
335
}
331
336
 Lines 472-487   function test_short_digest() { Link Here 
472
  var chan = makeChan(URL + "/auth/short_digest", URL);
477
  var chan = makeChan(URL + "/auth/short_digest", URL);
473
  chan.notificationCallbacks =  new Requestor(FLAG_NO_REALM, 2);
478
  chan.notificationCallbacks =  new Requestor(FLAG_NO_REALM, 2);
474
  listener.expectedCode = 401; // OK
479
  listener.expectedCode = 401; // OK
475
  chan.asyncOpen2(listener);
480
  chan.asyncOpen2(listener);
476
481
477
  do_test_pending();
482
  do_test_pending();
478
}
483
}
479
484
485
function test_basic_charset() {
486
  var chan = makeChan(URL + "/auth/charset", URL);
487
  chan.notificationCallbacks = new Requestor(FLAG_UTF8_USER, 2);
488
  listener.expectedCode = 200;
489
  chan.asyncOpen2(listener);
490
491
  do_test_pending();
492
}
493
480
// PATH HANDLERS
494
// PATH HANDLERS
481
495
482
// /auth
496
// /auth
483
function authHandler(metadata, response) {
497
function authHandler(metadata, response) {
484
  // btoa("guest:guest"), but that function is not available here
498
  // btoa("guest:guest"), but that function is not available here
485
  var expectedHeader = "Basic Z3Vlc3Q6Z3Vlc3Q=";
499
  var expectedHeader = "Basic Z3Vlc3Q6Z3Vlc3Q=";
486
500
487
  var body;
501
  var body;
 Lines 522-537   function authNtlmSimple(metadata, respon Link Here 
522
function authRealm(metadata, response) {
536
function authRealm(metadata, response) {
523
  response.setStatusLine(metadata.httpVersion, 401, "Unauthorized");
537
  response.setStatusLine(metadata.httpVersion, 401, "Unauthorized");
524
  response.setHeader("WWW-Authenticate", 'Basic realm="\\"f\\oo_bar"', false);
538
  response.setHeader("WWW-Authenticate", 'Basic realm="\\"f\\oo_bar"', false);
525
  var body = "success";
539
  var body = "success";
526
540
527
  response.bodyOutputStream.write(body, body.length);
541
  response.bodyOutputStream.write(body, body.length);
528
}
542
}
529
543
544
function authBasicCharset(metadata, response) {
545
  var expectedHeader = "Basic " + btoa(
546
      unescape(encodeURIComponent(userUTF8 + ":guest")));
547
548
  var body;
549
  if (metadata.hasHeader("Authorization") &&
550
      metadata.getHeader("Authorization") == expectedHeader)
551
  {
552
    response.setStatusLine(metadata.httpVersion, 200, "OK, authorized");
553
    body = "success";
554
  } else {
555
    response.setStatusLine(metadata.httpVersion, 401, "Unauthorized");
556
    response.setHeader("WWW-Authenticate", 'Basic realm="secret",\
557
                       charset=UTF-8 , dummy="argument"', false);
558
559
    body = "failed";
560
  }
561
562
  response.bodyOutputStream.write(body, body.length);
563
}
564
530
//
565
//
531
// Digest functions
566
// Digest functions
532
// 
567
// 
533
function bytesFromString(str) {
568
function bytesFromString(str) {
534
 var converter =
569
 var converter =
535
   Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
570
   Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
536
     .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
571
     .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
537
 converter.charset = "UTF-8";
572
 converter.charset = "UTF-8";

Return to bug 41489