owenthereal/upterm

ftests fail occationally on Linux

Closed this issue · 0 comments

make test
go test ./... -timeout=60s -coverprofile=c.out -covermode=atomic -mod=vendor -count=1 -race -v
?       github.com/jingweno/upterm/cmd/gendoc   [no test files]
?       github.com/jingweno/upterm/cmd/upterm   [no test files]
=== RUN   Test_parseURL
=== RUN   Test_parseURL/port_443
=== PAUSE Test_parseURL/port_443
=== RUN   Test_parseURL/port_80
=== PAUSE Test_parseURL/port_80
=== RUN   Test_parseURL/port_22
=== PAUSE Test_parseURL/port_22
=== RUN   Test_parseURL/no_port
=== PAUSE Test_parseURL/no_port
=== CONT  Test_parseURL/port_443
=== CONT  Test_parseURL/port_80
=== CONT  Test_parseURL/port_22
=== CONT  Test_parseURL/no_port
--- PASS: Test_parseURL (0.01s)
    --- PASS: Test_parseURL/port_80 (0.00s)
    --- PASS: Test_parseURL/port_22 (0.00s)
    --- PASS: Test_parseURL/no_port (0.00s)
    --- PASS: Test_parseURL/port_443 (0.01s)
PASS
coverage: 5.0% of statements
ok      github.com/jingweno/upterm/cmd/upterm/command   0.650s  coverage: 5.0% of statements
?       github.com/jingweno/upterm/cmd/uptermd  [no test files]
?       github.com/jingweno/upterm/cmd/uptermd/internal/command [no test files]
time="2020-04-30T22:05:15Z" level=info msg="waiting for server" addr="127.0.0.1:34496"
time="2020-04-30T22:05:15Z" level=debug msg="connection establishing failed" addr="127.0.0.1:58508" componet=ssh-proxy error=EOF
time="2020-04-30T22:05:16Z" level=info msg="waiting for server" addr="127.0.0.1:45139"
=== RUN   Test_ftest
=== RUN   Test_ftest/ssh/testClientNonExistingSession
=== PAUSE Test_ftest/ssh/testClientNonExistingSession
=== RUN   Test_ftest/ws/testClientNonExistingSession
=== PAUSE Test_ftest/ws/testClientNonExistingSession
=== RUN   Test_ftest/ssh/testClientAttachHostWithSameCommand
=== PAUSE Test_ftest/ssh/testClientAttachHostWithSameCommand
=== RUN   Test_ftest/ws/testClientAttachHostWithSameCommand
=== PAUSE Test_ftest/ws/testClientAttachHostWithSameCommand
=== RUN   Test_ftest/ssh/testClientAttachHostWithDifferentCommand
=== PAUSE Test_ftest/ssh/testClientAttachHostWithDifferentCommand
=== RUN   Test_ftest/ws/testClientAttachHostWithDifferentCommand
=== PAUSE Test_ftest/ws/testClientAttachHostWithDifferentCommand
=== RUN   Test_ftest/ssh/testClientAttachReadOnly
=== PAUSE Test_ftest/ssh/testClientAttachReadOnly
=== RUN   Test_ftest/ws/testClientAttachReadOnly
=== PAUSE Test_ftest/ws/testClientAttachReadOnly
=== RUN   Test_ftest/ssh/testHostFailToShareWithoutPrivateKey
=== PAUSE Test_ftest/ssh/testHostFailToShareWithoutPrivateKey
=== RUN   Test_ftest/ws/testHostFailToShareWithoutPrivateKey
=== PAUSE Test_ftest/ws/testHostFailToShareWithoutPrivateKey
=== RUN   Test_ftest/ssh/testHostSessionCreatedCallback
=== PAUSE Test_ftest/ssh/testHostSessionCreatedCallback
=== RUN   Test_ftest/ws/testHostSessionCreatedCallback
=== PAUSE Test_ftest/ws/testHostSessionCreatedCallback
=== CONT  Test_ftest/ws/testClientNonExistingSession
=== CONT  Test_ftest/ssh/testClientAttachReadOnly
=== CONT  Test_ftest/ssh/testClientAttachHostWithSameCommand
=== CONT  Test_ftest/ssh/testHostSessionCreatedCallback
=== CONT  Test_ftest/ws/testClientAttachHostWithSameCommand
=== CONT  Test_ftest/ssh/testHostFailToShareWithoutPrivateKey
=== CONT  Test_ftest/ssh/testClientNonExistingSession
=== CONT  Test_ftest/ws/testHostFailToShareWithoutPrivateKey
time="2020-04-30T22:05:16Z" level=info msg="dialing sshproxy sshd" compoent=ws-sshproxy-dialer host=u51696 sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:16Z" level=info msg="dialing sshproxy sshd" compoent=ws-sshproxy-dialer host=u51696 sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:16Z" level=info msg="dialing sshproxy sshd" compoent=ws-sshproxy-dialer host=u51696 sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=debug msg="connection establishing failed" addr="127.0.0.1:58572" componet=ssh-proxy error=EOF
time="2020-04-30T22:05:17Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn74h7k8ut6sl6oi0 tunnel-port=0
time="2020-04-30T22:05:17Z" level=error msg="error running host" error="ssh://127.0.0.1:34496: Permission denied (publickey)."
=== CONT  Test_ftest/ws/testClientAttachReadOnly
time="2020-04-30T22:05:17Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn74h7k8ut6sl6oj0 tunnel-port=0
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn74h7k8ut6sl6ohg tunnel-port=0
time="2020-04-30T22:05:17Z" level=info msg="dialing sshproxy sshd" compoent=ws-sshproxy-dialer host=u51696 sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=error msg="error running host" error="ws://127.0.0.1:45139: Permission denied (publickey)."
=== CONT  Test_ftest/ws/testHostSessionCreatedCallback
time="2020-04-30T22:05:17Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn74h7k8ut6sl6oig tunnel-port=0
time="2020-04-30T22:05:17Z" level=info msg="dialing sshproxy sshd" compoent=ws-sshproxy-dialer host=u51696 sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=debug msg="connection establishing failed" addr="127.0.0.1:58582" componet=ssh-proxy error=EOF
time="2020-04-30T22:05:17Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn74h7k8ut6sl6ok0 tunnel-port=0
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn74h7k8ut6sl6ol0 tunnel-port=0
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn7ch7k8ut6sl6olg tunnel-port=0
time="2020-04-30T22:05:17Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn7ch7k8ut6sl6om0 tunnel-port=0
time="2020-04-30T22:05:17Z" level=info msg="waiting for unix socket" socket=/tmp/upterm502739695/upterm.sock
time="2020-04-30T22:05:17Z" level=info msg="waiting for unix socket" socket=/tmp/upterm677746421/upterm.sock
time="2020-04-30T22:05:17Z" level=info msg="waiting for unix socket" socket=/tmp/upterm549451216/upterm.sock
time="2020-04-30T22:05:17Z" level=info msg="waiting for unix socket" socket=/tmp/upterm007125753/upterm.sock
time="2020-04-30T22:05:17Z" level=info msg="waiting for unix socket" socket=/tmp/upterm175240578/upterm.sock
time="2020-04-30T22:05:17Z" level=info msg="waiting for unix socket" socket=/tmp/upterm888190355/upterm.sock
=== CONT  Test_ftest/ssh/testClientAttachHostWithDifferentCommand
time="2020-04-30T22:05:17Z" level=info msg="dialing sshproxy session" addr="127.0.0.1:34496" compoent=ws-sshproxy-dialer session=not-existance sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:18Z" level=info msg="dialing sshproxy session" addr="127.0.0.1:34496" compoent=ws-sshproxy-dialer session=bqlkn74h7k8ut6sl6ok0 sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:18Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn74h7k8ut6sl6ohg
time="2020-04-30T22:05:18Z" level=info msg="dialing session" addr="127.0.0.1:34496" compoent=ssh-conn-dialer node="127.0.0.1:34496" session=bqlkn74h7k8ut6sl6oig
time="2020-04-30T22:05:18Z" level=info msg="dialing session" addr="127.0.0.1:34496" compoent=ssh-conn-dialer node="127.0.0.1:34496" session=not-existance
time="2020-04-30T22:05:18Z" level=debug msg="connection establishing failed" addr="127.0.0.1:58642" componet=ssh-proxy error="dial mem mem->mem: listener with address not-existance not found"
time="2020-04-30T22:05:18Z" level=info msg="dialing session" addr="127.0.0.1:34496" compoent=ssh-conn-dialer node="127.0.0.1:34496" session=bqlkn74h7k8ut6sl6oj0
=== CONT  Test_ftest/ws/testClientAttachHostWithDifferentCommand
time="2020-04-30T22:05:18Z" level=info msg="dialing session" addr="127.0.0.1:34496" compoent=ssh-conn-dialer node="127.0.0.1:34496" session=not-existance
time="2020-04-30T22:05:18Z" level=info msg="dialing sshproxy sshd" compoent=ws-sshproxy-dialer host=u51696 sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:18Z" level=debug msg="connection establishing failed" addr="127.0.0.1:58648" componet=ssh-proxy error="dial mem mem->mem: listener with address not-existance not found"
time="2020-04-30T22:05:18Z" level=info msg="dialing session" addr="127.0.0.1:34496" compoent=ssh-conn-dialer node="127.0.0.1:34496" session=bqlkn74h7k8ut6sl6ok0
time="2020-04-30T22:05:18Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn74h7k8ut6sl6oi0
time="2020-04-30T22:05:18Z" level=info msg="dialing sshd" compoent=ssh-conn-dialer host=u51696 ndoe="127.0.0.1:34496"
time="2020-04-30T22:05:18Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn7ch7k8ut6sl6omg tunnel-port=0
time="2020-04-30T22:05:18Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn74h7k8ut6sl6ol0
time="2020-04-30T22:05:18Z" level=info msg="waiting for unix socket" socket=/tmp/upterm636938557/upterm.sock
    Test_ftest/ssh/testClientAttachHostWithSameCommand: client_test.go:140: want="echo hello" got="hello":
          string(
        -       "echo hello",
        +       "hello",
          )
time="2020-04-30T22:05:18Z" level=info msg="attempt to bind" componet=sshd tunnel-host=bqlkn7kh7k8ut6sl6on0 tunnel-port=0
time="2020-04-30T22:05:18Z" level=info msg="waiting for unix socket" socket=/tmp/upterm373378936/upterm.sock
time="2020-04-30T22:05:18Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn74h7k8ut6sl6oig
time="2020-04-30T22:05:18Z" level=info msg="dialing sshproxy session" addr="127.0.0.1:34496" compoent=ws-sshproxy-dialer session=bqlkn7ch7k8ut6sl6olg sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:18Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn7ch7k8ut6sl6om0
time="2020-04-30T22:05:18Z" level=info msg="dialing session" addr="127.0.0.1:34496" compoent=ssh-conn-dialer node="127.0.0.1:34496" session=bqlkn7ch7k8ut6sl6olg
time="2020-04-30T22:05:18Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn74h7k8ut6sl6ok0
time="2020-04-30T22:05:18Z" level=info msg="waiting for unix socket" socket=/tmp/upterm474249847/upterm.sock
time="2020-04-30T22:05:19Z" level=info msg="dialing session" addr="127.0.0.1:34496" compoent=ssh-conn-dialer node="127.0.0.1:34496" session=bqlkn7ch7k8ut6sl6omg
time="2020-04-30T22:05:19Z" level=info msg="waiting for unix socket" socket=/tmp/upterm305380202/upterm.sock
time="2020-04-30T22:05:19Z" level=info msg="dialing sshproxy session" addr="127.0.0.1:34496" compoent=ws-sshproxy-dialer session=bqlkn7kh7k8ut6sl6on0 sshproxy-addr="127.0.0.1:34496"
time="2020-04-30T22:05:19Z" level=info msg="dialing session" addr="127.0.0.1:34496" compoent=ssh-conn-dialer node="127.0.0.1:34496" session=bqlkn7kh7k8ut6sl6on0
2020/04/30 22:05:19 Timeout hit..
time="2020-04-30T22:05:19Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn74h7k8ut6sl6oj0
2020/04/30 22:05:19 Timeout hit..
time="2020-04-30T22:05:19Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn7ch7k8ut6sl6olg
time="2020-04-30T22:05:20Z" level=debug msg="error handling ssh session" component=stream-local-handler componet=sshd error=closed session-id=bqlkn7ch7k8ut6sl6omg
--- FAIL: Test_ftest (0.01s)
    --- PASS: Test_ftest/ssh/testHostFailToShareWithoutPrivateKey (0.16s)
    --- PASS: Test_ftest/ws/testHostFailToShareWithoutPrivateKey (0.25s)
    --- PASS: Test_ftest/ssh/testHostSessionCreatedCallback (1.03s)
    --- PASS: Test_ftest/ws/testClientNonExistingSession (1.10s)
    --- PASS: Test_ftest/ssh/testClientNonExistingSession (1.12s)
    --- FAIL: Test_ftest/ssh/testClientAttachHostWithSameCommand (1.25s)
    --- PASS: Test_ftest/ws/testHostSessionCreatedCallback (1.00s)
    --- PASS: Test_ftest/ws/testClientAttachHostWithSameCommand (1.32s)
    --- PASS: Test_ftest/ssh/testClientAttachReadOnly (2.26s)
    --- PASS: Test_ftest/ws/testClientAttachReadOnly (2.19s)
    --- PASS: Test_ftest/ssh/testClientAttachHostWithDifferentCommand (2.07s)
    --- PASS: Test_ftest/ws/testClientAttachHostWithDifferentCommand (2.11s)
