Add verification in case of wrong time format for SetActionPlan

This commit is contained in:
TeoV
2019-04-11 11:00:35 +03:00
committed by Dan Christian Bogos
parent 4bd8ed0ac4
commit 01504c4fe6
3 changed files with 67 additions and 1 deletions

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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