add slices.compact for filterids on chargers

This commit is contained in:
armirveliaj
2026-02-16 11:13:56 -05:00
committed by Dan Christian Bogos
parent e94628a482
commit 0d7c5666e8
3 changed files with 96 additions and 2 deletions

View File

@@ -225,6 +225,7 @@ cgrates.org,Charger1,*string:~*req.Account:1001,;20,;true,,
cgrates.org,Charger1,,,,*rated,ATTR_1001_SIMPLEAUTH
cgrates.org,Charger2,,,,*rated,ATTR_1002_SIMPLEAUTH
cgrates.org,Charger2,*string:~*req.Account:1002,;15,;false,,
cgrates.org,Charger3,*string:~*req.Account:1001;*string:~*req.Account:1001;*string:~*req.Account:1002;*string:~*req.Account:1001;*string:~*req.Account:1003,;10,;false,*rated,ATTR_TEST
`); err != nil {
t.Fatal(err)
}
@@ -709,7 +710,6 @@ func testLoadersGetAttributeProfiles(t *testing.T) {
}
}
}
func testLoadersGetChargerProfiles(t *testing.T) {
expChrgs := []*utils.ChargerProfile{
{
@@ -746,6 +746,28 @@ func testLoadersGetChargerProfiles(t *testing.T) {
},
},
},
{
Tenant: "cgrates.org",
ID: "Charger3",
FilterIDs: []string{
"*string:~*req.Account:1001",
"*string:~*req.Account:1002",
"*string:~*req.Account:1001",
"*string:~*req.Account:1003",
},
RunID: "*rated",
AttributeIDs: []string{"ATTR_TEST"},
Weights: utils.DynamicWeights{
{
Weight: 10,
},
},
Blockers: utils.DynamicBlockers{
{
Blocker: false,
},
},
},
}
var chrgs []*utils.ChargerProfile
if err := ldrRPC.Call(context.Background(), utils.AdminSv1GetChargerProfiles,

View File

@@ -102,7 +102,9 @@ func setToDB(ctx *context.Context, dm *engine.DataManager, lType string, data pr
case utils.MetaRoutes:
return dm.SetRouteProfile(ctx, data.(*utils.RouteProfile), withIndex)
case utils.MetaChargers:
return dm.SetChargerProfile(ctx, data.(*utils.ChargerProfile), withIndex)
cp := data.(*utils.ChargerProfile)
cp.FilterIDs = slices.Compact(cp.FilterIDs)
return dm.SetChargerProfile(ctx, cp, withIndex)
case utils.MetaRateProfiles:
rpl := data.(*utils.RateProfile)
rpl.FilterIDs = slices.Compact(rpl.FilterIDs)

View File

@@ -1476,3 +1476,73 @@ func TestSetToDBRateProfileDuplicateSequentialFilterIDs(t *testing.T) {
t.Errorf("Expected FilterIDs in DB: %v, received: %v", expectedFilterIDs, retrieved.FilterIDs)
}
}
func TestSetToDBChargerProfileDuplicateSequentialFilterIDs(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
idb, err := engine.NewInternalDB(nil, nil, nil, cfg.DbCfg().Items)
if err != nil {
t.Fatal(err)
}
dbCM := engine.NewDBConnManager(map[string]engine.DataDB{utils.MetaDefault: idb}, cfg.DbCfg())
dm := engine.NewDataManager(dbCM, cfg, nil)
cp := &utils.ChargerProfile{
Tenant: "cgrates.org",
ID: "cp1",
FilterIDs: []string{
"*string:~*req.Account:1001", "*string:~*req.Account:1001",
"*string:~*req.Subject:1002", "*string:~*req.Subject:1002", "*string:~*req.Subject:1002",
"*string:~*req.Destination:1001",
},
RunID: "*rated",
AttributeIDs: []string{"ATTR_TEST"},
Weights: utils.DynamicWeights{
{
Weight: 20,
},
},
Blockers: utils.DynamicBlockers{
{
Blocker: false,
},
},
}
if len(cp.FilterIDs) != 6 {
t.Fatalf("Expected 6 FilterIDs before setToDB, got %d", len(cp.FilterIDs))
}
if err := setToDB(context.Background(), dm, utils.MetaChargers, cp, true, false); err != nil {
t.Fatal(err)
}
expectedFilterIDs := []string{
"*string:~*req.Account:1001",
"*string:~*req.Subject:1002",
"*string:~*req.Destination:1001",
}
if !reflect.DeepEqual(cp.FilterIDs, expectedFilterIDs) {
t.Errorf("Expected FilterIDs after setToDB: %v, received: %v", expectedFilterIDs, cp.FilterIDs)
}
if len(cp.FilterIDs) != 3 {
t.Errorf("Expected 3 FilterIDs after compacting, got %d", len(cp.FilterIDs))
}
retrieved, err := dm.GetChargerProfile(
context.Background(),
"cgrates.org",
"cp1",
true,
true,
utils.NonTransactional,
)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(retrieved.FilterIDs, expectedFilterIDs) {
t.Errorf("Expected FilterIDs in DB: %v, received: %v", expectedFilterIDs, retrieved.FilterIDs)
}
}