Files
gocryptotrader/signaler/signaler_test.go
Romano 1b83db3489 signaler: improve cross-platform signal compatibility (#1952)
* signaler: improve cross-platform signal compatibility

- Add runtime-based platform detection for signal handling
- Include os.Kill only on Windows (cannot be caught/ignored on Unix)
- Refactor signal initialization into separate getPlatformSignals function

* signaler: add dependency injection and improve docs

- Introduce SignalNotifier interface for testability
- Add osSignalNotifier implementation and factory function
- Enhance package and function documentation
- Maintain backward compatibility with existing API

* [signaler] simplify shutdown handling; drop SIGABRT/os.Kill

* skip signaler tests on windows

* support signaler interrupt tests and improve signal handling tests

* removing getPlatformSignal function

* remove signaler readme

* Signaler: Return a channel from WaitForInterrupt

* Signaler: fix comment

Co-authored-by: Ryan O'Hara-Reid <oharareid.ryan@gmail.com>

* Signaler: require NoError to NoErrorf

Co-authored-by: Ryan O'Hara-Reid <oharareid.ryan@gmail.com>

---------

Co-authored-by: Ryan O'Hara-Reid <oharareid.ryan@gmail.com>
2025-12-10 16:44:48 +11:00

38 lines
860 B
Go

package signaler
import (
"os"
"runtime"
"syscall"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestWaitForInterrupt(t *testing.T) {
t.Parallel()
for _, sig := range []os.Signal{syscall.SIGTERM, os.Interrupt} {
sigC := WaitForInterrupt()
proc, err := os.FindProcess(os.Getpid())
require.NoError(t, err, "os.FindProcess must not error")
if err := proc.Signal(sig); err != nil {
if runtime.GOOS == "windows" {
t.Skipf("proc.Signal(%s) not supported on Windows: %v", sig, err)
}
require.NoErrorf(t, err, "proc.Signal(%s) must not error", sig)
}
assert.Eventuallyf(t, func() bool {
select {
case got := <-sigC:
return got == sig
default:
return false
}
}, 2*time.Second, 10*time.Millisecond, "Signal %s should be received within timeout", sig)
}
}