diff --git a/engine/cdr_test.go b/engine/cdr_test.go index 4c345f2b7..bd330cd7e 100644 --- a/engine/cdr_test.go +++ b/engine/cdr_test.go @@ -318,7 +318,7 @@ func TestCDRNewCDRFromSQL(t *testing.T) { 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), + AnswerTime: utils.TimePointer(time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC)), Usage: 10000000000, Cost: 1.01, RequestType: utils.MetaRated, diff --git a/engine/models_test.go b/engine/models_test.go new file mode 100644 index 000000000..e730fb7cd --- /dev/null +++ b/engine/models_test.go @@ -0,0 +1,84 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or56 +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package engine + +import ( + "reflect" + "testing" + "time" + + "github.com/cgrates/cgrates/utils" +) + +func TestModelsAsMapStringInterface(t *testing.T) { + testCdrSql := CDRsql{ + ID: 1, + Cgrid: "testCgrID1", + RunID: "testRunID", + OriginHost: "testOriginHost", + Source: "testSource", + OriginID: "testOriginId", + TOR: "testTOR", + RequestType: "testRequestType", + Tenant: "cgrates.org", + Category: "testCategory", + Account: "testAccount", + Subject: "testSubject", + Destination: "testDestination", + SetupTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + AnswerTime: utils.TimePointer(time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC)), + Usage: 2, + ExtraFields: "extraFields", + CostSource: "testCostSource", + Cost: 2, + CostDetails: "testCostDetails", + ExtraInfo: "testExtraInfo", + CreatedAt: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + UpdatedAt: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + DeletedAt: utils.TimePointer(time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC)), + } + expected := map[string]interface{}{ + "cgrid": testCdrSql.Cgrid, + "run_id": testCdrSql.RunID, + "origin_host": testCdrSql.OriginHost, + "source": testCdrSql.Source, + "origin_id": testCdrSql.OriginID, + "tor": testCdrSql.TOR, + "request_type": testCdrSql.RequestType, + "tenant": testCdrSql.Tenant, + "category": testCdrSql.Category, + "account": testCdrSql.Account, + "subject": testCdrSql.Subject, + "destination": testCdrSql.Destination, + "setup_time": testCdrSql.SetupTime, + "answer_time": testCdrSql.AnswerTime, + "usage": testCdrSql.Usage, + "extra_fields": testCdrSql.ExtraFields, + "cost_source": testCdrSql.CostSource, + "cost": testCdrSql.Cost, + "cost_details": testCdrSql.CostDetails, + "extra_info": testCdrSql.ExtraInfo, + "created_at": testCdrSql.CreatedAt, + "updated_at": testCdrSql.UpdatedAt, + } + result := testCdrSql.AsMapStringInterface() + if !reflect.DeepEqual(expected, result) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) + } +} diff --git a/migrator/cdrs_test.go b/migrator/cdrs_test.go new file mode 100644 index 000000000..8492ac507 --- /dev/null +++ b/migrator/cdrs_test.go @@ -0,0 +1,210 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ +package migrator + +import ( + "reflect" + "testing" + "time" + + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" +) + +func TestCdrsNewV1CDRFromCDRSql(t *testing.T) { + testCdrSql := &engine.CDRsql{ + ID: 1, + Cgrid: "testID", + RunID: "testRunID", + OriginHost: "testOriginHost", + Source: "testSource", + TOR: "testTOR", + RequestType: "testRequestType", + Tenant: "cgrates.org", + Category: "testCategory", + Account: "testAccount", + Subject: "testSubject", + Destination: "testDestination", + SetupTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + AnswerTime: utils.TimePointer(time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC)), + Usage: 1, + CostSource: "testSource", + Cost: 2, + ExtraInfo: "testExtraInfo", + CreatedAt: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + UpdatedAt: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + DeletedAt: utils.TimePointer(time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC)), + } + expected := &v1Cdrs{ + CGRID: "testID", + RunID: "testRunID", + OriginHost: "testOriginHost", + OrderID: 1, + Source: "testSource", + ToR: "testTOR", + RequestType: "testRequestType", + Tenant: "cgrates.org", + Category: "testCategory", + Account: "testAccount", + Subject: "testSubject", + Destination: "testDestination", + SetupTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + AnswerTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + Usage: time.Nanosecond, + ExtraInfo: "testExtraInfo", + Partial: false, + Rated: false, + CostSource: "testSource", + Cost: 2, + } + result, err := NewV1CDRFromCDRSql(testCdrSql) + if err != nil { + t.Error(err) + } + if !reflect.DeepEqual(expected, result) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) + } +} + +func TestCdrsAsCDRsql(t *testing.T) { + testV1Cdrs := &v1Cdrs{ + CGRID: "testID", + RunID: "testRunID", + OriginHost: "testOriginHost", + OrderID: 1, + Source: "testSource", + ToR: "testTOR", + RequestType: "testRequestType", + Tenant: "cgrates.org", + Category: "testCategory", + Account: "testAccount", + Subject: "testSubject", + Destination: "testDestination", + SetupTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + AnswerTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + Usage: time.Nanosecond, + ExtraInfo: "testExtraInfo", + Partial: false, + Rated: false, + CostSource: "testSource", + Cost: 2, + } + + expected := &engine.CDRsql{ + ID: 0, + Cgrid: "testID", + RunID: "testRunID", + OriginHost: "testOriginHost", + Source: "testSource", + TOR: "testTOR", + RequestType: "testRequestType", + Tenant: "cgrates.org", + Category: "testCategory", + Account: "testAccount", + Subject: "testSubject", + Destination: "testDestination", + SetupTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + AnswerTime: utils.TimePointer(time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC)), + Usage: 1, + CostSource: "testSource", + Cost: 2, + ExtraInfo: "testExtraInfo", + CreatedAt: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + ExtraFields: "", + CostDetails: "", + } + result := testV1Cdrs.AsCDRsql() + result.CreatedAt = time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC) + result.ExtraFields = "" + result.CostDetails = "" + if !reflect.DeepEqual(expected, result) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", utils.ToJSON(expected), utils.ToJSON(result)) + } +} + +func TestCdrsAsCDRsqlAnswertimeEmpty(t *testing.T) { + var answTime time.Time + testV1Cdrs := &v1Cdrs{ + AnswerTime: answTime, + } + + expected := &engine.CDRsql{ + AnswerTime: nil, + CreatedAt: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + } + result := testV1Cdrs.AsCDRsql() + result.CreatedAt = time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC) + result.ExtraFields = "" + result.CostDetails = "" + if !reflect.DeepEqual(expected, result) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", utils.ToJSON(expected), utils.ToJSON(result)) + } +} + +func TestCdrsNewV1CDRFromCDRSqlAnswerTimeNil(t *testing.T) { + testCdrSql := &engine.CDRsql{ + ID: 1, + Cgrid: "testID", + RunID: "testRunID", + OriginHost: "testOriginHost", + Source: "testSource", + TOR: "testTOR", + RequestType: "testRequestType", + Tenant: "cgrates.org", + Category: "testCategory", + Account: "testAccount", + Subject: "testSubject", + Destination: "testDestination", + SetupTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + AnswerTime: nil, + Usage: 1, + CostSource: "testSource", + Cost: 2, + ExtraInfo: "testExtraInfo", + CreatedAt: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + UpdatedAt: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + DeletedAt: utils.TimePointer(time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC)), + } + var answTime time.Time + expected := &v1Cdrs{ + CGRID: "testID", + RunID: "testRunID", + OriginHost: "testOriginHost", + OrderID: 1, + Source: "testSource", + ToR: "testTOR", + RequestType: "testRequestType", + Tenant: "cgrates.org", + Category: "testCategory", + Account: "testAccount", + Subject: "testSubject", + Destination: "testDestination", + SetupTime: time.Date(2021, 3, 3, 3, 3, 3, 3, time.UTC), + AnswerTime: answTime, + Usage: time.Nanosecond, + ExtraInfo: "testExtraInfo", + Partial: false, + Rated: false, + CostSource: "testSource", + Cost: 2, + } + result, err := NewV1CDRFromCDRSql(testCdrSql) + if err != nil { + t.Error(err) + } + if !reflect.DeepEqual(expected, result) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) + } +}