prevent account actions to be executed when account is nil

This commit is contained in:
gezimbll
2026-01-06 17:26:28 +01:00
committed by Dan Christian Bogos
parent fe4d8b5924
commit 3603d12c3e
4 changed files with 46 additions and 4 deletions

View File

@@ -156,6 +156,30 @@ type actionTypeFunc func(*Account, *Action, Actions, *FilterS, any, SharedAction
var actionFuncMap = make(map[string]actionTypeFunc)
var accountActions = map[string]bool{
utils.MetaTopUp: true,
utils.MetaDebit: true,
utils.MetaResetTriggers: true,
utils.MetaSetRecurrent: true,
utils.MetaUnsetRecurrent: true,
utils.MetaAllowNegative: true,
utils.MetaDenyNegative: true,
utils.MetaResetAccount: true,
utils.MetaTopUpReset: true,
utils.MetaDebitReset: true,
utils.MetaTransferBalance: true,
utils.MetaResetCounters: true,
utils.MetaEnableAccount: true,
utils.MetaDisableAccount: true,
utils.MetaTransferMonetaryDefault: true,
utils.MetaPublishAccount: true,
utils.MetaCDRAccount: true,
utils.SetExpiry: true,
utils.TopUpZeroNegative: true,
utils.MetaSetBalance: true,
utils.MetaRemoveBalance: true,
}
func init() {
actionFuncMap[utils.MetaLog] = logAction
actionFuncMap[utils.MetaResetTriggers] = resetTriggersAction

View File

@@ -308,6 +308,9 @@ func (at *ActionTiming) Execute(fltrS *FilterS, originService string) (err error
err = nil
if len(at.accountIDs) == 0 { // action timing executing without accounts
for _, act := range acts {
if accountActions[act.ActionType] {
continue
}
if expDate, parseErr := utils.ParseTimeDetectLayout(act.ExpirationString,
config.CgrConfig().GeneralCfg().DefaultTimezone); (act.Balance == nil || act.Balance.EmptyExpirationDate()) &&
parseErr == nil && !expDate.IsZero() {

View File

@@ -301,10 +301,6 @@ func TestActionTimingExErr(t *testing.T) {
if err := at.Execute(nil, ""); err == nil || err != utils.ErrPartiallyExecuted {
t.Error(err)
}
at.actions[0].ActionType = utils.MetaDebitReset
if err := at.Execute(nil, ""); err == nil || err != utils.ErrPartiallyExecuted {
t.Error(err)
}
at.accountIDs = utils.StringMap{"cgrates.org:zeroNegative": true}
at.actions[0].ActionType = utils.MetaResetStatQueue
if err := at.Execute(nil, ""); err == nil || err != utils.ErrPartiallyExecuted {

View File

@@ -7653,3 +7653,22 @@ func TestUnsetRecurrentAction(t *testing.T) {
t.Errorf("expected trigger2.Recurrent to remain true")
}
}
func TestAccountActions(t *testing.T) {
for actType := range accountActions {
a := &Action{
ActionType: actType,
Balance: &BalanceFilter{
Type: utils.StringPointer("test"),
Value: &utils.ValueFormula{Static: 1.1},
},
}
at := &ActionTiming{
actions: []*Action{a},
}
err := at.Execute(nil, "")
if err != nil {
t.Errorf("Got error for action account type %s, error %v ", actType, err)
}
}
}