mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-30 23:16:52 +00:00
* 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>
38 lines
860 B
Go
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)
|
|
}
|
|
}
|