From 4963c70b48ef86cd01faa144fecb42a786673ede Mon Sep 17 00:00:00 2001 From: DanB Date: Mon, 2 Mar 2015 19:00:31 +0100 Subject: [PATCH] Fix paginator conversion between CDR filters, paginator tests for both mysql and postgres --- engine/storage_mysql_local_test.go | 18 ++++++++++++++++++ engine/storage_psql_local_test.go | 18 ++++++++++++++++++ utils/apitpdata.go | 11 +++++++---- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/engine/storage_mysql_local_test.go b/engine/storage_mysql_local_test.go index 1f34d9e85..e771eb243 100644 --- a/engine/storage_mysql_local_test.go +++ b/engine/storage_mysql_local_test.go @@ -574,6 +574,24 @@ func TestMySQLGetStoredCdrs(t *testing.T) { } else if count != 8 { t.Error("Unexpected count of StoredCdrs returned: ", count) } + // Limit 5 + if storedCdrs, _, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{Paginator: utils.Paginator{Limit: utils.IntPointer(5), Offset: utils.IntPointer(0)}}); err != nil { + t.Error(err.Error()) + } else if len(storedCdrs) != 5 { + t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) + } + // Offset 5 + if storedCdrs, _, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{Paginator: utils.Paginator{Limit: utils.IntPointer(5), Offset: utils.IntPointer(0)}}); err != nil { + t.Error(err.Error()) + } else if len(storedCdrs) != 5 { + t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) + } + // Offset with limit 2 + if storedCdrs, _, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{Paginator: utils.Paginator{Limit: utils.IntPointer(2), Offset: utils.IntPointer(5)}}); err != nil { + t.Error(err.Error()) + } else if len(storedCdrs) != 2 { + t.Error("Unexpected number of StoredCdrs returned: ", len(storedCdrs)) + } // Filter on cgrids if storedCdrs, _, err := mysqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}}); err != nil { diff --git a/engine/storage_psql_local_test.go b/engine/storage_psql_local_test.go index e85a287c8..c9e870345 100644 --- a/engine/storage_psql_local_test.go +++ b/engine/storage_psql_local_test.go @@ -576,6 +576,24 @@ func TestPSQLGetStoredCdrs(t *testing.T) { } else if count != 8 { t.Error("Unexpected count of StoredCdrs returned: ", count) } + // Limit 5 + if storedCdrs, _, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{Paginator: utils.Paginator{Limit: utils.IntPointer(5), Offset: utils.IntPointer(0)}}); err != nil { + t.Error(err.Error()) + } else if len(storedCdrs) != 5 { + t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) + } + // Offset 5 + if storedCdrs, _, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{Paginator: utils.Paginator{Limit: utils.IntPointer(5), Offset: utils.IntPointer(0)}}); err != nil { + t.Error(err.Error()) + } else if len(storedCdrs) != 5 { + t.Error("Unexpected number of StoredCdrs returned: ", storedCdrs) + } + // Offset with limit 2 + if storedCdrs, _, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{Paginator: utils.Paginator{Limit: utils.IntPointer(2), Offset: utils.IntPointer(5)}}); err != nil { + t.Error(err.Error()) + } else if len(storedCdrs) != 2 { + t.Error("Unexpected number of StoredCdrs returned: ", len(storedCdrs)) + } // Filter on cgrids if storedCdrs, _, err := psqlDb.GetStoredCdrs(&utils.CdrsFilter{CgrIds: []string{utils.Sha1("bbb1", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String()), utils.Sha1("bbb2", time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC).String())}}); err != nil { diff --git a/utils/apitpdata.go b/utils/apitpdata.go index 6a86c4579..24788df69 100644 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -33,11 +33,11 @@ func (tpdi TPDistinctIds) String() string { return strings.Join(tpdi, ",") } -// To paginate stuff from stordb (e.g. ids) +// Paginate stuff around items returned type Paginator struct { - Limit *int - Offset *int - SearchTerm string + Limit *int // Limit the number of items returned + Offset *int // Offset of the first item returned (eg: use Limit*Page in case of PerPage items) + SearchTerm string // Global matching pattern in items returned, partially used in some APIs } /*func (pag *Paginator) GetLimits() (low, high int) { @@ -691,6 +691,7 @@ type AttrExpFileCdrs struct { SkipErrors bool // Do not export errored CDRs SkipRated bool // Do not export rated CDRs SuppressCgrIds bool // Disable CgrIds reporting in reply/ExportedCgrIds and reply/UnexportedCgrIds + Paginator } func (self *AttrExpFileCdrs) AsCdrsFilter() (*CdrsFilter, error) { @@ -711,6 +712,7 @@ func (self *AttrExpFileCdrs) AsCdrsFilter() (*CdrsFilter, error) { RatedSubjects: self.RatedSubjects, OrderIdStart: self.OrderIdStart, OrderIdEnd: self.OrderIdEnd, + Paginator: self.Paginator, } if len(self.TimeStart) != 0 { if answerTimeStart, err := ParseTimeDetectLayout(self.TimeStart); err != nil { @@ -786,6 +788,7 @@ func (self *AttrGetCdrs) AsCdrsFilter() (*CdrsFilter, error) { RatedSubjects: self.RatedSubjects, OrderIdStart: self.OrderIdStart, OrderIdEnd: self.OrderIdEnd, + Paginator: self.Paginator, } if len(self.TimeStart) != 0 { if answerTimeStart, err := ParseTimeDetectLayout(self.TimeStart); err != nil {