This is an automated email from the ASF dual-hosted git repository.

ocket8888 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 5ec38135d9 Refactor Federation Resolvers Test (#6897)
5ec38135d9 is described below

commit 5ec38135d9d76061d04a3c4f5e55f02d23fdebbc
Author: Eric Holguin <[email protected]>
AuthorDate: Wed Jun 15 17:45:53 2022 -0600

    Refactor Federation Resolvers Test (#6897)
    
    * Refactor federation resolver tests
    
    * fix variable name
---
 .../testing/api/v3/federation_resolvers_test.go    | 349 ++++++-------
 .../testing/api/v4/federation_resolvers_test.go    | 552 +++++++++------------
 2 files changed, 388 insertions(+), 513 deletions(-)

diff --git a/traffic_ops/testing/api/v3/federation_resolvers_test.go 
b/traffic_ops/testing/api/v3/federation_resolvers_test.go
index 8cd768239a..103ee51631 100644
--- a/traffic_ops/testing/api/v3/federation_resolvers_test.go
+++ b/traffic_ops/testing/api/v3/federation_resolvers_test.go
@@ -16,227 +16,204 @@ package v3
 */
 
 import (
+       "encoding/json"
        "net/http"
+       "net/url"
+       "strconv"
        "testing"
        "time"
 
        "github.com/apache/trafficcontrol/lib/go-rfc"
        "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"
 )
 
 func TestFederationResolvers(t *testing.T) {
        WithObjs(t, []TCObj{Types, FederationResolvers}, func() {
-               GetTestFederationResolversIMS(t)
-               GetTestFederationResolvers(t)
-       })
-}
-func GetTestFederationResolversIMS(t *testing.T) {
-       var tdlen = len(testData.FederationResolvers)
-       if tdlen < 1 {
-               t.Fatal("no federation resolvers test data")
-       }
-       var header http.Header
-       header = make(map[string][]string)
-       futureTime := time.Now().AddDate(0, 0, 1)
-       time := futureTime.Format(time.RFC1123)
-       header.Set(rfc.IfModifiedSince, time)
-       _, reqInf, err := TOSession.GetFederationResolversWithHdr(header)
-       if err != nil {
-               t.Fatalf("could not GET Federation resolvers: %v", err)
-       }
-       if reqInf.StatusCode != http.StatusNotModified {
-               t.Fatalf("Expected 304 status code, got %v", reqInf.StatusCode)
-       }
-}
-
-func GetTestFederationResolvers(t *testing.T) {
-       var tdlen = len(testData.FederationResolvers)
-       if tdlen < 1 {
-               t.Fatal("no federation resolvers test data")
-       }
-
-       frs, _, err := TOSession.GetFederationResolvers()
-       if err != nil {
-               t.Errorf("Unexpected error getting Federation Resolvers: %v", 
err)
-       }
-       if len(frs) != tdlen {
-               t.Fatalf("Wrong number of Federation Resolvers from GET, want 
%d got %d", tdlen, len(frs))
-       }
-
-       var testFr = frs[0]
-       if testFr.ID == nil || testFr.Type == nil || testFr.IPAddress == nil {
-               t.Fatalf("Malformed federation resolver: %+v", testFr)
-       }
-
-       _ = t.Run("Get Federation Resolvers by ID", getFRByIDTest(testFr))
-       _ = t.Run("Get Federation Resolvers by IPAddress", 
getFRByIPTest(testFr))
-       _ = t.Run("Get Federation Resolvers by Type", getFRByTypeTest(testFr))
-}
 
-func getFRByIDTest(testFr tc.FederationResolver) func(*testing.T) {
-       return func(t *testing.T) {
-               fr, _, err := TOSession.GetFederationResolverByID(*testFr.ID)
-               if err != nil {
-                       t.Fatalf("Unexpected error getting Federation Resolver 
by ID %d: %v", *testFr.ID, err)
+               currentTime := time.Now().UTC().Add(-15 * time.Second)
+               tomorrow := currentTime.AddDate(0, 0, 1).Format(time.RFC1123)
+
+               methodTests := utils.V3TestCase{
+                       "GET": {
+                               "NOT MODIFIED when NO CHANGES made": {
+                                       ClientSession:  TOSession,
+                                       RequestHeaders: 
http.Header{rfc.IfModifiedSince: {tomorrow}},
+                                       Expectations:   
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusNotModified)),
+                               },
+                               "OK when VALID request": {
+                                       ClientSession: TOSession,
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseLengthGreaterOrEqual(1)),
+                               },
+                               "OK when VALID ID parameter": {
+                                       ClientSession: TOSession,
+                                       RequestParams: url.Values{"id": 
{strconv.Itoa(GetFederationResolverID(t, "0.0.0.0/12")())}},
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK),
+                                               
validateFederationResolverFields(map[string]interface{}{"ID": 
uint(GetFederationResolverID(t, "0.0.0.0/12")())})),
+                               },
+                               "OK when VALID IPADDRESS parameter": {
+                                       ClientSession: TOSession,
+                                       RequestParams: url.Values{"ipAddress": 
{"1.2.3.4"}},
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK),
+                                               
validateFederationResolverFields(map[string]interface{}{"IPAddress": 
"1.2.3.4"})),
+                               },
+                               "OK when VALID TYPE parameter": {
+                                       ClientSession: TOSession,
+                                       RequestParams: url.Values{"type": 
{"RESOLVE4"}},
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseLengthGreaterOrEqual(1),
+                                               
validateFederationResolversType(map[string]interface{}{"Type": "RESOLVE4"})),
+                               },
+                       },
+                       "POST": {
+                               "BAD REQUEST when MISSING IPADDRESS and TYPE 
FIELDS": {
+                                       ClientSession: TOSession,
+                                       RequestBody:   map[string]interface{}{},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                               "BAD REQUEST when INVALID IP ADDRESS": {
+                                       ClientSession: TOSession,
+                                       RequestBody: map[string]interface{}{
+                                               "ipAddress": "not a valid IP 
address",
+                                               "typeId":    GetTypeId(t, 
"RESOLVE4"),
+                                       },
+                                       Expectations: 
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                       },
+                       "DELETE": {
+                               "NOT FOUND when INVALID ID": {
+                                       EndpointId:    func() int { return 0 },
+                                       ClientSession: TOSession,
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusNotFound)),
+                               },
+                       },
+               }
+
+               for method, testCases := range methodTests {
+                       t.Run(method, func(t *testing.T) {
+                               for name, testCase := range testCases {
+                                       fr := tc.FederationResolver{}
+
+                                       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, &fr)
+                                               assert.NoError(t, err, "Error 
occurred when unmarshalling request body: %v", err)
+                                       }
+
+                                       switch method {
+                                       case "GET", "GET AFTER CHANGES":
+                                               t.Run(name, func(t *testing.T) {
+                                                       if name == "OK when 
VALID ID parameter" {
+                                                               id, err := 
strconv.Atoi(testCase.RequestParams["id"][0])
+                                                               
assert.RequireNoError(t, err, "Error converting string to int")
+                                                               resp, reqInf, 
err := testCase.ClientSession.GetFederationResolverByIDWithHdr(uint(id), 
testCase.RequestHeaders)
+                                                               for _, check := 
range testCase.Expectations {
+                                                                       
check(t, reqInf, resp, tc.Alerts{}, err)
+                                                               }
+                                                       } else if name == "OK 
when VALID IPADDRESS parameter" {
+                                                               resp, reqInf, 
err := 
testCase.ClientSession.GetFederationResolverByIPAddressWithHdr(testCase.RequestParams["ipAddress"][0],
 testCase.RequestHeaders)
+                                                               for _, check := 
range testCase.Expectations {
+                                                                       
check(t, reqInf, resp, tc.Alerts{}, err)
+                                                               }
+                                                       } else if name == "OK 
when VALID TYPE parameter" {
+                                                               resp, reqInf, 
err := 
testCase.ClientSession.GetFederationResolversByTypeWithHdr(testCase.RequestParams["type"][0],
 testCase.RequestHeaders)
+                                                               for _, check := 
range testCase.Expectations {
+                                                                       
check(t, reqInf, resp, tc.Alerts{}, err)
+                                                               }
+                                                       } else {
+                                                               resp, reqInf, 
err := 
testCase.ClientSession.GetFederationResolversWithHdr(testCase.RequestHeaders)
+                                                               for _, check := 
range testCase.Expectations {
+                                                                       
check(t, reqInf, resp, tc.Alerts{}, err)
+                                                               }
+                                                       }
+                                               })
+                                       case "POST":
+                                               t.Run(name, func(t *testing.T) {
+                                                       alerts, reqInf, err := 
testCase.ClientSession.CreateFederationResolver(fr)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, nil, alerts, err)
+                                                       }
+                                               })
+                                       case "DELETE":
+                                               t.Run(name, func(t *testing.T) {
+                                                       alerts, reqInf, err := 
testCase.ClientSession.DeleteFederationResolver(uint(testCase.EndpointId()))
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, nil, alerts, err)
+                                                       }
+                                               })
+                                       }
+                               }
+                       })
                }
