From 7dab9d2a0a96354daf926465f5ac83ddb208ed7c Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:54:18 -0700 Subject: [PATCH] WIP test but i think im done --- src/config.go | 5 +++-- src/listen_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/listen_test.go diff --git a/src/config.go b/src/config.go index 6a2ad99..7d51c48 100755 --- a/src/config.go +++ b/src/config.go @@ -149,9 +149,10 @@ func (c Config) WithConn(hashKey string, foo func(net.Conn) error) error { log.Printf("errored with conn %v: %v", hashIdx, err) forwardConn.Close() return err + } else { + log.Printf("release conn %v", hashIdx) + forward.Put(forwardConn) } - log.Printf("release conn %v", hashIdx) - forward.Put(forwardConn) return nil } diff --git a/src/listen_test.go b/src/listen_test.go new file mode 100644 index 0000000..9073fa8 --- /dev/null +++ b/src/listen_test.go @@ -0,0 +1,54 @@ +package src + +import ( + "context" + "encoding/base64" + "net/http" + "net/http/httptest" + "strings" + "sync" + "testing" + "time" +) + +func TestListenLifecycle(t *testing.T) { + ctx, can := context.WithTimeout(context.Background(), time.Second*5) + defer can() + + valkeyPort := getPort(t) + valkeyReady := make(chan struct{}) + valkeyReadyCloserOnce := &sync.Once{} + go func() { + defer close(valkeyReady) + t.Fatal("not impl: start pretend valkey server") + }() + select { + case <-ctx.Done(): + case <-valkeyReady: + } + + config := Config{ + ctx: ctx, + Listen: ":" + getPort(t), + Forwards: "127.0.0.1:" + valkeyPort, + Hello: base64.StdEncoding.EncodeToString([]byte("+ping\r\n")), + } + if err := config.setForwards(); err != nil { + t.Fatal(err) + } + + go func() { + defer can() + t.Fatal("not impl: dial listen") + }() + + if err := listen(ctx, config); err != nil { + t.Fatal(err) + } +} + +func getPort(t *testing.T) string { + s := httptest.NewServer(http.HandlerFunc(http.NotFound)) + s.Close() + return strings.Split(s.URL, ":")[2] +}