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 c57cc0727e Refactor server capabilities tests (#6898)
c57cc0727e is described below

commit c57cc0727e0c230728aab1c0c194ff4c9db64605
Author: Eric Holguin <[email protected]>
AuthorDate: Wed Jun 29 16:43:08 2022 -0600

    Refactor server capabilities tests (#6898)
---
 .../testing/api/v3/servercapabilities_test.go      | 150 +++++----
 .../testing/api/v4/servercapabilities_test.go      | 373 +++++++++------------
 2 files changed, 250 insertions(+), 273 deletions(-)

diff --git a/traffic_ops/testing/api/v3/servercapabilities_test.go 
b/traffic_ops/testing/api/v3/servercapabilities_test.go
index a170c22510..7be688522d 100644
--- a/traffic_ops/testing/api/v3/servercapabilities_test.go
+++ b/traffic_ops/testing/api/v3/servercapabilities_test.go
@@ -16,93 +16,113 @@ package v3
 */
 
 import (
+       "encoding/json"
        "net/http"
+       "net/url"
        "sort"
        "testing"
 
        "github.com/apache/trafficcontrol/lib/go-tc"
+       "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"
 )
 
 func TestServerCapabilities(t *testing.T) {
        WithObjs(t, []TCObj{ServerCapabilities}, func() {
-               SortTestServerCapabilities(t)
-               GetTestServerCapabilities(t)
-               ValidationTestServerCapabilities(t)
-       })
-}
-
-func CreateTestServerCapabilities(t *testing.T) {
 
-       for _, sc := range testData.ServerCapabilities {
-               resp, _, err := TOSession.CreateServerCapability(sc)
-               if err != nil {
-                       t.Errorf("could not CREATE server capability: %v", err)
+               methodTests := utils.V3TestCase{
+                       "GET": {
+                               "OK when VALID request": {
+                                       ClientSession: TOSession,
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseLengthGreaterOrEqual(1),
+                                               
validateServerCapabilitiesSort()),
+                               },
+                               "OK when VALID NAME parameter": {
+                                       ClientSession: TOSession,
+                                       RequestParams: url.Values{"name": 
{"ram"}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK)),
+                               },
+                       },
+                       "POST": {
+                               "BAD REQUEST when INVALID NAME": {
+                                       ClientSession: TOSession,
+                                       RequestBody:   
map[string]interface{}{"name": "b@dname"},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                       },
                }
-               t.Log("Response: ", resp)
-       }
 
-}
-
-func SortTestServerCapabilities(t *testing.T) {
-       var header http.Header
-       var sortedList []string
-       resp, _, err := TOSession.GetServerCapabilitiesWithHdr(header)
-       if err != nil {
-               t.Fatalf("Expected no error, but got %v", err.Error())
-       }
-       for i, _ := range resp {
-               sortedList = append(sortedList, resp[i].Name)
-       }
-
-       res := sort.SliceIsSorted(sortedList, func(p, q int) bool {
-               return sortedList[p] < sortedList[q]
+               for method, testCases := range methodTests {
+                       t.Run(method, func(t *testing.T) {
+                               for name, testCase := range testCases {
+                                       serverCapability := 
tc.ServerCapability{}
+
+                                       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, 
&serverCapability)
+                                               assert.NoError(t, err, "Error 
occurred when unmarshalling request body: %v", err)
+                                       }
+
+                                       switch method {
+                                       case "GET":
+                                               if name == "OK when VALID NAME 
parameter" {
+                                                       resp, reqInf, err := 
testCase.ClientSession.GetServerCapabilityWithHdr(testCase.RequestParams["name"][0],
 testCase.RequestHeaders)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, resp, tc.Alerts{}, err)
+                                                       }
+                                               } else {
+                                                       resp, reqInf, err := 
testCase.ClientSession.GetServerCapabilitiesWithHdr(testCase.RequestHeaders)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, resp, tc.Alerts{}, err)
+                                                       }
+                                               }
+                                       case "POST":
+                                               t.Run(name, func(t *testing.T) {
+                                                       resp, reqInf, err := 
testCase.ClientSession.CreateServerCapability(serverCapability)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               if resp != nil {
+                                                                       
check(t, reqInf, resp.Response, resp.Alerts, err)
+                                                               }
+                                                       }
+                                               })
+                                       }
+                               }
+                       })
+               }
        })
