diff --git a/utils/cgrevent.go b/utils/cgrevent.go index 870943c9e..4b6cfeac8 100644 --- a/utils/cgrevent.go +++ b/utils/cgrevent.go @@ -231,18 +231,12 @@ type CGREventWithArgDispatcher struct { } func (ev *CGREventWithArgDispatcher) Clone() (clned *CGREventWithArgDispatcher) { - clned = &CGREventWithArgDispatcher{ - CGREvent: &CGREvent{ - Tenant: ev.Tenant, - ID: ev.ID, - Event: make(map[string]interface{}), // a bit forced but safe - }, + if ev == nil { + return } - if ev.Time != nil { - clned.Time = TimePointer(*ev.Time) - } - for k, v := range ev.Event { - clned.Event[k] = v + clned = new(CGREventWithArgDispatcher) + if ev.CGREvent != nil { + clned.CGREvent = ev.CGREvent.Clone() } if ev.ArgDispatcher != nil { clned.ArgDispatcher = new(ArgDispatcher) diff --git a/utils/cgrevent_test.go b/utils/cgrevent_test.go index 43f1294b7..26357dda3 100644 --- a/utils/cgrevent_test.go +++ b/utils/cgrevent_test.go @@ -330,19 +330,47 @@ func TestNewCGREventWithArgDispatcher(t *testing.T) { } func TestCGREventWithArgDispatcherClone(t *testing.T) { - //normal check - now := time.Now() - cgrEventWithArgDispatcher := &CGREventWithArgDispatcher{ - CGREvent: &CGREvent{ - Tenant: "cgrates.org", - ID: "IDtest", - Time: &now, - Event: make(map[string]interface{}), - }, - } - + //empty check + cgrEventWithArgDispatcher := new(CGREventWithArgDispatcher) rcv := cgrEventWithArgDispatcher.Clone() if !reflect.DeepEqual(cgrEventWithArgDispatcher, rcv) { t.Errorf("Expecting: %+v, received: %+v", cgrEventWithArgDispatcher, rcv) } + //nil check + cgrEventWithArgDispatcher = nil + rcv = cgrEventWithArgDispatcher.Clone() + if !reflect.DeepEqual(cgrEventWithArgDispatcher, rcv) { + t.Errorf("Expecting: %+v, received: %+v", cgrEventWithArgDispatcher, rcv) + } + //normal check + now := time.Now() + cgrEventWithArgDispatcher = &CGREventWithArgDispatcher{ + CGREvent: &CGREvent{ + Tenant: "cgrates.org", + ID: "IDtest", + Time: &now, + Event: map[string]interface{}{ + "test1": 1, + "test2": 2, + "test3": 3, + }, + }, + ArgDispatcher: new(ArgDispatcher), + } + rcv = cgrEventWithArgDispatcher.Clone() + if !reflect.DeepEqual(cgrEventWithArgDispatcher, rcv) { + t.Errorf("Expecting: %+v, received: %+v", cgrEventWithArgDispatcher, rcv) + } + //check vars + apiKey := "apikey" + routeID := "routeid" + + rcv.ArgDispatcher = &ArgDispatcher{ + APIKey: &apiKey, + RouteID: &routeID, + } + if reflect.DeepEqual(cgrEventWithArgDispatcher.ArgDispatcher, rcv.ArgDispatcher) { + t.Errorf("Expected to be different") + } + }