From 3848014d418cee90333fc55350c31f81eed3fd38 Mon Sep 17 00:00:00 2001 From: Andrey Petrov Date: Fri, 26 Mar 2021 12:49:08 -0400 Subject: [PATCH] main: Update host_test.go to pass vet, use errgroup --- go.mod | 4 +-- go.sum | 4 +-- host_test.go | 94 ++++++++++++++++++++++++---------------------------- 3 files changed, 47 insertions(+), 55 deletions(-) diff --git a/go.mod b/go.mod index 9330d5d..459aafa 100644 --- a/go.mod +++ b/go.mod @@ -2,12 +2,12 @@ module github.com/shazow/ssh-chat require ( github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58 - github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c github.com/jessevdk/go-flags v1.5.0 github.com/shazow/rateio v0.0.0-20200113175441-4461efc8bdc4 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/sys v0.0.0-20210324051608-47abb6519492 - golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 // indirect + golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 golang.org/x/text v0.3.5 ) diff --git a/go.sum b/go.sum index 527afd2..6af5af8 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,5 @@ github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58 h1:MkpmYfld/S8kXqTYI68DfL8/hHXjHogL120Dy00TIxc= github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58/go.mod h1:YNfsMyWSs+h+PaYkxGeMVmVCX75Zj/pqdjbu12ciCYE= -github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c h1:aY2hhxLhjEAbfXOx2nRJxCXezC6CO2V/yN+OCr1srtk= -github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/shazow/rateio v0.0.0-20200113175441-4461efc8bdc4 h1:zwQ1HBo5FYwn1ksMd19qBCKO8JAWE9wmHivEpkw/DvE= @@ -9,6 +7,8 @@ github.com/shazow/rateio v0.0.0-20200113175441-4461efc8bdc4/go.mod h1:vt2jWY/3Qw golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492 h1:Paq34FxTluEPvVyayQqMPgHm+vTOrIifmcYxFBx9TLg= diff --git a/host_test.go b/host_test.go index 7518fd6..48d6950 100644 --- a/host_test.go +++ b/host_test.go @@ -13,6 +13,7 @@ import ( "github.com/shazow/ssh-chat/chat/message" "github.com/shazow/ssh-chat/sshd" "golang.org/x/crypto/ssh" + "golang.org/x/sync/errgroup" ) func stripPrompt(s string) string { @@ -91,11 +92,12 @@ func TestHostNameCollision(t *testing.T) { host := NewHost(s, nil) go host.Serve() - done := make(chan struct{}, 1) + ready := make(chan struct{}) + g := errgroup.Group{} // First client - go func() { - err := sshd.ConnectShell(s.Addr().String(), "foo", func(r io.Reader, w io.WriteCloser) error { + g.Go(func() error { + return sshd.ConnectShell(s.Addr().String(), "foo", func(r io.Reader, w io.WriteCloser) error { scanner := bufio.NewScanner(r) // Consume the initial buffer @@ -107,7 +109,7 @@ func TestHostNameCollision(t *testing.T) { } // Ready for second client - done <- struct{}{} + ready <- struct{}{} scanner.Scan() actual = scanner.Text() @@ -123,38 +125,35 @@ func TestHostNameCollision(t *testing.T) { } // Wrap it up. - close(done) + close(ready) return nil }) - if err != nil { - done <- struct{}{} - t.Fatal(err) - } - }() + }) // Wait for first client - <-done + <-ready // Second client - err = sshd.ConnectShell(s.Addr().String(), "foo", func(r io.Reader, w io.WriteCloser) error { - scanner := bufio.NewScanner(r) + g.Go(func() error { + return sshd.ConnectShell(s.Addr().String(), "foo", func(r io.Reader, w io.WriteCloser) error { + scanner := bufio.NewScanner(r) - // Consume the initial buffer - scanner.Scan() - scanner.Scan() - scanner.Scan() + // Consume the initial buffer + scanner.Scan() + scanner.Scan() + scanner.Scan() - actual := scanner.Text() - if !strings.HasPrefix(actual, "[Guest1] ") { - t.Errorf("Second client did not get Guest1 name: %q", actual) - } - return nil + actual := scanner.Text() + if !strings.HasPrefix(actual, "[Guest1] ") { + t.Errorf("Second client did not get Guest1 name: %q", actual) + } + return nil + }) }) - if err != nil { - t.Fatal(err) - } - <-done + if err := g.Wait(); err != nil { + t.Error(err) + } } func TestHostWhitelist(t *testing.T) { @@ -215,13 +214,13 @@ func TestHostKick(t *testing.T) { host := NewHost(s, nil) go host.Serve() + g := errgroup.Group{} connected := make(chan struct{}) kicked := make(chan struct{}) - done := make(chan struct{}) - go func() { + g.Go(func() error { // First client - err := sshd.ConnectShell(addr, "foo", func(r io.Reader, w io.WriteCloser) error { + return sshd.ConnectShell(addr, "foo", func(r io.Reader, w io.WriteCloser) error { scanner := bufio.NewScanner(r) // Consume the initial buffer @@ -252,41 +251,34 @@ func TestHostKick(t *testing.T) { } kicked <- struct{}{} - return nil }) - if err != nil { - connected <- struct{}{} - close(connected) - t.Fatal(err) - close(done) - } - }() + }) - go func() { + g.Go(func() error { // Second client - err := sshd.ConnectShell(addr, "bar", func(r io.Reader, w io.WriteCloser) error { + return sshd.ConnectShell(addr, "bar", func(r io.Reader, w io.WriteCloser) error { scanner := bufio.NewScanner(r) <-connected scanner.Scan() <-kicked - if _, err := w.Write([]byte("am I still here?\r\n")); err != nil { - return err + if _, err := w.Write([]byte("am I still here?\r\n")); err != io.EOF { + return errors.New("expected to be kicked") } scanner.Scan() - return scanner.Err() + if err := scanner.Err(); err == io.EOF { + // All good, we got kicked. + return nil + } else { + return err + } }) - if err == io.EOF { - // All good, we got kicked. - } else if err != nil { - close(done) - t.Fatal(err) - } - close(done) - }() + }) - <-done + if err := g.Wait(); err != nil { + t.Error(err) + } }