-       if res != true {
-               t.Errorf("list is not sorted by their names: %v", sortedList)
-       }
 }
 
-func GetTestServerCapabilities(t *testing.T) {
-
-       for _, sc := range testData.ServerCapabilities {
-               resp, _, err := TOSession.GetServerCapability(sc.Name)
-               if err != nil {
-                       t.Errorf("cannot GET server capability: %v - %v", err, 
resp)
-               } else if resp == nil {
-                       t.Error("GET server capability expected non-nil 
response")
+func validateServerCapabilitiesSort() utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, 
alerts tc.Alerts, _ error) {
+               assert.RequireNotNil(t, resp, "Expected Server Capabilities 
response to not be nil.")
+               var serverCapabilityNames []string
+               serverCapabilitiesResp := resp.([]tc.ServerCapability)
+               for _, serverCapability := range serverCapabilitiesResp {
+                       serverCapabilityNames = append(serverCapabilityNames, 
serverCapability.Name)
                }
-       }
-
-       resp, _, err := TOSession.GetServerCapabilities()
-       if err != nil {
-               t.Errorf("cannot GET server capabilities: %v", err)
-       }
-       if len(resp) != len(testData.ServerCapabilities) {
-               t.Errorf("expected to GET %d server capabilities, actual: %d", 
len(testData.ServerCapabilities), len(resp))
+               assert.Equal(t, true, 
sort.StringsAreSorted(serverCapabilityNames), "List is not sorted by their 
names: %v", serverCapabilityNames)
        }
 }
 
-func ValidationTestServerCapabilities(t *testing.T) {
-       _, _, err := TOSession.CreateServerCapability(tc.ServerCapability{Name: 
"b@dname"})
-       if err == nil {
-               t.Error("expected POST with invalid name to return an error, 
actual: nil")
+func CreateTestServerCapabilities(t *testing.T) {
+       for _, sc := range testData.ServerCapabilities {
+               resp, _, err := TOSession.CreateServerCapability(sc)
+               assert.RequireNoError(t, err, "Unexpected error creating Server 
Capability '%s': %v - alerts: %+v", sc.Name, err, resp.Alerts)
        }
 }
 
 func DeleteTestServerCapabilities(t *testing.T) {
-
-       for _, sc := range testData.ServerCapabilities {
-               delResp, _, err := TOSession.DeleteServerCapability(sc.Name)
-               if err != nil {
-                       t.Errorf("cannot DELETE server capability: %v - %v", 
err, delResp)
-               }
-
-               serverCapability, _, err := 
TOSession.GetServerCapability(sc.Name)
-               if err == nil {
-                       t.Errorf("expected error trying to GET deleted server 
capability: %s, actual: nil", sc.Name)
-               }
-               if serverCapability != nil {
-                       t.Errorf("expected nil trying to GET deleted server 
capability: %s, actual: non-nil", sc.Name)
-               }
+       serverCapabilities, _, err := 
TOSession.GetServerCapabilitiesWithHdr(nil)
+       assert.NoError(t, err, "Cannot get Server Capabilities: %v", err)
+
+       for _, serverCapability := range serverCapabilities {
+               alerts, _, err := 
TOSession.DeleteServerCapability(serverCapability.Name)
+               assert.NoError(t, err, "Unexpected error deleting Server 
Capability '%s': %v - alerts: %+v", serverCapability.Name, err, alerts.Alerts)
+               // Retrieve the Server Capability to see if it got deleted
+               getServerCapability, _, err := 
TOSession.GetServerCapabilityWithHdr(serverCapability.Name, nil)
+               assert.Error(t, err, "Expected error getting Server Capability 
'%s' after deletion: %v", serverCapability.Name, err)
+               assert.Equal(t, (*tc.ServerCapability)(nil), 
getServerCapability, "Expected Server Capability '%s' to be deleted, but it was 
found in Traffic Ops", serverCapability.Name)
        }
 }
diff --git a/traffic_ops/testing/api/v4/servercapabilities_test.go 
b/traffic_ops/testing/api/v4/servercapabilities_test.go
index 1340059674..65bfa97c1d 100644
--- a/traffic_ops/testing/api/v4/servercapabilities_test.go
+++ b/traffic_ops/testing/api/v4/servercapabilities_test.go
@@ -16,241 +16,198 @@ package v4
 */
 
 import (
+       "encoding/json"
        "net/http"
+       "net/url"
        "sort"
        "testing"
        "time"
 
        "github.com/apache/trafficcontrol/lib/go-rfc"
        "github.com/apache/trafficcontrol/lib/go-tc"
+       "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"
 )
 
 func TestServerCapabilities(t *testing.T) {
        WithObjs(t, []TCObj{ServerCapabilities}, func() {
-               GetTestServerCapabilities(t)
-               currentTime := time.Now().UTC().Add(-5 * time.Second)
-               rfcTime := currentTime.Format(time.RFC1123)
-               var header http.Header
-               header = make(map[string][]string)
-               header.Set(rfc.IfModifiedSince, rfcTime)
-               header.Set(rfc.IfUnmodifiedSince, rfcTime)
-               SortTestServerCapabilities(t)
-               CreateTestServerCapabilityAlreadyExist(t)
-               GetTestServerCapabilitiesByInvalidName(t)
-               UpdateTestServerCapabilities(t)
-               UpdateTestServerCapabilitiesWithHeaders(t, header)
-               header = make(map[string][]string)
-               etag := rfc.ETag(currentTime)
-               header.Set(rfc.IfMatch, etag)
-               UpdateTestServerCapabilitiesWithHeaders(t, header)
-               ValidationTestServerCapabilities(t)
-               UpdateTestServerCapabilitiesInvalidData(t)
-               DeleteTestServerCapabilitiesInvalidName(t)
-       })
-}
 
-func CreateTestServerCapabilities(t *testing.T) {
-
-       for _, sc := range testData.ServerCapabilities {
-               resp, _, err := TOSession.CreateServerCapability(sc, 
client.RequestOptions{})
-               if err != nil {
-                       t.Errorf("Unexpected error creating Server Capability 
'%s': %v - alerts: %+v", sc.Name, err, resp.Alerts)
+               currentTime := time.Now().UTC().Add(-15 * time.Second)
+               currentTimeRFC := currentTime.Format(time.RFC1123)
+
+               methodTests := utils.V4TestCase{
+                       "GET": {
+                               "OK when VALID request": {
+                                       ClientSession: TOSession,
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseLengthGreaterOrEqual(1),
+                                               
validateServerCapabilitiesSort()),
+                               },
+                               "OK when VALID NAME parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"name": {"ram"}}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseLengthGreaterOrEqual(1)),
+                               },
+                               "EMPTY RESPONSE when INVALID NAME parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"name": {"abcd"}}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseHasLength(0)),
+                               },
+                       },
+                       "POST": {
+                               "BAD REQUEST when ALREADY EXISTS": {
+                                       ClientSession: TOSession,
+                                       RequestBody:   
map[string]interface{}{"name": "foo"},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                               "BAD REQUEST when INVALID NAME": {
+                                       ClientSession: TOSession,
+                                       RequestBody:   
map[string]interface{}{"name": "b@dname"},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                       },
+                       "PUT": {
+                               "OK when VALID request": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"name": {"blah"}}},
+                                       RequestBody:   
map[string]interface{}{"name": "newname"},
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK),
+                                               
validateServerCapabilitiesUpdateFields(map[string]interface{}{"Name": 
"newname"})),
+                               },
+                               "BAD REQUEST when NAME DOESNT EXIST": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"name": {"invalid"}}},
+                                       RequestBody:   
map[string]interface{}{"name": "newname"},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                               "PRECONDITION FAILED when updating with IMS & 
IUS Headers": {
+                                       ClientSession: TOSession,
+                                       RequestOpts: client.RequestOptions{
+                                               QueryParameters: 
url.Values{"name": {"disk"}},
+                                               Header:          
http.Header{rfc.IfUnmodifiedSince: {currentTimeRFC}},
+                                       },
+                                       RequestBody:  
map[string]interface{}{"name": "newname"},
+                                       Expectations: 
utils.CkRequest(utils.HasError(), 
utils.HasStatus(http.StatusPreconditionFailed)),
+                               },
+                               "PRECONDITION FAILED when updating with IFMATCH 
ETAG Header": {
+                                       ClientSession: TOSession,
+                                       RequestOpts: client.RequestOptions{
+                                               QueryParameters: 
url.Values{"name": {"disk"}},
+                                               Header:          
http.Header{rfc.IfMatch: {rfc.ETag(currentTime)}},
+                                       },
+                                       RequestBody:  
map[string]interface{}{"name": "newname"},
+                                       Expectations: 
utils.CkRequest(utils.HasError(), 
utils.HasStatus(http.StatusPreconditionFailed)),
+                               },
+                       },
+                       "DELETE": {
+                               "NOT FOUND when NAME DOESNT EXIST": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"name": {"invalid"}}},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusNotFound)),
+                               },
+                               "BAD REQUEST when EMPTY NAME parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"name": {""}}},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                       },
                }
-       }
-}
-
-func CreateTestServerCapabilityAlreadyExist(t *testing.T) {
-       if len(testData.ServerCapabilities) < 1 {
-               t.Fatal("Need at least one Server Capabilities to test 
duplicate")
-       }
-       firstServerCapability := testData.ServerCapabilities[0]
-       resp, reqInf, err := 
TOSession.CreateServerCapability(firstServerCapability, client.RequestOptions{})
-       if err == nil {
-               t.Errorf("Expected server_capability name '%s' already exists. 
- Alerts %v", firstServerCapability.Name, resp.Alerts)
-       }
-       if reqInf.StatusCode != http.StatusBadRequest {
-               t.Errorf("Expected 400 Status code, but found %d", 
reqInf.StatusCode)
-       }
-}
-
-func SortTestServerCapabilities(t *testing.T) {
-       resp, _, err := TOSession.GetServerCapabilities(client.RequestOptions{})
-       if err != nil {
-               t.Fatalf("Expected no error, but got: %v - alerts: %+v", err, 
resp.Alerts)
-       }
-
-       sortedList := make([]string, 0, len(resp.Response))
-       for _, sc := range resp.Response {
-               sortedList = append(sortedList, sc.Name)
-       }
 
-       if !sort.StringsAreSorted(sortedList) {
-               t.Errorf("list is not sorted by their names: %v", sortedList)
-       }
-}
-
-func GetTestServerCapabilities(t *testing.T) {
-       opts := client.NewRequestOptions()
-       for _, sc := range testData.ServerCapabilities {
-               opts.QueryParameters.Set("name", sc.Name)
-               resp, _, err := TOSession.GetServerCapabilities(opts)
-               if err != nil {
-                       t.Errorf("cannot get Server Capability: %v - alerts: 
%+v", err, resp.Alerts)
-               }
-               if len(resp.Response) != 1 {
-                       t.Errorf("Expected exactly one Server Capability to 
exist with name '%s', found: %d", sc.Name, len(resp.Response))
+               for method, testCases := range methodTests {
+                       t.Run(method, func(t *testing.T) {
+                               for name, testCase := range testCases {
+                                       serverCapability := 
tc.ServerCapability{}
+
+                                       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, 
&serverCapability)
+                                               assert.NoError(t, err, "Error 
occurred when unmarshalling request body: %v", err)
+                                       }
+
+                                       switch method {
+                                       case "GET":
+                                               t.Run(name, func(t *testing.T) {
+                                                       resp, reqInf, err := 
testCase.ClientSession.GetServerCapabilities(testCase.RequestOpts)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, resp.Response, resp.Alerts, err)
+                                                       }
+                                               })
+                                       case "POST":
+                                               t.Run(name, func(t *testing.T) {
+                                                       resp, reqInf, err := 
testCase.ClientSession.CreateServerCapability(serverCapability, 
testCase.RequestOpts)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, resp.Response, resp.Alerts, err)
+                                                       }
+                                               })
+                                       case "PUT":
+                                               t.Run(name, func(t *testing.T) {
+                                                       resp, reqInf, err := 
testCase.ClientSession.UpdateServerCapability(testCase.RequestOpts.QueryParameters["name"][0],
 serverCapability, testCase.RequestOpts)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, resp.Response, resp.Alerts, err)
+                                                       }
+                                               })
+                                       case "DELETE":
+                                               t.Run(name, func(t *testing.T) {
+                                                       alerts, reqInf, err := 
testCase.ClientSession.DeleteServerCapability(testCase.RequestOpts.QueryParameters["name"][0],
 testCase.RequestOpts)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, nil, alerts, err)
+                                                       }
+                                               })
+                                       }
+                               }
+                       })
                }