FAIL
coverage: [no statements]
FAIL    github.com/jingweno/upterm/ftests       5.762s
=== RUN   Test_signerFromFile
=== RUN   Test_signerFromFile/rsa_private_key_wrong_passphrase
=== RUN   Test_signerFromFile/rsa_private_key_correct_passphrase
=== RUN   Test_signerFromFile/ed25519_private_key_wrong_passphrase
=== RUN   Test_signerFromFile/ed25519_private_key_correct_passphrase
--- PASS: Test_signerFromFile (31.77s)
    --- PASS: Test_signerFromFile/rsa_private_key_wrong_passphrase (16.35s)
    --- PASS: Test_signerFromFile/rsa_private_key_correct_passphrase (3.13s)
    --- PASS: Test_signerFromFile/ed25519_private_key_wrong_passphrase (9.34s)
    --- PASS: Test_signerFromFile/ed25519_private_key_correct_passphrase (2.94s)
PASS
coverage: 11.5% of statements
ok      github.com/jingweno/upterm/host 37.164s coverage: 11.5% of statements
=== RUN   Test_EncodeDecodeIdentifier
=== RUN   Test_EncodeDecodeIdentifier/client_type
=== PAUSE Test_EncodeDecodeIdentifier/client_type
=== RUN   Test_EncodeDecodeIdentifier/host_type
=== PAUSE Test_EncodeDecodeIdentifier/host_type
=== CONT  Test_EncodeDecodeIdentifier/host_type
=== CONT  Test_EncodeDecodeIdentifier/client_type
--- PASS: Test_EncodeDecodeIdentifier (0.00s)
    --- PASS: Test_EncodeDecodeIdentifier/client_type (0.00s)
    --- PASS: Test_EncodeDecodeIdentifier/host_type (0.00s)
