ssh/agent: fix TestMalformedRequests
Use a net.Pipe, rather than setting up a local TCP connection,
for testing malformed SSH requests, since we don't need the
complex intricacies of a real connection to test this protocol
behavior.
Fixes golang/go#50161
Change-Id: I5e46c42041ddd03b06725469216b82b801990e64
Reviewed-on: https://go-review.googlesource.com/c/crypto/+/371874
Reviewed-by: Bryan Mills <bcmills@google.com>
Trust: Roland Shoemaker <roland@golang.org>
Run-TryBot: Roland Shoemaker <roland@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/ssh/agent/client_test.go b/ssh/agent/client_test.go
index de1c783..a81bcd6 100644
--- a/ssh/agent/client_test.go
+++ b/ssh/agent/client_test.go
@@ -16,7 +16,6 @@
"runtime"
"strconv"
"strings"
- "sync"
"testing"
"time"
@@ -204,44 +203,26 @@
func TestMalformedRequests(t *testing.T) {
keyringAgent := NewKeyring()
- listener, err := netListener()
- if err != nil {
- t.Fatalf("netListener: %v", err)
- }
- defer listener.Close()
testCase := func(t *testing.T, requestBytes []byte, wantServerErr bool) {
- var wg sync.WaitGroup
- wg.Add(1)
+ c, s := net.Pipe()
+ defer c.Close()
+ defer s.Close()
go func() {
- defer wg.Done()
- c, err := listener.Accept()
+ _, err := c.Write(requestBytes)
if err != nil {
- t.Errorf("listener.Accept: %v", err)
- return
+ t.Errorf("Unexpected error writing raw bytes on connection: %v", err)
}
- defer c.Close()
-
- err = ServeAgent(keyringAgent, c)
- if err == nil {
- t.Error("ServeAgent should have returned an error to malformed input")
- } else {
- if (err != io.EOF) != wantServerErr {
- t.Errorf("ServeAgent returned expected error: %v", err)
- }
- }
+ c.Close()
}()
-
- c, err := net.Dial("tcp", listener.Addr().String())
- if err != nil {
- t.Fatalf("net.Dial: %v", err)
+ err := ServeAgent(keyringAgent, s)
+ if err == nil {
+ t.Error("ServeAgent should have returned an error to malformed input")
+ } else {
+ if (err != io.EOF) != wantServerErr {
+ t.Errorf("ServeAgent returned expected error: %v", err)
+ }
}
- _, err = c.Write(requestBytes)
- if err != nil {
- t.Errorf("Unexpected error writing raw bytes on connection: %v", err)
- }
- c.Close()
- wg.Wait()
}
var testCases = []struct {