-
-               cmpr(testFr, fr, t)
-
-       }
+       })
 }
 
-func getFRByIPTest(testFr tc.FederationResolver) func(*testing.T) {
-       return func(t *testing.T) {
-               fr, _, err := 
TOSession.GetFederationResolverByIPAddress(*testFr.IPAddress)
-               if err != nil {
-                       t.Fatalf("Unexpected error getting Federation Resolver 
by IP %s: %v", *testFr.IPAddress, err)
+func validateFederationResolverFields(expectedResp map[string]interface{}) 
utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ 
tc.Alerts, _ error) {
+               assert.RequireNotNil(t, resp, "Expected Federation Resolver 
response to not be nil.")
+               fr := resp.(tc.FederationResolver)
+               for field, expected := range expectedResp {
+                       switch field {
+                       case "ID":
+                               assert.RequireNotNil(t, fr.ID, "Expected ID to 
not be nil")
+                               assert.Equal(t, expected, *fr.ID, "Expected ID 
to be %v, but got %d", expected, *fr.ID)
+                       case "IPAddress":
+                               assert.RequireNotNil(t, fr.IPAddress, "Expected 
IPAddress to not be nil")
+                               assert.Equal(t, expected, *fr.IPAddress, 
"Expected IPAddress to be %v, but got %s", expected, *fr.IPAddress)
+                       default:
+                               t.Errorf("Expected field: %v, does not exist in 
response", field)
+                       }
                }
-
-               cmpr(testFr, fr, t)
-
        }
 }
 
-func getFRByTypeTest(testFr tc.FederationResolver) func(*testing.T) {
-       return func(t *testing.T) {
-               frs, _, err := 
TOSession.GetFederationResolversByType(*testFr.Type)
-               if err != nil {
-                       t.Fatalf("Unexpected error getting Federation Resolvers 
by Type %s: %v", *testFr.Type, err)
-               }
-
-               if len(frs) < 1 {
-                       t.Errorf("Expected at least one Federation Resolver by 
Type %s to exist, but none did", *testFr.Type)
-               }
-
-               for _, fr := range frs {
-                       if fr.ID == nil {
-                               t.Error("Retrieved Federation Resolver has nil 
ID")
-                       }
-                       if fr.IPAddress == nil {
-                               t.Error("Retrieved Federation Resolver has nil 
IPAddress")
-                       }
-                       if fr.Type == nil {
-                               t.Error("Retrieved Federation Resolver has nil 
Type")
-                       } else if *fr.Type != *testFr.Type {
-                               t.Errorf("Retrieved Federation Resolver has 
incorrect Type; want %s, got %s", *testFr.Type, *fr.Type)
+func validateFederationResolversType(expectedResp map[string]interface{}) 
utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ 
tc.Alerts, _ error) {
+               assert.RequireNotNil(t, resp, "Expected Federation Resolver 
response to not be nil.")
+               frResp := resp.([]tc.FederationResolver)
+               for field, expected := range expectedResp {
+                       for _, fr := range frResp {
+                               switch field {
+                               case "Type":
+                                       assert.RequireNotNil(t, fr.Type, 
"Expected Type to not be nil")
+                                       assert.Equal(t, expected, *fr.Type, 
"Expected Type to be %v, but got %s", expected, *fr.Type)
+                               default:
+                                       t.Errorf("Expected field: %v, does not 
exist in response", field)
+                               }
                        }
                }
        }
 }
 
-func cmpr(testFr, apiFr tc.FederationResolver, t *testing.T) {
-       if apiFr.ID == nil {
-               t.Error("Retrieved Federation Resolver has nil ID")
-       } else if *apiFr.ID != *testFr.ID {
-               t.Errorf("Retrieved Federation Resolver has incorrect ID; want 
%d, got %d", *testFr.ID, *apiFr.ID)
-       }
-
-       if apiFr.IPAddress == nil {
-               t.Error("Retrieved Federation Resolver has nil IP address")
-       } else if *apiFr.IPAddress != *testFr.IPAddress {
-               t.Errorf("Retrieved Federation Resolver has incorrect 
IPAddress; want %s, got %s", *testFr.IPAddress, *apiFr.IPAddress)
-       }
-
-       if apiFr.Type == nil {
-               t.Error("Retrieved Federation Resolver has nil Type")
-       } else if *apiFr.Type != *testFr.Type {
-               t.Errorf("Retrieved Federation Resolver has incorrect Type; 
want %s, got %s", *testFr.Type, *apiFr.Type)
+func GetFederationResolverID(t *testing.T, ipAddress string) func() int {
+       return func() int {
+               federationResolver, _, err := 
TOSession.GetFederationResolverByIPAddressWithHdr(ipAddress, nil)
+               assert.RequireNoError(t, err, "Get FederationResolvers Request 
failed with error:", err)
+               assert.RequireNotNil(t, federationResolver.ID, "Expected 
Federation Resolver ID to not be nil")
+               return int(*federationResolver.ID)
        }
 }
 
 func CreateTestFederationResolvers(t *testing.T) {
        for _, fr := range testData.FederationResolvers {
-               if fr.Type == nil {
-                       t.Fatal("testData Federation Resolver has nil Type")
-               }
-
-               tid, _, err := TOSession.GetTypeByName(*fr.Type)
-               if err != nil {
-                       t.Fatalf("Couldn't get an ID for type %s", *fr.Type)
-               }
-               if len(tid) != 1 {
-                       t.Fatalf("Expected exactly one Type by name %s, got 
%d", *fr.Type, len(tid))
-               }
-
-               fr.TypeID = util.UIntPtr(uint(tid[0].ID))
-
+               fr.TypeID = util.UIntPtr(uint(GetTypeId(t, *fr.Type)))
                alerts, _, err := TOSession.CreateFederationResolver(fr)
-               if err != nil {
-                       t.Fatalf("failed to create Federation resolver %+v: 
%v\n\talerts: %+v", fr, err, alerts)
-               }
-               for _, a := range alerts.Alerts {
-                       if a.Level != tc.SuccessLevel.String() {
-                               t.Errorf("Unexpected %s creating a federation 
resolver: %s", a.Level, a.Text)
-                       } else {
-                               t.Logf("Received expected success creating 
federation resolver: %s", a.Text)
-                       }
-               }
-       }
-
-       var invalidFR tc.FederationResolver
-       alerts, _, err := TOSession.CreateFederationResolver(invalidFR)
-       if err == nil {
-               t.Error("Expected an error creating a bad Federation Resolver, 
but didn't get one")
-       }
-       for _, a := range alerts.Alerts {
-               if a.Level == tc.SuccessLevel.String() {
-                       t.Errorf("Unexpected success creating a bad Federation 
Resolver: %s", a.Text)
-               } else {
-                       t.Logf("Received expected %s creating federation 
resolver: %s", a.Level, a.Text)
-               }
-       }
-
-       invalidFR.TypeID = util.UIntPtr(1)
-       invalidFR.IPAddress = util.StrPtr("not a valid IP address")
-       alerts, _, err = TOSession.CreateFederationResolver(invalidFR)
-       if err == nil {
-               t.Error("Expected an error creating a bad Federation Resolver, 
but didn't get one")
-       }
-       for _, a := range alerts.Alerts {
-               if a.Level == tc.SuccessLevel.String() {
-                       t.Errorf("Unexpected success creating a bad Federation 
Resolver: %s", a.Text)
-               } else {
-                       t.Logf("Received expected %s creating a bad federation 
resolver: %s", a.Level, a.Text)
-               }
+               assert.RequireNoError(t, err, "Failed to create Federation 
Resolver %+v: %v - alerts: %+v", fr, err, alerts.Alerts)
        }
 }
 
 func DeleteTestFederationResolvers(t *testing.T) {
-       frs, _, err := TOSession.GetFederationResolvers()
-       if err != nil {
-               t.Errorf("Unexpected error getting Federation Resolvers: %v", 
err)
-       }
-       if len(frs) < 1 {
-               t.Fatal("Found no Federation Resolvers to delete")
-       }
+       frs, _, err := TOSession.GetFederationResolversWithHdr(nil)
+       assert.RequireNoError(t, err, "Unexpected error getting Federation 
Resolvers: %v", err)
        for _, fr := range frs {
-               if fr.ID == nil {
-                       t.Fatalf("Malformed Federation Resolver: %+v", fr)
-               }
                alerts, _, err := TOSession.DeleteFederationResolver(*fr.ID)
-               if err != nil {
-                       t.Fatalf("failed to delete Federation Resolver %+v: 
%v\n\talerts: %+v", fr, err, alerts)
-               }
-               for _, a := range alerts.Alerts {
-                       if a.Level != tc.SuccessLevel.String() {
-                               t.Errorf("Unexpected %s deleting a federation 
resolver: %s", a.Level, a.Text)
-                       } else {
-                               t.Logf("Received expected success deleting 
federation resolver: %s", a.Text)
-                       }
-               }
-       }
-
-       alerts, _, err := TOSession.DeleteFederationResolver(0)
-       if err == nil {
-               t.Error("Expected an error deleting a non-existent Federation 
Resolver, but didn't get one")
+               assert.NoError(t, err, "Failed to delete Federation Resolver 
%+v: %v - alerts: %+v", fr, err, alerts.Alerts)
+               // Retrieve the Federation Resolver to see if it got deleted
+               getFR, _, err := 
TOSession.GetFederationResolverByIDWithHdr(*fr.ID, nil)
+               assert.NoError(t, err, "Error getting Federation Resolver '%d' 
after deletion: %v", *fr.ID, err)
+               assert.Equal(t, (*uint)(nil), getFR.ID, "Expected Federation 
Resolver '%d' to be deleted, but it was found in Traffic Ops", *fr.ID)
        }
-       for _, a := range alerts.Alerts {
-               if a.Level == tc.SuccessLevel.String() {
-                       t.Errorf("Unexpected success deleting a non-existent 
Federation Resolver: %s", a.Text)
-               } else {
-                       t.Logf("Received expected %s deleting a non-existent 
federation resolver: %s", a.Level, a.Text)
-               }
-       }
-
 }
diff --git a/traffic_ops/testing/api/v4/federation_resolvers_test.go 
b/traffic_ops/testing/api/v4/federation_resolvers_test.go
index 09f58f43e1..185a1b3e00 100644
--- a/traffic_ops/testing/api/v4/federation_resolvers_test.go
+++ b/traffic_ops/testing/api/v4/federation_resolvers_test.go
@@ -16,9 +16,9 @@ package v4
 */
 
 import (
+       "encoding/json"
        "net/http"
        "net/url"
-       "reflect"
        "sort"
        "strconv"
        "testing"
@@ -27,370 +27,268 @@ import (
        "github.com/apache/trafficcontrol/lib/go-rfc"
        "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"
 )
 
 func TestFederationResolvers(t *testing.T) {
        WithObjs(t, []TCObj{Types, FederationResolvers}, func() {
-               GetTestFederationResolversIMS(t)
-               GetTestFederationResolvers(t)
-               GetTestPaginationSupportFedResolver(t)
-               SortTestFederationResolver(t)
-               SortTestFederationsResolverDesc(t)
-       })
-}
-func GetTestFederationResolversIMS(t *testing.T) {
-       var tdlen = len(testData.FederationResolvers)
-       if tdlen < 1 {
-               t.Fatal("no federation resolvers test data")
-       }
 
-       futureTime := time.Now().AddDate(0, 0, 1)
-       time := futureTime.Format(time.RFC1123)
+               currentTime := time.Now().UTC().Add(-15 * time.Second)
+               tomorrow := currentTime.AddDate(0, 0, 1).Format(time.RFC1123)
+
+               methodTests := utils.V4TestCase{
+                       "GET": {
+                               "NOT MODIFIED when NO CHANGES made": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{Header: http.Header{rfc.IfModifiedSince: {tomorrow}}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusNotModified)),
+                               },
+                               "OK when VALID request": {
+                                       ClientSession: TOSession,
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseLengthGreaterOrEqual(1)),
+                               },
+                               "OK when VALID ID parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"id": 
{strconv.Itoa(GetFederationResolverID(t, "0.0.0.0/12")())}}},
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseHasLength(1),
+                                               
validateFederationResolverFields(map[string]interface{}{"ID": 
uint(GetFederationResolverID(t, "0.0.0.0/12")())})),
+                               },
+                               "OK when VALID IPADDRESS parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"ipAddress": {"1.2.3.4"}}},
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseHasLength(1),
+                                               
validateFederationResolverFields(map[string]interface{}{"IPAddress": 
"1.2.3.4"})),
+                               },
+                               "OK when VALID TYPE parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"type": {"RESOLVE4"}}},
+                                       Expectations: 
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
utils.ResponseLengthGreaterOrEqual(1),
+                                               
validateFederationResolverFields(map[string]interface{}{"Type": "RESOLVE4"})),
+                               },
+                               "SORTED by ID when ORDERBY=ID parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"orderby": {"id"}}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
validateFederationResolverIDSort()),
+                               },
+                               "VALID when SORTORDER param is DESC": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"orderby": {"id"}, 
"sortOrder": {"desc"}}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
validateFederationResolverDescSort()),
+                               },
+                               "FIRST RESULT when LIMIT=1": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"orderby": {"id"}, "limit": 
{"1"}}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
validateFederationResolverPagination("limit")),
+                               },
+                               "SECOND RESULT when LIMIT=1 OFFSET=1": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"orderby": {"id"}, "limit": 
{"1"}, "offset": {"1"}}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
validateFederationResolverPagination("offset")),
+                               },
+                               "SECOND RESULT when LIMIT=1 PAGE=2": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"orderby": {"id"}, "limit": 
{"1"}, "page": {"2"}}},
+                                       Expectations:  
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK), 
validateFederationResolverPagination("page")),
+                               },
+                               "BAD REQUEST when INVALID LIMIT parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"limit": {"-2"}}},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                               "BAD REQUEST when INVALID OFFSET parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"limit": {"1"}, "offset": 
{"0"}}},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                               "BAD REQUEST when INVALID PAGE parameter": {
+                                       ClientSession: TOSession,
+                                       RequestOpts:   
client.RequestOptions{QueryParameters: url.Values{"limit": {"1"}, "page": 
{"0"}}},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                       },
+                       "POST": {
+                               "BAD REQUEST when MISSING IPADDRESS and TYPE 
FIELDS": {
+                                       ClientSession: TOSession,
+                                       RequestBody:   map[string]interface{}{},
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                               "BAD REQUEST when INVALID IP ADDRESS": {
+                                       ClientSession: TOSession,
+                                       RequestBody: map[string]interface{}{
+                                               "ipAddress": "not a valid IP 
address",
+                                               "typeId":    GetTypeId(t, 
"RESOLVE4"),
+                                       },
+                                       Expectations: 
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusBadRequest)),
+                               },
+                       },
+                       "DELETE": {
+                               "NOT FOUND when INVALID ID": {
+                                       EndpointId:    func() int { return 0 },
+                                       ClientSession: TOSession,
+                                       Expectations:  
utils.CkRequest(utils.HasError(), utils.HasStatus(http.StatusNotFound)),
+                               },
+                       },
+               }
 
-       opts := client.NewRequestOptions()
-       opts.Header.Set(rfc.IfModifiedSince, time)
-       resp, reqInf, err := TOSession.GetFederationResolvers(opts)
-       if err != nil {
-               t.Fatalf("could not get Federation resolvers: %v - alerts: 
%+v", err, resp.Alerts)
-       }
-       if reqInf.StatusCode != http.StatusNotModified {
-               t.Fatalf("Expected 304 status code, got %v", reqInf.StatusCode)
-       }
+               for method, testCases := range methodTests {
+                       t.Run(method, func(t *testing.T) {
+                               for name, testCase := range testCases {
+                                       fr := tc.FederationResolver{}
+
+                                       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, &fr)
+                                               assert.NoError(t, err, "Error 
occurred when unmarshalling request body: %v", err)
+                                       }
+
+                                       switch method {
+                                       case "GET", "GET AFTER CHANGES":
+                                               t.Run(name, func(t *testing.T) {
+                                                       resp, reqInf, err := 
testCase.ClientSession.GetFederationResolvers(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.CreateFederationResolver(fr, testCase.RequestOpts)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, resp.Response, resp.Alerts, err)
+                                                       }
+                                               })
+                                       case "DELETE":
+                                               t.Run(name, func(t *testing.T) {
+                                                       resp, reqInf, err := 
testCase.ClientSession.DeleteFederationResolver(uint(testCase.EndpointId()), 
testCase.RequestOpts)
+                                                       for _, check := range 
testCase.Expectations {
+                                                               check(t, 
reqInf, resp.Response, resp.Alerts, err)
+                                                       }
+                                               })
+                                       }
+                               }
+                       })
+               }
+       })
 }
 
-func GetTestFederationResolvers(t *testing.T) {
-       var tdlen = len(testData.FederationResolvers)
-       if tdlen < 1 {
-               t.Fatal("no federation resolvers test data")
-       }
-
-       frs, _, err := TOSession.GetFederationResolvers(client.RequestOptions{})
-       if err != nil {
-               t.Errorf("Unexpected error getting Federation Resolvers: %v - 
alerts: %+v", err, frs.Alerts)
-       }
-       if len(frs.Response) != tdlen {
-               t.Fatalf("Wrong number of Federation Resolvers from GET, want 
%d got %d", tdlen, len(frs.Response))
-       }
-
-       var testFr = frs.Response[0]
-       if testFr.ID == nil || testFr.Type == nil || testFr.IPAddress == nil {
-               t.Fatalf("Malformed federation resolver: %+v", testFr)
+func validateFederationResolverFields(expectedResp map[string]interface{}) 
utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ 
tc.Alerts, _ error) {
+               assert.RequireNotNil(t, resp, "Expected Federation Resolver 
response to not be nil.")
+               frResp := resp.([]tc.FederationResolver)
+               for field, expected := range expectedResp {
+                       for _, fr := range frResp {
+                               switch field {
+                               case "ID":
+                                       assert.RequireNotNil(t, fr.ID, 
"Expected ID to not be nil")
+                                       assert.Equal(t, expected, *fr.ID, 
"Expected ID to be %v, but got %d", expected, *fr.ID)
+                               case "IPAddress":
+                                       assert.RequireNotNil(t, fr.IPAddress, 
"Expected IPAddress to not be nil")
+                                       assert.Equal(t, expected, 
*fr.IPAddress, "Expected IPAddress to be %v, but got %s", expected, 
*fr.IPAddress)
+                               case "Type":
+                                       assert.RequireNotNil(t, fr.Type, 
"Expected Type to not be nil")
+                                       assert.Equal(t, expected, *fr.Type, 
"Expected Type to be %v, but got %s", expected, *fr.Type)
+                               default:
+                                       t.Errorf("Expected field: %v, does not 
exist in response", field)
+                               }
+                       }
+               }
        }
-
-       _ = t.Run("Get Federation Resolvers by ID", getFRByIDTest(testFr))
-       _ = t.Run("Get Federation Resolvers by IPAddress", 
getFRByIPTest(testFr))
-       _ = t.Run("Get Federation Resolvers by Type", getFRByTypeTest(testFr))
 }
 
-func getFRByIDTest(testFr tc.FederationResolver) func(*testing.T) {
-       return func(t *testing.T) {
-               if testFr.ID == nil {
-                       t.Fatal("Federation Resolver has nil ID")
-               }
+func validateFederationResolverPagination(paginationParam string) 
utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _ 
tc.Alerts, _ error) {
+               paginationResp := resp.([]tc.FederationResolver)
+
                opts := client.NewRequestOptions()
-               opts.QueryParameters.Set("id", 
strconv.FormatUint(uint64(*testFr.ID), 10))
-               fr, _, err := TOSession.GetFederationResolvers(opts)
-               if err != nil {
-                       t.Fatalf("Unexpected error getting Federation Resolver 
by ID %d: %v - alerts: %+v", *testFr.ID, err, fr.Alerts)
-               }
-               if len(fr.Response) != 1 {
-                       t.Fatalf("Expected exactly one Federation Resolver to 
exist with ID %d, found: %d", *testFr.ID, len(fr.Response))
+               opts.QueryParameters.Set("orderby", "id")
+               respBase, _, err := TOSession.GetFederationResolvers(opts)
+               assert.RequireNoError(t, err, "Cannot get Federation Resolvers: 
%v - alerts: %+v", err, respBase.Alerts)
+
+               fr := respBase.Response
+               assert.RequireGreaterOrEqual(t, len(fr), 3, "Need at least 3 
Federation Resolvers in Traffic Ops to test pagination support, found: %d", 
len(fr))
+               switch paginationParam {
+               case "limit:":
+                       assert.Exactly(t, fr[:1], paginationResp, "expected GET 
Federation Resolvers with limit = 1 to return first result")
+               case "offset":
+                       assert.Exactly(t, fr[1:2], paginationResp, "expected 
GET Federation Resolvers with limit = 1, offset = 1 to return second result")
+               case "page":
+                       assert.Exactly(t, fr[1:2], paginationResp, "expected 
GET Federation Resolvers with limit = 1, page = 2 to return second result")
                }
-
-               cmpr(testFr, fr.Response[0], t)
-
        }
 }
 
-func getFRByIPTest(testFr tc.FederationResolver) func(*testing.T) {
-       return func(t *testing.T) {
-               if testFr.IPAddress == nil {
-                       t.Fatal("Federation Resolver has nil IP Address")
-               }
-               ip := *testFr.IPAddress
-               opts := client.NewRequestOptions()
-               opts.QueryParameters.Set("ipAddress", ip)
-               frs, _, err := TOSession.GetFederationResolvers(opts)
-               if err != nil {
-                       t.Fatalf("Unexpected error getting Federation Resolver 
by IP %s: %v - alerts: %+v", ip, err, frs.Alerts)
+func validateFederationResolverIDSort() utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, 
alerts tc.Alerts, _ error) {
+               assert.RequireNotNil(t, resp, "Expected Federation Resolver 
response to not be nil.")
+               var frIDs []int
+               frResp := resp.([]tc.FederationResolver)
+               for _, fr := range frResp {
+                       frIDs = append(frIDs, int(*fr.ID))
                }
-
-               if len(frs.Response) != 1 {
-                       t.Fatalf("Expected exactly one Federation Resolver with 
IP address '%s', got: %d", ip, len(frs.Response))
-               }
-
-               cmpr(testFr, frs.Response[0], t)
-
+               assert.Equal(t, true, sort.IntsAreSorted(frIDs), "List is not 
sorted by their ids: %v", frIDs)
        }
 }
 
-func getFRByTypeTest(testFr tc.FederationResolver) func(*testing.T) {
-       return func(t *testing.T) {
-               if testFr.Type == nil {
-                       t.Fatal("Federation Resolver has nil Type")
-               }
-               typ := *testFr.Type
+func validateFederationResolverDescSort() utils.CkReqFunc {
+       return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, 
alerts tc.Alerts, _ error) {
+               assert.RequireNotNil(t, resp, "Expected FederationResolver 
response to not be nil.")
+               frDescResp := resp.([]tc.FederationResolver)
+               var descSortedList []uint
+               var ascSortedList []uint
+               assert.RequireGreaterOrEqual(t, len(frDescResp), 2, "Need at 
least 2 Federation Resolvers in Traffic Ops to test desc sort, found: %d", 
len(frDescResp))
+               // Get Federation Resolvers in the default ascending order for 
comparison.
                opts := client.NewRequestOptions()
-               opts.QueryParameters.Set("type", typ)
-               frs, _, err := TOSession.GetFederationResolvers(opts)
-               if err != nil {
-                       t.Fatalf("Unexpected error getting Federation Resolvers 
by Type %s: %v - alerts: %+v", typ, err, frs.Alerts)
-               }
-
-               if len(frs.Response) < 1 {
-                       t.Errorf("Expected at least one Federation Resolver by 
Type '%s' to exist, but none did", typ)
+               opts.QueryParameters.Set("orderby", "id")
+               frAscResp, _, err := TOSession.GetFederationResolvers(opts)
+               assert.RequireNoError(t, err, "Unexpected error getting 
Federation Resolvers with default sort order: %v - alerts: %+v", err, 
frAscResp.Alerts)
+               // Verify the response match in length, i.e. equal amount of 
Federation Resolvers.
+               assert.RequireEqual(t, len(frAscResp.Response), 
len(frDescResp), "Expected descending order response length: %v, to match 
ascending order response length %v", len(frAscResp.Response), len(frDescResp))
+               // Insert Federation Resolvers names to the front of a new 
list, so they are now reversed to be in ascending order.
+               for _, fr := range frDescResp {
+                       descSortedList = append([]uint{*fr.ID}, 
descSortedList...)
                }
-
-               for _, fr := range frs.Response {
-                       if fr.ID == nil {
-                               t.Error("Retrieved Federation Resolver has nil 
ID")
-                       }
-                       if fr.IPAddress == nil {
-                               t.Error("Retrieved Federation Resolver has nil 
IPAddress")
-                       }
-                       if fr.Type == nil {
-                               t.Error("Retrieved Federation Resolver has nil 
Type")
-                       } else if *fr.Type != typ {
-                               t.Errorf("Retrieved Federation Resolver has 
incorrect Type; want '%s', got '%s'", typ, *fr.Type)
-                       }
+               // Insert Federation Resolvers IDs by appending to a new list, 
so they stay in ascending order.
+               for _, fr := range frAscResp.Response {
+                       ascSortedList = append(ascSortedList, *fr.ID)
                }
+               assert.Exactly(t, ascSortedList, descSortedList, "Federation 
Resolver responses are not equal after reversal: %v - %v", ascSortedList, 
descSortedList)
        }
 }
 
-func cmpr(testFr, apiFr tc.FederationResolver, t *testing.T) {
-       if apiFr.ID == nil {
-               t.Error("Retrieved Federation Resolver has nil ID")
-       } else if *apiFr.ID != *testFr.ID {
-               t.Errorf("Retrieved Federation Resolver has incorrect ID; want 
%d, got %d", *testFr.ID, *apiFr.ID)
-       }
-
-       if apiFr.IPAddress == nil {
-               t.Error("Retrieved Federation Resolver has nil IP address")
-       } else if *apiFr.IPAddress != *testFr.IPAddress {
-               t.Errorf("Retrieved Federation Resolver has incorrect 
IPAddress; want %s, got %s", *testFr.IPAddress, *apiFr.IPAddress)
-       }
-
-       if apiFr.Type == nil {
-               t.Error("Retrieved Federation Resolver has nil Type")
-       } else if *apiFr.Type != *testFr.Type {
-               t.Errorf("Retrieved Federation Resolver has incorrect Type; 
want %s, got %s", *testFr.Type, *apiFr.Type)
+func GetFederationResolverID(t *testing.T, ipAddress string) func() int {
+       return func() int {
+               opts := client.NewRequestOptions()
+               opts.QueryParameters.Set("ipAddress", ipAddress)
+               federationResolvers, _, err := 
TOSession.GetFederationResolvers(opts)
+               assert.RequireNoError(t, err, "Get FederationResolvers Request 
failed with error:", err)
+               assert.RequireEqual(t, 1, len(federationResolvers.Response), 
"Expected response object length 1, but got %d", 
len(federationResolvers.Response))
+               assert.RequireNotNil(t, federationResolvers.Response[0].ID, 
"Expected Federation Resolver ID to not be nil")
+               return int(*federationResolvers.Response[0].ID)
        }
 }
 
 func CreateTestFederationResolvers(t *testing.T) {
-       opts := client.NewRequestOptions()
        for _, fr := range testData.FederationResolvers {
-               if fr.Type == nil {
-                       t.Fatal("testData Federation Resolver has nil Type")
-               }
-
-               opts.QueryParameters.Set("name", *fr.Type)
-               tid, _, err := TOSession.GetTypes(opts)
-               if err != nil {
-                       t.Fatalf("Couldn't get an ID for Type '%s': %v - 
alerts: %+v", *fr.Type, err, tid.Alerts)
-               }
-               if len(tid.Response) != 1 {
-                       t.Fatalf("Expected exactly one Type by name %s, got 
%d", *fr.Type, len(tid.Response))
-               }
-
-               fr.TypeID = util.UIntPtr(uint(tid.Response[0].ID))
-
-               alerts, _, err := TOSession.CreateFederationResolver(fr, 
client.RequestOptions{})
-               if err != nil {
-                       t.Fatalf("failed to create Federation Resolver %+v: %v 
- alerts: %+v", fr, err, alerts.Alerts)
-               }
-               for _, a := range alerts.Alerts.Alerts {
-                       if a.Level == tc.ErrorLevel.String() {
-                               t.Errorf("Unexpected error-level alert creating 
a federation resolver: %s", a.Text)
-                       }
-               }
-       }
-
-       var invalidFR tc.FederationResolver
-       response, _, err := TOSession.CreateFederationResolver(invalidFR, 
client.RequestOptions{})
-       if err == nil {
-               t.Error("Expected an error creating a bad Federation Resolver, 
but didn't get one")
-       }
-       for _, a := range response.Alerts.Alerts {
-               if a.Level == tc.SuccessLevel.String() {
-                       t.Errorf("Unexpected success creating a bad Federation 
Resolver: %s", a.Text)
-               }
-       }
-
-       invalidFR.TypeID = util.UIntPtr(1)
-       invalidFR.IPAddress = util.StrPtr("not a valid IP address")
-       response, _, err = TOSession.CreateFederationResolver(invalidFR, 
client.RequestOptions{})
-       if err == nil {
-               t.Error("Expected an error creating a bad Federation Resolver, 
but didn't get one")
-       }
-       for _, a := range response.Alerts.Alerts {
-               if a.Level == tc.SuccessLevel.String() {
-                       t.Errorf("Unexpected success creating a bad Federation 
Resolver: %s", a.Text)
-               }
+               fr.TypeID = util.UIntPtr(uint(GetTypeId(t, *fr.Type)))
+               resp, _, err := TOSession.CreateFederationResolver(fr, 
client.RequestOptions{})
+               assert.RequireNoError(t, err, "Failed to create Federation 
Resolver %+v: %v - alerts: %+v", fr, err, resp.Alerts)
        }
 }
 
 func DeleteTestFederationResolvers(t *testing.T) {
        frs, _, err := TOSession.GetFederationResolvers(client.RequestOptions{})
-       if err != nil {
-               t.Errorf("Unexpected error getting Federation Resolvers: %v - 
alerts: %+v", err, frs.Alerts)
-       }
-       if len(frs.Response) < 1 {
-               t.Fatal("Found no Federation Resolvers to delete")
-       }
+       assert.RequireNoError(t, err, "Unexpected error getting Federation 
Resolvers: %v - alerts: %+v", err, frs.Alerts)
        for _, fr := range frs.Response {
-               if fr.ID == nil {
-                       t.Fatalf("Malformed Federation Resolver: %+v", fr)
-               }
                alerts, _, err := TOSession.DeleteFederationResolver(*fr.ID, 
client.RequestOptions{})
-               if err != nil {
-                       t.Fatalf("failed to delete Federation Resolver %+v: %v 
- alerts: %+v", fr, err, alerts.Alerts)
-               }
-               for _, a := range alerts.Alerts.Alerts {
-                       if a.Level == tc.ErrorLevel.String() {
-                               t.Errorf("Unexpected error-level alert deleting 
a federation resolver: %s", a.Text)
-                       }
-               }
-       }
-
-       alerts, _, err := TOSession.DeleteFederationResolver(0, 
client.RequestOptions{})
-       if err == nil {
-               t.Error("Expected an error deleting a non-existent Federation 
Resolver, but didn't get one")
-       }
-       for _, a := range alerts.Alerts.Alerts {
-               if a.Level == tc.SuccessLevel.String() {
-                       t.Errorf("Unexpected success deleting a non-existent 
Federation Resolver: %s", a.Text)
-               }
-       }
-
-}
-
-func GetTestPaginationSupportFedResolver(t *testing.T) {
-       opts := client.NewRequestOptions()
-       opts.QueryParameters.Set("orderby", "id")
-       resp, _, err := TOSession.GetFederationResolvers(opts)
-       if err != nil {
-               t.Fatalf("cannot Get FederationResolver: %v - alerts: %+v", 
err, resp.Alerts)
-       }
-       fedResolver := resp.Response
-       if len(fedResolver) < 3 {
-               t.Fatalf("Need at least 3 FederationResolver in Traffic Ops to 
test pagination support, found: %d", len(fedResolver))
-       }
-
-       opts.QueryParameters.Set("limit", "1")
-       fedResolverWithLimit, _, err := TOSession.GetFederationResolvers(opts)
-       if err != nil {
-               t.Fatalf("cannot Get FederationResolver with Limit: %v - 
alerts: %+v", err, fedResolverWithLimit.Alerts)
-       }
-       if !reflect.DeepEqual(fedResolver[:1], fedResolverWithLimit.Response) {
-               t.Error("expected GET FederationResolver with limit = 1 to 
return first result")
-       }
-
-       opts.QueryParameters.Set("offset", "1")
-       fedResolverWithOffset, _, err := TOSession.GetFederationResolvers(opts)
-       if err != nil {
-               t.Fatalf("cannot Get FederationResolver with Limit and Offset: 
%v - alerts: %+v", err, fedResolverWithOffset.Alerts)
-       }
-       if !reflect.DeepEqual(fedResolver[1:2], fedResolverWithOffset.Response) 
{
-               t.Error("expected GET FederationResolver with limit = 1, offset 
= 1 to return second result")
-       }
-
-       opts.QueryParameters.Del("offset")
-       opts.QueryParameters.Set("page", "2")
-       fedResolverWithPage, _, err := TOSession.GetFederationResolvers(opts)
-       if err != nil {
-               t.Fatalf("cannot Get FederationResolver with Limit and Page: %v 
- alerts: %+v", err, fedResolverWithPage.Alerts)
-       }
-       if !reflect.DeepEqual(fedResolver[1:2], fedResolverWithPage.Response) {
-               t.Error("expected GET FederationResolver with limit = 1, page = 
2 to return second result")
-       }
-
-       opts.QueryParameters = url.Values{}
-       opts.QueryParameters.Set("limit", "-2")
-       resp, reqInf, err := TOSession.GetFederationResolvers(opts)
-       if err == nil {
-               t.Error("expected GET FederationResolver to return an error 
when limit is not bigger than -1")
-       }
-       if reqInf.StatusCode != http.StatusBadRequest {
-               t.Fatalf("Expected 400 status code, got %v", reqInf.StatusCode)
-       }
-
-       opts.QueryParameters.Set("limit", "1")
-       opts.QueryParameters.Set("offset", "0")
-       resp, reqInf, err = TOSession.GetFederationResolvers(opts)
-       if err == nil {
-               t.Error("expected GET FederationResolver to return an error 
when offset is not a positive integer")
-       }
-       if reqInf.StatusCode != http.StatusBadRequest {
-               t.Fatalf("Expected 400 status code, got %v", reqInf.StatusCode)
-       }
-
-       opts.QueryParameters = url.Values{}
-       opts.QueryParameters.Set("limit", "1")
-       opts.QueryParameters.Set("page", "0")
-       resp, reqInf, err = TOSession.GetFederationResolvers(opts)
-       if err == nil {
-               t.Error("expected GET FederationResolver to return an error 
when page is not a positive integer")
-       }
-       if reqInf.StatusCode != http.StatusBadRequest {
-               t.Fatalf("Expected 400 status code, got %v", reqInf.StatusCode)
-       }
-}
-
-func SortTestFederationResolver(t *testing.T) {
-       var sortedList []uint
-       opts := client.NewRequestOptions()
-       opts.QueryParameters.Set("orderby", "id")
-       resp, _, err := TOSession.GetFederationResolvers(opts)
-       if err != nil {
-               t.Fatalf("Expected no error, but got %v - alerts: %+v", err, 
resp.Alerts)
-       }
-       for _, fedRes := range resp.Response {
-               if fedRes.ID == nil {
-                       t.Fatalf("Federation resolver ID is nil, so sorting 
can't be tested")
-               }
-               sortedList = append(sortedList, *fedRes.ID)
-       }
-       res := sort.SliceIsSorted(sortedList, func(p, q int) bool {
-               return sortedList[p] < sortedList[q]
-       })
-       if res != true {
-               t.Errorf("list is not sorted by their Federation Resolver ID: 
%v", sortedList)
-       }
-}
-
-func SortTestFederationsResolverDesc(t *testing.T) {
-
-       opts := client.NewRequestOptions()
-       opts.QueryParameters.Set("orderby", "id")
-       resp, _, err := TOSession.GetFederationResolvers(opts)
-       if err != nil {
-               t.Fatalf("Expected no error, but got error in Federation 
Resolver default ordering %v - alerts: %+v", err, resp.Alerts)
-       }
-       respAsc := resp.Response
-       if len(respAsc) < 1 {
-               t.Fatal("Need at least one Federation Resolver in Traffic Ops 
to test Federation Resolver sort ordering")
-       }
-       opts.QueryParameters.Set("sortOrder", "desc")
-       resp, _, err = TOSession.GetFederationResolvers(opts)
-       if err != nil {
-               t.Errorf("Expected no error, but got error in Federation 
Resolver with Descending ordering: %v - alerts: %+v", err, resp.Alerts)
-       }
-       respDesc := resp.Response
-       if len(respDesc) < 1 {
-               t.Fatal("Need at least one Federation Resolver in Traffic Ops 
to test Federation resolver sort ordering")
-       }
-       if len(respAsc) != len(respDesc) {
-               t.Fatalf("Traffic Ops returned %d Federation Resolver using 
default sort order, but %d Federation Resolver when sort order was explicitly 
set to descending", len(respAsc), len(respDesc))
-       }
-       for start, end := 0, len(respDesc)-1; start < end; start, end = 
start+1, end-1 {
-               respDesc[start], respDesc[end] = respDesc[end], respDesc[start]
-       }
-       if respDesc[0].ID == nil || respAsc[0].ID == nil {
-               t.Fatalf("Response ID is nil in Test federation Resolver")
-       }
-       if *respDesc[0].ID != *respAsc[0].ID {
-               t.Errorf("Federation Resolver responses are not equal after 
reversal: Asc: %d - Desc: %d", *respDesc[0].ID, *respAsc[0].ID)
+               assert.NoError(t, err, "Failed to delete Federation Resolver 
%+v: %v - alerts: %+v", fr, err, alerts.Alerts)
+               // Retrieve the Federation Resolver to see if it got deleted
+               opts := client.NewRequestOptions()
+               opts.QueryParameters.Set("id", strconv.Itoa(int(*fr.ID)))
+               getFR, _, err := TOSession.GetFederationResolvers(opts)
+               assert.NoError(t, err, "Error getting Federation Resolver '%d' 
after deletion: %v - alerts: %+v", *fr.ID, err, getFR.Alerts)
+               assert.Equal(t, 0, len(getFR.Response), "Expected Federation 
Resolver '%d' to be deleted, but it was found in Traffic Ops", *fr.ID)
        }
 }

Reply via email to