Fixed and added tests in config

This commit is contained in:
nickolasdaniel
2021-10-18 17:00:16 +03:00
committed by Dan Christian Bogos
parent 83711d727c
commit be173e1e07
7 changed files with 433 additions and 93 deletions

View File

@@ -1418,3 +1418,38 @@ func (responseTest) Write([]byte) (int, error) {
}
func (responseTest) WriteHeader(int) {}
func TestGetLockFilePath(t *testing.T) {
l := LoaderSCfg{
ID: "file",
LockFilePath: "../tmp/file.txt",
TpInDir: "/home",
}
exp := "/tmp/file.txt"
pathL := l.GetLockFilePath()
if pathL != exp {
t.Errorf("Expected %s \n but received \n %s", exp, pathL)
}
l.LockFilePath = "file.txt"
pathL = l.GetLockFilePath()
exp = "/home/file.txt"
if pathL != exp {
t.Errorf("Expected %s \n but received \n %s", exp, pathL)
}
if err := os.Mkdir(path.Join("/tmp", "TestGetLockFilePath"), 0777); err != nil {
t.Error(err)
}
l.LockFilePath = "TestGetLockFilePath"
l.TpInDir = "/tmp"
pathL = l.GetLockFilePath()
exp = "/tmp/TestGetLockFilePath/file.lck"
if pathL != exp {
t.Errorf("Expected %s \n but received \n %s", exp, pathL)
}
if err := os.RemoveAll(path.Join("/tmp", "TestGetLockFilePath")); err != nil {
t.Error(err)
}
}

View File

@@ -22,6 +22,7 @@ import (
"fmt"
"reflect"
"testing"
"time"
"github.com/cgrates/birpc/context"
"github.com/cgrates/cgrates/utils"
@@ -579,30 +580,14 @@ func TestSmgJsonCfg(t *testing.T) {
Publickey_path: utils.StringPointer(""),
},
Opts: &SessionsOptsJson{
Accounts: []*utils.DynamicBoolOpt{},
Attributes: []*utils.DynamicBoolOpt{},
CDRs: []*utils.DynamicBoolOpt{},
Chargers: []*utils.DynamicBoolOpt{},
Resources: []*utils.DynamicBoolOpt{},
Routes: []*utils.DynamicBoolOpt{},
Stats: []*utils.DynamicBoolOpt{},
Thresholds: []*utils.DynamicBoolOpt{},
Initiate: []*utils.DynamicBoolOpt{},
Update: []*utils.DynamicBoolOpt{},
Terminate: []*utils.DynamicBoolOpt{},
Message: []*utils.DynamicBoolOpt{},
AttributesDerivedReply: []*utils.DynamicBoolOpt{},
BlockerError: []*utils.DynamicBoolOpt{},
CDRsDerivedReply: []*utils.DynamicBoolOpt{},
ResourcesAuthorize: []*utils.DynamicBoolOpt{},
ResourcesAllocate: []*utils.DynamicBoolOpt{},
ResourcesRelease: []*utils.DynamicBoolOpt{},
ResourcesDerivedReply: []*utils.DynamicBoolOpt{},
RoutesDerivedReply: []*utils.DynamicBoolOpt{},
StatsDerivedReply: []*utils.DynamicBoolOpt{},
ThresholdsDerivedReply: []*utils.DynamicBoolOpt{},
MaxUsage: []*utils.DynamicBoolOpt{},
ForceDuration: []*utils.DynamicBoolOpt{},
Attributes: []*utils.DynamicBoolOpt{},
Chargers: []*utils.DynamicBoolOpt{},
Stats: []*utils.DynamicBoolOpt{},
Thresholds: []*utils.DynamicBoolOpt{},
Initiate: []*utils.DynamicBoolOpt{},
Update: []*utils.DynamicBoolOpt{},
Terminate: []*utils.DynamicBoolOpt{},
Message: []*utils.DynamicBoolOpt{},
},
}
dfCgrJSONCfg, err := NewCgrJsonCfgFromBytes([]byte(CGRATES_CFG_JSON))
@@ -613,7 +598,7 @@ func TestSmgJsonCfg(t *testing.T) {
if err := dfCgrJSONCfg.GetSection(context.Background(), SessionSJSON, cfg); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eCfg, cfg) {
t.Error("Received: ", cfg)
t.Errorf("Expected %v \n but Received \n %v ", utils.ToJSON(eCfg), utils.ToJSON(cfg))
}
}
@@ -2350,3 +2335,28 @@ func TestSetSection(t *testing.T) {
t.Error(err)
}
}
func TestConfigJsonCloneSection(t *testing.T) {
s := Sections{
&CoreSCfg{
Caps: 2,
CapsStrategy: "*busy",
CapsStatsInterval: 2 * time.Second,
ShutdownTimeout: 3 * time.Second,
},
}
exp := []Section{
&CoreSCfg{
Caps: 2,
CapsStrategy: "*busy",
CapsStatsInterval: 2 * time.Second,
ShutdownTimeout: 3 * time.Second,
},
}
c := s.Clone()
if !reflect.DeepEqual(exp[0], c[0]) {
t.Errorf("Expected %v \n bu received \n %v", exp, c)
}
}

