More tests in sessions unit/integration

This commit is contained in:
porosnicuadrian
2021-02-03 19:04:36 +02:00
committed by Dan Christian Bogos
parent dd820450cf
commit 54ea09b6fd
2 changed files with 107 additions and 15 deletions

View File

@@ -2372,3 +2372,43 @@ aa+jqv4dwkr/FLEcN1zC76Y/IniI65fId55hVJvN3ORuzUqYEtzD3irmsw==
t.Fatal(err)
}
}
type mockConnWarnDisconnect1 struct {
*testRPCClientConnection
}
func (mk *mockConnWarnDisconnect1) Call(method string, args interface{}, rply interface{}) error {
return utils.ErrNotImplemented
}
type mockConnWarnDisconnect2 struct {
*testRPCClientConnection
}
func (mk *mockConnWarnDisconnect2) Call(method string, args interface{}, rply interface{}) error {
return utils.ErrNoActiveSession
}
func TestWarnSession(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
cfg.GeneralCfg().NodeID = "ClientConnIdtest"
data := engine.NewInternalDB(nil, nil, true)
dm := engine.NewDataManager(data, cfg.CacheCfg(), nil)
sessions := NewSessionS(cfg, dm, nil)
sTestMock := &mockConnWarnDisconnect1{}
sessions.RegisterIntBiJConn(sTestMock)
if err := sessions.warnSession("ClientConnIdtest", nil); err != nil {
t.Error(err)
}
cfg.GeneralCfg().NodeID = "ClientConnIdtest2"
sessions = NewSessionS(cfg, dm, nil)
sTestMock2 := &mockConnWarnDisconnect2{}
sessions.RegisterIntBiJConn(sTestMock2)
if err := sessions.warnSession("ClientConnIdtest2", nil); err == nil || err != utils.ErrNoActiveSession {
t.Errorf("Expected %+v, received %+v", utils.ErrNoActiveSession, err)
}
}

View File

@@ -39,7 +39,7 @@ import (
var (
sTests = []func(t *testing.T){
testDebitLoopSession2,
testDebitLoopSessionLowBalance,
testSetSTerminator,
testSetSTerminatorError,
testSetSTerminatorAutomaticTermination,
@@ -54,6 +54,7 @@ var (
testInitSessionDebitLoops,
testDebitLoopSessionErrorDebiting,
testDebitLoopSession,
testDebitLoopSessionWarningSessions,
}
)
@@ -477,6 +478,7 @@ func (sT *testMockClients) Call(method string, arg interface{}, rply interface{}
}
func testDebitSessionResponderMaxDebit(t *testing.T) {
engine.Cache.Clear(nil)
testMock1 := &testMockClients{
calls: map[string]func(args interface{}, reply interface{}) error{
utils.ResponderMaxDebit: func(args interface{}, reply interface{}) error {
@@ -720,10 +722,10 @@ func testDebitLoopSessionErrorDebiting(t *testing.T) {
}
func testDebitLoopSession(t *testing.T) {
engine.Cache.Clear(nil)
testMock1 := &testMockClients{
calls: map[string]func(args interface{}, reply interface{}) error{
utils.ResponderMaxDebit: func(args interface{}, reply interface{}) error {
callCost := new(engine.CallCost)
callCost.Timespans = []*engine.TimeSpan{
{
@@ -732,7 +734,6 @@ func testDebitLoopSession(t *testing.T) {
},
}
*(reply.(*engine.CallCost)) = *callCost
return nil
},
},
@@ -780,7 +781,8 @@ func testDebitLoopSession(t *testing.T) {
time.Sleep(2 * time.Second)
}
func testDebitLoopSession2(t *testing.T) {
func testDebitLoopSessionLowBalance(t *testing.T) {
engine.Cache.Clear(nil)
testMock1 := &testMockClients{
calls: map[string]func(args interface{}, reply interface{}) error{
utils.ResponderMaxDebit: func(args interface{}, reply interface{}) error {
@@ -793,6 +795,63 @@ func testDebitLoopSession2(t *testing.T) {
sMock <- testMock1
cfg := config.NewDefaultCGRConfig()
cfg.SessionSCfg().RALsConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs)}
cfg.SessionSCfg().MinDurLowBalance = 1 * time.Second
data := engine.NewInternalDB(nil, nil, true)
dm := engine.NewDataManager(data, cfg.CacheCfg(), nil)
connMgr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs): sMock,
})
sessions := NewSessionS(cfg, dm, connMgr)
ss := &Session{
CGRID: "CGRID",
Tenant: "cgrates.org",
EventStart: engine.NewMapEvent(nil),
debitStop: make(chan struct{}),
SRuns: []*SRun{
{
Event: map[string]interface{}{
utils.RequestType: utils.MetaPostpaid,
},
CD: &engine.CallDescriptor{
Category: "test",
LoopIndex: 12,
},
EventCost: nil, //without an EventCost
ExtraDuration: 30 * time.Millisecond,
LastUsage: 10 * time.Second,
TotalUsage: 3 * time.Minute,
NextAutoDebit: utils.TimePointer(time.Date(2020, time.April, 18, 23, 0, 0, 0, time.UTC)),
},
},
}
sessions.cgrCfg.SessionSCfg().MinDurLowBalance = 10 * time.Second
// will disconnect faster, MinDurLowBalance higher than the debit interval
go func() {
if _, err := sessions.debitLoopSession(ss, 0, 50*time.Millisecond); err != nil {
t.Error(err)
}
}()
time.Sleep(1 * time.Second)
}
func testDebitLoopSessionWarningSessions(t *testing.T) {
engine.Cache.Clear(nil)
testMock1 := &testMockClients{
calls: map[string]func(args interface{}, reply interface{}) error{
utils.ResponderMaxDebit: func(args interface{}, reply interface{}) error {
return nil
},
},
}
sMock := make(chan rpcclient.ClientConnector, 1)
sMock <- testMock1
cfg := config.NewDefaultCGRConfig()
cfg.SessionSCfg().RALsConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs)}
cfg.SessionSCfg().MinDurLowBalance = 1 * time.Second
data := engine.NewInternalDB(nil, nil, true)
dm := engine.NewDataManager(data, cfg.CacheCfg(), nil)
connMgr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
@@ -824,15 +883,8 @@ func testDebitLoopSession2(t *testing.T) {
},
}
// will disconnect faster
go func() {
if _, err := sessions.debitLoopSession(ss, 0, 2*time.Second); err != nil {
t.Error(err)
}
}()
time.Sleep(3 * time.Second)
}
func testDebitLoopSessionForceTerminate(t *testing.T) {
// will disconnect faster, MinDurLowBalance higher than the debit interval
if _, err := sessions.debitLoopSession(ss, 0, 2*time.Second); err != nil {
t.Error(err)
}
}