PASS
coverage: 12.9% of statements
ok      github.com/jingweno/upterm/host/api     0.099s  coverage: 12.9% of statements
?       github.com/jingweno/upterm/host/api/swagger/client      [no test files]
?       github.com/jingweno/upterm/host/api/swagger/client/admin_service        [no test files]
?       github.com/jingweno/upterm/host/api/swagger/models      [no test files]
?       github.com/jingweno/upterm/host/internal        [no test files]
=== RUN   Test_ContextReader
=== PAUSE Test_ContextReader
=== RUN   Test_MultiWriter
=== PAUSE Test_MultiWriter
=== CONT  Test_ContextReader
=== RUN   Test_ContextReader/happy_path
=== CONT  Test_MultiWriter
--- PASS: Test_MultiWriter (0.00s)
=== PAUSE Test_ContextReader/happy_path
=== RUN   Test_ContextReader/pass_in_canceled_context
=== PAUSE Test_ContextReader/pass_in_canceled_context
=== RUN   Test_ContextReader/cancel_context_during_copy
=== PAUSE Test_ContextReader/cancel_context_during_copy
=== RUN   Test_ContextReader/cancel_context_after_copy
=== PAUSE Test_ContextReader/cancel_context_after_copy
=== CONT  Test_ContextReader/happy_path
=== CONT  Test_ContextReader/cancel_context_after_copy
=== CONT  Test_ContextReader/pass_in_canceled_context
=== CONT  Test_ContextReader/cancel_context_during_copy
--- PASS: Test_ContextReader (0.01s)
    --- PASS: Test_ContextReader/pass_in_canceled_context (0.01s)
    --- PASS: Test_ContextReader/happy_path (0.02s)
    --- PASS: Test_ContextReader/cancel_context_during_copy (1.02s)
    --- PASS: Test_ContextReader/cancel_context_after_copy (3.48s)
    Test_ContextReader: reader_test.go:54: should never get here
