1 // Copyright 2016 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
17 twain
= "testdata/Mark.Twain-Tom.Sawyer.txt"
19 twainSHA256
= "461eb7cb2d57d293fc680c836464c9125e4382be3596f7d415093ae9db8fcb0e"
22 func TestSendfile(t
*testing
.T
) {
23 ln
, err
:= newLocalListener("tcp")
29 errc
:= make(chan error
, 1)
30 go func(ln Listener
) {
31 // Wait for a connection.
32 conn
, err
:= ln
.Accept()
43 f
, err
:= os
.Open(twain
)
50 // Return file data using io.Copy, which should use
51 // sendFile if available.
52 sbytes
, err
:= io
.Copy(conn
, f
)
58 if sbytes
!= twainLen
{
59 errc
<- fmt
.Errorf("sent %d bytes; expected %d", sbytes
, twainLen
)
65 // Connect to listener to retrieve file and verify digest matches
67 c
, err
:= Dial("tcp", ln
.Addr().String())
74 rbytes
, err
:= io
.Copy(h
, c
)
79 if rbytes
!= twainLen
{
80 t
.Errorf("received %d bytes; expected %d", rbytes
, twainLen
)
83 if res
:= hex
.EncodeToString(h
.Sum(nil)); res
!= twainSHA256
{
84 t
.Error("retrieved data hash did not match")
87 for err
:= range errc
{