You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ra...@apache.org on 2022/06/30 17:42:52 UTC
[trafficcontrol] branch master updated: Refactor stats summary tests (#6926)
This is an automated email from the ASF dual-hosted git repository.
rawlin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git
The following commit(s) were added to refs/heads/master by this push:
new f778ba1c5d Refactor stats summary tests (#6926)
f778ba1c5d is described below
commit f778ba1c5dda9598525c7e89378804a05d195522
Author: Eric Holguin <14...@users.noreply.github.com>
AuthorDate: Thu Jun 30 11:42:46 2022 -0600
Refactor stats summary tests (#6926)
---
traffic_ops/testing/api/v3/stats_summary_test.go | 271 ++++++++++-----------
traffic_ops/testing/api/v4/stats_summary_test.go | 292 ++++++++++-------------
2 files changed, 262 insertions(+), 301 deletions(-)
diff --git a/traffic_ops/testing/api/v3/stats_summary_test.go b/traffic_ops/testing/api/v3/stats_summary_test.go
index 6f64a4b015..d9f798b54c 100644
--- a/traffic_ops/testing/api/v3/stats_summary_test.go
+++ b/traffic_ops/testing/api/v3/stats_summary_test.go
@@ -16,163 +16,166 @@ package v3
*/
import (
- "fmt"
+ "encoding/json"
+ "net/http"
+ "net/url"
"testing"
"time"
"github.com/apache/trafficcontrol/lib/go-tc"
- "github.com/apache/trafficcontrol/lib/go-util"
+ "github.com/apache/trafficcontrol/traffic_ops/testing/api/assert"
+ "github.com/apache/trafficcontrol/traffic_ops/testing/api/utils"
+ "github.com/apache/trafficcontrol/traffic_ops/toclientlib"
)
-var (
- testStatsSummaries []tc.StatsSummary
- latestTime time.Time
-)
+var latestTime time.Time
func TestStatsSummary(t *testing.T) {
- testStatsSummaries = []tc.StatsSummary{}
- latestTime = time.Now().Truncate(time.Second).UTC()
- CreateTestStatsSummaries(t)
- GetTestStatsSummaries(t)
- GetTestStatsSummariesLastUpdated(t)
-}
-func CreateTestStatsSummaries(t *testing.T) {
- tmpTime := latestTime
- for _, ss := range testData.StatsSummaries {
- ss.SummaryTime = tmpTime
- _, _, err := TOSession.CreateSummaryStats(ss)
- if err != nil {
- t.Errorf("creating stats_summary %v: %v", ss.StatName, err)
- }
-
- tmpTime = tmpTime.AddDate(0, 0, -1)
+ CreateTestStatsSummaries(t)
- testStatsSummaries = append(testStatsSummaries, ss)
+ methodTests := utils.V3TestCase{
+ "GET": {
+ "OK when VALID request": {
+ ClientSession: TOSession,
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK)),
+ },
+ "OK when VALID STATNAME parameter": {
+ ClientSession: TOSession,
+ RequestParams: url.Values{"statName": {"daily_bytesserved"}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseLengthGreaterOrEqual(1),
+ validateStatsSummaryFields(map[string]interface{}{"StatName": "daily_bytesserved"})),
+ },
+ "OK when VALID CDNNAME parameter": {
+ ClientSession: TOSession,
+ RequestParams: url.Values{"cdnName": {"cdn1"}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseLengthGreaterOrEqual(2),
+ validateStatsSummaryFields(map[string]interface{}{"CDNName": "cdn1"})),
+ },
+ "OK when VALID DELIVERYSERVICENAME parameter": {
+ ClientSession: TOSession,
+ RequestParams: url.Values{"deliveryServiceName": {"all"}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseLengthGreaterOrEqual(2),
+ validateStatsSummaryFields(map[string]interface{}{"DeliveryService": "all"})),
+ },
+ "OK when VALID LASTSUMMARYDATE parameter": {
+ ClientSession: TOSession,
+ RequestParams: url.Values{"statName": {"daily_bytesserved"}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), validateStatsSummaryLastUpdatedField(latestTime)),
+ },
+ "EMPTY RESPONSE when NON-EXISTENT STATNAME": {
+ ClientSession: TOSession,
+ RequestParams: url.Values{"statName": {"bogus"}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseHasLength(0)),
+ },
+ "EMPTY RESPONSE when NON-EXISTENT DELIVERYSERVICENAME": {
+ ClientSession: TOSession,
+ RequestParams: url.Values{"deliveryServiceName": {"bogus"}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseHasLength(0)),
+ },
+ "EMPTY RESPONSE when NON-EXISTENT CDNNAME": {
+ ClientSession: TOSession,
+ RequestParams: url.Values{"cdnName": {"bogus"}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseHasLength(0)),
+ },
+ },
}
-}
-func GetTestStatsSummaries(t *testing.T) {
- var testCases = []struct {
- description string
- stat *string
- cdn *string
- ds *string
- expectedStatsSummaries []tc.StatsSummary
- }{
- {
- description: "get all summary stats",
- expectedStatsSummaries: testStatsSummaries,
- },
- {
- description: "non-existant stat name",
- stat: util.StrPtr("bogus"),
- },
- {
- description: "non-existant ds name",
- ds: util.StrPtr("bogus"),
- },
- {
- description: "non-existant cdn name",
- cdn: util.StrPtr("bogus"),
- },
- {
- description: "get stats summary by stat name",
- stat: util.StrPtr("daily_bytesserved"),
- expectedStatsSummaries: func() []tc.StatsSummary {
- statsSummaries := []tc.StatsSummary{}
- for _, ss := range testStatsSummaries {
- if *ss.StatName == "daily_bytesserved" {
- statsSummaries = append(statsSummaries, ss)
- }
+ for method, testCases := range methodTests {
+ t.Run(method, func(t *testing.T) {
+ for name, testCase := range testCases {
+ statsSummary := tc.StatsSummary{}
+ var cdn *string
+ var statName *string
+ var deliveryService *string
+
+ if val, ok := testCase.RequestParams["statName"]; ok {
+ statName = &val[0]
+ }
+ if val, ok := testCase.RequestParams["cdnName"]; ok {
+ cdn = &val[0]
+ }
+ if val, ok := testCase.RequestParams["deliveryServiceName"]; ok {
+ deliveryService = &val[0]
}
- return statsSummaries
- }(),
- },
- {
- description: "get stats summary by cdn name",
- cdn: util.StrPtr("cdn1"),
- expectedStatsSummaries: testStatsSummaries,
- },
- {
- description: "get stats summary by ds name",
- ds: util.StrPtr("all"),
- expectedStatsSummaries: testStatsSummaries,
- },
- }
- for _, tc := range testCases {
- t.Run(tc.description, func(t *testing.T) {
- tsr, _, err := TOSession.GetSummaryStats(tc.cdn, tc.ds, tc.stat)
- if err != nil {
- t.Fatalf("received unexpected error %v on GET to stats_summary", err)
- }
- if len(tc.expectedStatsSummaries) == 0 && len(tsr.Response) != 0 {
- t.Fatalf("expected to recieve no stats summaries but received %v", len(tsr.Response))
- }
- for _, ess := range tc.expectedStatsSummaries {
- found := false
- for _, ss := range tsr.Response {
- if *ess.StatName == *ss.StatName && ess.SummaryTime.Equal(ss.SummaryTime) {
- found = true
- break
- }
+ if testCase.RequestBody != nil {
+ dat, err := json.Marshal(testCase.RequestBody)
+ assert.NoError(t, err, "Error occurred when marshalling request body: %v", err)
+ err = json.Unmarshal(dat, &statsSummary)
+ assert.NoError(t, err, "Error occurred when unmarshalling request body: %v", err)
}
- if !found {
- t.Errorf("expected to find stat %v in stats summary response", *ess.StatName)
+
+ switch method {
+ case "GET":
+ t.Run(name, func(t *testing.T) {
+ if name == "OK when VALID LASTSUMMARYDATE parameter" {
+ resp, reqInf, err := testCase.ClientSession.GetSummaryStatsLastUpdated(statName)
+ for _, check := range testCase.Expectations {
+ check(t, reqInf, resp.Response, tc.Alerts{}, err)
+ }
+ } else {
+ resp, reqInf, err := testCase.ClientSession.GetSummaryStats(cdn, deliveryService, statName)
+ for _, check := range testCase.Expectations {
+ check(t, reqInf, resp.Response, resp.Alerts, err)
+ }
+ }
+ })
+ case "POST":
+ t.Run(name, func(t *testing.T) {
+ alerts, reqInf, err := testCase.ClientSession.CreateSummaryStats(statsSummary)
+ for _, check := range testCase.Expectations {
+ check(t, reqInf, nil, alerts, err)
+ }
+ })
}
}
})
}
}
-func GetTestStatsSummariesLastUpdated(t *testing.T) {
- type testCase struct {
- description string
- stat *string
- errExpected bool
- expectedTimestamp time.Time
- nullTimeStamp bool
- }
- testCases := []testCase{
- testCase{
- description: "latest updated timestamp",
- stat: nil,
- errExpected: false,
- expectedTimestamp: latestTime,
- },
- testCase{
- description: "non-existant stat name",
- stat: util.StrPtr("bogus"),
- errExpected: false,
- nullTimeStamp: true,
- },
- }
- for _, ss := range testStatsSummaries {
- testCases = append(testCases, testCase{
- description: fmt.Sprintf("latest updated timestamp for - %v", *ss.StatName),
- stat: ss.StatName,
- errExpected: false,
- expectedTimestamp: ss.SummaryTime,
- })
+func validateStatsSummaryFields(expectedResp map[string]interface{}) utils.CkReqFunc {
+ return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ tc.Alerts, _ error) {
+ assert.RequireNotNil(t, resp, "Expected Stats Summary response to not be nil.")
+ statsSummaryResp := resp.([]tc.StatsSummary)
+ for field, expected := range expectedResp {
+ for _, statsSummary := range statsSummaryResp {
+ switch field {
+ case "CDNName":
+ assert.RequireNotNil(t, statsSummary.CDNName, "Expected CDNName to not be nil.")
+ assert.Equal(t, expected, *statsSummary.CDNName, "Expected CDNName to be %v, but got %s", expected, *statsSummary.CDNName)
+ case "DeliveryService":
+ assert.RequireNotNil(t, statsSummary.DeliveryService, "Expected DeliveryService to not be nil.")
+ assert.Equal(t, expected, *statsSummary.DeliveryService, "Expected DeliveryService to be %v, but got %s", expected, *statsSummary.DeliveryService)
+ case "StatName":
+ assert.RequireNotNil(t, statsSummary.StatName, "Expected StatName to not be nil.")
+ assert.Equal(t, expected, *statsSummary.StatName, "Expected StatName to be %v, but got %s", expected, *statsSummary.StatName)
+ case "SummaryTime":
+ assert.Equal(t, expected, statsSummary.SummaryTime, "Expected SummaryTime to be %v, but got %v", expected, statsSummary.SummaryTime)
+ default:
+ t.Errorf("Expected field: %v, does not exist in response", field)
+ }
+ }
+ }
}
+}
- for _, tc := range testCases {
- t.Run(tc.description, func(t *testing.T) {
- tsr, _, err := TOSession.GetSummaryStatsLastUpdated(tc.stat)
- if tc.errExpected && err == nil {
- t.Fatalf("expected to get error on getting stats_summary latest updated timestamp but received nil")
- }
+func validateStatsSummaryLastUpdatedField(expectedTime time.Time) utils.CkReqFunc {
+ return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ tc.Alerts, _ error) {
+ assert.RequireNotNil(t, resp, "Expected StatsSummaryLastUpdated response to not be nil.")
+ statsSummaryLastUpdated := resp.(tc.StatsSummaryLastUpdated)
+ assert.RequireNotNil(t, statsSummaryLastUpdated.SummaryTime, "Expected SummaryTime to not be nil.")
+ assert.Equal(t, expectedTime, *statsSummaryLastUpdated.SummaryTime, "Expected SummaryTime to be %v, but got %v", expectedTime, *statsSummaryLastUpdated.SummaryTime)
+ }
+}
- if !tc.errExpected && err != nil {
- t.Fatalf("received unexpected error getting stats_summary latest updated timestamp: %v", err)
- }
- if !tc.errExpected && tc.nullTimeStamp && tsr.Response.SummaryTime != nil {
- t.Fatalf("expected to get null on latest timestamp but instead got %v", tsr.Response.SummaryTime)
- }
- if !tc.errExpected && !tc.nullTimeStamp && !tsr.Response.SummaryTime.Equal(tc.expectedTimestamp) {
- t.Fatalf("received latest timestamp %v does not match up to expected timestamp %v", tsr.Response.SummaryTime, tc.expectedTimestamp)
- }
- })
+// Note that these stats summaries are never cleaned up, and will be left in
+// the TODB after the tests complete
+func CreateTestStatsSummaries(t *testing.T) {
+ for _, ss := range testData.StatsSummaries {
+ latestTime = time.Now().Truncate(time.Second)
+ ss.SummaryTime = latestTime
+ alerts, _, err := TOSession.CreateSummaryStats(ss)
+ assert.RequireNoError(t, err, "Creating Stats Summary for stat '%s': %v - alerts: %+v", *ss.StatName, err, alerts.Alerts)
}
}
diff --git a/traffic_ops/testing/api/v4/stats_summary_test.go b/traffic_ops/testing/api/v4/stats_summary_test.go
index 9a6c79854b..db718ecdd1 100644
--- a/traffic_ops/testing/api/v4/stats_summary_test.go
+++ b/traffic_ops/testing/api/v4/stats_summary_test.go
@@ -16,196 +16,154 @@ package v4
*/
import (
- "fmt"
+ "encoding/json"
+ "net/http"
+ "net/url"
"testing"
"time"
"github.com/apache/trafficcontrol/lib/go-tc"
- "github.com/apache/trafficcontrol/lib/go-util"
+ "github.com/apache/trafficcontrol/traffic_ops/testing/api/assert"
+ "github.com/apache/trafficcontrol/traffic_ops/testing/api/utils"
+ "github.com/apache/trafficcontrol/traffic_ops/toclientlib"
client "github.com/apache/trafficcontrol/traffic_ops/v4-client"
)
-var (
- testStatsSummaries []tc.StatsSummary
- latestTime time.Time
-)
+var latestTime time.Time
func TestStatsSummary(t *testing.T) {
- testStatsSummaries = []tc.StatsSummary{}
- latestTime = time.Now().Truncate(time.Second).UTC()
- CreateTestStatsSummaries(t)
- GetTestStatsSummaries(t)
- GetTestStatsSummariesLastUpdated(t)
-}
-// Note that these stats summaries are never cleaned up, and will be left in
-// the TODB after the tests complete
-func CreateTestStatsSummaries(t *testing.T) {
- tmpTime := latestTime
- for _, ss := range testData.StatsSummaries {
- ss.SummaryTime = tmpTime
- alerts, _, err := TOSession.CreateSummaryStats(ss, client.RequestOptions{})
- if err != nil {
- t.Errorf("creating Stats Summary for stat '%s': %v - alerts: %+v", *ss.StatName, err, alerts.Alerts)
- }
-
- tmpTime = tmpTime.AddDate(0, 0, -1)
-
- testStatsSummaries = append(testStatsSummaries, ss)
- }
-}
+ CreateTestStatsSummaries(t)
-func GetTestStatsSummaries(t *testing.T) {
- var testCases = []struct {
- description string
- stat string
- cdn string
- ds string
- expectedStatsSummaries []tc.StatsSummary
- }{
- {
- description: "get all summary stats",
- expectedStatsSummaries: testStatsSummaries,
- },
- {
- description: "non-existant stat name",
- stat: "bogus",
- },
- {
- description: "non-existant ds name",
- ds: "bogus",
- },
- {
- description: "non-existant cdn name",
- cdn: "bogus",
- },
- {
- description: "get stats summary by stat name",
- stat: "daily_bytesserved",
- expectedStatsSummaries: func() []tc.StatsSummary {
- statsSummaries := []tc.StatsSummary{}
- for _, ss := range testStatsSummaries {
- if ss.StatName == nil {
- t.Error("testing stats summaries collection contains a Stats Summary with nil StatName")
- continue
- }
- if *ss.StatName == "daily_bytesserved" {
- statsSummaries = append(statsSummaries, ss)
- }
- }
- return statsSummaries
- }(),
- },
- {
- description: "get stats summary by cdn name",
- cdn: "cdn1",
- expectedStatsSummaries: testStatsSummaries,
- },
- {
- description: "get stats summary by ds name",
- ds: "all",
- expectedStatsSummaries: testStatsSummaries,
+ methodTests := utils.V4TestCase{
+ "GET": {
+ "OK when VALID request": {
+ ClientSession: TOSession,
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK)),
+ },
+ "OK when VALID STATNAME parameter": {
+ ClientSession: TOSession,
+ RequestOpts: client.RequestOptions{QueryParameters: url.Values{"statName": {"daily_bytesserved"}}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseLengthGreaterOrEqual(1),
+ validateStatsSummaryFields(map[string]interface{}{"StatName": "daily_bytesserved"})),
+ },
+ "OK when VALID CDNNAME parameter": {
+ ClientSession: TOSession,
+ RequestOpts: client.RequestOptions{QueryParameters: url.Values{"cdnName": {"cdn1"}}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseLengthGreaterOrEqual(2),
+ validateStatsSummaryFields(map[string]interface{}{"CDNName": "cdn1"})),
+ },
+ "OK when VALID DELIVERYSERVICENAME parameter": {
+ ClientSession: TOSession,
+ RequestOpts: client.RequestOptions{QueryParameters: url.Values{"deliveryServiceName": {"all"}}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseLengthGreaterOrEqual(2),
+ validateStatsSummaryFields(map[string]interface{}{"DeliveryService": "all"})),
+ },
+ "OK when VALID LASTSUMMARYDATE parameter": {
+ ClientSession: TOSession,
+ RequestOpts: client.RequestOptions{QueryParameters: url.Values{"statName": {"daily_bytesserved"}}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), validateStatsSummaryLastUpdatedField(latestTime)),
+ },
+ "EMPTY RESPONSE when NON-EXISTENT STATNAME": {
+ ClientSession: TOSession,
+ RequestOpts: client.RequestOptions{QueryParameters: url.Values{"statName": {"bogus"}}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseHasLength(0)),
+ },
+ "EMPTY RESPONSE when NON-EXISTENT DELIVERYSERVICENAME": {
+ ClientSession: TOSession,
+ RequestOpts: client.RequestOptions{QueryParameters: url.Values{"deliveryServiceName": {"bogus"}}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseHasLength(0)),
+ },
+ "EMPTY RESPONSE when NON-EXISTENT CDNNAME": {
+ ClientSession: TOSession,
+ RequestOpts: client.RequestOptions{QueryParameters: url.Values{"cdnName": {"bogus"}}},
+ Expectations: utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), utils.ResponseHasLength(0)),
+ },
},
}
- for _, tc := range testCases {
- opts := client.NewRequestOptions()
- t.Run(tc.description, func(t *testing.T) {
- if tc.cdn != "" {
- opts.QueryParameters.Set("cdnName", tc.cdn)
- }
- if tc.ds != "" {
- opts.QueryParameters.Set("deliveryServiceName", tc.ds)
- }
- if tc.stat != "" {
- opts.QueryParameters.Set("statName", tc.stat)
- }
- tsr, _, err := TOSession.GetSummaryStats(opts)
- if err != nil {
- t.Fatalf("Unexpected error getting Stats Summary: %v - alerts: %+v", err, tsr.Alerts)
- }
- if len(tc.expectedStatsSummaries) == 0 && len(tsr.Response) != 0 {
- t.Fatalf("expected to recieve no stats summaries but received %d", len(tsr.Response))
- }
- for _, ess := range tc.expectedStatsSummaries {
- if ess.StatName == nil {
- t.Error("testing stats summaries collection contains a Stats Summary with nil StatName")
- continue
- }
- found := false
- for _, ss := range tsr.Response {
- if ss.StatName == nil {
- t.Error("Traffic Ops returned a representation for a Stats Summary with null or undefined name")
- continue
- }
- if *ess.StatName == *ss.StatName && ess.SummaryTime.Equal(ss.SummaryTime) {
- found = true
- break
- }
+ for method, testCases := range methodTests {
+ t.Run(method, func(t *testing.T) {
+ for name, testCase := range testCases {
+ statsSummary := tc.StatsSummary{}
+
+ if testCase.RequestBody != nil {
+ dat, err := json.Marshal(testCase.RequestBody)
+ assert.NoError(t, err, "Error occurred when marshalling request body: %v", err)
+ err = json.Unmarshal(dat, &statsSummary)
+ assert.NoError(t, err, "Error occurred when unmarshalling request body: %v", err)
}
- if !found {
- t.Errorf("expected to find stat '%s' in stats summary response", *ess.StatName)
+
+ switch method {
+ case "GET":
+ t.Run(name, func(t *testing.T) {
+ if name == "OK when VALID LASTSUMMARYDATE parameter" {
+ resp, reqInf, err := testCase.ClientSession.GetSummaryStatsLastUpdated(testCase.RequestOpts)
+ for _, check := range testCase.Expectations {
+ check(t, reqInf, resp.Response, resp.Alerts, err)
+ }
+ } else {
+ resp, reqInf, err := testCase.ClientSession.GetSummaryStats(testCase.RequestOpts)
+ for _, check := range testCase.Expectations {
+ check(t, reqInf, resp.Response, resp.Alerts, err)
+ }
+ }
+ })
+ case "POST":
+ t.Run(name, func(t *testing.T) {
+ alerts, reqInf, err := testCase.ClientSession.CreateSummaryStats(statsSummary, testCase.RequestOpts)
+ for _, check := range testCase.Expectations {
+ check(t, reqInf, nil, alerts, err)
+ }
+ })
}
}
})
}
}
-func GetTestStatsSummariesLastUpdated(t *testing.T) {
- type testCase struct {
- description string
- stat *string
- errExpected bool
- expectedTimestamp time.Time
- nullTimeStamp bool
- }
- testCases := []testCase{
- {
- description: "latest updated timestamp",
- stat: nil,
- errExpected: false,
- expectedTimestamp: latestTime,
- },
- {
- description: "non-existant stat name",
- stat: util.StrPtr("bogus"),
- errExpected: false,
- nullTimeStamp: true,
- },
- }
- for _, ss := range testStatsSummaries {
- if ss.StatName == nil {
- t.Error("testing stats summaries collection contains a Stats Summary with nil StatName")
- continue
+func validateStatsSummaryFields(expectedResp map[string]interface{}) utils.CkReqFunc {
+ return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ tc.Alerts, _ error) {
+ assert.RequireNotNil(t, resp, "Expected Stats Summary response to not be nil.")
+ statsSummaryResp := resp.([]tc.StatsSummary)
+ for field, expected := range expectedResp {
+ for _, statsSummary := range statsSummaryResp {
+ switch field {
+ case "CDNName":
+ assert.RequireNotNil(t, statsSummary.CDNName, "Expected CDNName to not be nil.")
+ assert.Equal(t, expected, *statsSummary.CDNName, "Expected CDNName to be %v, but got %s", expected, *statsSummary.CDNName)
+ case "DeliveryService":
+ assert.RequireNotNil(t, statsSummary.DeliveryService, "Expected DeliveryService to not be nil.")
+ assert.Equal(t, expected, *statsSummary.DeliveryService, "Expected DeliveryService to be %v, but got %s", expected, *statsSummary.DeliveryService)
+ case "StatName":
+ assert.RequireNotNil(t, statsSummary.StatName, "Expected StatName to not be nil.")
+ assert.Equal(t, expected, *statsSummary.StatName, "Expected StatName to be %v, but got %s", expected, *statsSummary.StatName)
+ case "SummaryTime":
+ assert.Equal(t, true, expected.(time.Time).Equal(statsSummary.SummaryTime), "Expected SummaryTime to be %v, but got %v", expected, statsSummary.SummaryTime)
+ default:
+ t.Errorf("Expected field: %v, does not exist in response", field)
+ }
+ }
}
- testCases = append(testCases, testCase{
- description: fmt.Sprintf("latest updated timestamp for - %v", *ss.StatName),
- stat: ss.StatName,
- errExpected: false,
- expectedTimestamp: ss.SummaryTime,
- })
}
+}
- for _, tc := range testCases {
- opts := client.NewRequestOptions()
- t.Run(tc.description, func(t *testing.T) {
- if tc.stat != nil {
- opts.QueryParameters.Set("statName", *tc.stat)
- }
- tsr, _, err := TOSession.GetSummaryStatsLastUpdated(opts)
- if tc.errExpected {
- if err == nil {
- t.Fatalf("expected to get error on getting stats_summary latest updated timestamp but received nil")
- }
- } else if err != nil {
- t.Fatalf("received unexpected error getting Stats Summary latest updated timestamp: %v - alerts: %+v", err, tsr.Alerts)
- } else if tc.nullTimeStamp {
- if tsr.Response.SummaryTime != nil {
- t.Fatalf("expected to get null on latest timestamp but instead got %v", *tsr.Response.SummaryTime)
- }
- } else if !tsr.Response.SummaryTime.Equal(tc.expectedTimestamp) {
- t.Fatalf("received latest timestamp %v does not match up to expected timestamp %v", tsr.Response.SummaryTime, tc.expectedTimestamp)
- }
- })
+func validateStatsSummaryLastUpdatedField(expectedTime time.Time) utils.CkReqFunc {
+ return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ tc.Alerts, _ error) {
+ assert.RequireNotNil(t, resp, "Expected StatsSummaryLastUpdated response to not be nil.")
+ statsSummaryLastUpdated := resp.(tc.StatsSummaryLastUpdated)
+ assert.RequireNotNil(t, statsSummaryLastUpdated.SummaryTime, "Expected SummaryTime to not be nil.")
+ assert.Equal(t, expectedTime, *statsSummaryLastUpdated.SummaryTime, "Expected SummaryTime to be %v, but got %v", expectedTime, *statsSummaryLastUpdated.SummaryTime)
+ }
+}
+
+// Note that these stats summaries are never cleaned up, and will be left in
+// the TODB after the tests complete
+func CreateTestStatsSummaries(t *testing.T) {
+ for _, ss := range testData.StatsSummaries {
+ latestTime = time.Now().Truncate(time.Second)
+ ss.SummaryTime = latestTime
+ alerts, _, err := TOSession.CreateSummaryStats(ss, client.RequestOptions{})
+ assert.RequireNoError(t, err, "Creating Stats Summary for stat '%s': %v - alerts: %+v", *ss.StatName, err, alerts.Alerts)
}
}