// Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build go1.8 package http2 import ( "crypto/tls" "net/http" "testing" "time" ) // Tests that http2.Server.IdleTimeout is initialized from // http.Server.{Idle,Read}Timeout. http.Server.IdleTimeout was // added in Go 1.8. func TestConfigureServerIdleTimeout_Go18(t *testing.T) { const timeout = 5 * time.Second const notThisOne = 1 * time.Second // With a zero http2.Server, verify that it copies IdleTimeout: { s1 := &http.Server{ IdleTimeout: timeout, ReadTimeout: notThisOne, } s2 := &Server{} if err := ConfigureServer(s1, s2); err != nil { t.Fatal(err) } if s2.IdleTimeout != timeout { t.Errorf("s2.IdleTimeout = %v; want %v", s2.IdleTimeout, timeout) } } // And that it falls back to ReadTimeout: { s1 := &http.Server{ ReadTimeout: timeout, } s2 := &Server{} if err := ConfigureServer(s1, s2); err != nil { t.Fatal(err) } if s2.IdleTimeout != timeout { t.Errorf("s2.IdleTimeout = %v; want %v", s2.IdleTimeout, timeout) } } // Verify that s1's IdleTimeout doesn't overwrite an existing setting: { s1 := &http.Server{ IdleTimeout: notThisOne, } s2 := &Server{ IdleTimeout: timeout, } if err := ConfigureServer(s1, s2); err != nil { t.Fatal(err) } if s2.IdleTimeout != timeout { t.Errorf("s2.IdleTimeout = %v; want %v", s2.IdleTimeout, timeout) } } } func TestCertClone(t *testing.T) { c := &tls.Config{ GetClientCertificate: func(*tls.CertificateRequestInfo) (*tls.Certificate, error) { panic("shouldn't be called") }, } c2 := cloneTLSConfig(c) if c2.GetClientCertificate == nil { t.Error("GetClientCertificate is nil") } }