mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Add verification in case of wrong time format for SetActionPlan
This commit is contained in:
committed by
Dan Christian Bogos
parent
4bd8ed0ac4
commit
01504c4fe6
@@ -601,6 +601,9 @@ func (self *ApierV1) SetActionPlan(attrs AttrSetActionPlan, reply *string) (err
|
||||
timing.Months.Parse(apiAtm.Months, ";")
|
||||
timing.MonthDays.Parse(apiAtm.MonthDays, ";")
|
||||
timing.WeekDays.Parse(apiAtm.WeekDays, ";")
|
||||
if !verifyFormat(apiAtm.Time) {
|
||||
return 0, fmt.Errorf("%s:%s", utils.ErrUnsupportedFormat.Error(), apiAtm.Time)
|
||||
}
|
||||
timing.StartTime = apiAtm.Time
|
||||
ap.ActionTimings = append(ap.ActionTimings, &engine.ActionTiming{
|
||||
Uuid: utils.GenUUID(),
|
||||
@@ -646,6 +649,30 @@ func (self *ApierV1) SetActionPlan(attrs AttrSetActionPlan, reply *string) (err
|
||||
return nil
|
||||
}
|
||||
|
||||
func verifyFormat(tStr string) bool {
|
||||
if tStr == utils.EmptyString ||
|
||||
tStr == utils.MetaEveryMinute ||
|
||||
tStr == utils.MetaHourly {
|
||||
return true
|
||||
}
|
||||
|
||||
if len(tStr) > 8 { // hh:mm:ss
|
||||
return false
|
||||
}
|
||||
if a := strings.Split(tStr, utils.InInFieldSep); len(a) != 3 {
|
||||
return false
|
||||
} else {
|
||||
if _, err := strconv.Atoi(a[0]); err != nil {
|
||||
return false
|
||||
} else if _, err := strconv.Atoi(a[1]); err != nil {
|
||||
return false
|
||||
} else if _, err := strconv.Atoi(a[2]); err != nil {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
type AttrGetActionPlan struct {
|
||||
ID string
|
||||
}
|
||||
|
||||
@@ -210,10 +210,11 @@ func TestApierV2itSetAccountWithAP(t *testing.T) {
|
||||
if err := apierRPC.Call("ApierV2.SetActions", argActs1, &reply); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
tNow := time.Now().Add(time.Duration(time.Minute))
|
||||
argAP1 := &v1.AttrSetActionPlan{Id: "TestApierV2itSetAccountWithAP_AP_1",
|
||||
ActionPlan: []*v1.AttrActionPlan{
|
||||
{ActionsId: argActs1.ActionsId,
|
||||
Time: time.Now().Add(time.Duration(time.Minute)).String(),
|
||||
Time: fmt.Sprintf("%v:%v:%v", tNow.Hour(), tNow.Minute(), tNow.Second()), // 10:4:12
|
||||
Weight: 20.0}}}
|
||||
if _, err := dm.DataDB().GetActionPlan(argAP1.Id, true, utils.NonTransactional); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
@@ -349,6 +350,43 @@ func TestApierV2itSetActionWithCategory(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestApierV2itSetActionPlanWithWrongTiming(t *testing.T) {
|
||||
var reply string
|
||||
tNow := time.Now().Add(time.Duration(time.Minute)).String()
|
||||
argAP1 := &v1.AttrSetActionPlan{Id: "TestApierV2itSetAccountWithAPWithWrongTiming",
|
||||
ActionPlan: []*v1.AttrActionPlan{
|
||||
&v1.AttrActionPlan{
|
||||
ActionsId: "TestApierV2itSetAccountWithAP_ACT_1",
|
||||
Time: tNow,
|
||||
Weight: 20.0,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if err := apierRPC.Call("ApierV1.SetActionPlan", argAP1, &reply); err == nil ||
|
||||
err.Error() != fmt.Sprintf("UNSUPPORTED_FORMAT:%s", tNow) {
|
||||
t.Error("Expecting error ", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestApierV2itSetActionPlanWithWrongTiming2(t *testing.T) {
|
||||
var reply string
|
||||
argAP1 := &v1.AttrSetActionPlan{Id: "TestApierV2itSetAccountWithAPWithWrongTiming",
|
||||
ActionPlan: []*v1.AttrActionPlan{
|
||||
&v1.AttrActionPlan{
|
||||
ActionsId: "TestApierV2itSetAccountWithAP_ACT_1",
|
||||
Time: "aa:bb:cc",
|
||||
Weight: 20.0,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if err := apierRPC.Call("ApierV1.SetActionPlan", argAP1, &reply); err == nil ||
|
||||
err.Error() != fmt.Sprintf("UNSUPPORTED_FORMAT:aa:bb:cc") {
|
||||
t.Error("Expecting error ", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestApierV2itKillEngine(t *testing.T) {
|
||||
if err := engine.KillEngine(delay); err != nil {
|
||||
t.Error(err)
|
||||
|
||||
@@ -77,6 +77,7 @@ var (
|
||||
ErrNotConnected = errors.New("NOT_CONNECTED")
|
||||
RalsErrorPrfx = "RALS_ERROR"
|
||||
DispatcherErrorPrefix = "DISPATCHER_ERROR"
|
||||
ErrUnsupportedFormat = errors.New("UNSUPPORTED_FORMAT")
|
||||
)
|
||||
|
||||
// NewCGRError initialises a new CGRError
|
||||
|
||||
Reference in New Issue
Block a user