Added tests for some AsMapInterface methods

This commit is contained in:
adragusin
2020-04-23 17:59:57 +03:00
committed by Dan Christian Bogos
parent b40b7eb363
commit 6c7270b454
15 changed files with 364 additions and 27 deletions

View File

@@ -138,7 +138,7 @@ func TestCdreCfgloadFromJsonCfg(t *testing.T) {
}
}
func TestCdreAsMapInterface(t *testing.T) {
func TestCdreCfgAsMapInterface(t *testing.T) {
var cdre CdreCfg
cfgJSONStr := `{
"cdre": {

View File

@@ -100,6 +100,7 @@ func (dbcfg *DataDbCfg) loadFromJsonCfg(jsnDbCfg *DbJsonCfg) (err error) {
}
}
if jsnDbCfg.Items != nil {
dbcfg.Items = make(map[string]*ItemOpt)
for kJsn, vJsn := range *jsnDbCfg.Items {
val, has := dbcfg.Items[kJsn]
if val == nil || !has {
@@ -134,16 +135,21 @@ func (dbcfg *DataDbCfg) AsMapInterface() map[string]interface{} {
for key, item := range dbcfg.Items {
items[key] = item.AsMapInterface()
}
var queryTimeout string = "0"
if dbcfg.QueryTimeout != 0 {
queryTimeout = dbcfg.QueryTimeout.String()
}
dbPort, _ := strconv.Atoi(dbcfg.DataDbPort)
return map[string]interface{}{
utils.DataDbTypeCfg: dbcfg.DataDbType,
utils.DataDbTypeCfg: utils.Meta + dbcfg.DataDbType,
utils.DataDbHostCfg: dbcfg.DataDbHost,
utils.DataDbPortCfg: dbcfg.DataDbPort,
utils.DataDbPortCfg: dbPort,
utils.DataDbNameCfg: dbcfg.DataDbName,
utils.DataDbUserCfg: dbcfg.DataDbUser,
utils.DataDbPassCfg: dbcfg.DataDbPass,
utils.DataDbSentinelNameCfg: dbcfg.DataDbSentinelName,
utils.QueryTimeoutCfg: dbcfg.QueryTimeout,
utils.QueryTimeoutCfg: queryTimeout,
utils.RmtConnsCfg: dbcfg.RmtConns,
utils.RplConnsCfg: dbcfg.RplConns,
utils.ItemsCfg: items,
@@ -162,11 +168,16 @@ type ItemOpt struct {
}
func (itm *ItemOpt) AsMapInterface() map[string]interface{} {
var ttl string = ""
if itm.TTL != 0 {
ttl = itm.TTL.String()
}
return map[string]interface{}{
utils.RemoteCfg: itm.Remote,
utils.ReplicateCfg: itm.Replicate,
utils.LimitCfg: itm.Limit,
utils.TTLCfg: itm.TTL,
utils.TTLCfg: ttl,
utils.StaticTTLCfg: itm.StaticTTL,
}
}

View File

@@ -395,3 +395,50 @@ func TestDataDbCfgloadFromJsonCfgItems(t *testing.T) {
t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(expected), utils.ToJSON(dbcfg))
}
}
func TestDataDbCfgAsMapInterface(t *testing.T) {
var dbcfg DataDbCfg
cfgJSONStr := `{
"data_db": {
"db_type": "*redis",
"db_host": "127.0.0.1",
"db_port": 6379,
"db_name": "10",
"db_user": "cgrates",
"db_password": "",
"redis_sentinel":"",
"query_timeout":"10s",
"remote_conns":[],
"replication_conns":[],
"items":{
"*accounts":{"remote":true, "replicate":false, "limit": -1, "ttl": "", "static_ttl": false},
"*reverse_destinations": {"remote":false, "replicate":false, "limit": 7, "ttl": "", "static_ttl": true},
},
},
}`
eMap := map[string]interface{}{
"db_type": "*redis",
"db_host": "127.0.0.1",
"db_port": 6379,
"db_name": "10",
"db_user": "cgrates",
"db_password": "",
"redis_sentinel": "",
"query_timeout": "10s",
"remote_conns": []string{},
"replication_conns": []string{},
"items": map[string]interface{}{
"*accounts": map[string]interface{}{"remote": true, "replicate": false, "limit": -1, "ttl": "", "static_ttl": false},
"*reverse_destinations": map[string]interface{}{"remote": false, "replicate": false, "limit": 7, "ttl": "", "static_ttl": true},
},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnDataDbCfg, err := jsnCfg.DbJsonCfg(DATADB_JSN); err != nil {
t.Error(err)
} else if err = dbcfg.loadFromJsonCfg(jsnDataDbCfg); err != nil {
t.Error(err)
} else if rcv := dbcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -54,3 +54,29 @@ func TestFilterSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(fscfg))
}
}
func TestFilterSCfgAsMapInterface(t *testing.T) {
var fscfg FilterSCfg
cfgJSONStr := `{
"filters": {
"stats_conns": ["*localhost"],
"resources_conns": [],
"apiers_conns": [],
},
}`
var emptySlice []string
eMap := map[string]interface{}{
"stats_conns": []string{"*localhost"},
"resources_conns": emptySlice,
"apiers_conns": emptySlice,
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnFsCfg, err := jsnCfg.FilterSJsonCfg(); err != nil {
t.Error(err)
} else if err = fscfg.loadFromJsonCfg(jsnFsCfg); err != nil {
t.Error(err)
} else if rcv := fscfg.AsMapInterface(); reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -352,7 +352,7 @@ func TestHttpAgentCfgappendHttpAgntProcCfgs(t *testing.T) {
}
}
func testHttpAgentCfgAsMapInterface(t *testing.T) {
func TestHttpAgentCfgAsMapInterface(t *testing.T) {
var httpcfg HttpAgentCfgs
cfgJSONStr := `{
@@ -388,7 +388,6 @@ func testHttpAgentCfgAsMapInterface(t *testing.T) {
},
],
}`
request_fields := []string{}
eMap := []map[string]interface{}{
{
"id": "conecto1",
@@ -401,9 +400,9 @@ func testHttpAgentCfgAsMapInterface(t *testing.T) {
"id": "OutboundAUTHDryRun",
"filters": []string{"*string:~*req.request_type:OutboundAUTH", "*string:~*req.Msisdn:497700056231"},
"tenant": "cgrates.org",
"flags": map[string][]string{"*dryrun": request_fields},
"flags": map[string][]string{"*dryrun": {}},
"Timezone": "",
"request_fields": request_fields,
"request_fields": []map[string]interface{}{},
"reply_fields": []map[string]interface{}{
{"tag": "Allow", "path": "*rep.response.Allow", "type": "*constant", "value": "1", "mandatory": true},
{"tag": "Concatenated1", "path": "*rep.response.Concatenated", "type": "*composed", "value": "~*req.MCC;/", "mandatory": true},
@@ -424,5 +423,4 @@ func testHttpAgentCfgAsMapInterface(t *testing.T) {
} else if rcv := httpcfg.AsMapInterface(";"); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected: %+v,\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -58,12 +58,17 @@ func (httpcfg *HTTPCfg) loadFromJsonCfg(jsnHttpCfg *HTTPJsonCfg) (err error) {
}
func (httpcfg *HTTPCfg) AsMapInterface() map[string]interface{} {
httpUsers := map[string]interface{}{}
for key, item := range httpcfg.HTTPAuthUsers {
httpUsers[key] = item
}
return map[string]interface{}{
utils.HTTPJsonRPCURLCfg: httpcfg.HTTPJsonRPCURL,
utils.HTTPWSURLCfg: httpcfg.HTTPWSURL,
utils.HTTPFreeswitchCDRsURLCfg: httpcfg.HTTPFreeswitchCDRsURL,
utils.HTTPCDRsURLCfg: httpcfg.HTTPCDRsURL,
utils.HTTPUseBasicAuthCfg: httpcfg.HTTPUseBasicAuth,
utils.HTTPAuthUsersCfg: httpcfg.HTTPAuthUsers,
utils.HTTPAuthUsersCfg: httpUsers,
}
}

View File

@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
"github.com/cgrates/cgrates/utils"
)
func TestHTTPCfgloadFromJsonCfg(t *testing.T) {
@@ -62,3 +64,36 @@ func TestHTTPCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, httpcfg)
}
}
func TestHTTPCfgAsMapInterface(t *testing.T) {
var httpcfg HTTPCfg
cfgJSONStr := `{
"http": {
"json_rpc_url": "/jsonrpc",
"ws_url": "/ws",
"freeswitch_cdrs_url": "/freeswitch_json",
"http_cdrs": "/cdr_http",
"use_basic_auth": false,
"auth_users": {},
},
}`
eMap := map[string]interface{}{
"json_rpc_url": "/jsonrpc",
"ws_url": "/ws",
"freeswitch_cdrs_url": "/freeswitch_json",
"http_cdrs": "/cdr_http",
"use_basic_auth": false,
"auth_users": map[string]interface{}{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnhttpCfg, err := jsnCfg.HttpJsonCfg(); err != nil {
t.Error(err)
} else if err = httpcfg.loadFromJsonCfg(jsnhttpCfg); err != nil {
t.Error(err)
} else if rcv := httpcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -211,6 +211,15 @@ func (l *LoaderSCfg) AsMapInterface(separator string) map[string]interface{} {
if l.RunDelay != 0 {
runDelay = l.RunDelay.String()
}
cacheSConns := make([]string, len(l.CacheSConns))
for i, item := range l.CacheSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)
if item == buf {
cacheSConns[i] = strings.ReplaceAll(item, ":*caches", utils.EmptyString)
} else {
cacheSConns[i] = item
}
}
return map[string]interface{}{
utils.IdCfg: l.Id,
@@ -219,7 +228,7 @@ func (l *LoaderSCfg) AsMapInterface(separator string) map[string]interface{} {
utils.DryRunCfg: l.DryRun,
utils.RunDelayCfg: runDelay,
utils.LockFileNameCfg: l.LockFileName,
utils.CacheSConnsCfg: l.CacheSConns,
utils.CacheSConnsCfg: cacheSConns,
utils.FieldSeparatorCfg: l.FieldSeparator,
utils.TpInDirCfg: l.TpInDir,
utils.TpOutDirCfg: l.TpOutDir,

View File

@@ -141,7 +141,7 @@ func TestLoaderCfgAsMapInterface(t *testing.T) {
"dry_run": false,
"run_delay": "0",
"lock_filename": ".cgr.lck",
"caches_conns": []string{"*internal:*caches"},
"caches_conns": []string{"*internal"},
"field_separator": ",",
"tp_in_dir": "/var/spool/cgrates/loader/in",
"tp_out_dir": "/var/spool/cgrates/loader/out",

View File

@@ -19,6 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package config
import (
"strconv"
"strings"
"time"
"github.com/cgrates/cgrates/utils"
@@ -86,6 +88,7 @@ func (ralsCfg *RalsCfg) loadFromJsonCfg(jsnRALsCfg *RalsJsonCfg) (err error) {
ralsCfg.RemoveExpired = *jsnRALsCfg.Remove_expired
}
if jsnRALsCfg.Max_computed_usage != nil {
ralsCfg.MaxComputedUsage = make(map[string]time.Duration, len(*jsnRALsCfg.Max_computed_usage))
for k, v := range *jsnRALsCfg.Max_computed_usage {
if ralsCfg.MaxComputedUsage[k], err = utils.ParseDurationWithNanosecs(v); err != nil {
return
@@ -96,6 +99,7 @@ func (ralsCfg *RalsCfg) loadFromJsonCfg(jsnRALsCfg *RalsJsonCfg) (err error) {
ralsCfg.MaxIncrements = *jsnRALsCfg.Max_increments
}
if jsnRALsCfg.Balance_rating_subject != nil {
ralsCfg.BalanceRatingSubject = make(map[string]string, len(*jsnRALsCfg.Balance_rating_subject))
for k, v := range *jsnRALsCfg.Balance_rating_subject {
ralsCfg.BalanceRatingSubject[k] = v
}
@@ -113,7 +117,21 @@ func (ralsCfg *RalsCfg) loadFromJsonCfg(jsnRALsCfg *RalsJsonCfg) (err error) {
func (ralsCfg *RalsCfg) AsMapInterface() map[string]interface{} {
maxComputed := make(map[string]interface{})
for key, item := range ralsCfg.MaxComputedUsage {
maxComputed[key] = item
if key == utils.ANY || key == utils.VOICE {
maxComputed[key] = item.String()
} else {
maxComputed[key] = strconv.Itoa(int(item))
}
}
cacheSConns := make([]string, len(ralsCfg.CacheSConns))
for i, item := range ralsCfg.CacheSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)
if item == buf {
cacheSConns[i] = strings.ReplaceAll(item, ":*caches", utils.EmptyString)
} else {
cacheSConns[i] = item
}
}
balanceRating := make(map[string]interface{})
@@ -125,11 +143,12 @@ func (ralsCfg *RalsCfg) AsMapInterface() map[string]interface{} {
utils.EnabledCfg: ralsCfg.Enabled,
utils.ThresholdSConnsCfg: ralsCfg.ThresholdSConns,
utils.StatSConnsCfg: ralsCfg.StatSConns,
utils.CacheSConnsCfg: ralsCfg.CacheSConns,
utils.CacheSConnsCfg: cacheSConns,
utils.RpSubjectPrefixMatchingCfg: ralsCfg.RpSubjectPrefixMatching,
utils.RemoveExpiredCfg: ralsCfg.RemoveExpired,
utils.MaxComputedUsageCfg: maxComputed,
utils.BalanceRatingSubjectCfg: balanceRating,
utils.MaxIncrementsCfg: ralsCfg.MaxIncrements,
utils.Dynaprepaid_actionplansCfg: ralsCfg.DynaprepaidActionPlans,
}
}

View File

@@ -75,3 +75,61 @@ func TestRalsCfgFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(ralscfg))
}
}
func TestRalsCfgAsMapInterface(t *testing.T) {
var ralscfg RalsCfg
cfgJSONStr := `{
"rals": {
"enabled": false,
"thresholds_conns": [],
"stats_conns": [],
"caches_conns":["*internal"],
"rp_subject_prefix_matching": false,
"remove_expired":true,
"max_computed_usage": {
"*any": "189h",
"*voice": "72h",
"*data": "107374182400",
"*sms": "10000",
"*mms": "10000"
},
"max_increments": 1000000,
"balance_rating_subject":{
"*any": "*zero1ns",
"*voice": "*zero1s"
},
"dynaprepaid_actionplans": [],
},
}`
eMap := map[string]interface{}{
"enabled": false,
"thresholds_conns": []string{},
"stats_conns": []string{},
"caches_conns": []string{"*internal"},
"rp_subject_prefix_matching": false,
"remove_expired": true,
"max_computed_usage": map[string]interface{}{
"*any": "189h0m0s",
"*voice": "72h0m0s",
"*data": "107374182400",
"*sms": "10000",
"*mms": "10000",
},
"max_increments": 1000000,
"balance_rating_subject": map[string]interface{}{
"*any": "*zero1ns",
"*voice": "*zero1s",
},
"dynaprepaid_actionplans": []string{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnRalsCfg, err := jsnCfg.RalsJsonCfg(); err != nil {
t.Error(err)
} else if err = ralscfg.loadFromJsonCfg(jsnRalsCfg); err != nil {
t.Error(err)
} else if rcv := ralscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -95,6 +95,7 @@ func (dbcfg *StorDbCfg) loadFromJsonCfg(jsnDbCfg *DbJsonCfg) (err error) {
dbcfg.SSLMode = *jsnDbCfg.Sslmode
}
if jsnDbCfg.Items != nil {
dbcfg.Items = make(map[string]*ItemOpt)
for kJsn, vJsn := range *jsnDbCfg.Items {
val := new(ItemOpt)
if err := val.loadFromJsonCfg(vJsn); err != nil {
@@ -131,11 +132,16 @@ func (dbcfg *StorDbCfg) AsMapInterface() map[string]interface{} {
for key, item := range dbcfg.Items {
items[key] = item.AsMapInterface()
}
var queryTimeout string = "0"
if dbcfg.QueryTimeout != 0 {
queryTimeout = dbcfg.QueryTimeout.String()
}
dbPort, _ := strconv.Atoi(dbcfg.Port)
return map[string]interface{}{
utils.TypeCfg: dbcfg.Type,
utils.TypeCfg: utils.Meta + dbcfg.Type,
utils.HostCfg: dbcfg.Host,
utils.PortCfg: dbcfg.Port,
utils.PortCfg: dbPort,
utils.NameCfg: dbcfg.Name,
utils.UserCfg: dbcfg.User,
utils.PasswordCfg: dbcfg.Password,
@@ -144,7 +150,7 @@ func (dbcfg *StorDbCfg) AsMapInterface() map[string]interface{} {
utils.ConnMaxLifetimeCfg: dbcfg.ConnMaxLifetime,
utils.StringIndexedFieldsCfg: dbcfg.StringIndexedFields,
utils.PrefixIndexedFieldsCfg: dbcfg.PrefixIndexedFields,
utils.QueryTimeoutCfg: dbcfg.QueryTimeout,
utils.QueryTimeoutCfg: queryTimeout,
utils.SSLModeCfg: dbcfg.SSLMode,
utils.ItemsCfg: items,
}

View File

@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
"github.com/cgrates/cgrates/utils"
)
func TestStoreDbCfgloadFromJsonCfg(t *testing.T) {
@@ -130,3 +132,57 @@ func TestStoreDbCfgloadFromJsonCfgPort(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, dbcfg)
}
}
func TestStorDbCfgAsMapInterface(t *testing.T) {
var dbcfg StorDbCfg
cfgJSONStr := `{
"stor_db": {
"db_type": "*mysql",
"db_host": "127.0.0.1",
"db_port": -1,
"db_name": "cgrates",
"db_user": "cgrates",
"db_password": "",
"max_open_conns": 100,
"max_idle_conns": 10,
"conn_max_lifetime": 0,
"string_indexed_fields": [],
"prefix_indexed_fields":[],
"query_timeout":"10s",
"sslmode":"disable",
"items":{
"session_costs": {"limit": -1, "ttl": "", "static_ttl": false},
"cdrs": {"limit": -1, "ttl": "", "static_ttl": false},
},
},
}`
eMap := map[string]interface{}{
"db_type": "*mysql",
"db_host": "127.0.0.1",
"db_port": 3306,
"db_name": "cgrates",
"db_user": "cgrates",
"db_password": "",
"max_open_conns": 100,
"max_idle_conns": 10,
"conn_max_lifetime": 0,
"string_indexed_fields": []string{},
"prefix_indexed_fields": []string{},
"query_timeout": "10s",
"sslmode": "disable",
"items": map[string]interface{}{
"session_costs": map[string]interface{}{"limit": -1, "ttl": "", "static_ttl": false, "remote": false, "replicate": false},
"cdrs": map[string]interface{}{"limit": -1, "ttl": "", "static_ttl": false, "remote": false, "replicate": false},
},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnStoreDbCfg, err := jsnCfg.DbJsonCfg(STORDB_JSN); err != nil {
t.Error(err)
} else if err = dbcfg.loadFromJsonCfg(jsnStoreDbCfg); err != nil {
t.Error(err)
} else if rcv := dbcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
"github.com/cgrates/cgrates/utils"
)
func TestTlsCfgloadFromJsonCfg(t *testing.T) {
@@ -65,3 +67,67 @@ func TestTlsCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, tlscfg)
}
}
func TestTlsCfgAsMapInterface(t *testing.T) {
var tlscfg TlsCfg
cfgJSONStr := ` {
"tls": {
"server_certificate" : "",
"server_key":"",
"client_certificate" : "",
"client_key":"",
"ca_certificate":"",
"server_policy":4,
"server_name":"",
},
}`
eMap := map[string]interface{}{
"server_certificate": "",
"server_key": "",
"client_certificate": "",
"client_key": "",
"ca_certificate": "",
"server_policy": 4,
"server_name": "",
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsntlsCfg, err := jsnCfg.TlsCfgJson(); err != nil {
t.Error(err)
} else if err = tlscfg.loadFromJsonCfg(jsntlsCfg); err != nil {
t.Error(err)
} else if rcv := tlscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected: %+v,\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = ` {
"tls":{
"server_certificate" : "path/To/Server/Cert",
"server_key":"path/To/Server/Key",
"client_certificate" : "path/To/Client/Cert",
"client_key":"path/To/Client/Key",
"ca_certificate":"path/To/CA/Cert",
"server_name":"TestServerName",
"server_policy":3,
},
}`
eMap = map[string]interface{}{
"server_certificate": "path/To/Server/Cert",
"server_key": "path/To/Server/Key",
"client_certificate": "path/To/Client/Cert",
"client_key": "path/To/Client/Key",
"ca_certificate": "path/To/CA/Cert",
"server_name": "TestServerName",
"server_policy": 3,
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsntlsCfg, err := jsnCfg.TlsCfgJson(); err != nil {
t.Error(err)
} else if err = tlscfg.loadFromJsonCfg(jsntlsCfg); err != nil {
t.Error(err)
} else if rcv := tlscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("Expected: %+v,\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -1890,15 +1890,16 @@ const (
TpOutDirCfg = "tp_out_dir"
DataCfg = "data"
DefaultRatioCfg = "default_ratio"
ReadersCfg = "readers"
PoolSize = "poolSize"
Conns = "conns"
FilenameCfg = "file_name"
RequestPayloadCfg = "request_payload"
ReplyPayloadCfg = "reply_payload"
TransportCfg = "transport"
StrategyCfg = "strategy"
DefaultRatioCfg = "default_ratio"
ReadersCfg = "readers"
PoolSize = "poolSize"
Conns = "conns"
FilenameCfg = "file_name"
RequestPayloadCfg = "request_payload"
ReplyPayloadCfg = "reply_payload"
TransportCfg = "transport"
StrategyCfg = "strategy"
Dynaprepaid_actionplansCfg = "dynaprepaid_actionplans"
)
// FC Template