repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

commit
9df8384
parent
740c00a
author
Eric Bower
date
2026-02-26 09:24:38 -0500 EST
fix(pssh): tests
1 files changed,  +30, -18
M pkg/apps/pgs/ssh_test.go
+30, -18
  1@@ -26,7 +26,7 @@ import (
  2 	"golang.org/x/crypto/ssh"
  3 )
  4 
  5-func StartSshServerForTesting(cfg *PgsConfig, killCh chan error) *pssh.SSHServer {
  6+func StartSshServerForTesting(cfg *PgsConfig, killCh chan error, readyCh chan *pssh.SSHServer) {
  7 	ctx, cancel := context.WithCancel(context.Background())
  8 	defer func() {
  9 		// Cancel is deferred to avoid being called in error path
 10@@ -41,24 +41,28 @@ func StartSshServerForTesting(cfg *PgsConfig, killCh chan error) *pssh.SSHServer
 11 	if err != nil {
 12 		logger.Error("failed to create ssh server", "err", err.Error())
 13 		cancel() // Clean up if server creation fails
 14-		return nil
 15+		readyCh <- nil
 16+		return
 17 	}
 18 
 19 	logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
 20+
 21+	// Signal that server is ready once ListenAndServe starts
 22 	go func() {
 23 		if err = server.ListenAndServe(); err != nil {
 24 			logger.Error("serve", "err", err.Error())
 25 		}
 26 	}()
 27 
 28+	// Send server when listener is created (happens early in ListenAndServe)
 29+	readyCh <- server
 30+
 31 	go func() {
 32 		// Wait for kill signal and clean up
 33 		<-killCh
 34 		logger.Info("stopping ssh server")
 35 		cancel()
 36 	}()
 37-
 38-	return server
 39 }
 40 
 41 func TestSshServerSftp(t *testing.T) {
 42@@ -87,21 +91,25 @@ func TestSshServerSftp(t *testing.T) {
 43 
 44 	cfg := NewPgsConfig(logger, dbpool, st, pubsub)
 45 	done := make(chan error)
 46+	readyCh := make(chan *pssh.SSHServer)
 47 	prometheus.DefaultRegisterer = prometheus.NewRegistry()
 48 
 49-	var server *pssh.SSHServer
 50-	go func() {
 51-		server = StartSshServerForTesting(cfg, done)
 52-	}()
 53+	go StartSshServerForTesting(cfg, done, readyCh)
 54 
 55-	// Wait for server to be ready and get the actual listening address
 56+	// Wait for server to be ready
 57+	server := <-readyCh
 58+	if server == nil {
 59+		t.Fatal("failed to create ssh server")
 60+	}
 61+
 62+	// Wait for listener to be created
 63 	var actualAddr string
 64 	for i := 0; i < 100; i++ {
 65-		if server != nil && server.Listener != nil {
 66+		if server.Listener != nil {
 67 			actualAddr = server.Listener.Addr().String()
 68 			break
 69 		}
 70-		time.Sleep(20 * time.Millisecond)
 71+		time.Sleep(10 * time.Millisecond)
 72 	}
 73 
 74 	if actualAddr == "" {
 75@@ -183,21 +191,25 @@ func TestSshServerRsync(t *testing.T) {
 76 
 77 	cfg := NewPgsConfig(logger, dbpool, st, pubsub)
 78 	done := make(chan error)
 79+	readyCh := make(chan *pssh.SSHServer)
 80 	prometheus.DefaultRegisterer = prometheus.NewRegistry()
 81 
 82-	var server *pssh.SSHServer
 83-	go func() {
 84-		server = StartSshServerForTesting(cfg, done)
 85-	}()
 86+	go StartSshServerForTesting(cfg, done, readyCh)
 87+
 88+	// Wait for server to be ready
 89+	server := <-readyCh
 90+	if server == nil {
 91+		t.Fatal("failed to create ssh server")
 92+	}
 93 
 94-	// Wait for server to be ready and get the actual listening address
 95+	// Wait for listener to be created
 96 	var actualAddr string
 97 	for i := 0; i < 100; i++ {
 98-		if server != nil && server.Listener != nil {
 99+		if server.Listener != nil {
100 			actualAddr = server.Listener.Addr().String()
101 			break
102 		}
103-		time.Sleep(20 * time.Millisecond)
104+		time.Sleep(10 * time.Millisecond)
105 	}
106 
107 	if actualAddr == "" {