-       }
-
-       resp, _, err := TOSession.GetServerCapabilities(client.RequestOptions{})
-       if err != nil {
-               t.Errorf("cannot get Server Capabilities: %v - alerts: %+v", 
err, resp.Alerts)
-       }
-       if len(resp.Response) != len(testData.ServerCapabilities) {
-               t.Errorf("expected to get %d Server Capabilities, actual: %d", 
len(testData.ServerCapabilities), len(resp.Response))
-       }
-}
-
-func GetTestServerCapabilitiesByInvalidName(t *testing.T) {
-       opts := client.NewRequestOptions()
-       opts.QueryParameters.Set("name", "abcd")
-       resp, _, err := TOSession.GetServerCapabilities(opts)
-       if err != nil {
-               t.Errorf("Expected no error: %v - alerts: %+v", err, 
resp.Alerts)
-       }
-       if len(resp.Response) > 0 {
-               t.Errorf("Expected no response for Get Server Capability by 
Invalid name, but found some response '%d'", len(resp.Response))
-       }
-}
-
-func UpdateTestServerCapabilitiesWithHeaders(t *testing.T, header http.Header) 
{
-       opts := client.NewRequestOptions()
-       opts.Header = header
-       resp, _, err := TOSession.GetServerCapabilities(opts)
-       if err != nil {
-               t.Fatalf("Expected no error, but got: %v - alerts: %+v", err, 
resp.Alerts)
-       }
-       if len(resp.Response) == 0 {
-               t.Fatal("no server capability in response, quitting")
-       }
-       originalName := resp.Response[0].Name
-       newSCName := "sc-test"
-       resp.Response[0].Name = newSCName
-
-       _, reqInf, err := TOSession.UpdateServerCapability(originalName, 
resp.Response[0], opts)
-       if err == nil {
-               t.Errorf("Expected error about Precondition Failed, got none")
-       }
-       if reqInf.StatusCode != http.StatusPreconditionFailed {
-               t.Errorf("Expected status code 412, got %v", reqInf.StatusCode)
-       }
-}
-
-func ValidationTestServerCapabilities(t *testing.T) {
-       _, _, err := TOSession.CreateServerCapability(tc.ServerCapability{Name: 
"b@dname"}, client.RequestOptions{})
-       if err == nil {
-               t.Error("expected POST with invalid name to return an error, 
actual: nil")
-       }
+       })
 }
 
