aboutsummaryrefslogtreecommitdiff
path: root/ssh/tcpip_test.go
diff options
context:
space:
mode:
authorRandy Reddig <ydnar@shaderlab.com>2023-06-22 16:06:05 +0000
committerGopher Robot <gobot@golang.org>2023-11-27 15:35:52 +0000
commitb2d7c26edb17864f117d8b0ee73c1843bcc6090f (patch)
treed12aab722b68a8120dbef0da54362fd210717dd6 /ssh/tcpip_test.go
parent1c17e20020f974158d1b45be166660c999d6269b (diff)
downloadgo-x-crypto-b2d7c26edb17864f117d8b0ee73c1843bcc6090f.tar.xz
ssh: add (*Client).DialContext method
This change adds DialContext to ssh.Client, which opens a TCP-IP connection tunneled over the SSH connection. This is useful for proxying network connections, e.g. setting (net/http.Transport).DialContext. Fixes golang/go#20288. Change-Id: I110494c00962424ea803065535ebe2209364ac27 GitHub-Last-Rev: 3176984a71a9a1422702e3a071340ecfff71ff62 GitHub-Pull-Request: golang/crypto#260 Reviewed-on: https://go-review.googlesource.com/c/crypto/+/504735 Run-TryBot: Nicola Murino <nicola.murino@gmail.com> Run-TryBot: Han-Wen Nienhuys <hanwen@google.com> Auto-Submit: Nicola Murino <nicola.murino@gmail.com> Reviewed-by: Han-Wen Nienhuys <hanwen@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Nicola Murino <nicola.murino@gmail.com> Commit-Queue: Nicola Murino <nicola.murino@gmail.com>
Diffstat (limited to 'ssh/tcpip_test.go')
-rw-r--r--ssh/tcpip_test.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/ssh/tcpip_test.go b/ssh/tcpip_test.go
index f1265cb..4d85114 100644
--- a/ssh/tcpip_test.go
+++ b/ssh/tcpip_test.go
@@ -5,7 +5,10 @@
package ssh
import (
+ "context"
+ "net"
"testing"
+ "time"
)
func TestAutoPortListenBroken(t *testing.T) {
@@ -18,3 +21,33 @@ func TestAutoPortListenBroken(t *testing.T) {
t.Errorf("version %q marked as broken", works)
}
}
+
+func TestClientImplementsDialContext(t *testing.T) {
+ type ContextDialer interface {
+ DialContext(context.Context, string, string) (net.Conn, error)
+ }
+ // Belt and suspenders assertion, since package net does not
+ // declare a ContextDialer type.
+ var _ ContextDialer = &net.Dialer{}
+ var _ ContextDialer = &Client{}
+}
+
+func TestClientDialContextWithCancel(t *testing.T) {
+ c := &Client{}
+ ctx, cancel := context.WithCancel(context.Background())
+ cancel()
+ _, err := c.DialContext(ctx, "tcp", "localhost:1000")
+ if err != context.Canceled {
+ t.Errorf("DialContext: got nil error, expected %v", context.Canceled)
+ }
+}
+
+func TestClientDialContextWithDeadline(t *testing.T) {
+ c := &Client{}
+ ctx, cancel := context.WithDeadline(context.Background(), time.Now())
+ defer cancel()
+ _, err := c.DialContext(ctx, "tcp", "localhost:1000")
+ if err != context.DeadlineExceeded {
+ t.Errorf("DialContext: got nil error, expected %v", context.DeadlineExceeded)
+ }
+}