datarhei-dragonfork-core/process/process_test.go

238 lines
4 KiB
Go
Raw Normal View History

2022-05-13 13:26:45 -04:00
package process
import (
"testing"
"time"
"github.com/datarhei/core/v16/internal/testhelper"
"github.com/stretchr/testify/require"
2022-05-13 13:26:45 -04:00
)
func TestProcess(t *testing.T) {
p, _ := New(Config{
Binary: "sleep",
Args: []string{
"10",
},
Reconnect: false,
StaleTimeout: 0,
})
require.Equal(t, "finished", p.Status().State)
2022-05-13 13:26:45 -04:00
p.Start()
require.Equal(t, "running", p.Status().State)
2022-05-13 13:26:45 -04:00
time.Sleep(5 * time.Second)
require.Equal(t, "running", p.Status().State)
2022-05-13 13:26:45 -04:00
p.Stop(false)
2022-05-13 13:26:45 -04:00
time.Sleep(2 * time.Second)
require.Equal(t, "killed", p.Status().State)
2022-05-13 13:26:45 -04:00
}
func TestReconnectProcess(t *testing.T) {
p, _ := New(Config{
Binary: "sleep",
Args: []string{
"2",
},
Reconnect: true,
ReconnectDelay: 2 * time.Second,
StaleTimeout: 0,
})
p.Start()
time.Sleep(3 * time.Second)
require.Equal(t, "finished", p.Status().State)
2022-05-13 13:26:45 -04:00
p.Stop(false)
2022-05-13 13:26:45 -04:00
require.Equal(t, "finished", p.Status().State)
2022-05-13 13:26:45 -04:00
}
func TestStaleProcess(t *testing.T) {
p, _ := New(Config{
Binary: "sleep",
Args: []string{
"10",
},
Reconnect: false,
StaleTimeout: 2 * time.Second,
})
p.Start()
time.Sleep(5 * time.Second)
require.Equal(t, "killed", p.Status().State)
2022-05-13 13:26:45 -04:00
p.Stop(false)
2022-05-13 13:26:45 -04:00
require.Equal(t, "killed", p.Status().State)
2022-05-13 13:26:45 -04:00
}
func TestStaleReconnectProcess(t *testing.T) {
p, _ := New(Config{
Binary: "sleep",
Args: []string{
"10",
},
Reconnect: false,
StaleTimeout: 2 * time.Second,
})
p.Start()
time.Sleep(10 * time.Second)
require.Equal(t, "killed", p.Status().State)
2022-05-13 13:26:45 -04:00
p.Stop(false)
2022-05-13 13:26:45 -04:00
require.Equal(t, "killed", p.Status().State)
2022-05-13 13:26:45 -04:00
}
func TestNonExistingProcess(t *testing.T) {
p, _ := New(Config{
Binary: "sloop",
Args: []string{
"10",
},
Reconnect: false,
ReconnectDelay: 5 * time.Second,
StaleTimeout: 0,
})
p.Start()
time.Sleep(3 * time.Second)
require.Equal(t, "failed", p.Status().State)
2022-05-13 13:26:45 -04:00
p.Stop(false)
2022-05-13 13:26:45 -04:00
require.Equal(t, "failed", p.Status().State)
2022-05-13 13:26:45 -04:00
}
func TestNonExistingReconnectProcess(t *testing.T) {
p, _ := New(Config{
Binary: "sloop",
Args: []string{
"10",
},
Reconnect: true,
ReconnectDelay: 2 * time.Second,
StaleTimeout: 0,
})
p.Start()
time.Sleep(5 * time.Second)
require.Equal(t, "failed", p.Status().State)
2022-05-13 13:26:45 -04:00
p.Stop(false)
2022-05-13 13:26:45 -04:00
require.Equal(t, "failed", p.Status().State)
2022-05-13 13:26:45 -04:00
}
func TestProcessFailed(t *testing.T) {
p, _ := New(Config{
Binary: "sleep",
2022-05-13 13:26:45 -04:00
Args: []string{
"hello",
2022-05-13 13:26:45 -04:00
},
Reconnect: false,
StaleTimeout: 0,
})
p.Start()
time.Sleep(5 * time.Second)
p.Stop(false)
2022-05-13 13:26:45 -04:00
require.Equal(t, "failed", p.Status().State)
2022-05-13 13:26:45 -04:00
}
func TestFFmpegWaitStop(t *testing.T) {
binary, err := testhelper.BuildBinary("sigintwait", "../internal/testhelper")
require.NoError(t, err, "Failed to build helper program")
p, _ := New(Config{
Binary: binary,
Args: []string{},
Reconnect: false,
StaleTimeout: 0,
OnExit: func() {
time.Sleep(2 * time.Second)
},
})
err = p.Start()
require.NoError(t, err)
time.Sleep(4 * time.Second)
p.Stop(true)
require.Equal(t, "finished", p.Status().State)
}
2022-05-13 13:26:45 -04:00
func TestFFmpegKill(t *testing.T) {
binary, err := testhelper.BuildBinary("sigint", "../internal/testhelper")
require.NoError(t, err, "Failed to build helper program")
2022-05-13 13:26:45 -04:00
p, _ := New(Config{
Binary: binary,
Args: []string{},
2022-05-13 13:26:45 -04:00
Reconnect: false,
StaleTimeout: 0,
})
err = p.Start()
require.NoError(t, err)
2022-05-13 13:26:45 -04:00
time.Sleep(5 * time.Second)
p.Stop(false)
2022-05-13 13:26:45 -04:00
time.Sleep(3 * time.Second)
require.Equal(t, "finished", p.Status().State)
2022-05-13 13:26:45 -04:00
}
func TestProcessForceKill(t *testing.T) {
binary, err := testhelper.BuildBinary("ignoresigint", "../internal/testhelper")
require.NoError(t, err, "Failed to build helper program")
2022-05-13 13:26:45 -04:00
p, _ := New(Config{
Binary: binary,
2022-05-13 13:26:45 -04:00
Args: []string{},
Reconnect: false,
StaleTimeout: 0,
})
err = p.Start()
require.NoError(t, err)
2022-05-13 13:26:45 -04:00
time.Sleep(3 * time.Second)
p.Stop(false)
2022-05-13 13:26:45 -04:00
time.Sleep(1 * time.Second)
require.Equal(t, "finishing", p.Status().State)
2022-05-13 13:26:45 -04:00
time.Sleep(5 * time.Second)
require.Equal(t, "killed", p.Status().State)
2022-05-13 13:26:45 -04:00
}