View File

@@ -6293,6 +6293,45 @@ func TestConfigDBCfg(t *testing.T) {
}
}
func TestConfigDBLoadFromJson(t *testing.T) {
dbCfg := &ConfigDBCfg{}
jsonCfg := &DbJsonCfg{
Db_port: utils.IntPointer(-1),
}
if err := dbCfg.loadFromJSONCfg(jsonCfg); err != nil {
t.Error(err)
}
if err := dbCfg.loadFromJSONCfg(nil); err != nil {
t.Error(err)
}
}
func TestConfigDBCloneSection(t *testing.T) {
dbCfg := ConfigDBCfg{
Type: "*internal",
Host: "localhost",
Port: "2013",
Name: "dbname",
User: "cgrates",
Password: "superSecretPassword",
Opts: &DataDBOpts{},
}
exp := &ConfigDBCfg{
Type: "*internal",
Host: "localhost",
Port: "2013",
Name: "dbname",
User: "cgrates",
Password: "superSecretPassword",
Opts: &DataDBOpts{},
}
rcv := dbCfg.CloneSection()
if !reflect.DeepEqual(exp, rcv) {
t.Errorf("Expected %v \n but recevived \n %v", exp, rcv)
}
}
func TestFreeSwitchAgentCloneSection(t *testing.T) {
fsAgCfg := FsAgentCfg{
Enabled: true,

View File

@@ -19,6 +19,7 @@ package config
import (
"encoding/json"
"fmt"
"reflect"
"testing"
@@ -211,32 +212,32 @@ func TestDiffLoaderCfgJsonCase2(t *testing.T) {
}
}
// func TestLoaderCfgCloneSection(t *testing.T) {
// ldrCfg := LoaderCgrCfg{
// TpID: "loaderID",
// DataPath: "/data/path",
// DisableReverse: false,
// FieldSeparator: rune(22),
// CachesConns: []string{"*localhost"},
// ActionSConns: []string{"*localhost"},
// GapiCredentials: nil,
// GapiToken: nil,
// }
func TestLoaderCfgCloneSection(t *testing.T) {
ldrCfg := &LoaderCgrCfg{
TpID: "loaderID",
DataPath: "/data/path",
DisableReverse: false,
FieldSeparator: rune(22),
CachesConns: []string{"*localhost"},
ActionSConns: []string{"*localhost"},
GapiCredentials: json.RawMessage{},
GapiToken: json.RawMessage{},
}
// exp := &LoaderCgrCfg{
// TpID: "loaderID",
// DataPath: "/data/path",
// DisableReverse: false,
// FieldSeparator: rune(22),
// CachesConns: []string{"*localhost"},
// ActionSConns: []string{"*localhost"},
// GapiCredentials: nil,
// GapiToken: nil,
// }
exp := &LoaderCgrCfg{
TpID: "loaderID",
DataPath: "/data/path",
DisableReverse: false,
FieldSeparator: rune(22),
CachesConns: []string{"*localhost"},
ActionSConns: []string{"*localhost"},
GapiCredentials: json.RawMessage{},
GapiToken: json.RawMessage{},
}
// rcv := ldrCfg.CloneSection()
// fmt.Println(utils.ToJSON(rcv))
// if !reflect.DeepEqual(rcv.(*LoaderCgrCfg), exp) {
// t.Errorf("Expected %+v \n but received \n %v", exp, rcv)
// }
// }
rcv := ldrCfg.CloneSection()
fmt.Println(utils.ToJSON(rcv))
if !reflect.DeepEqual(rcv.(*LoaderCgrCfg), exp) {
t.Errorf("Expected %+v \n but received \n %v", exp, rcv)
}
}

View File

@@ -1467,6 +1467,12 @@ func TestLoaderSCfgloadFromJsonCfgCase6(t *testing.T) {
}
}
func TestLoaderSCfgloadFromJsonCfgCase7(t *testing.T) {
cfg := &LoaderSCfg{}
if err := cfg.loadFromJSONCfg(nil, nil, ""); err != nil {
t.Error(err)
}
}
func TestEnabledCase1(t *testing.T) {
jsonCfg := NewDefaultCGRConfig()
@@ -2930,46 +2936,71 @@ func TestLockFolderIsDir(t *testing.T) {
}
}
// func TestLoaderSCloneSection(t *testing.T) {
// ldrsCfg := LoaderSCfgs{
// {
// ID: "LoaderID",
// Enabled: false,
// Tenant: "cgrates.org",
// DryRun: false,
// RunDelay: 1 * time.Millisecond,
// LockFilePath: "lockFileName",
// CacheSConns: []string{"*localhost"},
// FieldSeparator: ";",
// TpInDir: "/tp/in/dir",
// TpOutDir: "/tp/out/dir",
// Data: nil,
// },
// }
func TestLoaderSCloneSection(t *testing.T) {
ldrsCfg := LoaderSCfgs{
{
ID: "LoaderID",
Enabled: false,
Tenant: "cgrates.org",
DryRun: false,
RunDelay: 1 * time.Millisecond,
LockFilePath: "lockFileName",
CacheSConns: []string{"*localhost"},
FieldSeparator: ";",
TpInDir: "/tp/in/dir",
TpOutDir: "/tp/out/dir",
Data: []*LoaderDataType{
{
Type: "*csv",
Filename: "test",
Flags: utils.FlagsWithParams{
"k1": map[string][]string{
"k2": {"f1", "f2"},
},
},
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: utils.MetaRep + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("cgrates.org", utils.InfieldSep)},
},
},
},
},
}
// exp := LoaderSCfgs{
// {
// ID: "LoaderID",
// Enabled: false,
// Tenant: "cgrates.org",
// DryRun: false,
// RunDelay: 1 * time.Millisecond,
// LockFilePath: "lockFileName",
// CacheSConns: []string{"*localhost"},
// FieldSeparator: ";",
// TpInDir: "/tp/in/dir",
// TpOutDir: "/tp/out/dir",
// Data: nil,
// },
// }
exp := LoaderSCfgs{
{
ID: "LoaderID",
Enabled: false,
Tenant: "cgrates.org",
DryRun: false,
RunDelay: 1 * time.Millisecond,
LockFilePath: "lockFileName",
CacheSConns: []string{"*localhost"},
FieldSeparator: ";",
TpInDir: "/tp/in/dir",
TpOutDir: "/tp/out/dir",
Data: []*LoaderDataType{
{
Type: "*csv",
Filename: "test",
Flags: utils.FlagsWithParams{
"k1": map[string][]string{
"k2": {"f1", "f2"},
},
},
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: utils.MetaRep + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("cgrates.org", utils.InfieldSep)},
},
},
},
},
}
// rcv := ldrsCfg.CloneSection()
// idk, ok := rcv.(*LoaderSCfgs)
// if !ok {
// t.Error("Err")
// }
// (*idk)[0].Data = nil
// if !reflect.DeepEqual(rcv, exp) {
// t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(exp), utils.ToJSON(rcv))
// }
// }
rcv := ldrsCfg.CloneSection()
if !reflect.DeepEqual((*rcv.(*LoaderSCfgs))[0], exp[0]) {
t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(exp[0]), utils.ToJSON((*rcv.(*LoaderSCfgs))[0]))
}
}

