From e189cfe9d15eaeca62b5e37e651949b29899c178 Mon Sep 17 00:00:00 2001 From: TeoV Date: Sun, 25 Nov 2018 06:30:15 -0500 Subject: [PATCH] In case of not populating asterisk cgr_subsystems go with defaults --- agents/asterisk_event.go | 6 +- agents/asterisk_event_test.go | 123 ++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 2 deletions(-) diff --git a/agents/asterisk_event.go b/agents/asterisk_event.go index a51986b62..735f2e430 100644 --- a/agents/asterisk_event.go +++ b/agents/asterisk_event.go @@ -276,6 +276,8 @@ func (smaEv *SMAsteriskEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) CGREvent: *cgrEv, } if smaEv.Subsystems() == utils.EmptyString { + utils.Logger.Err(fmt.Sprintf("<%s> cgr_subsystems variable is not set", + utils.AsteriskAgent)) return } args.GetMaxUsage = strings.Index(smaEv.Subsystems(), utils.MetaAccounts) != -1 @@ -300,7 +302,7 @@ func (smaEv *SMAsteriskEvent) V1InitSessionArgs(cgrEv utils.CGREvent) (args *ses if err != nil { utils.Logger.Err(fmt.Sprintf("<%s> event: %s don't have cgr_subsystems variable", utils.AsteriskAgent, utils.ToJSON(cgrEv))) - return nil + return } args.InitSession = strings.Index(subsystems, utils.MetaAccounts) != -1 args.AllocateResources = strings.Index(subsystems, utils.MetaResources) != -1 @@ -319,7 +321,7 @@ func (smaEv *SMAsteriskEvent) V1TerminateSessionArgs(cgrEv utils.CGREvent) (args if err != nil { utils.Logger.Err(fmt.Sprintf("<%s> event: %s don't have cgr_subsystems variable", utils.AsteriskAgent, utils.ToJSON(cgrEv))) - return nil + return } args.TerminateSession = strings.Index(subsystems, utils.MetaAccounts) != -1 args.ReleaseResources = strings.Index(subsystems, utils.MetaResources) != -1 diff --git a/agents/asterisk_event_test.go b/agents/asterisk_event_test.go index ba31b3ae6..329dabf4b 100644 --- a/agents/asterisk_event_test.go +++ b/agents/asterisk_event_test.go @@ -21,6 +21,10 @@ import ( "encoding/json" "reflect" "testing" + + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/sessions" + "github.com/cgrates/cgrates/utils" ) var ( @@ -325,3 +329,122 @@ func TestSMAEventExtraParameters(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", expExtraParams, extraParams) } } + +func TestSMAEventV1AuthorizeArgs(t *testing.T) { + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone + var ev map[string]interface{} + if err := json.Unmarshal([]byte(stasisStart), &ev); err != nil { + t.Error(err) + } + smaEv := NewSMAsteriskEvent(ev, "127.0.0.1") + cgrEv, err := smaEv.AsCGREvent(timezone) + if err != nil { + t.Error(err) + } + exp := &sessions.V1AuthorizeArgs{ + GetMaxUsage: true, + CGREvent: *cgrEv, + } + if rcv := smaEv.V1AuthorizeArgs(); !reflect.DeepEqual(exp.GetMaxUsage, rcv.GetMaxUsage) { + t.Errorf("Expecting: %+v, received: %+v", exp.GetMaxUsage, rcv.GetMaxUsage) + } + + stasisStart2 := `{"type":"StasisStart","timestamp":"2018-11-25T05:03:26.464-0500","args":["cgr_reqtype=*prepaid","cgr_supplier=supplier1","cgr_subsystems=*accounts*attributes*resources*stats*suppliers*thresholds"],"channel":{"id":"1543140206.0","dialplan":{"context":"internal","exten":"1002","priority":4},"caller":{"name":"","number":"1001"},"name":"PJSIP/1001-00000000","state":"Ring","connected":{"name":"","number":""},"language":"en","accountcode":"","creationtime":"2018-11-25T05:03:26.463-0500"},"asterisk_id":"08:00:27:b7:b8:1f","application":"cgrates_auth"}` + var ev2 map[string]interface{} + if err := json.Unmarshal([]byte(stasisStart2), &ev2); err != nil { + t.Error(err) + } + smaEv2 := NewSMAsteriskEvent(ev2, "127.0.0.1") + smaEv2.parseStasisArgs() + cgrEv2, err := smaEv2.AsCGREvent(timezone) + if err != nil { + t.Error(err) + } + + exp2 := &sessions.V1AuthorizeArgs{ + GetAttributes: true, + AuthorizeResources: true, + GetMaxUsage: true, + ProcessThresholds: true, + ProcessStats: true, + GetSuppliers: true, + CGREvent: *cgrEv2, + } + if rcv := smaEv2.V1AuthorizeArgs(); !reflect.DeepEqual(exp2.GetAttributes, rcv.GetAttributes) { + t.Errorf("Expecting: %+v, received: %+v", exp2.GetAttributes, rcv.GetAttributes) + } else if !reflect.DeepEqual(exp2.AuthorizeResources, rcv.AuthorizeResources) { + t.Errorf("Expecting: %+v, received: %+v", exp2.AuthorizeResources, rcv.AuthorizeResources) + } else if !reflect.DeepEqual(exp2.GetMaxUsage, rcv.GetMaxUsage) { + t.Errorf("Expecting: %+v, received: %+v", exp2.GetMaxUsage, rcv.GetMaxUsage) + } else if !reflect.DeepEqual(exp2.ProcessThresholds, rcv.ProcessThresholds) { + t.Errorf("Expecting: %+v, received: %+v", exp2.ProcessThresholds, rcv.ProcessThresholds) + } else if !reflect.DeepEqual(exp2.ProcessStats, rcv.ProcessStats) { + t.Errorf("Expecting: %+v, received: %+v", exp2.ProcessStats, rcv.ProcessStats) + } +} + +func TestSMAEventV1InitSessionArgs(t *testing.T) { + cgrEv := utils.CGREvent{ + Tenant: "cgrates.org", + ID: "AsteriskEvent", + Event: map[string]interface{}{ + "MissingCGRSubsustems": "", + }, + } + exp := &sessions.V1InitSessionArgs{ + InitSession: true, + CGREvent: cgrEv, + } + var ev map[string]interface{} + if err := json.Unmarshal([]byte(stasisStart), &ev); err != nil { + t.Error(err) + } + smaEv := NewSMAsteriskEvent(ev, "127.0.0.1") + if rcv := smaEv.V1InitSessionArgs(cgrEv); !reflect.DeepEqual(exp, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rcv)) + } + + exp2 := &sessions.V1InitSessionArgs{ + GetAttributes: true, + AllocateResources: true, + InitSession: true, + CGREvent: cgrEv, + } + cgrEv.Event[utils.CGRSubsystems] = "*resources*accounts*attributes" + if rcv := smaEv.V1InitSessionArgs(cgrEv); !reflect.DeepEqual(exp2, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp2), utils.ToJSON(rcv)) + } +} + +func TestSMAEventV1TerminateSessionArgs(t *testing.T) { + cgrEv := utils.CGREvent{ + Tenant: "cgrates.org", + ID: "AsteriskEvent", + Event: map[string]interface{}{ + "MissingCGRSubsustems": "", + }, + } + exp := &sessions.V1TerminateSessionArgs{ + TerminateSession: true, + CGREvent: cgrEv, + } + var ev map[string]interface{} + if err := json.Unmarshal([]byte(stasisStart), &ev); err != nil { + t.Error(err) + } + smaEv := NewSMAsteriskEvent(ev, "127.0.0.1") + if rcv := smaEv.V1TerminateSessionArgs(cgrEv); !reflect.DeepEqual(exp, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp), utils.ToJSON(rcv)) + } + + exp2 := &sessions.V1TerminateSessionArgs{ + TerminateSession: true, + ReleaseResources: true, + ProcessStats: true, + CGREvent: cgrEv, + } + cgrEv.Event[utils.CGRSubsystems] = "*resources*accounts*stats" + if rcv := smaEv.V1TerminateSessionArgs(cgrEv); !reflect.DeepEqual(exp2, rcv) { + t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(exp2), utils.ToJSON(rcv)) + } +}