FAIL
==================
WARNING: DATA RACE
Read at 0x00c0001a2163 by goroutine 20:
  testing.(*common).Fail()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:612 +0xc5
  testing.(*common).Fail()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:607 +0x14c
  testing.(*common).FailNow()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:635 +0x38
  testing.(*common).Fatal()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:718 +0x89
  github.com/jingweno/upterm/io.Test_ContextReader.func3.1()
      /home/dyno/project/upterm/io/reader_test.go:54 +0xa0
  github.com/jingweno/upterm/io.readFunc.Read()
      /home/dyno/project/upterm/io/reader_test.go:99 +0x55
  github.com/jingweno/upterm/io.contextReader.Read.func1()
      /home/dyno/project/upterm/io/reader.go:38 +0x14f

Previous write at 0x00c0001a2163 by goroutine 7:
  testing.tRunner.func1()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:977 +0x467
  testing.tRunner()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:995 +0x20d

Goroutine 20 (running) created at:
  github.com/jingweno/upterm/io.contextReader.Read()
      /home/dyno/project/upterm/io/reader.go:28 +0xed
  github.com/jingweno/upterm/io.(*contextReader).Read()
      <autogenerated>:1 +0xb6
  bytes.(*Buffer).ReadFrom()
      /home/dyno/.heroku/lib/go/src/bytes/buffer.go:204 +0x158
  io.copyBuffer()
      /home/dyno/.heroku/lib/go/src/io/io.go:391 +0x3fa
  io.Copy()
      /home/dyno/.heroku/lib/go/src/io/io.go:364 +0x271
  github.com/jingweno/upterm/io.Test_ContextReader.func3()
      /home/dyno/project/upterm/io/reader_test.go:64 +0x239
  testing.tRunner()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:991 +0x1eb

Goroutine 7 (finished) created at:
  testing.(*T).Run()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:1042 +0x660
  testing.runTests.func1()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:1284 +0xa6
  testing.tRunner()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:991 +0x1eb
  testing.runTests()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:1282 +0x527
  testing.(*M).Run()
      /home/dyno/.heroku/lib/go/src/testing/testing.go:1199 +0x2ff
  main.main()
      _testmain.go:96 +0x337
==================
panic: Fail in goroutine after Test_ContextReader has completed

goroutine 35 [running]:
testing.(*common).Fail(0xc0001a2120)
        /home/dyno/.heroku/lib/go/src/testing/testing.go:613 +0x1f3
