From a643c315679403d54f9c930a7ff5fa7fa43d429c Mon Sep 17 00:00:00 2001 From: DanB Date: Mon, 16 Jan 2017 19:40:39 +0100 Subject: [PATCH] StorageMongo.RemoveAlias not returning not found, integration test fixes --- engine/onstor_it_test.go | 60 ++++++++++++++++++---------------- engine/storage_mongo_datadb.go | 22 ++++++++----- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index fa67eb4fa..81866fb66 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -76,7 +76,7 @@ var sTestsOnStorIT = []func(t *testing.T){ testOnStorITCRUDAccountActionPlans, testOnStorITCRUDAccount, testOnStorITCRUDCdrStatsQueue, - //FixMe testOnStorITCRUDSubscribers, + testOnStorITCRUDSubscribers, testOnStorITCRUDUser, testOnStorITCRUDAlias, testOnStorITCRUDReverseAlias, @@ -1262,7 +1262,12 @@ func testOnStorITCRUDAccount(t *testing.T) { func testOnStorITCRUDCdrStatsQueue(t *testing.T) { sq := &StatsQueue{ conf: &CdrStats{Id: "TTT"}, - Cdrs: []*QCdr{&QCdr{Cost: 9.0}}, + Cdrs: []*QCdr{ + &QCdr{Cost: 9.0, + SetupTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local(), + AnswerTime: time.Date(2012, 1, 1, 0, 0, 10, 0, time.UTC).Local(), + EventTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local(), + }}, } if _, rcvErr := onStor.GetCdrStatsQueue(sq.GetId()); rcvErr != utils.ErrNotFound { t.Error(rcvErr) @@ -1272,41 +1277,38 @@ func testOnStorITCRUDCdrStatsQueue(t *testing.T) { } if rcv, err := onStor.GetCdrStatsQueue(sq.GetId()); err != nil { t.Error(err) - } else if !reflect.DeepEqual(sq.Cdrs[0].Cost, rcv.Cdrs[0].Cost) { - t.Errorf("Expecting: %v, received: %v", sq.Cdrs[0].Cost, rcv.Cdrs[0].Cost) + } else if !reflect.DeepEqual(sq.Cdrs, rcv.Cdrs) { + t.Errorf("Expecting: %v, received: %v", sq.Cdrs, rcv.Cdrs) } - // FixMe else if !reflect.DeepEqual(sq.conf.Id, rcv.conf.Id) { - // t.Errorf("Expecting: %v, received: %v", sq.conf.Id, rcv.conf.Id) - // }panic: runtime error: invalid memory address or nil pointer dereference [recovered] - // panic: runtime error: invalid memory address or nil pointer dereference } -/*FixMe func testOnStorITCRUDSubscribers(t *testing.T) { - time, _ := time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local(), - rsr := utils.ParseRSRFieldsMustCompile("^*default", utils.INFIELD_SEP) - sub := &SubscriberData{time, rsr} - if _, rcvErr := onStor.GetSubscribers(); rcvErr != utils.ErrNotFound { - t.Error(rcvErr) // + if sbs, err := onStor.GetSubscribers(); err != nil { + t.Error(err) + } else if len(sbs) != 0 { + t.Errorf("Received subscribers: %+v", sbs) } - if err := onStor.SetSubscriber(utils.NonTransactional, sub); err != nil { + sbsc := &SubscriberData{ + ExpTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC).Local(), + Filters: utils.ParseRSRFieldsMustCompile("^*default", utils.INFIELD_SEP)} + sbscID := "testOnStorITCRUDSubscribers" + if err := onStor.SetSubscriber(sbscID, sbsc); err != nil { t.Error(err) } if rcv, err := onStor.GetSubscribers(); err != nil { t.Error(err) - } else if !reflect.DeepEqual(sub.ExpTime, rcv[""].ExpTime) { - t.Errorf("Expecting: %v, received: %v", sub.ExpTime, rcv[""].ExpTime) - } else if !reflect.DeepEqual(*sub.Filters[0], *rcv[""].Filters[0]) { - t.Errorf("Expecting: %v, received: %v", *sub.Filters[0], *rcv[""].Filters[0])//1321: Expecting: {*default [] *default []}, received: {*default [] []} + } else if !reflect.DeepEqual(sbsc.ExpTime, rcv[sbscID].ExpTime) { // Test just ExpTime since RSRField is more complex behind + t.Errorf("Expecting: %v, received: %v", sbsc, rcv[sbscID]) } - if err := onStor.RemoveSubscriber(utils.NonTransactional); err != nil { + if err := onStor.RemoveSubscriber(sbscID); err != nil { t.Error(err) } - if _, rcvErr := onStor.GetSubscribers(); rcvErr != utils.ErrNotFound { - t.Error(rcvErr)// + if sbs, err := onStor.GetSubscribers(); err != nil { + t.Error(err) + } else if len(sbs) != 0 { + t.Errorf("Received subscribers: %+v", sbs) } } -*/ func testOnStorITCRUDUser(t *testing.T) { usr := &UserProfile{ Tenant: "test", @@ -1381,12 +1383,12 @@ func testOnStorITCRUDAlias(t *testing.T) { } else if !reflect.DeepEqual(als, rcv) { t.Errorf("Expecting: %v, received: %v", als, rcv) } - //FixMe if err := onStor.RemoveAlias(als.GetId(), utils.NonTransactional); err != nil { - // t.Error(err) - // } - // if _, rcvErr := onStor.GetAlias(als.GetId(), true, utils.NonTransactional); rcvErr != utils.ErrNotFound { - // t.Error(rcvErr) - // } + if err := onStor.RemoveAlias(als.GetId(), utils.NonTransactional); err != nil { + t.Error(err) + } + if _, rcvErr := onStor.GetAlias(als.GetId(), true, utils.NonTransactional); rcvErr != utils.ErrNotFound { + t.Error(rcvErr) + } } func testOnStorITCRUDReverseAlias(t *testing.T) { diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index 9f2a1e770..2c271a3e8 100644 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -1330,13 +1330,16 @@ func (ms *MongoStorage) RemoveAlias(key, transactionID string) (err error) { Value AliasValues } session, col := ms.conn(colAls) - if err := col.Find(bson.M{"key": origKey}).One(&kv); err == nil { - al.Values = kv.Value - } - err = col.Remove(bson.M{"key": origKey}) - if err != nil { + if err := col.Find(bson.M{"key": origKey}).One(&kv); err != nil { + if err == mgo.ErrNotFound { + err = nil + } return err } + al.Values = kv.Value + if err = col.Remove(bson.M{"key": origKey}); err != nil { + return + } cCommit := cacheCommit(transactionID) cache.RemKey(key, cCommit, transactionID) session.Close() @@ -1347,9 +1350,12 @@ func (ms *MongoStorage) RemoveAlias(key, transactionID string) (err error) { for target, pairs := range value.Pairs { for _, alias := range pairs { rKey := alias + target + al.Context - err = col.Update(bson.M{"key": rKey}, bson.M{"$pull": bson.M{"value": tmpKey}}) - if err != nil { - return err + if err = col.Update(bson.M{"key": rKey}, bson.M{"$pull": bson.M{"value": tmpKey}}); err != nil { + if err == mgo.ErrNotFound { + err = nil // cancel the error not to be propagated with return bellow + } else { + return err + } } cache.RemKey(utils.REVERSE_ALIASES_PREFIX+rKey, cCommit, transactionID) }