diff --git a/engine/thresholds_test.go b/engine/thresholds_test.go index d99298471..c31e8f876 100644 --- a/engine/thresholds_test.go +++ b/engine/thresholds_test.go @@ -1068,3 +1068,111 @@ func TestThresholdsProcessEvent2(t *testing.T) { } } } + +func TestThresholdsUpdateThreshold(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + dm := NewDataManager(NewInternalDB(nil, nil, true), cfg.CacheCfg(), nil) + thp := &ThresholdProfile{ + Tenant: "cgrates.org", + ID: "THUP1", + } + th := &Threshold{ + Tenant: thp.Tenant, + ID: thp.ID, + Hits: 5, + Snooze: time.Now(), + } + expTh := &Threshold{ + Tenant: thp.Tenant, + ID: thp.ID, + } + + if err := dm.SetThresholdProfile(thp, true); err != nil { + t.Fatal(err) + } + + if th, err := dm.GetThreshold(thp.Tenant, thp.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(expTh, th) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expTh), utils.ToJSON(th)) + } + + if err := dm.RemoveThreshold(th.Tenant, th.ID, utils.NonTransactional); err != nil { + t.Fatal(err) + } + if err := dm.SetThresholdProfile(thp, true); err != nil { + t.Fatal(err) + } + + if th, err := dm.GetThreshold(thp.Tenant, thp.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(expTh, th) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expTh), utils.ToJSON(th)) + } + + if err := dm.SetThreshold(th); err != nil { + t.Fatal(err) + } + thp = &ThresholdProfile{ + Tenant: "cgrates.org", + ID: "THUP1", + MaxHits: 1, + } + + if err := dm.SetThresholdProfile(thp, true); err != nil { + t.Fatal(err) + } + + if th, err := dm.GetThreshold(thp.Tenant, thp.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(expTh, th) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expTh), utils.ToJSON(th)) + } + + if err := dm.SetThreshold(th); err != nil { + t.Fatal(err) + } + thp = &ThresholdProfile{ + Tenant: "cgrates.org", + ID: "THUP1", + MaxHits: 1, + MinHits: 1, + } + + if err := dm.SetThresholdProfile(thp, true); err != nil { + t.Fatal(err) + } + + if th, err := dm.GetThreshold(thp.Tenant, thp.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(expTh, th) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expTh), utils.ToJSON(th)) + } + + if err := dm.SetThreshold(th); err != nil { + t.Fatal(err) + } + thp = &ThresholdProfile{ + Tenant: "cgrates.org", + ID: "THUP1", + MaxHits: 1, + MinHits: 1, + MinSleep: 1, + } + + if err := dm.SetThresholdProfile(thp, true); err != nil { + t.Fatal(err) + } + + if th, err := dm.GetThreshold(thp.Tenant, thp.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(expTh, th) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expTh), utils.ToJSON(th)) + } + if err := dm.RemoveThresholdProfile(thp.Tenant, thp.ID, utils.NonTransactional, true); err != nil { + t.Fatal(err) + } + if _, err := dm.GetThreshold(thp.Tenant, thp.ID, false, false, utils.NonTransactional); err != utils.ErrNotFound { + t.Fatal(err) + } +} diff --git a/engine/z_resources_test.go b/engine/z_resources_test.go index 9ab3596ba..9e0cd6fd0 100644 --- a/engine/z_resources_test.go +++ b/engine/z_resources_test.go @@ -3644,3 +3644,125 @@ func TestResourcesProcessThresholdsThdConnMetaNone(t *testing.T) { t.Errorf("\nexpected nil, received: %+v", err) } } + +func TestResourcesUpdateResource(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + dm := NewDataManager(NewInternalDB(nil, nil, true), cfg.CacheCfg(), nil) + Cache.Clear(nil) + res := &ResourceProfile{ + Tenant: "cgrates.org", + ID: "RES1", + UsageTTL: 0, + Limit: 10, + Stored: true, + } + r := &Resource{ + Tenant: res.Tenant, + ID: res.ID, + Usages: map[string]*ResourceUsage{ + "jkbdfgs": { + Tenant: res.Tenant, + ID: "jkbdfgs", + ExpiryTime: time.Now(), + Units: 5, + }, + }, + TTLIdx: []string{"jkbdfgs"}, + } + expR := &Resource{ + Tenant: res.Tenant, + ID: res.ID, + Usages: make(map[string]*ResourceUsage), + } + if err := dm.SetResourceProfile(res, true); err != nil { + t.Fatal(err) + } + + if r, err := dm.GetResource(res.Tenant, res.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(r, expR) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expR), utils.ToJSON(r)) + } + + if err := dm.RemoveResource(r.Tenant, r.ID, utils.NonTransactional); err != nil { + t.Fatal(err) + } + + if err := dm.SetResourceProfile(res, true); err != nil { + t.Fatal(err) + } + + if r, err := dm.GetResource(res.Tenant, res.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(r, expR) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expR), utils.ToJSON(r)) + } + + if err := dm.SetResource(r); err != nil { + t.Fatal(err) + } + + res = &ResourceProfile{ + Tenant: "cgrates.org", + ID: "RES1", + UsageTTL: 0, + Limit: 5, + Stored: true, + } + if err := dm.SetResourceProfile(res, true); err != nil { + t.Fatal(err) + } + if r, err := dm.GetResource(res.Tenant, res.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(r, expR) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expR), utils.ToJSON(r)) + } + + if err := dm.SetResource(r); err != nil { + t.Fatal(err) + } + + res = &ResourceProfile{ + Tenant: "cgrates.org", + ID: "RES1", + UsageTTL: 10, + Limit: 5, + Stored: true, + } + if err := dm.SetResourceProfile(res, true); err != nil { + t.Fatal(err) + } + if r, err := dm.GetResource(res.Tenant, res.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(r, expR) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expR), utils.ToJSON(r)) + } + + if err := dm.SetResource(r); err != nil { + t.Fatal(err) + } + + res = &ResourceProfile{ + Tenant: "cgrates.org", + ID: "RES1", + UsageTTL: 10, + Limit: 5, + Stored: false, + } + if err := dm.SetResourceProfile(res, true); err != nil { + t.Fatal(err) + } + if r, err := dm.GetResource(res.Tenant, res.ID, false, false, utils.NonTransactional); err != nil { + t.Fatal(err) + } else if !reflect.DeepEqual(r, expR) { + t.Errorf("Expected: %s, received: %s", utils.ToJSON(expR), utils.ToJSON(r)) + } + + if err := dm.RemoveResourceProfile(res.Tenant, res.ID, utils.NonTransactional, true); err != nil { + t.Fatal(err) + } + + if _, err := dm.GetResource(res.Tenant, res.ID, false, false, utils.NonTransactional); err != utils.ErrNotFound { + t.Fatal(err) + } +}