testing.(*common).Fail(0xc0001a25a0)
        /home/dyno/.heroku/lib/go/src/testing/testing.go:607 +0x14d
testing.(*common).FailNow(0xc0001a25a0)
        /home/dyno/.heroku/lib/go/src/testing/testing.go:635 +0x39
testing.(*common).Fatal(0xc0001a25a0, 0xc0000c0e18, 0x1, 0x1)
        /home/dyno/.heroku/lib/go/src/testing/testing.go:718 +0x8a
github.com/jingweno/upterm/io.Test_ContextReader.func3.1(0xc0000b6000, 0x200, 0x200, 0xc0000b0e80, 0x43339a, 0xc0000b8000)
        /home/dyno/project/upterm/io/reader_test.go:54 +0xa1
github.com/jingweno/upterm/io.readFunc.Read(0xc0000a0010, 0xc0000b6000, 0x200, 0x200, 0x0, 0x0, 0x0)
        /home/dyno/project/upterm/io/reader_test.go:99 +0x56
github.com/jingweno/upterm/io.contextReader.Read.func1(0xc000096060, 0x6d3d20, 0xc0000a0010, 0x6d60a0, 0xc0000aa000, 0xc0000b6000, 0x200, 0x200)
        /home/dyno/project/upterm/io/reader.go:38 +0x150
created by github.com/jingweno/upterm/io.contextReader.Read
        /home/dyno/project/upterm/io/reader.go:28 +0xee
FAIL    github.com/jingweno/upterm/io   9.188s
=== RUN   Test_MemListener_Listen
=== PAUSE Test_MemListener_Listen
=== RUN   Test_MemListener_Dial
=== PAUSE Test_MemListener_Dial
=== RUN   Test_MemListener_RemoveListener
=== PAUSE Test_MemListener_RemoveListener
=== CONT  Test_MemListener_Listen
=== CONT  Test_MemListener_Dial
=== CONT  Test_MemListener_RemoveListener
--- PASS: Test_MemListener_Listen (0.00s)
--- PASS: Test_MemListener_Dial (0.00s)
--- PASS: Test_MemListener_RemoveListener (0.00s)
PASS
coverage: 73.1% of statements
ok      github.com/jingweno/upterm/memlistener  0.140s  coverage: 73.1% of statements
?       github.com/jingweno/upterm/metrics      [no test files]
=== RUN   Test_SSHD_DisallowSession
time="2020-04-30T22:05:15Z" level=info msg="waiting for server" addr="127.0.0.1:41115"
--- PASS: Test_SSHD_DisallowSession (1.06s)
=== RUN   Test_SSHProxy_findUpstream
time="2020-04-30T22:05:16Z" level=info msg="waiting for server" addr="127.0.0.1:38452"
time="2020-04-30T22:05:16Z" level=debug msg="connection establishing failed" addr="127.0.0.1:37532" error="read tcp 127.0.0.1:38452->127.0.0.1:37532: read: connection reset by peer"
time="2020-04-30T22:05:17Z" level=info msg="waiting for server" addr="127.0.0.1:43881"
time="2020-04-30T22:05:17Z" level=info msg="dialing neighbour" addr="127.0.0.1:43881" node="127.0.0.1:38452" session=bqlkn7ch7k8ut7coik60
time="2020-04-30T22:05:17Z" level=error msg="failed to accept connection" error="accept tcp 127.0.0.1:38452: use of closed network connection"
--- PASS: Test_SSHProxy_findUpstream (2.04s)
=== RUN   Test_WebSocketProxy_Host
time="2020-04-30T22:05:17Z" level=info msg="dialing sshd" host=owen ndoe=
--- PASS: Test_WebSocketProxy_Host (0.01s)
PASS
coverage: 25.6% of statements
ok      github.com/jingweno/upterm/server       3.263s  coverage: 25.6% of statements
?       github.com/jingweno/upterm/upterm       [no test files]
?       github.com/jingweno/upterm/utils        [no test files]
?       github.com/jingweno/upterm/ws   [no test files]
FAIL
make: *** [Makefile:55: test] Error 1