mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 10:06:24 +05:00
Add coverage tests on engine
This commit is contained in:
committed by
Dan Christian Bogos
parent
893e3fae19
commit
d4b8963a6c
@@ -1053,3 +1053,130 @@ func TestCompressedCDR(t *testing.T) {
|
||||
t.Errorf("expected %v,\nreceived %v\n", utils.ToJSON(cdr), utils.ToJSON(cdrs[0]))
|
||||
}
|
||||
}
|
||||
|
||||
func TestCDRCacheClone(t *testing.T) {
|
||||
cc := &CallCost{}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
input *CDR
|
||||
}{
|
||||
{
|
||||
name: "nil CDR",
|
||||
input: nil,
|
||||
},
|
||||
{
|
||||
name: "empty CDR",
|
||||
input: &CDR{},
|
||||
},
|
||||
{
|
||||
name: "fully populated CDR",
|
||||
input: &CDR{
|
||||
CGRID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()),
|
||||
OrderID: 123,
|
||||
ToR: utils.MetaVoice,
|
||||
OriginID: "dsafdsaf",
|
||||
OriginHost: "192.168.1.1",
|
||||
Source: utils.UnitTest,
|
||||
RequestType: utils.MetaRated,
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Account: "1002",
|
||||
Subject: "1001",
|
||||
Destination: "+4986517174963",
|
||||
SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC),
|
||||
AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC),
|
||||
RunID: utils.MetaDefault,
|
||||
Usage: 10 * time.Second,
|
||||
ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"},
|
||||
Cost: 1.01,
|
||||
CostDetails: NewEventCostFromCallCost(cc, "TestCDRTestCDRAsMapStringIface2", utils.MetaDefault),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "CDR with nil maps",
|
||||
input: &CDR{
|
||||
CGRID: "cgrid1",
|
||||
OrderID: 456,
|
||||
ToR: utils.MetaVoice,
|
||||
OriginID: "origin1",
|
||||
ExtraFields: nil,
|
||||
CostDetails: nil,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
cloneAny := tt.input.CacheClone()
|
||||
|
||||
if tt.input == nil {
|
||||
if cloneAny != nil {
|
||||
clone, ok := cloneAny.(*CDR)
|
||||
if !ok {
|
||||
t.Fatalf("CacheClone returned %T, expected *CDR", cloneAny)
|
||||
}
|
||||
if clone != nil {
|
||||
t.Errorf("Expected nil clone for nil CDR, got %v", clone)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if cloneAny == nil {
|
||||
t.Fatal("CacheClone returned nil for non-nil CDR")
|
||||
}
|
||||
|
||||
clone, ok := cloneAny.(*CDR)
|
||||
if !ok {
|
||||
t.Fatalf("CacheClone returned %T, expected *CDR", cloneAny)
|
||||
}
|
||||
|
||||
if clone == tt.input {
|
||||
t.Error("Clone should be a different instance")
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(clone, tt.input) {
|
||||
t.Errorf("Clone doesn't match original value.\nGot: %+v\nExpected: %+v", clone, tt.input)
|
||||
}
|
||||
|
||||
if tt.input.ExtraFields != nil {
|
||||
originalField := ""
|
||||
var fieldKey string
|
||||
|
||||
for k, v := range tt.input.ExtraFields {
|
||||
fieldKey = k
|
||||
originalField = v
|
||||
break
|
||||
}
|
||||
|
||||
if fieldKey != "" {
|
||||
tt.input.ExtraFields[fieldKey] = "modified value"
|
||||
|
||||
if clone.ExtraFields[fieldKey] != originalField {
|
||||
t.Errorf("Modifying original ExtraFields should not affect clone. Expected %q, got %q",
|
||||
originalField, clone.ExtraFields[fieldKey])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if tt.input.CGRID != "" {
|
||||
originalCGRID := tt.input.CGRID
|
||||
tt.input.CGRID = "modified cgrid"
|
||||
|
||||
if clone.CGRID != originalCGRID {
|
||||
t.Error("Modifying original CGRID should not affect clone")
|
||||
}
|
||||
}
|
||||
|
||||
if tt.input.CostDetails != nil {
|
||||
originalCostSource := tt.input.CostSource
|
||||
tt.input.CostSource = "modified source"
|
||||
|
||||
if clone.CostSource != originalCostSource {
|
||||
t.Error("Modifying original CostSource should not affect clone")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -305,3 +305,175 @@ func TestDMSetTimingInvalidTime(t *testing.T) {
|
||||
t.Errorf("Expected error <%v>, received <%v>", expErr, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDestinationClone(t *testing.T) {
|
||||
t.Run("nil destination", func(t *testing.T) {
|
||||
var d *Destination
|
||||
clone := d.Clone()
|
||||
if clone != nil {
|
||||
t.Errorf("Expected nil clone for nil destination, got %v", clone)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("empty destination", func(t *testing.T) {
|
||||
d := &Destination{}
|
||||
clone := d.Clone()
|
||||
|
||||
if clone == nil {
|
||||
t.Fatal("Clone should not be nil")
|
||||
}
|
||||
|
||||
if clone == d {
|
||||
t.Error("Clone should be a different instance")
|
||||
}
|
||||
|
||||
if clone.Id != d.Id {
|
||||
t.Errorf("Expected empty Id, got %q", clone.Id)
|
||||
}
|
||||
|
||||
if clone.Prefixes != nil {
|
||||
t.Errorf("Expected nil Prefixes, got %v", clone.Prefixes)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("destination with data", func(t *testing.T) {
|
||||
d := &Destination{
|
||||
Id: "ID1",
|
||||
Prefixes: []string{"prefix1", "prefix2", "prefix3"},
|
||||
}
|
||||
|
||||
clone := d.Clone()
|
||||
|
||||
if clone == nil {
|
||||
t.Fatal("Clone should not be nil")
|
||||
}
|
||||
|
||||
if clone == d {
|
||||
t.Error("Clone should be a different instance")
|
||||
}
|
||||
|
||||
if clone.Id != d.Id {
|
||||
t.Errorf("Expected Id %q, got %q", d.Id, clone.Id)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(clone.Prefixes, d.Prefixes) {
|
||||
t.Errorf("Expected Prefixes %v, got %v", d.Prefixes, clone.Prefixes)
|
||||
}
|
||||
|
||||
d.Id = "changed-id"
|
||||
d.Prefixes[0] = "changed-prefix"
|
||||
|
||||
if clone.Id == d.Id {
|
||||
t.Error("Changing original Id should not affect clone")
|
||||
}
|
||||
|
||||
if clone.Prefixes[0] == d.Prefixes[0] {
|
||||
t.Error("Changing original Prefixes should not affect clone")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("destination with empty prefixes", func(t *testing.T) {
|
||||
d := &Destination{
|
||||
Id: "dest-456",
|
||||
Prefixes: []string{},
|
||||
}
|
||||
|
||||
clone := d.Clone()
|
||||
|
||||
if clone == nil {
|
||||
t.Fatal("Clone should not be nil")
|
||||
}
|
||||
|
||||
if clone.Prefixes == nil {
|
||||
t.Error("Clone should have an empty slice, not nil")
|
||||
}
|
||||
|
||||
if len(clone.Prefixes) != 0 {
|
||||
t.Errorf("Expected empty Prefixes slice, got %v", clone.Prefixes)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestDestinationCacheClone(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input *Destination
|
||||
}{
|
||||
{
|
||||
name: "nil destination",
|
||||
input: nil,
|
||||
},
|
||||
{
|
||||
name: "empty destination",
|
||||
input: &Destination{},
|
||||
},
|
||||
{
|
||||
name: "destination with data",
|
||||
input: &Destination{
|
||||
Id: "ID1",
|
||||
Prefixes: []string{"prefix1", "prefix2", "prefix3"},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "destination with empty prefixes",
|
||||
input: &Destination{
|
||||
Id: "dest-456",
|
||||
Prefixes: []string{},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
cloneAny := tt.input.CacheClone()
|
||||
|
||||
if tt.input == nil {
|
||||
if cloneAny != nil {
|
||||
clone, ok := cloneAny.(*Destination)
|
||||
if !ok {
|
||||
t.Fatalf("CacheClone returned %T, expected *Destination", cloneAny)
|
||||
}
|
||||
if clone != nil {
|
||||
t.Errorf("Expected nil clone for nil destination, got %v", clone)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if cloneAny == nil {
|
||||
t.Fatal("CacheClone returned nil for non-nil destination")
|
||||
}
|
||||
|
||||
clone, ok := cloneAny.(*Destination)
|
||||
if !ok {
|
||||
t.Fatalf("CacheClone returned %T, expected *Destination", cloneAny)
|
||||
}
|
||||
|
||||
if clone == tt.input {
|
||||
t.Error("Clone should be a different instance")
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(clone, tt.input) {
|
||||
t.Errorf("Clone doesn't match original value.\nGot: %+v\nExpected: %+v", clone, tt.input)
|
||||
}
|
||||
|
||||
if tt.input.Id != "" {
|
||||
originalId := tt.input.Id
|
||||
tt.input.Id = "modified-id"
|
||||
|
||||
if clone.Id != originalId {
|
||||
t.Error("Modifying original Id should not affect clone")
|
||||
}
|
||||
}
|
||||
|
||||
if tt.input.Prefixes != nil && len(tt.input.Prefixes) > 0 {
|
||||
originalPrefix := tt.input.Prefixes[0]
|
||||
tt.input.Prefixes[0] = "modified-prefix"
|
||||
|
||||
if clone.Prefixes[0] != originalPrefix {
|
||||
t.Error("Modifying original Prefixes should not affect clone")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user