-func UpdateTestServerCapabilities(t *testing.T) {
-       // Get server capability name and edit it to a new name
-       resp, _, err := TOSession.GetServerCapabilities(client.RequestOptions{})
-       if err != nil {
-               t.Fatalf("Expected no error, but got: %v - alerts: %+v", err, 
resp.Alerts)
-       }
-       if len(resp.Response) == 0 {
-               t.Fatalf("no server capability in response, quitting")
-       }
-       origName := resp.Response[0].Name
-       newSCName := "sc-test"
-       resp.Response[0].Name = newSCName
-
-       // Update server capability with new name
-       updateResponse, _, err := TOSession.UpdateServerCapability(origName, 
resp.Response[0], client.RequestOptions{})
-       if err != nil {
-               t.Errorf("cannot update Server Capability: %v - alerts: %+v", 
err, updateResponse.Alerts)
-       }
-
-       // Get updated name
-       opts := client.NewRequestOptions()
-       opts.QueryParameters.Set("name", newSCName)
-       getResp, _, err := TOSession.GetServerCapabilities(opts)
-       if err != nil {
-               t.Fatalf("Expected no error, but got: %v - alerts: %+v", err, 
getResp.Alerts)
-       }
-       if len(getResp.Response) == 0 {
-               t.Fatalf("no server capability in response, quitting")
-       }
-       if getResp.Response[0].Name != newSCName {
-               t.Errorf("failed to update server capability name, expected: %v 
but got: %v", newSCName, updateResponse.Response.Name)
-       }
-
-       // Set everything back as it was for further testing.
-       resp.Response[0].Name = origName
-       r, _, err := TOSession.UpdateServerCapability(newSCName, 
resp.Response[0], client.RequestOptions{})
-       if err != nil {
-               t.Errorf("cannot update server Capability: %v - alerts: %+v", 
err, r.Alerts)
+func validateServerCapabilitiesUpdateFields(expectedResp 
map[string]interface{}) utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ 
tc.Alerts, _ error) {
+               assert.RequireNotNil(t, resp, "Expected Server Capabilities 
response to not be nil.")
+               serverCapabilitiesResp := resp.(tc.ServerCapability)
+               for field, expected := range expectedResp {
+                       switch field {
+                       case "Name":
+                               assert.Equal(t, expected, 
serverCapabilitiesResp.Name, "Expected Name to be %v, but got %s", expected, 
serverCapabilitiesResp.Name)
+                       default:
+                               t.Errorf("Expected field: %v, does not exist in 
response", field)
+                       }
+               }
        }
 }
 
-func UpdateTestServerCapabilitiesInvalidData(t *testing.T) {
-       resp, _, err := TOSession.GetServerCapabilities(client.RequestOptions{})
-       if err != nil {
-               t.Fatalf("Expected no error, but got: %v - alerts: %+v", err, 
resp.Alerts)
-       }
-       if len(resp.Response) == 0 {
-               t.Fatalf("no server capability in response, quitting")
-       }
-       newSCName := "sc-test"
-       resp.Response[0].Name = newSCName
-
-       // Update server capability with new name
-       updateResponse, reqInf, err := 
TOSession.UpdateServerCapability("invalid", resp.Response[0], 
client.RequestOptions{})
-       if err == nil {
-               t.Errorf("Expected cannot find exactly one server capability 
with the query string provided: %v - alerts: %+v", err, updateResponse.Alerts)
-       }
-       if reqInf.StatusCode != http.StatusBadRequest {
-               t.Errorf("Expected 400 Status code, but found %d", 
reqInf.StatusCode)
+func validateServerCapabilitiesSort() utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, 
alerts tc.Alerts, _ error) {
+               assert.RequireNotNil(t, resp, "Expected Server Capabilities 
response to not be nil.")
+               var serverCapabilityNames []string
+               serverCapabilitiesResp := resp.([]tc.ServerCapability)
+               for _, serverCapability := range serverCapabilitiesResp {
+                       serverCapabilityNames = append(serverCapabilityNames, 
serverCapability.Name)
+               }
+               assert.Equal(t, true, 
sort.StringsAreSorted(serverCapabilityNames), "List is not sorted by their 
names: %v", serverCapabilityNames)
        }
 }
 
-func DeleteTestServerCapabilities(t *testing.T) {
-       opts := client.NewRequestOptions()
+func CreateTestServerCapabilities(t *testing.T) {
        for _, sc := range testData.ServerCapabilities {
-               delResp, _, err := TOSession.DeleteServerCapability(sc.Name, 
client.RequestOptions{})
-               if err != nil {
-                       t.Errorf("cannot delete Server Capability: %v - alerts: 
%+v", err, delResp.Alerts)
-               }
-               opts.QueryParameters.Set("name", sc.Name)
-               serverCapability, _, err := 
TOSession.GetServerCapabilities(opts)
-               if err != nil {
-                       t.Errorf("Unexpected error getting Server Capabilities 
filtered by name '%s' after deletion: %v - alerts: %+v", sc.Name, err, 
serverCapability.Alerts)
-               }
-               if len(serverCapability.Response) != 0 {
-                       t.Errorf("Expected an empty response when filtering for 
the name of a Server Capability that's been deleted, but found %d matching 
Server Capabilities", len(serverCapability.Response))
-               }
+               resp, _, err := TOSession.CreateServerCapability(sc, 
client.RequestOptions{})
+               assert.RequireNoError(t, err, "Unexpected error creating Server 
Capability '%s': %v - alerts: %+v", sc.Name, err, resp.Alerts)
        }
 }
 
-func DeleteTestServerCapabilitiesInvalidName(t *testing.T) {
-
-       //invalid name
-       delResp, reqInf, err := TOSession.DeleteServerCapability("invalid", 
client.RequestOptions{})
-       if err == nil {
-               t.Errorf("Expected no server capability with that key found 
%v", delResp.Alerts)
-       }
-       if reqInf.StatusCode != http.StatusNotFound {
-               t.Errorf("Expected 404 error status code, but found %d", 
reqInf.StatusCode)
-       }
-
-       //no parameters
-       delResp, reqInf, err = TOSession.DeleteServerCapability("", 
client.RequestOptions{})
-       if err == nil {
-               t.Errorf("Expected missing key: name %v", delResp.Alerts)
-       }
-       if reqInf.StatusCode != http.StatusBadRequest {
-               t.Errorf("Expected 400 error status code, but found %d", 
reqInf.StatusCode)
+func DeleteTestServerCapabilities(t *testing.T) {
+       serverCapabilities, _, err := 
TOSession.GetServerCapabilities(client.RequestOptions{})
+       assert.NoError(t, err, "Cannot get Server Capabilities: %v - alerts: 
%+v", err, serverCapabilities.Alerts)
+
+       for _, serverCapability := range serverCapabilities.Response {
+               alerts, _, err := 
TOSession.DeleteServerCapability(serverCapability.Name, client.RequestOptions{})
+               assert.NoError(t, err, "Unexpected error deleting Server 
Capability '%s': %v - alerts: %+v", serverCapability.Name, err, alerts.Alerts)
+               // Retrieve the Server Capability to see if it got deleted
+               opts := client.NewRequestOptions()
+               opts.QueryParameters.Set("name", serverCapability.Name)
+               getServerCapability, _, err := 
TOSession.GetServerCapabilities(opts)
+               assert.NoError(t, err, "Error getting Server Capability '%s' 
after deletion: %v - alerts: %+v", serverCapability.Name, err, 
getServerCapability.Alerts)
+               assert.Equal(t, 0, len(getServerCapability.Response), "Expected 
Server Capability '%s' to be deleted, but it was found in Traffic Ops", 
serverCapability.Name)
        }
 }

Reply via email to