From c2aed810e3e9255b5acd9b5547624ba8ec44f6d4 Mon Sep 17 00:00:00 2001 From: gezimbll Date: Mon, 24 Oct 2022 10:28:22 -0400 Subject: [PATCH] improving tests at config folder --- config/eescfg_test.go | 75 +++++++++++++++++++ config/erscfg_test.go | 142 ++++++++++++++++++++++++++++++++++++ config/httpcfg_test.go | 15 +++- config/kamagentcfg_test.go | 13 ++++ config/routescfg_test.go | 8 ++ config/rpcconn_test.go | 90 ++++++++++++++--------- config/schedulercfg_test.go | 15 ++-- 7 files changed, 318 insertions(+), 40 deletions(-) diff --git a/config/eescfg_test.go b/config/eescfg_test.go index d4aa291fe..856465a36 100644 --- a/config/eescfg_test.go +++ b/config/eescfg_test.go @@ -171,6 +171,7 @@ func TestEESClone(t *testing.T) { }, }, Opts: &EventExporterOpts{ + CSVFieldSeparator: utils.StringPointer(utils.InfieldSep), MYSQLDSNParams: map[string]string{ "allowOldPasswords": "true", @@ -251,6 +252,80 @@ func TestEventExporterloadFromJsonCfg(t *testing.T) { } } +func TestEventExporterOptsloadFromJsonCfg(t *testing.T) { + + eventExporterOptsJSON := &EventExporterOptsJson{ + + ElsIndex: utils.StringPointer("test"), + ElsIfPrimaryTerm: utils.IntPointer(0), + ElsIfSeqNo: utils.IntPointer(0), + ElsOpType: utils.StringPointer("test2"), + ElsPipeline: utils.StringPointer("test3"), + ElsRouting: utils.StringPointer("test4"), + ElsTimeout: utils.StringPointer("1m"), + ElsVersion: utils.IntPointer(2), + ElsVersionType: utils.StringPointer("test5"), + ElsWaitForActiveShards: utils.StringPointer("test6"), + SQLMaxIdleConns: utils.IntPointer(4), + SQLMaxOpenConns: utils.IntPointer(6), + SQLConnMaxLifetime: utils.StringPointer("1m"), + SQLTableName: utils.StringPointer("table"), + SQLDBName: utils.StringPointer("db"), + PgSSLMode: utils.StringPointer("pg"), + AWSToken: utils.StringPointer("token"), + S3FolderPath: utils.StringPointer("s3"), + NATSJetStream: utils.BoolPointer(true), + NATSSubject: utils.StringPointer("nat"), + NATSJWTFile: utils.StringPointer("jwt"), + NATSSeedFile: utils.StringPointer("seed"), + NATSCertificateAuthority: utils.StringPointer("NATS"), + NATSClientCertificate: utils.StringPointer("NATSClient"), + NATSClientKey: utils.StringPointer("key"), + NATSJetStreamMaxWait: utils.StringPointer("1m"), + } + + expected := &EventExporterOpts{ + + ElsIndex: utils.StringPointer("test2"), + ElsIfPrimaryTerm: utils.IntPointer(0), + ElsIfSeqNo: utils.IntPointer(0), + ElsOpType: utils.StringPointer("test2"), + ElsPipeline: utils.StringPointer("test3"), + ElsRouting: utils.StringPointer("test4"), + ElsTimeout: utils.DurationPointer(1 * time.Minute), + ElsVersion: utils.IntPointer(2), + ElsVersionType: utils.StringPointer("test5"), + ElsWaitForActiveShards: utils.StringPointer("test6"), + SQLMaxIdleConns: utils.IntPointer(4), + SQLMaxOpenConns: utils.IntPointer(6), + SQLConnMaxLifetime: utils.DurationPointer(1 * time.Minute), + SQLTableName: utils.StringPointer("table"), + SQLDBName: utils.StringPointer("db"), + PgSSLMode: utils.StringPointer("pg"), + AWSToken: utils.StringPointer("token"), + S3FolderPath: utils.StringPointer("s3"), + NATSJetStream: utils.BoolPointer(true), + NATSSubject: utils.StringPointer("nat"), + NATSJWTFile: utils.StringPointer("jwt"), + NATSSeedFile: utils.StringPointer("seed"), + NATSCertificateAuthority: utils.StringPointer("NATS"), + NATSClientCertificate: utils.StringPointer("NATSClient"), + NATSClientKey: utils.StringPointer("key"), + NATSJetStreamMaxWait: utils.DurationPointer(1 * time.Minute), + } + eventExporter := &EventExporterCfg{ + + Opts: &EventExporterOpts{}, + } + if err := eventExporter.Opts.loadFromJSONCfg(eventExporterOptsJSON); err != nil { + t.Error(expected) + + } else if reflect.DeepEqual(expected, eventExporter.Opts) { + t.Errorf("expected %v received %v", expected, eventExporter.Opts) + } + +} + func TestEESCacheloadFromJsonCfg(t *testing.T) { eesCfg := &EEsJsonCfg{ Cache: &map[string]*CacheParamJsonCfg{ diff --git a/config/erscfg_test.go b/config/erscfg_test.go index 12248e0d5..c8c6fec25 100644 --- a/config/erscfg_test.go +++ b/config/erscfg_test.go @@ -1183,3 +1183,145 @@ func TestGetDefaultExporter(t *testing.T) { t.Fatalf("Unexpected default cfg returned: %s", utils.ToJSON(dft)) } } + +func TestEventReaderOptsCfg(t *testing.T) { + + erCfg := new(EventReaderCfg) + + if err := erCfg.Opts.loadFromJSONCfg(nil); err != nil { + + t.Error(err) + } + + eventReaderOptsJson := &EventReaderOptsJson{ + PartialPath: utils.StringPointer("path"), + PartialCSVFieldSeparator: utils.StringPointer("/"), + CSVLazyQuotes: utils.BoolPointer(false), + AMQPQueueID: utils.StringPointer("id"), + AMQPQueueIDProcessed: utils.StringPointer("id"), + AMQPConsumerTag: utils.StringPointer("tag"), + AMQPExchange: utils.StringPointer("exchange"), + AMQPExchangeType: utils.StringPointer("type"), + AMQPRoutingKey: utils.StringPointer("key1"), + AMQPExchangeProcessed: utils.StringPointer("amq"), + AMQPExchangeTypeProcessed: utils.StringPointer("amqtype"), + AMQPRoutingKeyProcessed: utils.StringPointer("key"), + KafkaTopic: utils.StringPointer("kafka"), + KafkaMaxWait: utils.StringPointer("1m"), + KafkaTopicProcessed: utils.StringPointer("kafkaproc"), + SQLDBName: utils.StringPointer("dbname"), + SQLTableName: utils.StringPointer("tablename"), + PgSSLMode: utils.StringPointer("sslmode"), + SQLDBNameProcessed: utils.StringPointer("dbnameproc"), + SQLTableNameProcessed: utils.StringPointer("tablenameproc"), + PgSSLModeProcessed: utils.StringPointer("sslproc"), + AWSRegion: utils.StringPointer("eu"), + AWSKey: utils.StringPointer("key"), + AWSSecret: utils.StringPointer("secret"), + AWSToken: utils.StringPointer("token"), + + AWSKeyProcessed: utils.StringPointer("secret"), + AWSSecretProcessed: utils.StringPointer("secret"), + AWSTokenProcessed: utils.StringPointer("token"), + SQSQueueID: utils.StringPointer("SQSQueue"), + SQSQueueIDProcessed: utils.StringPointer("SQSQueueId"), + S3BucketID: utils.StringPointer("S3BucketID"), + S3FolderPathProcessed: utils.StringPointer("S3Path"), + S3BucketIDProcessed: utils.StringPointer("S3BucketProc"), + NATSJetStream: utils.BoolPointer(false), + NATSConsumerName: utils.StringPointer("user"), + NATSQueueID: utils.StringPointer("id"), + NATSJWTFile: utils.StringPointer("jwt"), + NATSSeedFile: utils.StringPointer("seed"), + NATSCertificateAuthority: utils.StringPointer("authority"), + NATSClientCertificate: utils.StringPointer("certificate"), + NATSClientKey: utils.StringPointer("key5"), + NATSJetStreamMaxWait: utils.StringPointer("1m"), + NATSJetStreamProcessed: utils.BoolPointer(true), + NATSJWTFileProcessed: utils.StringPointer("file"), + NATSSeedFileProcessed: utils.StringPointer("natseed"), + NATSCertificateAuthorityProcessed: utils.StringPointer("natsauth"), + NATSClientCertificateProcessed: utils.StringPointer("natcertificate"), + NATSClientKeyProcessed: utils.StringPointer("natsprocess"), + NATSJetStreamMaxWaitProcessed: utils.StringPointer("1m"), + } + + eventReader := &EventReaderCfg{ + Opts: &EventReaderOpts{}, + } + if err := eventReader.Opts.loadFromJSONCfg(eventReaderOptsJson); err != nil { + t.Error(err) + } + +} + +func TestEventReaderCfgClone(t *testing.T) { + ban := &EventReaderCfg{ + ID: "2", + Type: "type", + RunDelay: 1 * time.Minute, + ConcurrentReqs: 5, + SourcePath: "/", + ProcessedPath: "/path", + Tenant: RSRParsers{}, + Timezone: "time.Utc", + Flags: utils.FlagsWithParams{}, + Opts: &EventReaderOpts{ + PartialPath: utils.StringPointer("path"), + PartialCSVFieldSeparator: utils.StringPointer("/"), + CSVLazyQuotes: utils.BoolPointer(false), + AMQPQueueID: utils.StringPointer("id"), + AMQPQueueIDProcessed: utils.StringPointer("id"), + AMQPConsumerTag: utils.StringPointer("tag"), + AMQPExchange: utils.StringPointer("exchange"), + AMQPExchangeType: utils.StringPointer("type"), + AMQPRoutingKey: utils.StringPointer("key1"), + AMQPExchangeProcessed: utils.StringPointer("amq"), + AMQPExchangeTypeProcessed: utils.StringPointer("amqtype"), + AMQPRoutingKeyProcessed: utils.StringPointer("key"), + KafkaTopic: utils.StringPointer("kafka"), + KafkaMaxWait: utils.DurationPointer(1 * time.Minute), + KafkaTopicProcessed: utils.StringPointer("kafkaproc"), + SQLDBName: utils.StringPointer("dbname"), + SQLTableName: utils.StringPointer("tablename"), + PgSSLMode: utils.StringPointer("sslmode"), + SQLDBNameProcessed: utils.StringPointer("dbnameproc"), + SQLTableNameProcessed: utils.StringPointer("tablenameproc"), + PgSSLModeProcessed: utils.StringPointer("sslproc"), + AWSRegion: utils.StringPointer("eu"), + AWSKey: utils.StringPointer("key"), + AWSSecret: utils.StringPointer("secret"), + AWSToken: utils.StringPointer("token"), + + AWSKeyProcessed: utils.StringPointer("secret"), + AWSSecretProcessed: utils.StringPointer("secret"), + AWSTokenProcessed: utils.StringPointer("token"), + SQSQueueID: utils.StringPointer("SQSQueue"), + SQSQueueIDProcessed: utils.StringPointer("SQSQueueId"), + S3BucketID: utils.StringPointer("S3BucketID"), + S3FolderPathProcessed: utils.StringPointer("S3Path"), + S3BucketIDProcessed: utils.StringPointer("S3BucketProc"), + NATSJetStream: utils.BoolPointer(false), + NATSConsumerName: utils.StringPointer("user"), + NATSQueueID: utils.StringPointer("id"), + NATSJWTFile: utils.StringPointer("jwt"), + NATSSeedFile: utils.StringPointer("seed"), + NATSCertificateAuthority: utils.StringPointer("authority"), + NATSClientCertificate: utils.StringPointer("certificate"), + NATSClientKey: utils.StringPointer("key5"), + NATSJetStreamMaxWait: utils.DurationPointer(1 * time.Minute), + NATSJetStreamProcessed: utils.BoolPointer(true), + NATSJWTFileProcessed: utils.StringPointer("file"), + NATSSeedFileProcessed: utils.StringPointer("natseed"), + NATSCertificateAuthorityProcessed: utils.StringPointer("natsauth"), + NATSClientCertificateProcessed: utils.StringPointer("natcertificate"), + NATSClientKeyProcessed: utils.StringPointer("natsprocess"), + NATSJetStreamMaxWaitProcessed: utils.DurationPointer(1 * time.Minute), + }, + } + rcv := ban.Clone() + if !reflect.DeepEqual(rcv, ban) { + t.Errorf("expected %v received %v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + +} diff --git a/config/httpcfg_test.go b/config/httpcfg_test.go index f5a635324..3c3be9c24 100644 --- a/config/httpcfg_test.go +++ b/config/httpcfg_test.go @@ -270,10 +270,21 @@ func TestHTTPLoadTransportFromJSONCfg(t *testing.T) { } func TestHTTPLoadFromJSONCfg(t *testing.T) { - var jsnHTTPCfg *HTTPJsonCfg + var jsonHTTPCfg *HTTPJsonCfg httpcfg := &HTTPCfg{} - if err := httpcfg.loadFromJSONCfg(jsnHTTPCfg); err != nil { + if err := httpcfg.loadFromJSONCfg(jsonHTTPCfg); err != nil { t.Error(err) } + jsnHTTPCfg := &HTTPJsonCfg{ + Client_opts: &HTTPClientOptsJson{ + DialTimeout: utils.StringPointer("test")}, + } + httpcg := &HTTPCfg{ + dialer: &net.Dialer{}, + ClientOpts: &http.Transport{}, + } + if err := httpcg.loadFromJSONCfg(jsnHTTPCfg); err == nil { + t.Error(err) + } } diff --git a/config/kamagentcfg_test.go b/config/kamagentcfg_test.go index 2aab37af6..f164a6f5e 100644 --- a/config/kamagentcfg_test.go +++ b/config/kamagentcfg_test.go @@ -52,6 +52,19 @@ func TestKamAgentCfgloadFromJsonCfg(t *testing.T) { } else if !reflect.DeepEqual(expected, jsnCfg.kamAgentCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsnCfg.kamAgentCfg)) } + cfgJson := &KamAgentJsonCfg{ + + Evapi_conns: &[]*KamConnJsonCfg{ + { + Max_reconnect_interval: utils.StringPointer("test"), + }, + }} + + if err := jsnCfg.kamAgentCfg.loadFromJSONCfg(cfgJson); err != nil { + + t.Error(err) + } + } func TestKamConnCfgloadFromJsonCfg(t *testing.T) { diff --git a/config/routescfg_test.go b/config/routescfg_test.go index 8cba200b8..0a306a6bd 100644 --- a/config/routescfg_test.go +++ b/config/routescfg_test.go @@ -87,6 +87,11 @@ func TestRouteSCfgAsMapInterface(t *testing.T) { }, }, }` + + /* "*limit":3, + "*offset":3, + "*profileCount":3,*/ + eMap := map[string]interface{}{ utils.EnabledCfg: false, utils.IndexedSelectsCfg: true, @@ -102,6 +107,9 @@ func TestRouteSCfgAsMapInterface(t *testing.T) { utils.OptsContext: utils.MetaRoutes, utils.MetaIgnoreErrorsCfg: false, utils.MetaMaxCostCfg: utils.EmptyString, + /* utils.MetaLimitCfg: utils.IntPointer(3), + utils.MetaOffsetCfg: utils.IntPointer(3), + utils.MetaProfileCountCfg: utils.IntPointer(3),*/ }, } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { diff --git a/config/rpcconn_test.go b/config/rpcconn_test.go index 50577a1a8..b9a6da39d 100644 --- a/config/rpcconn_test.go +++ b/config/rpcconn_test.go @@ -33,16 +33,17 @@ func TestRPCConnsloadFromJsonCfgCase1(t *testing.T) { PoolSize: utils.IntPointer(1), Conns: &[]*RemoteHostJson{ { - Address: utils.StringPointer("127.0.0.1:2012"), - Transport: utils.StringPointer("*json"), - Tls: utils.BoolPointer(false), - Key_path: utils.StringPointer("key_path"), - Cert_path: utils.StringPointer("cert_path"), - Ca_path: utils.StringPointer("ca_path"), - Conn_attempts: utils.IntPointer(5), - Reconnects: utils.IntPointer(2), - Connect_timeout: utils.StringPointer("1m"), - Reply_timeout: utils.StringPointer("1m"), + Address: utils.StringPointer("127.0.0.1:2012"), + Transport: utils.StringPointer("*json"), + Tls: utils.BoolPointer(false), + Key_path: utils.StringPointer("key_path"), + Cert_path: utils.StringPointer("cert_path"), + Ca_path: utils.StringPointer("ca_path"), + Conn_attempts: utils.IntPointer(5), + Reconnects: utils.IntPointer(2), + Connect_timeout: utils.StringPointer("1m"), + Reply_timeout: utils.StringPointer("1m"), + Max_reconnect_interval: utils.StringPointer("1m"), }, }, } @@ -83,27 +84,44 @@ func TestRPCConnsloadFromJsonCfgCase1(t *testing.T) { PoolSize: 1, Conns: []*RemoteHost{ { - Address: "127.0.0.1:2012", - Transport: "*json", - ConnectAttempts: 5, - Reconnects: 2, - ConnectTimeout: 1 * time.Minute, - ReplyTimeout: 1 * time.Minute, - TLS: false, - ClientKey: "key_path", - ClientCertificate: "cert_path", - CaCertificate: "ca_path", + Address: "127.0.0.1:2012", + Transport: "*json", + ConnectAttempts: 5, + Reconnects: 2, + ConnectTimeout: 1 * time.Minute, + ReplyTimeout: 1 * time.Minute, + TLS: false, + ClientKey: "key_path", + ClientCertificate: "cert_path", + CaCertificate: "ca_path", + MaxReconnectInterval: 1 * time.Minute, }, }, }, } jsonCfg := NewDefaultCGRConfig() - jsonCfg.rpcConns[utils.MetaLocalHost].loadFromJSONCfg(cfgJSON) if !reflect.DeepEqual(jsonCfg.rpcConns, expected) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsonCfg.rpcConns)) } - + cfgJson := &RemoteHostJson{ + Connect_timeout: utils.StringPointer("test"), + } + if err := jsonCfg.rpcConns[utils.MetaLocalHost].Conns[0].loadFromJSONCfg(cfgJson); err == nil { + t.Error(err) + } + cfgJson = &RemoteHostJson{ + Max_reconnect_interval: utils.StringPointer("test"), + } + if err := jsonCfg.rpcConns[utils.MetaLocalHost].Conns[0].loadFromJSONCfg(cfgJson); err == nil { + t.Error(err) + } + cfgJson = &RemoteHostJson{ + Reply_timeout: utils.StringPointer("test"), + } + if err := jsonCfg.rpcConns[utils.MetaLocalHost].Conns[0].loadFromJSONCfg(cfgJson); err == nil { + t.Error(err) + } } func TestRPCConnsloadFromJsonCfgCase2(t *testing.T) { @@ -181,7 +199,10 @@ func TestRPCConnsAsMapInterface(t *testing.T) { "connect_attempts": 5, "reconnects": 3, "connect_timeout": "1m", - "reply_timeout": "1m" + "reply_timeout": "1m", + "max_reconnect_interval":"1m", + + } ], }, @@ -203,16 +224,18 @@ func TestRPCConnsAsMapInterface(t *testing.T) { utils.StrategyCfg: utils.MetaFirst, utils.Conns: []map[string]interface{}{ { - utils.AddressCfg: "127.0.0.1:2012", - utils.TransportCfg: "*json", - utils.IDCfg: "id_example", - utils.TLSNoCaps: true, - utils.KeyPathCgr: "path_to_key", - utils.CertPathCgr: "path_to_cert", - utils.CAPathCgr: "path_to_ca", - utils.ReconnectsCfg: 3, - utils.ConnectTimeoutCfg: 1 * time.Minute, - utils.ReplyTimeoutCfg: 1 * time.Minute, + + utils.AddressCfg: "127.0.0.1:2012", + utils.TransportCfg: "*json", + utils.IDCfg: "id_example", + utils.TLSNoCaps: true, + utils.KeyPathCgr: "path_to_key", + utils.CertPathCgr: "path_to_cert", + utils.CAPathCgr: "path_to_ca", + utils.ReconnectsCfg: 3, + utils.ConnectTimeoutCfg: 1 * time.Minute, + utils.ReplyTimeoutCfg: 1 * time.Minute, + utils.MaxReconnectIntervalCfg: 1 * time.Minute, }, }, }, @@ -242,6 +265,7 @@ func TestRPCConnsAsMapInterface(t *testing.T) { } else if rcv := cgrCfg.rpcConns.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } + } func TestRpcConnAsMapInterface1(t *testing.T) { diff --git a/config/schedulercfg_test.go b/config/schedulercfg_test.go index ac2e70e10..662bcedec 100644 --- a/config/schedulercfg_test.go +++ b/config/schedulercfg_test.go @@ -98,11 +98,12 @@ func TestSchedulerCfgAsMapInterface1(t *testing.T) { func TestSchedulerCfgClone(t *testing.T) { ban := &SchedulerCfg{ - Enabled: true, - CDRsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs), "*conn1"}, - ThreshSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"}, - StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "*conn1"}, - Filters: []string{"randomFilter"}, + Enabled: true, + CDRsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs), "*conn1"}, + ThreshSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"}, + StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "*conn1"}, + Filters: []string{"randomFilter"}, + DynaprepaidActionPlans: []string{"plan"}, } rcv := ban.Clone() if !reflect.DeepEqual(ban, rcv) { @@ -120,4 +121,8 @@ func TestSchedulerCfgClone(t *testing.T) { if rcv.Filters[0] = ""; ban.Filters[0] != "randomFilter" { t.Errorf("Expected clone to not modify the cloned") } + + if rcv.DynaprepaidActionPlans[0] = ""; ban.DynaprepaidActionPlans[0] != "plan" { + t.Errorf("Expected clone to not modify the cloned") + } }