Updated and added tests for *remove_session_costs action

This commit is contained in:
Trial97
2019-03-21 15:41:36 +02:00
committed by Dan Christian Bogos
parent fa591c50a7
commit db1ddeaa43
6 changed files with 243 additions and 34 deletions

View File

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

View File

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

View File

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

View File

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