mirror of
https://github.com/datarhei/core.git
synced 2025-10-06 00:17:07 +08:00

The scheduler allows to define when a process should run. It can be either a timestamp in RFC3339 format or a crontab expression. If a scheduler is given, reconnect and the reconnect delay will only apply to processes that exited as failed. The timeout allows to define when a process should be gracefully stopped. It is measured from the actual start of that process including all reconnects due to failures. If the process finished regularly, the timeout will be reset.
46 lines
955 B
Go
46 lines
955 B
Go
package process
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSchedulerPointInTime(t *testing.T) {
|
|
s, err := NewScheduler("2023-03-20T11:06:39Z")
|
|
require.NoError(t, err)
|
|
|
|
p, err := time.Parse(time.RFC3339, "2023-03-20T11:05:39Z")
|
|
require.NoError(t, err)
|
|
|
|
d, err := s.NextAfter(p)
|
|
require.NoError(t, err)
|
|
require.Equal(t, time.Minute, d)
|
|
|
|
p, err = time.Parse(time.RFC3339, "2023-03-20T11:07:39Z")
|
|
require.NoError(t, err)
|
|
|
|
_, err = s.NextAfter(p)
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestSchedulerCron(t *testing.T) {
|
|
s, err := NewScheduler("* * * * *")
|
|
require.NoError(t, err)
|
|
|
|
sc := s.(*scheduler)
|
|
require.True(t, sc.isCron)
|
|
|
|
p, err := time.Parse(time.RFC3339, "2023-03-20T11:05:39Z")
|
|
require.NoError(t, err)
|
|
|
|
d, err := s.NextAfter(p)
|
|
require.NoError(t, err)
|
|
require.Equal(t, 21*time.Second, d)
|
|
|
|
d, err = s.NextAfter(p.Add(21 * time.Second))
|
|
require.NoError(t, err)
|
|
require.Equal(t, 60*time.Second, d)
|
|
}
|