feat(process): allow zero-value task signals
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
8d1a0d0655
commit
3930aed49a
3 changed files with 25 additions and 4 deletions
|
|
@ -66,6 +66,7 @@ type TaskProcessKill struct {
|
|||
}
|
||||
|
||||
// TaskProcessSignal requests signalling a managed process by ID or PID through Core.PERFORM.
|
||||
// Signal 0 is allowed for liveness checks.
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
|
|
|
|||
|
|
@ -668,10 +668,6 @@ func (s *Service) handleTask(c *core.Core, task core.Task) core.Result {
|
|||
return core.Result{Value: coreerr.E("Service.handleTask", "task process kill requires an id or pid", nil), OK: false}
|
||||
}
|
||||
case TaskProcessSignal:
|
||||
if m.Signal == 0 {
|
||||
return core.Result{Value: coreerr.E("Service.handleTask", "task process signal requires a signal", nil), OK: false}
|
||||
}
|
||||
|
||||
switch {
|
||||
case m.ID != "":
|
||||
if err := s.Signal(m.ID, m.Signal); err != nil {
|
||||
|
|
|
|||
|
|
@ -815,6 +815,30 @@ func TestService_OnStartup(t *testing.T) {
|
|||
assert.Equal(t, StatusKilled, proc.Status)
|
||||
})
|
||||
|
||||
t.Run("allows signal zero liveness checks", func(t *testing.T) {
|
||||
svc, c := newTestService(t)
|
||||
|
||||
err := svc.OnStartup(context.Background())
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
proc, err := svc.Start(ctx, "sleep", "60")
|
||||
require.NoError(t, err)
|
||||
|
||||
result := c.PERFORM(TaskProcessSignal{
|
||||
ID: proc.ID,
|
||||
Signal: syscall.Signal(0),
|
||||
})
|
||||
require.True(t, result.OK)
|
||||
|
||||
assert.True(t, proc.IsRunning())
|
||||
|
||||
cancel()
|
||||
<-proc.Done()
|
||||
})
|
||||
|
||||
t.Run("registers process.wait task", func(t *testing.T) {
|
||||
svc, c := newTestService(t)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue