mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
254 lines
5.7 KiB
Go
254 lines
5.7 KiB
Go
/*
|
|
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 Affero 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 Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>
|
|
*/
|
|
|
|
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestTableName(t *testing.T) {
|
|
cdrSQLTable := CDRSQLTable{}
|
|
|
|
tableName := cdrSQLTable.TableName()
|
|
|
|
if tableName != CDRsTBL {
|
|
t.Errorf("TableName() = %s, expected %s", tableName, CDRsTBL)
|
|
}
|
|
}
|
|
|
|
func TestJSONB_GormDataType(t *testing.T) {
|
|
j := JSONB{"key": "value"}
|
|
|
|
dataType := j.GormDataType()
|
|
|
|
if dataType != "JSONB" {
|
|
t.Errorf("GormDataType() returned %v, expected 'JSONB'", dataType)
|
|
}
|
|
}
|
|
|
|
func TestJSONBScan(t *testing.T) {
|
|
{
|
|
j := &JSONB{}
|
|
value := []byte(`{"key": "value"}`)
|
|
|
|
err := j.Scan(value)
|
|
|
|
if err != nil {
|
|
t.Errorf("Scan([]byte) returned error: %v, expected no error", err)
|
|
}
|
|
|
|
expected := JSONB{"key": "value"}
|
|
if !reflect.DeepEqual(*j, expected) {
|
|
t.Errorf("Scan([]byte) resulted in %v, expected %v", *j, expected)
|
|
}
|
|
}
|
|
|
|
{
|
|
j := &JSONB{}
|
|
value := `{"key": "value"}`
|
|
|
|
err := j.Scan(value)
|
|
|
|
if err != nil {
|
|
t.Errorf("Scan(string) returned error: %v, expected no error", err)
|
|
}
|
|
|
|
expected := JSONB{"key": "value"}
|
|
if !reflect.DeepEqual(*j, expected) {
|
|
t.Errorf("Scan(string) resulted in %v, expected %v", *j, expected)
|
|
}
|
|
}
|
|
|
|
{
|
|
j := &JSONB{}
|
|
value := 123
|
|
|
|
err := j.Scan(value)
|
|
|
|
if err == nil {
|
|
t.Errorf("Scan(int) did not return an error, expected an error")
|
|
} else {
|
|
expectedError := errors.New("Failed to unmarshal JSONB value:123") // Removed space after ":"
|
|
if err.Error() != expectedError.Error() {
|
|
t.Errorf("Scan(int) returned error: %v, expected %v", err, expectedError)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestJSONBValue(t *testing.T) {
|
|
{
|
|
j := JSONB{"key": "value"}
|
|
|
|
value, err := j.Value()
|
|
|
|
if err != nil {
|
|
t.Errorf("Value() returned error: %v, expected no error", err)
|
|
}
|
|
|
|
expected, _ := json.Marshal(j)
|
|
if string(value.([]byte)) != string(expected) {
|
|
t.Errorf("Value() resulted in %s, expected %s", value, expected)
|
|
}
|
|
}
|
|
|
|
{
|
|
j := JSONB{}
|
|
|
|
value, err := j.Value()
|
|
|
|
if err != nil {
|
|
t.Errorf("Value() returned error: %v, expected no error", err)
|
|
}
|
|
|
|
expected, _ := json.Marshal(j)
|
|
if string(value.([]byte)) != string(expected) {
|
|
t.Errorf("Value() resulted in %s, expected %s", value, expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGetUniqueCDRID(t *testing.T) {
|
|
{
|
|
cgrEv := &CGREvent{
|
|
APIOpts: map[string]interface{}{
|
|
MetaChargeID: "charge_id_123",
|
|
},
|
|
}
|
|
|
|
result := GetUniqueCDRID(cgrEv)
|
|
|
|
expected := "charge_id_123"
|
|
if result != expected {
|
|
t.Errorf("GetUniqueCDRID() returned %s, expected %s", result, expected)
|
|
}
|
|
}
|
|
|
|
{
|
|
cgrEv := &CGREvent{
|
|
APIOpts: map[string]interface{}{
|
|
MetaOriginID: "origin_id_456",
|
|
},
|
|
}
|
|
|
|
result := GetUniqueCDRID(cgrEv)
|
|
|
|
expected := "origin_id_456"
|
|
if result != expected {
|
|
t.Errorf("GetUniqueCDRID() returned %s, expected %s", result, expected)
|
|
}
|
|
}
|
|
|
|
{
|
|
cgrEv := &CGREvent{
|
|
APIOpts: map[string]interface{}{},
|
|
}
|
|
|
|
result := GetUniqueCDRID(cgrEv)
|
|
|
|
if len(result) != 7 {
|
|
t.Errorf("GetUniqueCDRID() returned %s, expected a 7-character UUID prefix", result)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCDR_CGREvent(t *testing.T) {
|
|
{
|
|
cdr := &CDR{
|
|
Tenant: "test_tenant",
|
|
Event: map[string]interface{}{"key": "value"},
|
|
Opts: map[string]interface{}{"opt_key": "opt_value"},
|
|
}
|
|
|
|
cgrEvent := cdr.CGREvent()
|
|
|
|
if cgrEvent.Tenant != cdr.Tenant {
|
|
t.Errorf("CGREvent().Tenant = %s, expected %s", cgrEvent.Tenant, cdr.Tenant)
|
|
}
|
|
|
|
if cgrEvent.Event["key"] != cdr.Event["key"] {
|
|
t.Errorf("CGREvent().Event = %v, expected %v", cgrEvent.Event, cdr.Event)
|
|
}
|
|
|
|
if cgrEvent.APIOpts["opt_key"] != cdr.Opts["opt_key"] {
|
|
t.Errorf("CGREvent().APIOpts = %v, expected %v", cgrEvent.APIOpts, cdr.Opts)
|
|
}
|
|
|
|
if cgrEvent.ID == "" {
|
|
t.Errorf("CGREvent().ID is empty, expected a generated ID")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCDRsToCGREvents(t *testing.T) {
|
|
{
|
|
cdrs := []*CDR{
|
|
{
|
|
Tenant: "tenant1",
|
|
Event: map[string]interface{}{"event_key1": "event_value1"},
|
|
Opts: map[string]interface{}{"opt_key1": "opt_value1"},
|
|
},
|
|
{
|
|
Tenant: "tenant2",
|
|
Event: map[string]interface{}{"event_key2": "event_value2"},
|
|
Opts: map[string]interface{}{"opt_key2": "opt_value2"},
|
|
},
|
|
}
|
|
|
|
cgrEvents := CDRsToCGREvents(cdrs)
|
|
|
|
if len(cgrEvents) != len(cdrs) {
|
|
t.Errorf("CDRsToCGREvents() returned %d events, expected %d", len(cgrEvents), len(cdrs))
|
|
}
|
|
|
|
for i, cgrEvent := range cgrEvents {
|
|
cdr := cdrs[i]
|
|
|
|
if cgrEvent.Tenant != cdr.Tenant {
|
|
t.Errorf("CGREvent[%d].Tenant = %s, expected %s", i, cgrEvent.Tenant, cdr.Tenant)
|
|
}
|
|
|
|
if cgrEvent.Event["event_key1"] != cdr.Event["event_key1"] {
|
|
t.Errorf("CGREvent[%d].Event = %v, expected %v", i, cgrEvent.Event, cdr.Event)
|
|
}
|
|
|
|
if cgrEvent.APIOpts["opt_key1"] != cdr.Opts["opt_key1"] {
|
|
t.Errorf("CGREvent[%d].APIOpts = %v, expected %v", i, cgrEvent.APIOpts, cdr.Opts)
|
|
}
|
|
|
|
if cgrEvent.ID == "" {
|
|
t.Errorf("CGREvent[%d].ID is empty, expected a generated ID", i)
|
|
}
|
|
}
|
|
}
|
|
|
|
{
|
|
cdrs := []*CDR{}
|
|
|
|
cgrEvents := CDRsToCGREvents(cdrs)
|
|
|
|
if len(cgrEvents) != 0 {
|
|
t.Errorf("CDRsToCGREvents() returned %d events, expected 0", len(cgrEvents))
|
|
}
|
|
}
|
|
}
|