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 b70177377d Refactor Steering Targets Tests (#6921)
b70177377d is described below
commit b70177377dc425a8ce0b6bfb2e40330af76f7ba3
Author: Eric Holguin <[email protected]>
AuthorDate: Thu Jun 30 12:09:59 2022 -0600
Refactor Steering Targets Tests (#6921)
* Updated create prerequisite function for steering targets
* Refactor v3 steering tests
* Refactor v4 sterring tests
* Add prerquisite for update steering target tests
* Add get with header function
---
traffic_ops/testing/api/v3/steeringtargets_test.go | 545 +++++++-------------
traffic_ops/testing/api/v3/tc-fixtures.json | 6 +
traffic_ops/testing/api/v3/withobjs_test.go | 2 +-
traffic_ops/testing/api/v4/steeringtargets_test.go | 564 +++++++--------------
traffic_ops/testing/api/v4/tc-fixtures.json | 6 +
traffic_ops/testing/api/v4/withobjs_test.go | 2 +-
traffic_ops/v3-client/steeringtarget.go | 9 +
7 files changed, 401 insertions(+), 733 deletions(-)
diff --git a/traffic_ops/testing/api/v3/steeringtargets_test.go
b/traffic_ops/testing/api/v3/steeringtargets_test.go
index e59422d0fd..450220e251 100644
--- a/traffic_ops/testing/api/v3/steeringtargets_test.go
+++ b/traffic_ops/testing/api/v3/steeringtargets_test.go
@@ -16,400 +16,233 @@ package v3
*/
import (
+ "encoding/json"
"net/http"
"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/v3-client"
+ "github.com/apache/trafficcontrol/traffic_ops/testing/api/assert"
+ "github.com/apache/trafficcontrol/traffic_ops/testing/api/utils"
+ "github.com/apache/trafficcontrol/traffic_ops/toclientlib"
)
-var SteeringUserSession *client.Session
-
func TestSteeringTargets(t *testing.T) {
+ WithObjs(t, []TCObj{CDNs, Types, Tenants, Parameters, Profiles,
Statuses, Divisions, Regions, PhysLocations, CacheGroups, Servers, Topologies,
ServiceCategories, DeliveryServices, Users, SteeringTargets}, func() {
+
+ steeringUserSession := utils.CreateV3Session(t,
Config.TrafficOps.URL, "steering", "pa$$word",
Config.Default.Session.TimeoutInSecs)
+
+ currentTime := time.Now().UTC().Add(-15 * time.Second)
+ currentTimeRFC := currentTime.Format(time.RFC1123)
+ tomorrow := currentTime.AddDate(0, 0, 1).Format(time.RFC1123)
+
+ methodTests := utils.V3TestCase{
+ "GET": {
+ "NOT MODIFIED when NO CHANGES made": {
+ EndpointId: GetDeliveryServiceId(t,
"ds1"),
+ ClientSession: steeringUserSession,
+ RequestHeaders:
http.Header{rfc.IfModifiedSince: {tomorrow}},
+ Expectations:
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusNotModified)),
+ },
+ "OK when VALID request": {
+ EndpointId: GetDeliveryServiceId(t,
"ds1"),
+ ClientSession: steeringUserSession,
+ Expectations:
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK),
utils.ResponseHasLength(1),
+
validateSteeringTargetFields(map[string]interface{}{"DeliveryService": "ds1",
"DeliveryServiceID": uint64(GetDeliveryServiceId(t, "ds1")()),
+ "Target": "ds2",
"TargetID": uint64(GetDeliveryServiceId(t, "ds2")()), "Type":
"STEERING_WEIGHT", "TypeID": GetTypeID(t, "STEERING_WEIGHT")(), "Value":
util.JSONIntStr(42)})),
+ },
+ },
+ "PUT": {
+ "OK when VALID request": {
+ ClientSession: steeringUserSession,
+ RequestBody: map[string]interface{}{
+ "deliveryServiceId":
GetDeliveryServiceId(t, "ds3")(),
+ "targetId":
GetDeliveryServiceId(t, "ds4")(),
+ "value": -12345,
+ "typeId":
GetTypeID(t, "STEERING_WEIGHT")(),
+ },
+ Expectations:
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK),
+
validateSteeringTargetUpdateCreateFields(GetDeliveryServiceId(t, "ds3")(),
+
map[string]interface{}{"DeliveryService": "ds3", "DeliveryServiceID":
uint64(GetDeliveryServiceId(t, "ds3")()),
+ "Target":
"ds4", "TargetID": uint64(GetDeliveryServiceId(t, "ds4")()), "Type":
"STEERING_WEIGHT",
+ "TypeID":
GetTypeID(t, "STEERING_WEIGHT")(), "Value": util.JSONIntStr(-12345)})),
+ },
+ "PRECONDITION FAILED when updating with IMS &
IUS Headers": {
+ ClientSession: steeringUserSession,
+ RequestHeaders:
http.Header{rfc.IfUnmodifiedSince: {currentTimeRFC}},
+ RequestBody: map[string]interface{}{
+ "deliveryServiceId":
GetDeliveryServiceId(t, "ds3")(),
+ "targetId":
GetDeliveryServiceId(t, "ds4")(),
+ "value": -12345,
+ "type":
"STEERING_WEIGHT",
+ "typeId":
GetTypeID(t, "STEERING_WEIGHT")(),
+ },
+ Expectations:
utils.CkRequest(utils.HasError(),
utils.HasStatus(http.StatusPreconditionFailed)),
+ },
+ "PRECONDITION FAILED when updating with IFMATCH
ETAG Header": {
+ ClientSession: steeringUserSession,
+ RequestHeaders:
http.Header{rfc.IfMatch: {rfc.ETag(currentTime)}},
+ RequestBody: map[string]interface{}{
+ "deliveryServiceId":
GetDeliveryServiceId(t, "ds3")(),
+ "targetId":
GetDeliveryServiceId(t, "ds4")(),
+ "value": -12345,
+ "type":
"STEERING_WEIGHT",
+ "typeId":
GetTypeID(t, "STEERING_WEIGHT")(),
+ },
+ Expectations:
utils.CkRequest(utils.HasError(),
utils.HasStatus(http.StatusPreconditionFailed)),
+ },
+ },
+ "GET AFTER CHANGES": {
+ "OK when CHANGES made": {
+ EndpointId: GetDeliveryServiceId(t,
"ds1"),
+ ClientSession: steeringUserSession,
+ RequestHeaders:
http.Header{rfc.IfModifiedSince: {currentTimeRFC}},
+ Expectations:
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK)),
+ },
+ },
+ }
- WithObjs(t, []TCObj{CDNs, Types, Tenants, Parameters, Profiles,
Statuses, Divisions, Regions, PhysLocations, CacheGroups, Servers, Topologies,
DeliveryServices, Users, SteeringTargets}, func() {
- GetTestSteeringTargetsIMS(t)
- GetTestSteeringTargets(t)
- currentTime := time.Now().UTC().Add(-5 * time.Second)
- time := currentTime.Format(time.RFC1123)
- var header http.Header
- header = make(map[string][]string)
- header.Set(rfc.IfModifiedSince, time)
- header.Set(rfc.IfUnmodifiedSince, time)
- UpdateTestSteeringTargets(t)
- UpdateTestSteeringTargetsWithHeaders(t, header)
- GetTestSteeringTargetsIMSAfterChange(t, header)
- header = make(map[string][]string)
- etag := rfc.ETag(currentTime)
- header.Set(rfc.IfMatch, etag)
- UpdateTestSteeringTargetsWithHeaders(t, header)
+ for method, testCases := range methodTests {
+ t.Run(method, func(t *testing.T) {
+ for name, testCase := range testCases {
+ steeringTarget :=
tc.SteeringTargetNullable{}
+
+ 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,
&steeringTarget)
+ 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.GetSteeringTargetsWithHdr(testCase.EndpointId(),
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.CreateSteeringTarget(steeringTarget)
+ for _, check := range
testCase.Expectations {
+ check(t,
reqInf, nil, alerts, err)
+ }
+ })
+ case "PUT":
+ t.Run(name, func(t *testing.T) {
+ alerts, reqInf, err :=
testCase.ClientSession.UpdateSteeringTargetWithHdr(steeringTarget,
testCase.RequestHeaders)
+ for _, check := range
testCase.Expectations {
+ check(t,
reqInf, nil, alerts, err)
+ }
+ })
+ case "DELETE":
+ t.Run(name, func(t *testing.T) {
+ var targetID int
+ if testCase.RequestBody
!= nil {
+ if val, ok :=
testCase.RequestBody["targetID"]; ok {
+
targetID = val.(int)
+ }
+ }
+ alerts, reqInf, err :=
testCase.ClientSession.DeleteSteeringTarget(testCase.EndpointId(), targetID)
+ for _, check := range
testCase.Expectations {
+ check(t,
reqInf, nil, alerts, err)
+ }
+ })
+ }
+ }
+ })
+ }
})
}
-func UpdateTestSteeringTargetsWithHeaders(t *testing.T, header http.Header) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
- if st.Target == nil {
- t.Fatal("updating steering target: test data missing target")
- }
-
- respDS, _, err :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullableWithHdr(string(*st.DeliveryService),
header)
- if err != nil {
- t.Fatalf("updating steering target: getting ds: %v", err)
- }
- if len(respDS) < 1 {
- t.Fatal("updating steering target: getting ds: not found")
- }
- if respDS[0].ID == nil {
- t.Fatal("updating steering target: getting ds: nil id returned")
- }
- dsID := *respDS[0].ID
-
- sts, _, err := SteeringUserSession.GetSteeringTargets(dsID)
- if err != nil {
- t.Fatalf("updating steering targets: getting steering target:
%v", err)
- }
- if len(sts) < 1 {
- t.Fatal("updating steering targets: getting steering target:
got 0")
- }
- st = sts[0]
-
- expected := util.JSONIntStr(-12345)
- if st.Value != nil && *st.Value == expected {
- expected++
- }
- st.Value = &expected
-
- _, reqInf, err := SteeringUserSession.UpdateSteeringTargetWithHdr(st,
header)
- if err == nil {
- t.Errorf("Expected error about precondition failed, but got
none")
- }
- if reqInf.StatusCode != http.StatusPreconditionFailed {
- t.Errorf("Expected status code 412, got %v", reqInf.StatusCode)
- }
-}
-
-func GetTestSteeringTargetsIMSAfterChange(t *testing.T, header http.Header) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
- _, reqInf, err :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullableWithHdr(string(*st.DeliveryService),
header)
- if err != nil {
- t.Fatalf("Expected no error, but got %v", err.Error())
- }
- if reqInf.StatusCode != http.StatusOK {
- t.Fatalf("Expected 200 status code, got %v", reqInf.StatusCode)
- }
- currentTime := time.Now().UTC()
- currentTime = currentTime.Add(1 * time.Second)
- timeStr := currentTime.Format(time.RFC1123)
- header.Set(rfc.IfModifiedSince, timeStr)
- _, reqInf, err =
SteeringUserSession.GetDeliveryServiceByXMLIDNullableWithHdr(string(*st.DeliveryService),
header)
- if err != nil {
- t.Fatalf("Expected no error, but got %v", err.Error())
- }
- if reqInf.StatusCode != http.StatusNotModified {
- t.Fatalf("Expected 304 status code, got %v", reqInf.StatusCode)
- }
-}
-
-func GetTestSteeringTargetsIMS(t *testing.T) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
- 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 :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullableWithHdr(string(*st.DeliveryService),
header)
- if err != nil {
- t.Fatalf("Expected no error, but got %v", err.Error())
- }
- if reqInf.StatusCode != http.StatusNotModified {
- t.Fatalf("Expected 304 status code, got %v", reqInf.StatusCode)
- }
-}
-
-// SetupSteeringTargets calls the CreateSteeringTargets test. It also sets the
steering user session
-// with the logged in steering user. SteeringUserSession is used by steering
target test functions.
-// Running this function depends on CreateTestUsers.
-func SetupSteeringTargets(t *testing.T) {
- var err error
- toReqTimeout := time.Second *
time.Duration(Config.Default.Session.TimeoutInSecs)
- SteeringUserSession, _, err = client.LoginWithAgent(TOSession.URL,
"steering", "pa$$word", true, "to-api-v1-client-tests/steering", true,
toReqTimeout)
- if err != nil {
- t.Fatalf("failed to get log in with steering user: %v",
err.Error())
- }
-
- CreateTestSteeringTargets(t)
-}
-
-func CreateTestSteeringTargets(t *testing.T) {
- for _, st := range testData.SteeringTargets {
- if st.Type == nil {
- t.Fatal("creating steering target: test data missing
type")
- }
- if st.DeliveryService == nil {
- t.Fatal("creating steering target: test data missing
ds")
- }
- if st.Target == nil {
- t.Fatal("creating steering target: test data missing
target")
- }
-
- {
- respTypes, _, err :=
SteeringUserSession.GetTypeByName(*st.Type)
- if err != nil {
- t.Fatalf("creating steering target: getting
type: %v", err)
- } else if len(respTypes) < 1 {
- t.Fatal("creating steering target: getting
type: not found")
+func validateSteeringTargetFields(expectedResp map[string]interface{})
utils.CkReqFunc {
+ return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _
tc.Alerts, _ error) {
+ assert.RequireNotNil(t, resp, "Expected Steering Targets
response to not be nil.")
+ steeringTargetsResp := resp.([]tc.SteeringTargetNullable)
+ for field, expected := range expectedResp {
+ for _, steeringTarget := range steeringTargetsResp {
+ switch field {
+ case "DeliveryService":
+ assert.RequireNotNil(t,
steeringTarget.DeliveryService, "Expected DeliveryService to not be nil.")
+ assert.Equal(t, expected,
string(*steeringTarget.DeliveryService), "Expected DeliveryService to be %v,
but got %s", expected, *steeringTarget.DeliveryService)
+ case "DeliveryServiceID":
+ assert.RequireNotNil(t,
steeringTarget.DeliveryServiceID, "Expected DeliveryServiceID to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.DeliveryServiceID, "Expected DeliveryServiceID to be %v, but
got %s", expected, *steeringTarget.DeliveryServiceID)
+ case "Target":
+ assert.RequireNotNil(t,
steeringTarget.Target, "Expected Target to not be nil.")
+ assert.Equal(t, expected,
string(*steeringTarget.Target), "Expected Target to be %v, but got %s",
expected, *steeringTarget.Target)
+ case "TargetID":
+ assert.RequireNotNil(t,
steeringTarget.TargetID, "Expected TargetID to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.TargetID, "Expected TargetID to be %v, but got %s", expected,
*steeringTarget.TargetID)
+ case "Type":
+ assert.RequireNotNil(t,
steeringTarget.Type, "Expected Type to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.Type, "Expected Type to be %v, but got %s", expected,
*steeringTarget.Type)
+ case "TypeID":
+ assert.RequireNotNil(t,
steeringTarget.Type, "Expected TypeID to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.TypeID, "Expected TypeID to be %v, but got %s", expected,
*steeringTarget.TypeID)
+ case "Value":
+ assert.RequireNotNil(t,
steeringTarget.Value, "Expected Value to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.Value, "Expected Value to be %v, but got %s", expected,
*steeringTarget.Value)
+ default:
+ t.Errorf("Expected field: %v, does not
exist in response", field)
+ }
}
- st.TypeID = util.IntPtr(respTypes[0].ID)
- }
- {
- respDS, _, err :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullable(string(*st.DeliveryService))
- if err != nil {
- t.Fatalf("creating steering target: getting ds:
%v", err)
- } else if len(respDS) < 1 {
- t.Fatal("creating steering target: getting ds:
not found")
- } else if respDS[0].ID == nil {
- t.Fatal("creating steering target: getting ds:
nil ID returned")
- }
- dsID := uint64(*respDS[0].ID)
- st.DeliveryServiceID = &dsID
- }
- {
- respTarget, _, err :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullable(string(*st.Target))
- if err != nil {
- t.Fatalf("creating steering target: getting
target ds: %v", err)
- } else if len(respTarget) < 1 {
- t.Fatal("creating steering target: getting
target ds: not found")
- } else if respTarget[0].ID == nil {
- t.Fatal("creating steering target: getting
target ds: nil ID returned")
- }
- targetID := uint64(*respTarget[0].ID)
- st.TargetID = &targetID
- }
-
- resp, _, err := SteeringUserSession.CreateSteeringTarget(st)
- t.Log("Response: ", resp)
- if err != nil {
- t.Fatalf("creating steering target: %v", err)
}
}
}
-func UpdateTestSteeringTargets(t *testing.T) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
- if st.Target == nil {
- t.Fatal("updating steering target: test data missing target")
- }
-
- respDS, _, err :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullable(string(*st.DeliveryService))
- if err != nil {
- t.Fatalf("updating steering target: getting ds: %v", err)
- }
- if len(respDS) < 1 {
- t.Fatal("updating steering target: getting ds: not found")
- }
- if respDS[0].ID == nil {
- t.Fatal("updating steering target: getting ds: nil id returned")
- }
- dsID := *respDS[0].ID
-
- sts, _, err := SteeringUserSession.GetSteeringTargets(dsID)
- if err != nil {
- t.Fatalf("updating steering targets: getting steering target:
%v", err)
- }
- if len(sts) < 1 {
- t.Fatal("updating steering targets: getting steering target:
got 0")
- }
- st = sts[0]
-
- expected := util.JSONIntStr(-12345)
- if st.Value != nil && *st.Value == expected {
- expected++
- }
- st.Value = &expected
-
- _, _, err = SteeringUserSession.UpdateSteeringTarget(st)
- if err != nil {
- t.Fatalf("updating steering targets: updating: %+v", err)
- }
-
- sts, _, err = SteeringUserSession.GetSteeringTargets(dsID)
- if err != nil {
- t.Fatalf("updating steering targets: getting updated steering
target: %v", err)
- }
- if len(sts) < 1 {
- t.Fatal("updating steering targets: getting updated steering
target: got 0")
- }
- actual := sts[0]
-
- if actual.DeliveryServiceID == nil {
- t.Fatalf("steering target update: ds id expected %v actual %v",
dsID, nil)
- } else if *actual.DeliveryServiceID != uint64(dsID) {
- t.Fatalf("steering target update: ds id expected %v actual %v",
dsID, *actual.DeliveryServiceID)
- }
- if actual.TargetID == nil {
- t.Fatalf("steering target update: ds id expected %v actual %v",
dsID, nil)
- } else if *actual.TargetID != *st.TargetID {
- t.Fatalf("steering target update: ds id expected %v actual %v",
*st.TargetID, *actual.TargetID)
- }
- if actual.TypeID == nil {
- t.Fatalf("steering target update: ds id expected %v actual %v",
*st.TypeID, nil)
- } else if *actual.TypeID != *st.TypeID {
- t.Fatalf("steering target update: ds id expected %v actual %v",
*st.TypeID, *actual.TypeID)
- }
- if actual.DeliveryService == nil {
- t.Fatalf("steering target update: ds expected %v actual %v",
*st.DeliveryService, nil)
- } else if *st.DeliveryService != *actual.DeliveryService {
- t.Fatalf("steering target update: ds name expected %v actual
%v", *st.DeliveryService, *actual.DeliveryService)
- }
- if actual.Target == nil {
- t.Fatalf("steering target update: target expected %v actual
%v", *st.Target, nil)
- } else if *st.Target != *actual.Target {
- t.Fatalf("steering target update: target expected %v actual
%v", *st.Target, *actual.Target)
- }
- if actual.Type == nil {
- t.Fatalf("steering target update: type expected %v actual %v",
*st.Type, nil)
- } else if *st.Type != *actual.Type {
- t.Fatalf("steering target update: type expected %v actual %v",
*st.Type, *actual.Type)
- }
- if actual.Value == nil {
- t.Fatalf("steering target update: ds expected %v actual %v",
*st.Value, nil)
- } else if *st.Value != *actual.Value {
- t.Fatalf("steering target update: value expected %v actual %v",
*st.Value, actual.Value)
+func validateSteeringTargetUpdateCreateFields(dsId int, expectedResp
map[string]interface{}) utils.CkReqFunc {
+ return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _
tc.Alerts, _ error) {
+ steeringTargets, _, err := TOSession.GetSteeringTargets(dsId)
+ assert.RequireNoError(t, err, "Error getting Steering Targets:
%v", err)
+ assert.RequireEqual(t, 1, len(steeringTargets), "Expected one
Steering Target returned Got: %d", len(steeringTargets))
+ validateSteeringTargetFields(expectedResp)(t,
toclientlib.ReqInf{}, steeringTargets, tc.Alerts{}, nil)
}
}
-func GetTestSteeringTargets(t *testing.T) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
-
- respDS, _, err :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullable(string(*st.DeliveryService))
- if err != nil {
- t.Fatalf("creating steering target: getting ds: %v", err)
- } else if len(respDS) < 1 {
- t.Fatal("steering target get: getting ds: not found")
- } else if respDS[0].ID == nil {
- t.Fatal("steering target get: getting ds: nil id returned")
- }
- dsID := *respDS[0].ID
-
- sts, _, err := SteeringUserSession.GetSteeringTargets(dsID)
- if err != nil {
- t.Fatalf("steering target get: getting steering target: %v",
err)
- }
-
- if len(sts) != len(testData.SteeringTargets) {
- t.Fatalf("steering target get: expected %v actual %v",
len(testData.SteeringTargets), len(sts))
- }
-
- expected := testData.SteeringTargets[0]
- actual := sts[0]
-
- if actual.DeliveryServiceID == nil {
- t.Fatalf("steering target get: ds id expected %v actual %v",
dsID, nil)
- } else if *actual.DeliveryServiceID != uint64(dsID) {
- t.Fatalf("steering target get: ds id expected %v actual %v",
dsID, *actual.DeliveryServiceID)
- }
- if actual.DeliveryService == nil {
- t.Fatalf("steering target get: ds expected %v actual %v",
expected.DeliveryService, nil)
- } else if *expected.DeliveryService != *actual.DeliveryService {
- t.Fatalf("steering target get: ds name expected %v actual %v",
expected.DeliveryService, actual.DeliveryService)
- }
- if actual.Target == nil {
- t.Fatalf("steering target get: target expected %v actual %v",
expected.Target, nil)
- } else if *expected.Target != *actual.Target {
- t.Fatalf("steering target get: target expected %v actual %v",
expected.Target, actual.Target)
- }
- if actual.Type == nil {
- t.Fatalf("steering target get: type expected %v actual %v",
expected.Type, nil)
- } else if *expected.Type != *actual.Type {
- t.Fatalf("steering target get: type expected %v actual %v",
expected.Type, actual.Type)
- }
- if actual.Value == nil {
- t.Fatalf("steering target get: ds expected %v actual %v",
expected.Value, nil)
- } else if *expected.Value != *actual.Value {
- t.Fatalf("steering target get: value expected %v actual %v",
*expected.Value, *actual.Value)
+func CreateTestSteeringTargets(t *testing.T) {
+ steeringUserSession := utils.CreateV3Session(t, Config.TrafficOps.URL,
"steering", "pa$$word", Config.Default.Session.TimeoutInSecs)
+ for _, st := range testData.SteeringTargets {
+ st.TypeID = util.IntPtr(GetTypeID(t, *st.Type)())
+ st.DeliveryServiceID =
util.UInt64Ptr(uint64(GetDeliveryServiceId(t, string(*st.DeliveryService))()))
+ st.TargetID = util.UInt64Ptr(uint64(GetDeliveryServiceId(t,
string(*st.Target))()))
+ resp, _, err := steeringUserSession.CreateSteeringTarget(st)
+ assert.RequireNoError(t, err, "Creating steering target: %v -
alerts: %+v", err, resp.Alerts)
}
}
func DeleteTestSteeringTargets(t *testing.T) {
+ steeringUserSession := utils.CreateV3Session(t, Config.TrafficOps.URL,
"steering", "pa$$word", Config.Default.Session.TimeoutInSecs)
dsIDs := []uint64{}
for _, st := range testData.SteeringTargets {
- if st.DeliveryService == nil {
- t.Fatal("deleting steering target: test data missing
ds")
- }
- if st.Target == nil {
- t.Fatal("deleting steering target: test data missing
target")
- }
+ respDS, _, err :=
steeringUserSession.GetDeliveryServiceByXMLIDNullableWithHdr(string(*st.DeliveryService),
nil)
+ assert.RequireNoError(t, err, "Deleting steering target:
getting ds: %v", err)
+ assert.RequireEqual(t, 1, len(respDS), "Deleting steering
target: getting ds: expected 1 delivery service")
+ assert.RequireNotNil(t, respDS[0].ID, "Deleting steering
target: getting ds: nil ID returned")
- respDS, _, err :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullable(string(*st.DeliveryService))
- if err != nil {
- t.Fatalf("deleting steering target: getting ds: %v",
err)
- } else if len(respDS) < 1 {
- t.Fatal("deleting steering target: getting ds: not
found")
- } else if respDS[0].ID == nil {
- t.Fatal("deleting steering target: getting ds: nil ID
returned")
- }
dsID := uint64(*respDS[0].ID)
st.DeliveryServiceID = &dsID
-
dsIDs = append(dsIDs, dsID)
- respTarget, _, err :=
SteeringUserSession.GetDeliveryServiceByXMLIDNullable(string(*st.Target))
- if err != nil {
- t.Fatalf("deleting steering target: getting target ds:
%v", err)
- } else if len(respTarget) < 1 {
- t.Fatal("deleting steering target: getting target ds:
not found")
- } else if respTarget[0].ID == nil {
- t.Fatal("deleting steering target: getting target ds:
not found")
- }
+ respTarget, _, err :=
steeringUserSession.GetDeliveryServiceByXMLIDNullableWithHdr(string(*st.Target),
nil)
+ assert.RequireNoError(t, err, "Deleting steering target:
getting target ds: %v", err)
+ assert.RequireEqual(t, 1, len(respTarget), "Deleting steering
target: getting target ds: expected 1 delivery service")
+ assert.RequireNotNil(t, respTarget[0].ID, "Deleting steering
target: getting target ds: not found")
+
targetID := uint64(*respTarget[0].ID)
st.TargetID = &targetID
- _, _, err =
SteeringUserSession.DeleteSteeringTarget(int(*st.DeliveryServiceID),
int(*st.TargetID))
- if err != nil {
- t.Fatalf("deleting steering target: deleting: %+v", err)
- }
+ resp, _, err :=
steeringUserSession.DeleteSteeringTarget(int(*st.DeliveryServiceID),
int(*st.TargetID))
+ assert.NoError(t, err, "Deleting steering target: deleting: %v
- alerts: %+v", err, resp.Alerts)
}
for _, dsID := range dsIDs {
- sts, _, err := SteeringUserSession.GetSteeringTargets(int(dsID))
- if err != nil {
- t.Fatalf("deleting steering targets: getting steering
target: %v", err)
- }
- if len(sts) != 0 {
- t.Fatalf("deleting steering targets: after delete,
getting steering target: expected 0 actual %+v", len(sts))
- }
+ sts, _, err := steeringUserSession.GetSteeringTargets(int(dsID))
+ assert.NoError(t, err, "deleting steering targets: getting
steering target: %v", err)
+ assert.Equal(t, 0, len(sts), "Deleting steering targets: after
delete, getting steering target: expected 0 actual %d", len(sts))
}
}
diff --git a/traffic_ops/testing/api/v3/tc-fixtures.json
b/traffic_ops/testing/api/v3/tc-fixtures.json
index 70ceccc4e2..c10c8018bc 100644
--- a/traffic_ops/testing/api/v3/tc-fixtures.json
+++ b/traffic_ops/testing/api/v3/tc-fixtures.json
@@ -5460,6 +5460,12 @@
"target": "ds2",
"value": 42,
"type": "STEERING_WEIGHT"
+ },
+ {
+ "deliveryService": "ds3",
+ "target": "ds4",
+ "value": 42,
+ "type": "STEERING_WEIGHT"
}
],
"servercheck_extensions": [
diff --git a/traffic_ops/testing/api/v3/withobjs_test.go
b/traffic_ops/testing/api/v3/withobjs_test.go
index 464eadf672..485216cfc4 100644
--- a/traffic_ops/testing/api/v3/withobjs_test.go
+++ b/traffic_ops/testing/api/v3/withobjs_test.go
@@ -121,7 +121,7 @@ var withFuncs = map[TCObj]TCObjFuncs{
ServiceCategories: {CreateTestServiceCategories,
DeleteTestServiceCategories},
Statuses: {CreateTestStatuses,
DeleteTestStatuses},
StaticDNSEntries: {CreateTestStaticDNSEntries,
DeleteTestStaticDNSEntries},
- SteeringTargets: {SetupSteeringTargets,
DeleteTestSteeringTargets},
+ SteeringTargets: {CreateTestSteeringTargets,
DeleteTestSteeringTargets},
Tenants: {CreateTestTenants,
DeleteTestTenants},
ServerCheckExtensions:
{CreateTestServerCheckExtensions, DeleteTestServerCheckExtensions},
Topologies: {CreateTestTopologies,
DeleteTestTopologies},
diff --git a/traffic_ops/testing/api/v4/steeringtargets_test.go
b/traffic_ops/testing/api/v4/steeringtargets_test.go
index e011a97576..fcc6a57445 100644
--- a/traffic_ops/testing/api/v4/steeringtargets_test.go
+++ b/traffic_ops/testing/api/v4/steeringtargets_test.go
@@ -16,423 +16,237 @@ package v4
*/
import (
+ "encoding/json"
"net/http"
"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"
client "github.com/apache/trafficcontrol/traffic_ops/v4-client"
)
-var SteeringUserSession *client.Session
-
func TestSteeringTargets(t *testing.T) {
-
WithObjs(t, []TCObj{CDNs, Types, Tenants, Parameters, Profiles,
Statuses, Divisions, Regions, PhysLocations, CacheGroups, Servers, Topologies,
ServiceCategories, DeliveryServices, Users, SteeringTargets}, func() {
- GetTestSteeringTargetsIMS(t)
- GetTestSteeringTargets(t)
- currentTime := time.Now().UTC().Add(-5 * time.Second)
- time := currentTime.Format(time.RFC1123)
- var header http.Header
- header = make(map[string][]string)
- header.Set(rfc.IfModifiedSince, time)
- header.Set(rfc.IfUnmodifiedSince, time)
- UpdateTestSteeringTargets(t)
- UpdateTestSteeringTargetsWithHeaders(t, header)
- GetTestSteeringTargetsIMSAfterChange(t, header)
- header = make(map[string][]string)
- etag := rfc.ETag(currentTime)
- header.Set(rfc.IfMatch, etag)
- UpdateTestSteeringTargetsWithHeaders(t, header)
- })
-
-}
-
-func UpdateTestSteeringTargetsWithHeaders(t *testing.T, header http.Header) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
- if st.Target == nil {
- t.Fatal("updating steering target: test data missing target")
- }
-
- opts := client.NewRequestOptions()
- opts.Header = header
- opts.QueryParameters.Set("xmlId", string(*st.DeliveryService))
- respDS, _, err := SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("updating steering target: getting ds: %v - alerts:
%+v", err, respDS.Alerts)
- }
- if len(respDS.Response) < 1 {
- t.Fatal("updating steering target: getting ds: not found")
- }
- if respDS.Response[0].ID == nil {
- t.Fatal("updating steering target: getting ds: nil id returned")
- }
- dsID := *respDS.Response[0].ID
-
- sts, _, err := SteeringUserSession.GetSteeringTargets(dsID,
client.RequestOptions{})
- if err != nil {
- t.Fatalf("updating steering targets: getting steering target:
%v - alerts: %+v", err, sts.Alerts)
- }
- if len(sts.Response) < 1 {
- t.Fatal("updating steering targets: getting steering target:
got 0")
- }
- st = sts.Response[0]
-
- expected := util.JSONIntStr(-12345)
- if st.Value != nil && *st.Value == expected {
- expected++
- }
- st.Value = &expected
-
- opts.QueryParameters.Del("xmlId")
- _, reqInf, err := SteeringUserSession.UpdateSteeringTarget(st, opts)
- if err == nil {
- t.Errorf("Expected error about precondition failed, but got
none")
- }
- if reqInf.StatusCode != http.StatusPreconditionFailed {
- t.Errorf("Expected status code 412, got %v", reqInf.StatusCode)
- }
-}
-
-func GetTestSteeringTargetsIMSAfterChange(t *testing.T, header http.Header) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
- opts := client.NewRequestOptions()
- opts.Header = header
- opts.QueryParameters.Set("xmlId", string(*st.DeliveryService))
- respDS, reqInf, err := SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("Expected no error, but got: %v - alerts: %+v", err,
respDS.Alerts)
- }
- if reqInf.StatusCode != http.StatusOK {
- t.Fatalf("Expected 200 status code, got %v", reqInf.StatusCode)
- }
- currentTime := time.Now().UTC()
- currentTime = currentTime.Add(1 * time.Second)
- timeStr := currentTime.Format(time.RFC1123)
-
- opts.Header.Set(rfc.IfModifiedSince, timeStr)
- respDS, reqInf, err = SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("Expected no error, but got: %v - alerts: %+v", err,
respDS.Alerts)
- }
- if reqInf.StatusCode != http.StatusNotModified {
- t.Fatalf("Expected 304 status code, got %v", reqInf.StatusCode)
- }
-}
-
-func GetTestSteeringTargetsIMS(t *testing.T) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
-
- futureTime := time.Now().AddDate(0, 0, 1)
- time := futureTime.Format(time.RFC1123)
-
- opts := client.NewRequestOptions()
- opts.Header.Set(rfc.IfModifiedSince, time)
- opts.QueryParameters.Set("xmlId", string(*st.DeliveryService))
- respDS, reqInf, err := SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("Expected no error, but got: %v - alerts: %+v", err,
respDS.Alerts)
- }
- if reqInf.StatusCode != http.StatusNotModified {
- t.Fatalf("Expected 304 status code, got %v", reqInf.StatusCode)
- }
-}
+ steeringUserSession := utils.CreateV4Session(t,
Config.TrafficOps.URL, "steering", "pa$$word",
Config.Default.Session.TimeoutInSecs)
+
+ currentTime := time.Now().UTC().Add(-15 * time.Second)
+ currentTimeRFC := currentTime.Format(time.RFC1123)
+ tomorrow := currentTime.AddDate(0, 0, 1).Format(time.RFC1123)
+
+ methodTests := utils.V4TestCase{
+ "GET": {
+ "NOT MODIFIED when NO CHANGES made": {
+ EndpointId: GetDeliveryServiceId(t,
"ds1"),
+ ClientSession: steeringUserSession,
+ RequestOpts:
client.RequestOptions{Header: http.Header{rfc.IfModifiedSince: {tomorrow}}},
+ Expectations:
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusNotModified)),
+ },
+ "OK when VALID request": {
+ EndpointId: GetDeliveryServiceId(t,
"ds1"),
+ ClientSession: steeringUserSession,
+ Expectations:
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK),
utils.ResponseHasLength(1),
+
validateSteeringTargetFields(map[string]interface{}{"DeliveryService": "ds1",
"DeliveryServiceID": uint64(GetDeliveryServiceId(t, "ds1")()),
+ "Target": "ds2",
"TargetID": uint64(GetDeliveryServiceId(t, "ds2")()), "Type":
"STEERING_WEIGHT", "TypeID": GetTypeID(t, "STEERING_WEIGHT")(), "Value":
util.JSONIntStr(42)})),
+ },
+ },
+ "PUT": {
+ "OK when VALID request": {
+ ClientSession: steeringUserSession,
+ RequestBody: map[string]interface{}{
+ "deliveryServiceId":
GetDeliveryServiceId(t, "ds3")(),
+ "targetId":
GetDeliveryServiceId(t, "ds4")(),
+ "value": -12345,
+ "typeId":
GetTypeID(t, "STEERING_WEIGHT")(),
+ },
+ Expectations:
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK),
+
validateSteeringTargetUpdateCreateFields(GetDeliveryServiceId(t, "ds3")(),
+
map[string]interface{}{"DeliveryService": "ds3", "DeliveryServiceID":
uint64(GetDeliveryServiceId(t, "ds3")()),
+ "Target":
"ds4", "TargetID": uint64(GetDeliveryServiceId(t, "ds4")()), "Type":
"STEERING_WEIGHT",
+ "TypeID":
GetTypeID(t, "STEERING_WEIGHT")(), "Value": util.JSONIntStr(-12345)})),
+ },
+ "PRECONDITION FAILED when updating with IMS &
IUS Headers": {
+ ClientSession: steeringUserSession,
+ RequestOpts:
client.RequestOptions{Header: http.Header{rfc.IfUnmodifiedSince:
{currentTimeRFC}}},
+ RequestBody: map[string]interface{}{
+ "deliveryServiceId":
GetDeliveryServiceId(t, "ds3")(),
+ "targetId":
GetDeliveryServiceId(t, "ds4")(),
+ "value": -12345,
+ "type":
"STEERING_WEIGHT",
+ "typeId":
GetTypeID(t, "STEERING_WEIGHT")(),
+ },
+ Expectations:
utils.CkRequest(utils.HasError(),
utils.HasStatus(http.StatusPreconditionFailed)),
+ },
+ "PRECONDITION FAILED when updating with IFMATCH
ETAG Header": {
+ ClientSession: steeringUserSession,
+ RequestOpts:
client.RequestOptions{Header: http.Header{rfc.IfMatch:
{rfc.ETag(currentTime)}}},
+ RequestBody: map[string]interface{}{
+ "deliveryServiceId":
GetDeliveryServiceId(t, "ds3")(),
+ "targetId":
GetDeliveryServiceId(t, "ds4")(),
+ "value": -12345,
+ "type":
"STEERING_WEIGHT",
+ "typeId":
GetTypeID(t, "STEERING_WEIGHT")(),
+ },
+ Expectations:
utils.CkRequest(utils.HasError(),
utils.HasStatus(http.StatusPreconditionFailed)),
+ },
+ },
+ "GET AFTER CHANGES": {
+ "OK when CHANGES made": {
+ EndpointId: GetDeliveryServiceId(t,
"ds1"),
+ ClientSession: steeringUserSession,
+ RequestOpts:
client.RequestOptions{Header: http.Header{rfc.IfModifiedSince:
{currentTimeRFC}}},
+ Expectations:
utils.CkRequest(utils.NoError(), utils.HasStatus(http.StatusOK)),
+ },
+ },
+ }
-// SetupSteeringTargets calls the CreateSteeringTargets test. It also sets the
steering user session
-// with the logged in steering user. SteeringUserSession is used by steering
target test functions.
-// Running this function depends on CreateTestUsers.
-func SetupSteeringTargets(t *testing.T) {
- var err error
- toReqTimeout := time.Second *
time.Duration(Config.Default.Session.TimeoutInSecs)
- SteeringUserSession, _, err = client.LoginWithAgent(TOSession.URL,
"steering", "pa$$word", true, "to-api-v1-client-tests/steering", true,
toReqTimeout)
- if err != nil {
- t.Fatalf("failed to get log in with steering user: %v",
err.Error())
- }
+ for method, testCases := range methodTests {
+ t.Run(method, func(t *testing.T) {
+ for name, testCase := range testCases {
+ steeringTarget :=
tc.SteeringTargetNullable{}
+
+ 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,
&steeringTarget)
+ 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.GetSteeringTargets(testCase.EndpointId(),
testCase.RequestOpts)
+ for _, check := range
testCase.Expectations {
+ check(t,
reqInf, resp.Response, resp.Alerts, err)
+ }
+ })
+ case "POST":
+ t.Run(name, func(t *testing.T) {
+ alerts, reqInf, err :=
testCase.ClientSession.CreateSteeringTarget(steeringTarget,
testCase.RequestOpts)
+ for _, check := range
testCase.Expectations {
+ check(t,
reqInf, nil, alerts, err)
+ }
+ })
+ case "PUT":
+ t.Run(name, func(t *testing.T) {
+ alerts, reqInf, err :=
testCase.ClientSession.UpdateSteeringTarget(steeringTarget,
testCase.RequestOpts)
+ for _, check := range
testCase.Expectations {
+ check(t,
reqInf, nil, alerts, err)
+ }
+ })
+ case "DELETE":
+ t.Run(name, func(t *testing.T) {
+ var targetID int
+ if testCase.RequestBody
!= nil {
+ if val, ok :=
testCase.RequestBody["targetID"]; ok {
+
targetID = val.(int)
+ }
+ }
+ alerts, reqInf, err :=
testCase.ClientSession.DeleteSteeringTarget(testCase.EndpointId(), targetID,
testCase.RequestOpts)
+ for _, check := range
testCase.Expectations {
+ check(t,
reqInf, nil, alerts, err)
+ }
+ })
+ }
+ }
+ })
+ }
+ })
- CreateTestSteeringTargets(t)
}
-func CreateTestSteeringTargets(t *testing.T) {
- for _, st := range testData.SteeringTargets {
- if st.Type == nil {
- t.Fatal("creating steering target: test data missing
type")
- }
- if st.DeliveryService == nil {
- t.Fatal("creating steering target: test data missing
ds")
- }
- if st.Target == nil {
- t.Fatal("creating steering target: test data missing
target")
- }
-
- {
- opts := client.NewRequestOptions()
- opts.QueryParameters.Set("name", *st.Type)
- respTypes, _, err := SteeringUserSession.GetTypes(opts)
- if err != nil {
- t.Fatalf("creating steering target: getting
Type: %v - alerts: %+v", err, respTypes.Alerts)
- } else if len(respTypes.Response) < 1 {
- t.Fatal("creating steering target: getting
Type: not found")
- }
- st.TypeID = util.IntPtr(respTypes.Response[0].ID)
- }
- {
- opts := client.NewRequestOptions()
- opts.QueryParameters.Set("xmlId",
string(*st.DeliveryService))
- respDS, _, err :=
SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("creating steering target: getting ds:
%v - alerts: %+v", err, respDS.Alerts)
- } else if len(respDS.Response) < 1 {
- t.Fatal("creating steering target: getting ds:
not found")
- } else if respDS.Response[0].ID == nil {
- t.Fatal("creating steering target: getting ds:
nil ID returned")
- }
- dsID := uint64(*respDS.Response[0].ID)
- st.DeliveryServiceID = &dsID
- }
- {
- opts := client.NewRequestOptions()
- opts.QueryParameters.Set("xmlId", string(*st.Target))
- respTarget, _, err :=
SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("creating steering target: getting
target ds: %v - alerts: %+v", err, respTarget.Alerts)
- } else if len(respTarget.Response) < 1 {
- t.Fatal("creating steering target: getting
target ds: not found")
- } else if respTarget.Response[0].ID == nil {
- t.Fatal("creating steering target: getting
target ds: nil ID returned")
+func validateSteeringTargetFields(expectedResp map[string]interface{})
utils.CkReqFunc {
+ return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _
tc.Alerts, _ error) {
+ assert.RequireNotNil(t, resp, "Expected Steering Targets
response to not be nil.")
+ steeringTargetsResp := resp.([]tc.SteeringTargetNullable)
+ for field, expected := range expectedResp {
+ for _, steeringTarget := range steeringTargetsResp {
+ switch field {
+ case "DeliveryService":
+ assert.RequireNotNil(t,
steeringTarget.DeliveryService, "Expected DeliveryService to not be nil.")
+ assert.Equal(t, expected,
string(*steeringTarget.DeliveryService), "Expected DeliveryService to be %v,
but got %s", expected, *steeringTarget.DeliveryService)
+ case "DeliveryServiceID":
+ assert.RequireNotNil(t,
steeringTarget.DeliveryServiceID, "Expected DeliveryServiceID to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.DeliveryServiceID, "Expected DeliveryServiceID to be %v, but
got %s", expected, *steeringTarget.DeliveryServiceID)
+ case "Target":
+ assert.RequireNotNil(t,
steeringTarget.Target, "Expected Target to not be nil.")
+ assert.Equal(t, expected,
string(*steeringTarget.Target), "Expected Target to be %v, but got %s",
expected, *steeringTarget.Target)
+ case "TargetID":
+ assert.RequireNotNil(t,
steeringTarget.TargetID, "Expected TargetID to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.TargetID, "Expected TargetID to be %v, but got %s", expected,
*steeringTarget.TargetID)
+ case "Type":
+ assert.RequireNotNil(t,
steeringTarget.Type, "Expected Type to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.Type, "Expected Type to be %v, but got %s", expected,
*steeringTarget.Type)
+ case "TypeID":
+ assert.RequireNotNil(t,
steeringTarget.Type, "Expected TypeID to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.TypeID, "Expected TypeID to be %v, but got %s", expected,
*steeringTarget.TypeID)
+ case "Value":
+ assert.RequireNotNil(t,
steeringTarget.Value, "Expected Value to not be nil.")
+ assert.Equal(t, expected,
*steeringTarget.Value, "Expected Value to be %v, but got %s", expected,
*steeringTarget.Value)
+ default:
+ t.Errorf("Expected field: %v, does not
exist in response", field)
+ }
}
- targetID := uint64(*respTarget.Response[0].ID)
- st.TargetID = &targetID
- }
-
- resp, _, err := SteeringUserSession.CreateSteeringTarget(st,
client.RequestOptions{})
- if err != nil {
- t.Fatalf("creating steering target: %v - alerts: %+v",
err, resp.Alerts)
}
}
}
-func UpdateTestSteeringTargets(t *testing.T) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
- if st.Target == nil {
- t.Fatal("updating steering target: test data missing target")
- }
-
- opts := client.NewRequestOptions()
- opts.QueryParameters.Set("xmlId", string(*st.DeliveryService))
- respDS, _, err := SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("updating steering target: getting ds: %v - alerts:
%+v", err, respDS.Alerts)
- }
- if len(respDS.Response) < 1 {
- t.Fatal("updating steering target: getting ds: not found")
- }
- if respDS.Response[0].ID == nil {
- t.Fatal("updating steering target: getting ds: nil id returned")
- }
- dsID := *respDS.Response[0].ID
-
- sts, _, err := SteeringUserSession.GetSteeringTargets(dsID,
client.RequestOptions{})
- if err != nil {
- t.Fatalf("updating steering targets: getting steering target:
%v - alerts: %+v", err, sts.Alerts)
- }
- if len(sts.Response) < 1 {
- t.Fatal("updating steering targets: getting steering target:
got 0")
- }
- st = sts.Response[0]
-
- expected := util.JSONIntStr(-12345)
- if st.Value != nil && *st.Value == expected {
- expected++
- }
- st.Value = &expected
-
- alerts, _, err := SteeringUserSession.UpdateSteeringTarget(st,
client.RequestOptions{})
- if err != nil {
- t.Fatalf("updating steering targets: updating: %v - alerts:
%+v", err, alerts.Alerts)
- }
-
- sts, _, err = SteeringUserSession.GetSteeringTargets(dsID,
client.RequestOptions{})
- if err != nil {
- t.Fatalf("updating steering targets: getting updated steering
target: %v - alerts: %+v", err, sts.Alerts)
- }
- if len(sts.Response) < 1 {
- t.Fatal("updating steering targets: getting updated steering
target: got 0")
- }
- actual := sts.Response[0]
-
- if actual.DeliveryServiceID == nil {
- t.Fatalf("steering target update: ds id expected %v actual %v",
dsID, nil)
- } else if *actual.DeliveryServiceID != uint64(dsID) {
- t.Fatalf("steering target update: ds id expected %v actual %v",
dsID, *actual.DeliveryServiceID)
- }
- if actual.TargetID == nil {
- t.Fatalf("steering target update: ds id expected %v actual %v",
dsID, nil)
- } else if *actual.TargetID != *st.TargetID {
- t.Fatalf("steering target update: ds id expected %v actual %v",
*st.TargetID, *actual.TargetID)
- }
- if actual.TypeID == nil {
- t.Fatalf("steering target update: ds id expected %v actual %v",
*st.TypeID, nil)
- } else if *actual.TypeID != *st.TypeID {
- t.Fatalf("steering target update: ds id expected %v actual %v",
*st.TypeID, *actual.TypeID)
- }
- if actual.DeliveryService == nil {
- t.Fatalf("steering target update: ds expected %v actual %v",
*st.DeliveryService, nil)
- } else if *st.DeliveryService != *actual.DeliveryService {
- t.Fatalf("steering target update: ds name expected %v actual
%v", *st.DeliveryService, *actual.DeliveryService)
- }
- if actual.Target == nil {
- t.Fatalf("steering target update: target expected %v actual
%v", *st.Target, nil)
- } else if *st.Target != *actual.Target {
- t.Fatalf("steering target update: target expected %v actual
%v", *st.Target, *actual.Target)
- }
- if actual.Type == nil {
- t.Fatalf("steering target update: type expected %v actual %v",
*st.Type, nil)
- } else if *st.Type != *actual.Type {
- t.Fatalf("steering target update: type expected %v actual %v",
*st.Type, *actual.Type)
- }
- if actual.Value == nil {
- t.Fatalf("steering target update: ds expected %v actual %v",
*st.Value, nil)
- } else if *st.Value != *actual.Value {
- t.Fatalf("steering target update: value expected %v actual %v",
*st.Value, actual.Value)
+func validateSteeringTargetUpdateCreateFields(dsId int, expectedResp
map[string]interface{}) utils.CkReqFunc {
+ return func(t *testing.T, _ toclientlib.ReqInf, resp interface{}, _
tc.Alerts, _ error) {
+ steeringTargets, _, err := TOSession.GetSteeringTargets(dsId,
client.RequestOptions{})
+ assert.RequireNoError(t, err, "Error getting Steering Targets:
%v - alerts: %+v", err, steeringTargets.Alerts)
+ assert.RequireEqual(t, 1, len(steeringTargets.Response),
"Expected one Steering Target returned Got: %d", len(steeringTargets.Response))
+ validateSteeringTargetFields(expectedResp)(t,
toclientlib.ReqInf{}, steeringTargets.Response, tc.Alerts{}, nil)
}
}
-func GetTestSteeringTargets(t *testing.T) {
- if len(testData.SteeringTargets) < 1 {
- t.Fatal("updating steering target: no steering target test
data")
- }
- st := testData.SteeringTargets[0]
- if st.DeliveryService == nil {
- t.Fatal("updating steering target: test data missing ds")
- }
-
- opts := client.NewRequestOptions()
- opts.QueryParameters.Set("xmlId", string(*st.DeliveryService))
- respDS, _, err := SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("creating steering target: getting ds: %v - alerts:
%+v", err, respDS.Alerts)
- } else if len(respDS.Response) < 1 {
- t.Fatal("steering target get: getting ds: not found")
- } else if respDS.Response[0].ID == nil {
- t.Fatal("steering target get: getting ds: nil id returned")
- }
- dsID := *respDS.Response[0].ID
-
- sts, _, err := SteeringUserSession.GetSteeringTargets(dsID,
client.RequestOptions{})
- if err != nil {
- t.Fatalf("steering target get: getting steering target: %v -
alerts: %+v", err, sts.Alerts)
- }
-
- if len(sts.Response) != len(testData.SteeringTargets) {
- t.Fatalf("steering target get: expected %d actual %d",
len(testData.SteeringTargets), len(sts.Response))
- }
-
- expected := testData.SteeringTargets[0]
- actual := sts.Response[0]
-
- if actual.DeliveryServiceID == nil {
- t.Fatalf("steering target get: ds id expected %v actual %v",
dsID, nil)
- } else if *actual.DeliveryServiceID != uint64(dsID) {
- t.Fatalf("steering target get: ds id expected %v actual %v",
dsID, *actual.DeliveryServiceID)
- }
- if actual.DeliveryService == nil {
- t.Fatalf("steering target get: ds expected %v actual %v",
expected.DeliveryService, nil)
- } else if *expected.DeliveryService != *actual.DeliveryService {
- t.Fatalf("steering target get: ds name expected %v actual %v",
expected.DeliveryService, actual.DeliveryService)
- }
- if actual.Target == nil {
- t.Fatalf("steering target get: target expected %v actual %v",
expected.Target, nil)
- } else if *expected.Target != *actual.Target {
- t.Fatalf("steering target get: target expected %v actual %v",
expected.Target, actual.Target)
- }
- if actual.Type == nil {
- t.Fatalf("steering target get: type expected %v actual %v",
expected.Type, nil)
- } else if *expected.Type != *actual.Type {
- t.Fatalf("steering target get: type expected %v actual %v",
expected.Type, actual.Type)
- }
- if actual.Value == nil {
- t.Fatalf("steering target get: ds expected %v actual %v",
expected.Value, nil)
- } else if *expected.Value != *actual.Value {
- t.Fatalf("steering target get: value expected %v actual %v",
*expected.Value, *actual.Value)
+func CreateTestSteeringTargets(t *testing.T) {
+ steeringUserSession := utils.CreateV4Session(t, Config.TrafficOps.URL,
"steering", "pa$$word", Config.Default.Session.TimeoutInSecs)
+ for _, st := range testData.SteeringTargets {
+ st.TypeID = util.IntPtr(GetTypeID(t, *st.Type)())
+ st.DeliveryServiceID =
util.UInt64Ptr(uint64(GetDeliveryServiceId(t, string(*st.DeliveryService))()))
+ st.TargetID = util.UInt64Ptr(uint64(GetDeliveryServiceId(t,
string(*st.Target))()))
+ resp, _, err := steeringUserSession.CreateSteeringTarget(st,
client.RequestOptions{})
+ assert.RequireNoError(t, err, "Creating steering target: %v -
alerts: %+v", err, resp.Alerts)
}
}
func DeleteTestSteeringTargets(t *testing.T) {
+ steeringUserSession := utils.CreateV4Session(t, Config.TrafficOps.URL,
"steering", "pa$$word", Config.Default.Session.TimeoutInSecs)
dsIDs := []uint64{}
for _, st := range testData.SteeringTargets {
- if st.DeliveryService == nil {
- t.Fatal("deleting steering target: test data missing
ds")
- }
- if st.Target == nil {
- t.Fatal("deleting steering target: test data missing
target")
- }
-
opts := client.NewRequestOptions()
opts.QueryParameters.Set("xmlId", string(*st.DeliveryService))
- respDS, _, err := SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("deleting steering target: getting ds: %v -
alerts: %+v", err, respDS.Alerts)
- } else if len(respDS.Response) < 1 {
- t.Fatal("deleting steering target: getting ds: not
found")
- } else if respDS.Response[0].ID == nil {
- t.Fatal("deleting steering target: getting ds: nil ID
returned")
- }
+ respDS, _, err := steeringUserSession.GetDeliveryServices(opts)
+ assert.RequireNoError(t, err, "Deleting steering target:
getting ds: %v - alerts: %+v", err, respDS.Alerts)
+ assert.RequireEqual(t, 1, len(respDS.Response), "Deleting
steering target: getting ds: expected 1 delivery service")
+ assert.RequireNotNil(t, respDS.Response[0].ID, "Deleting
steering target: getting ds: nil ID returned")
+
dsID := uint64(*respDS.Response[0].ID)
st.DeliveryServiceID = &dsID
-
dsIDs = append(dsIDs, dsID)
opts.QueryParameters.Set("xmlId", string(*st.Target))
- respTarget, _, err :=
SteeringUserSession.GetDeliveryServices(opts)
- if err != nil {
- t.Fatalf("deleting steering target: getting target ds:
%v - alerts: %+v", err, respTarget.Alerts)
- } else if len(respTarget.Response) < 1 {
- t.Fatal("deleting steering target: getting target ds:
not found")
- } else if respTarget.Response[0].ID == nil {
- t.Fatal("deleting steering target: getting target ds:
not found")
- }
+ respTarget, _, err :=
steeringUserSession.GetDeliveryServices(opts)
+ assert.RequireNoError(t, err, "Deleting steering target:
getting target ds: %v - alerts: %+v", err, respTarget.Alerts)
+ assert.RequireEqual(t, 1, len(respTarget.Response), "Deleting
steering target: getting target ds: expected 1 delivery service")
+ assert.RequireNotNil(t, respTarget.Response[0].ID, "Deleting
steering target: getting target ds: not found")
+
targetID := uint64(*respTarget.Response[0].ID)
st.TargetID = &targetID
- resp, _, err :=
SteeringUserSession.DeleteSteeringTarget(int(*st.DeliveryServiceID),
int(*st.TargetID), client.RequestOptions{})
- if err != nil {
- t.Fatalf("deleting steering target: deleting: %v -
alerts: %+v", err, resp.Alerts)
- }
+ resp, _, err :=
steeringUserSession.DeleteSteeringTarget(int(*st.DeliveryServiceID),
int(*st.TargetID), client.RequestOptions{})
+ assert.NoError(t, err, "Deleting steering target: deleting: %v
- alerts: %+v", err, resp.Alerts)
}
for _, dsID := range dsIDs {
- sts, _, err :=
SteeringUserSession.GetSteeringTargets(int(dsID), client.RequestOptions{})
- if err != nil {
- t.Fatalf("deleting steering targets: getting steering
target: %v - alerts: %+v", err, sts.Alerts)
- }
- if len(sts.Response) != 0 {
- t.Fatalf("deleting steering targets: after delete,
getting steering target: expected 0 actual %d", len(sts.Response))
- }
+ sts, _, err :=
steeringUserSession.GetSteeringTargets(int(dsID), client.RequestOptions{})
+ assert.NoError(t, err, "deleting steering targets: getting
steering target: %v - alerts: %+v", err, sts.Alerts)
+ assert.Equal(t, 0, len(sts.Response), "Deleting steering
targets: after delete, getting steering target: expected 0 actual %d",
len(sts.Response))
}
}
diff --git a/traffic_ops/testing/api/v4/tc-fixtures.json
b/traffic_ops/testing/api/v4/tc-fixtures.json
index c98d475bdd..9ab6382c96 100644
--- a/traffic_ops/testing/api/v4/tc-fixtures.json
+++ b/traffic_ops/testing/api/v4/tc-fixtures.json
@@ -6120,6 +6120,12 @@
"target": "ds2",
"value": 42,
"type": "STEERING_WEIGHT"
+ },
+ {
+ "deliveryService": "ds3",
+ "target": "ds4",
+ "value": 42,
+ "type": "STEERING_WEIGHT"
}
],
"servercheck_extensions": [
diff --git a/traffic_ops/testing/api/v4/withobjs_test.go
b/traffic_ops/testing/api/v4/withobjs_test.go
index feb77b15d4..7d64632f7a 100644
--- a/traffic_ops/testing/api/v4/withobjs_test.go
+++ b/traffic_ops/testing/api/v4/withobjs_test.go
@@ -123,7 +123,7 @@ var withFuncs = map[TCObj]TCObjFuncs{
ServiceCategories: {CreateTestServiceCategories,
DeleteTestServiceCategories},
Statuses: {CreateTestStatuses,
DeleteTestStatuses},
StaticDNSEntries: {CreateTestStaticDNSEntries,
DeleteTestStaticDNSEntries},
- SteeringTargets: {SetupSteeringTargets,
DeleteTestSteeringTargets},
+ SteeringTargets: {CreateTestSteeringTargets,
DeleteTestSteeringTargets},
Tenants: {CreateTestTenants,
DeleteTestTenants},
ServerCheckExtensions:
{CreateTestServerCheckExtensions, DeleteTestServerCheckExtensions},
Topologies: {CreateTestTopologies,
DeleteTestTopologies},
diff --git a/traffic_ops/v3-client/steeringtarget.go
b/traffic_ops/v3-client/steeringtarget.go
index c1170569ac..33c1abb7fb 100644
--- a/traffic_ops/v3-client/steeringtarget.go
+++ b/traffic_ops/v3-client/steeringtarget.go
@@ -53,6 +53,15 @@ func (to *Session) UpdateSteeringTarget(st
tc.SteeringTargetNullable) (tc.Alerts
return to.UpdateSteeringTargetWithHdr(st, nil)
}
+func (to *Session) GetSteeringTargetsWithHdr(dsID int, header http.Header)
([]tc.SteeringTargetNullable, toclientlib.ReqInf, error) {
+ route := fmt.Sprintf("/steering/%d/targets", dsID)
+ data := struct {
+ Response []tc.SteeringTargetNullable `json:"response"`
+ }{}
+ reqInf, err := to.get(route, header, &data)
+ return data.Response, reqInf, err
+}
+
func (to *Session) GetSteeringTargets(dsID int) ([]tc.SteeringTargetNullable,
toclientlib.ReqInf, error) {
route := fmt.Sprintf("/steering/%d/targets", dsID)
data := struct {