mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-21 23:28:44 +05:00
Updated and added tests for *remove_session_costs action
This commit is contained in:
committed by
Dan Christian Bogos
parent
fa591c50a7
commit
db1ddeaa43
@@ -128,7 +128,7 @@ func getActionFunc(typ string) (actionTypeFunc, bool) {
|
||||
utils.MetaAMQPjsonMap: sendAMQP,
|
||||
utils.MetaAWSjsonMap: sendAWS,
|
||||
utils.MetaSQSjsonMap: sendSQS,
|
||||
MetaRemoveSessionCosts: cleanSessionCosts,
|
||||
MetaRemoveSessionCosts: removeSessionCosts,
|
||||
}
|
||||
f, exists := actionFuncMap[typ]
|
||||
return f, exists
|
||||
@@ -963,14 +963,13 @@ func (cdrP *cdrLogProvider) RemoteHost() net.Addr {
|
||||
return utils.LocalAddr()
|
||||
}
|
||||
|
||||
func cleanSessionCosts(_ *Account, _ *Action, _ Actions, extraData interface{}) error { // FiltersID;inlineFilter
|
||||
func removeSessionCosts(_ *Account, _ *Action, _ Actions, extraData interface{}) error { // FiltersID;inlineFilter
|
||||
fltrs, err := utils.IfaceAsString(extraData)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tenant := config.CgrConfig().GeneralCfg().DefaultTenant
|
||||
smcFilter := new(utils.SMCostFilter)
|
||||
smcFilter.Usage = make([]*time.Duration, 2)
|
||||
for _, fltrID := range strings.Split(fltrs, utils.INFIELD_SEP) {
|
||||
fltr, err := dm.GetFilter(tenant, fltrID, true, true, utils.NonTransactional)
|
||||
if err != nil {
|
||||
|
||||
@@ -914,13 +914,13 @@ func (ms *MongoStorage) GetSMCosts(cgrid, runid, originHost, originIDPrefix stri
|
||||
|
||||
func (ms *MongoStorage) RemoveSMCosts(qryFltr *utils.SMCostFilter) error {
|
||||
filters := bson.M{
|
||||
CGRIDLow: bson.M{"$in": qryFltr.CgrIDs, "$nin": qryFltr.NotCgrIDs},
|
||||
CGRIDLow: bson.M{"$in": qryFltr.CGRIDs, "$nin": qryFltr.NotCGRIDs},
|
||||
RunIDLow: bson.M{"$in": qryFltr.RunIDs, "$nin": qryFltr.NotRunIDs},
|
||||
OriginHostLow: bson.M{"$in": qryFltr.OriginHosts, "$nin": qryFltr.NotOriginHosts},
|
||||
OriginIDLow: bson.M{"$in": qryFltr.OriginIDs, "$nin": qryFltr.NotOriginIDs},
|
||||
CostSourceLow: bson.M{"$in": qryFltr.CostSources, "$nin": qryFltr.NotCostSources},
|
||||
UsageLow: bson.M{"$gte": qryFltr.Usage[0], "$lt": qryFltr.Usage[1]},
|
||||
CreatedAtLow: bson.M{"$gte": qryFltr.CreatedAtStart, "$lt": qryFltr.CreatedAtEnd},
|
||||
UsageLow: bson.M{"$gte": qryFltr.Usage.Min, "$lt": qryFltr.Usage.Max},
|
||||
CreatedAtLow: bson.M{"$gte": qryFltr.CreatedAt.Begin, "$lt": qryFltr.CreatedAt.End},
|
||||
}
|
||||
ms.cleanEmptyFilters(filters)
|
||||
return ms.query(func(sctx mongo.SessionContext) (err error) {
|
||||
|
||||
@@ -742,11 +742,11 @@ func (self *SQLStorage) RemoveSMCost(smc *SMCost) error {
|
||||
func (self *SQLStorage) RemoveSMCosts(qryFltr *utils.SMCostFilter) error {
|
||||
q := self.db.Table(utils.SessionCostsTBL).Select("*")
|
||||
// Add filters, use in to replace the high number of ORs
|
||||
if len(qryFltr.CgrIDs) != 0 {
|
||||
q = q.Where("cgrid in (?)", qryFltr.CgrIDs)
|
||||
if len(qryFltr.CGRIDs) != 0 {
|
||||
q = q.Where("cgrid in (?)", qryFltr.CGRIDs)
|
||||
}
|
||||
if len(qryFltr.NotCgrIDs) != 0 {
|
||||
q = q.Where("cgrid not in (?)", qryFltr.NotCgrIDs)
|
||||
if len(qryFltr.NotCGRIDs) != 0 {
|
||||
q = q.Where("cgrid not in (?)", qryFltr.NotCGRIDs)
|
||||
}
|
||||
if len(qryFltr.RunIDs) != 0 {
|
||||
q = q.Where("run_id in (?)", qryFltr.RunIDs)
|
||||
@@ -772,24 +772,24 @@ func (self *SQLStorage) RemoveSMCosts(qryFltr *utils.SMCostFilter) error {
|
||||
if len(qryFltr.NotCostSources) != 0 {
|
||||
q = q.Where("costsource not in (?)", qryFltr.NotCostSources)
|
||||
}
|
||||
if qryFltr.CreatedAtStart != nil {
|
||||
q = q.Where("created_at >= ?", qryFltr.CreatedAtStart)
|
||||
if qryFltr.CreatedAt.Begin != nil {
|
||||
q = q.Where("created_at >= ?", qryFltr.CreatedAt.Begin)
|
||||
}
|
||||
if qryFltr.CreatedAtEnd != nil {
|
||||
q = q.Where("created_at < ?", qryFltr.CreatedAtEnd)
|
||||
if qryFltr.CreatedAt.End != nil {
|
||||
q = q.Where("created_at < ?", qryFltr.CreatedAt.End)
|
||||
}
|
||||
if qryFltr.Usage[0] != nil {
|
||||
if qryFltr.Usage.Min != nil {
|
||||
if self.db.Dialect().GetName() == utils.MYSQL { // MySQL needs escaping for usage
|
||||
q = q.Where("`usage` >= ?", qryFltr.Usage[0].Nanoseconds())
|
||||
q = q.Where("`usage` >= ?", qryFltr.Usage.Min.Nanoseconds())
|
||||
} else {
|
||||
q = q.Where("usage >= ?", qryFltr.Usage[0].Nanoseconds())
|
||||
q = q.Where("usage >= ?", qryFltr.Usage.Min.Nanoseconds())
|
||||
}
|
||||
}
|
||||
if qryFltr.Usage[1] != nil {
|
||||
if qryFltr.Usage.Max != nil {
|
||||
if self.db.Dialect().GetName() == utils.MYSQL { // MySQL needs escaping for usage
|
||||
q = q.Where("`usage` < ?", qryFltr.Usage[1].Nanoseconds())
|
||||
q = q.Where("`usage` < ?", qryFltr.Usage.Max.Nanoseconds())
|
||||
} else {
|
||||
q = q.Where("usage < ?", qryFltr.Usage[1].Nanoseconds())
|
||||
q = q.Where("usage < ?", qryFltr.Usage.Max.Nanoseconds())
|
||||
}
|
||||
}
|
||||
if err := q.Delete(nil).Error; err != nil {
|
||||
|
||||
@@ -57,6 +57,7 @@ var sTestsStorDBit = []func(t *testing.T){
|
||||
testStorDBitCRUDTpStats,
|
||||
testStorDBitCRUDCDRs,
|
||||
testStorDBitCRUDSMCosts,
|
||||
testStorDBitCRUDSMCosts2,
|
||||
}
|
||||
|
||||
func TestStorDBitMySQL(t *testing.T) {
|
||||
@@ -1369,6 +1370,71 @@ func testStorDBitCRUDSMCosts(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func testStorDBitCRUDSMCosts2(t *testing.T) {
|
||||
// READ
|
||||
if _, err := storDB.GetSMCosts("", "", "", ""); err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
// WRITE
|
||||
var snd = []*SMCost{
|
||||
{
|
||||
CGRID: "CGRID1",
|
||||
RunID: "11",
|
||||
OriginHost: "host22",
|
||||
OriginID: "O1",
|
||||
CostDetails: NewBareEventCost(),
|
||||
},
|
||||
{
|
||||
CGRID: "CGRID2",
|
||||
RunID: "12",
|
||||
OriginHost: "host22",
|
||||
OriginID: "O2",
|
||||
CostDetails: NewBareEventCost(),
|
||||
},
|
||||
{
|
||||
CGRID: "CGRID3",
|
||||
RunID: "13",
|
||||
OriginHost: "host23",
|
||||
OriginID: "O3",
|
||||
CostDetails: NewBareEventCost(),
|
||||
},
|
||||
}
|
||||
for _, smc := range snd {
|
||||
if err := storDB.SetSMCost(smc); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
// READ
|
||||
if rcv, err := storDB.GetSMCosts("", "", "host22", ""); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if len(rcv) != 2 {
|
||||
t.Errorf("Expected 2 results received %v ", len(rcv))
|
||||
}
|
||||
// REMOVE
|
||||
if err := storDB.RemoveSMCosts(&utils.SMCostFilter{
|
||||
RunIDs: []string{"12", "13"},
|
||||
NotRunIDs: []string{"11"},
|
||||
OriginHosts: []string{"host22", "host23"},
|
||||
NotOriginHosts: []string{"host21"},
|
||||
}); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
// READ
|
||||
if rcv, err := storDB.GetSMCosts("", "", "", ""); err != nil {
|
||||
t.Error(err)
|
||||
} else if len(rcv) != 1 {
|
||||
t.Errorf("Expected 1 result received %v ", len(rcv))
|
||||
}
|
||||
// REMOVE
|
||||
if err := storDB.RemoveSMCosts(&utils.SMCostFilter{}); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
// READ
|
||||
if _, err := storDB.GetSMCosts("", "", "", ""); err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testStorDBitFlush(t *testing.T) {
|
||||
if err := storDB.Flush(path.Join(cfg.DataFolderPath, "storage", cfg.StorDbCfg().StorDBType)); err != nil {
|
||||
t.Error(err)
|
||||
|
||||
Reference in New Issue
Block a user