View File

@@ -165,6 +165,60 @@ func TestRPCConnsloadFromJsonCfgCase2(t *testing.T) {
}
}
func TestRemoteHostLoadFromJSONCfg(t *testing.T) {
rh := &RemoteHost{}
jsnCfg := &RemoteHostJson{
Connect_timeout: utils.StringPointer("2c"),
// Reply_timeout: utils.StringPointer("2c"),
}
errExpect := `time: unknown unit "c" in duration "2c"`
if err := rh.loadFromJSONCfg(jsnCfg); err == nil || err.Error() != errExpect {
t.Errorf("Expected %v \n but received \n %v", errExpect, err.Error())
}
jsnCfg = &RemoteHostJson{
Connect_timeout: utils.StringPointer("2s"),
Reply_timeout: utils.StringPointer("2c"),
}
if err := rh.loadFromJSONCfg(jsnCfg); err == nil || err.Error() != errExpect {
t.Errorf("Expected %v \n but received \n %v", errExpect, err.Error())
}
}
func TestRemoteHostAsMapInterface(t *testing.T) {
rh := &RemoteHost{
ID: "rh_id1",
Address: "localhost",
Transport: "*json",
ConnectAttempts: 2,
Reconnects: 2,
ConnectTimeout: 3 * time.Nanosecond,
ReplyTimeout: 2 * time.Nanosecond,
TLS: true,
ClientKey: "ck",
ClientCertificate: "cc",
CaCertificate: "ca",
}
eMap := map[string]interface{}{
utils.IDCfg: "rh_id1",
utils.AddressCfg: "localhost",
utils.TransportCfg: "*json",
utils.ConnectAttemptsCfg: 2,
utils.ReconnectsCfg: 2,
utils.ConnectTimeoutCfg: 3 * time.Nanosecond,
utils.ReplyTimeoutCfg: 2 * time.Nanosecond,
utils.TLSNoCaps: true,
utils.KeyPathCgr: "ck",
utils.CertPathCgr: "cc",
utils.CAPathCgr: "ca",
}
rcv := rh.AsMapInterface()
if !reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}
func TestRPCConnsAsMapInterface(t *testing.T) {
cfgJSONStr := `{
"rpc_conns": {

View File

@@ -167,6 +167,14 @@ func TestSessionSCfgloadFromJsonCfgCase1(t *testing.T) {
if err = jsonCfg.sessionSCfg.loadFromJSONCfg(cfgJSON); err != nil {
t.Error(err)
}
if err := expected.Opts.loadFromJSONCfg(nil); err != nil {
t.Error(err)
}
if err := expected.STIRCfg.loadFromJSONCfg(nil); err != nil {
t.Error(err)
}
}
func TestSessionSCfgloadFromJsonCfgCase2(t *testing.T) {
@@ -1662,3 +1670,165 @@ func TestSessionSCloneSection(t *testing.T) {
t.Errorf("Expected %v \n but received \n %v", utils.ToJSON(exp), utils.ToJSON(rcv))
}
}
func TestDiffSessionsOptsJsonCfg(t *testing.T) {
var d *SessionsOptsJson
v1 := &SessionsOpts{
Attributes: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.org",
Value: false,
},
},
Chargers: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.org",
Value: false,
},
},
Stats: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.org",
Value: false,
},
},
Thresholds: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.org",
Value: false,
},
},
Initiate: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.org",
Value: false,
},
},
Update: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.org",
Value: false,
},
},
Terminate: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.org",
Value: false,
},
},
Message: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.org",
Value: false,
},
},
}
v2 := &SessionsOpts{
Attributes: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Chargers: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Stats: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Thresholds: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Initiate: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Update: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Terminate: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Message: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
}
expected := &SessionsOptsJson{
Attributes: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Chargers: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Stats: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Thresholds: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Initiate: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Update: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Terminate: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
Message: []*utils.DynamicBoolOpt{
{
Tenant: "cgrates.net",
Value: true,
},
},
}
rcv := diffSessionsOptsJsonCfg(d, v1, v2)
if !reflect.DeepEqual(rcv, expected) {
t.Errorf("Expected %v \n but received \n %v", expected, rcv)
}
}