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 <[email protected]>
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)
        }
 }

Reply via email to