schedule_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Copyright 2023 EMQ Technologies Co., Ltd.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package schedule
  15. import (
  16. "errors"
  17. "testing"
  18. "time"
  19. "github.com/stretchr/testify/require"
  20. "github.com/lf-edge/ekuiper/pkg/api"
  21. )
  22. func TestIsInTimeRange(t *testing.T) {
  23. now, err := time.Parse(layout, "2006-01-02 15:04:01")
  24. require.NoError(t, err)
  25. isIn, err := isInTimeRange(now, "2006-01-02 15:04:00", "2006-01-02 15:04:03")
  26. require.NoError(t, err)
  27. require.True(t, isIn)
  28. _, err = isInTimeRange(now, "123", "2006-01-02 15:04:03")
  29. require.Error(t, err)
  30. _, err = isInTimeRange(now, "2006-01-02 15:04:00", "13")
  31. require.Error(t, err)
  32. }
  33. func TestIsRuleInRunningSchedule(t *testing.T) {
  34. now, err := time.Parse(layout, "2006-01-02 15:04:01")
  35. require.NoError(t, err)
  36. d, err := time.ParseDuration("2s")
  37. require.NoError(t, err)
  38. isInSchedule, remainedDuration, err := IsInRunningSchedule("4 15 * * *", now, d)
  39. require.NoError(t, err)
  40. require.True(t, isInSchedule)
  41. require.Equal(t, remainedDuration, time.Second)
  42. }
  43. func TestIsAfterTimeRange(t *testing.T) {
  44. now, err := time.Parse(layout, "2006-01-02 15:04:01")
  45. require.NoError(t, err)
  46. _, err = IsAfterTimeRange(now, "")
  47. require.Error(t, err)
  48. isAfter, err := IsAfterTimeRange(now, "2006-01-02 15:04:00")
  49. require.NoError(t, err)
  50. require.True(t, isAfter)
  51. isAfter, err = IsAfterTimeRange(now, "2006-01-02 15:04:06")
  52. require.NoError(t, err)
  53. require.False(t, isAfter)
  54. }
  55. func TestIsInRunningSchedule(t *testing.T) {
  56. now, err := time.Parse(layout, "2006-01-02 15:04:02")
  57. require.NoError(t, err)
  58. _, _, err = IsInRunningSchedule("", now, time.Second)
  59. require.Error(t, err)
  60. isIn, _, err := IsInRunningSchedule("4 15 * * *", now, 3*time.Second)
  61. require.NoError(t, err)
  62. require.True(t, isIn)
  63. isIn, _, err = IsInRunningSchedule("4 15 * * *", now, time.Second)
  64. require.NoError(t, err)
  65. require.False(t, isIn)
  66. }
  67. func TestValidateSchedule(t *testing.T) {
  68. tests := []struct {
  69. begin string
  70. end string
  71. err error
  72. }{
  73. {
  74. begin: "123",
  75. end: "123",
  76. err: errors.New("Can't parse string as time: 123"),
  77. },
  78. {
  79. begin: layout,
  80. end: "123",
  81. err: errors.New("Can't parse string as time: 123"),
  82. },
  83. {
  84. begin: "2006-01-02 15:04:02",
  85. end: "2006-01-02 15:04:01",
  86. err: errors.New("begin time shouldn't after end time"),
  87. },
  88. {
  89. begin: "2006-01-02 15:04:00",
  90. end: "2006-01-02 15:04:01",
  91. err: nil,
  92. },
  93. }
  94. for _, tc := range tests {
  95. rs := []api.DatetimeRange{
  96. {
  97. Begin: tc.begin,
  98. End: tc.end,
  99. },
  100. }
  101. err := ValidateRanges(rs)
  102. if tc.err != nil {
  103. require.Equal(t, err, tc.err)
  104. } else {
  105. require.NoError(t, err)
  106. }
  107. }
  108. }