~john-koepi/ubuntu/trusty/golang/default

« back to all changes in this revision

Viewing changes to src/pkg/http/serve_test.go

  • Committer: Bazaar Package Importer
  • Author(s): Ondřej Surý
  • Date: 2011-08-03 17:04:59 UTC
  • mfrom: (14.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20110803170459-wzd99m3567y80ila
Tags: 1:59-1
* Imported Upstream version 59
* Refresh patches to a new release
* Fix FTBFS on ARM (Closes: #634270)
* Update version.bash to work with Debian packaging and not hg
  repository

Show diffs side-by-side

added added

removed removed

Lines of Context:
373
373
        }
374
374
}
375
375
 
376
 
// TestServeHTTP10Close verifies that HTTP/1.0 requests won't be kept alive.
377
 
func TestServeHTTP10Close(t *testing.T) {
378
 
        s := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
379
 
                ServeFile(w, r, "testdata/file")
380
 
        }))
 
376
func testTcpConnectionCloses(t *testing.T, req string, h Handler) {
 
377
        s := httptest.NewServer(h)
381
378
        defer s.Close()
382
379
 
383
380
        conn, err := net.Dial("tcp", s.Listener.Addr().String())
386
383
        }
387
384
        defer conn.Close()
388
385
 
389
 
        _, err = fmt.Fprint(conn, "GET / HTTP/1.0\r\n\r\n")
 
386
        _, err = fmt.Fprint(conn, req)
390
387
        if err != nil {
391
388
                t.Fatal("print error:", err)
392
389
        }
414
411
        success <- true
415
412
}
416
413
 
 
414
// TestServeHTTP10Close verifies that HTTP/1.0 requests won't be kept alive.
 
415
func TestServeHTTP10Close(t *testing.T) {
 
416
        testTcpConnectionCloses(t, "GET / HTTP/1.0\r\n\r\n", HandlerFunc(func(w ResponseWriter, r *Request) {
 
417
                ServeFile(w, r, "testdata/file")
 
418
        }))
 
419
}
 
420
 
 
421
// TestHandlersCanSetConnectionClose verifies that handlers can force a connection to close,
 
422
// even for HTTP/1.1 requests.
 
423
func TestHandlersCanSetConnectionClose11(t *testing.T) {
 
424
        testTcpConnectionCloses(t, "GET / HTTP/1.1\r\n\r\n", HandlerFunc(func(w ResponseWriter, r *Request) {
 
425
                w.Header().Set("Connection", "close")
 
426
        }))
 
427
}
 
428
 
 
429
func TestHandlersCanSetConnectionClose10(t *testing.T) {
 
430
        testTcpConnectionCloses(t, "GET / HTTP/1.0\r\nConnection: keep-alive\r\n\r\n", HandlerFunc(func(w ResponseWriter, r *Request) {
 
431
                w.Header().Set("Connection", "close")
 
432
        }))
 
433
}
 
434
 
417
435
func TestSetsRemoteAddr(t *testing.T) {
418
436
        ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
419
437
                fmt.Fprintf(w, "%s", r.RemoteAddr)
522
540
 
523
541
func TestTLSServer(t *testing.T) {
524
542
        ts := httptest.NewTLSServer(HandlerFunc(func(w ResponseWriter, r *Request) {
525
 
                fmt.Fprintf(w, "tls=%v", r.TLS != nil)
 
543
                if r.TLS != nil {
 
544
                        w.Header().Set("X-TLS-Set", "true")
 
545
                        if r.TLS.HandshakeComplete {
 
546
                                w.Header().Set("X-TLS-HandshakeComplete", "true")
 
547
                        }
 
548
                }
526
549
        }))
527
550
        defer ts.Close()
528
551
        if !strings.HasPrefix(ts.URL, "https://") {
530
553
        }
531
554
        res, err := Get(ts.URL)
532
555
        if err != nil {
533
 
                t.Error(err)
 
556
                t.Fatal(err)
534
557
        }
535
558
        if res == nil {
536
559
                t.Fatalf("got nil Response")
537
560
        }
538
 
        if res.Body == nil {
539
 
                t.Fatalf("got nil Response.Body")
540
 
        }
541
 
        body, err := ioutil.ReadAll(res.Body)
542
 
        if err != nil {
543
 
                t.Error(err)
544
 
        }
545
 
        if e, g := "tls=true", string(body); e != g {
546
 
                t.Errorf("expected body %q; got %q", e, g)
 
561
        defer res.Body.Close()
 
562
        if res.Header.Get("X-TLS-Set") != "true" {
 
563
                t.Errorf("expected X-TLS-Set response header")
 
564
        }
 
565
        if res.Header.Get("X-TLS-HandshakeComplete") != "true" {
 
566
                t.Errorf("expected X-TLS-HandshakeComplete header")
547
567
        }
548
568
}
549
569
 
781
801
        }
782
802
}
783
803
 
 
804
func TestNoDate(t *testing.T) {
 
805
        ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
 
806
                w.Header()["Date"] = nil
 
807
        }))
 
808
        defer ts.Close()
 
809
        res, err := Get(ts.URL)
 
810
        if err != nil {
 
811
                t.Fatal(err)
 
812
        }
 
813
        _, present := res.Header["Date"]
 
814
        if present {
 
815
                t.Fatalf("Expected no Date header; got %v", res.Header["Date"])
 
816
        }
 
817
}
 
818
 
 
819
func TestStripPrefix(t *testing.T) {
 
820
        h := HandlerFunc(func(w ResponseWriter, r *Request) {
 
821
                w.Header().Set("X-Path", r.URL.Path)
 
822
        })
 
823
        ts := httptest.NewServer(StripPrefix("/foo", h))
 
824
        defer ts.Close()
 
825
 
 
826
        res, err := Get(ts.URL + "/foo/bar")
 
827
        if err != nil {
 
828
                t.Fatal(err)
 
829
        }
 
830
        if g, e := res.Header.Get("X-Path"), "/bar"; g != e {
 
831
                t.Errorf("test 1: got %s, want %s", g, e)
 
832
        }
 
833
 
 
834
        res, err = Get(ts.URL + "/bar")
 
835
        if err != nil {
 
836
                t.Fatal(err)
 
837
        }
 
838
        if g, e := res.StatusCode, 404; g != e {
 
839
                t.Errorf("test 2: got status %v, want %v", g, e)
 
840
        }
 
841
}
 
842
 
784
843
type errorListener struct {
785
844
        errs []os.Error
786
845
}