This is an automated email from the ASF dual-hosted git repository.
zrhoffman 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 ef9aa6da89 Fix unable to create DSRs for updating existing DSs (#7217)
ef9aa6da89 is described below
commit ef9aa6da8961b8d986eea1ab4db40fc32da405dd
Author: ocket8888 <[email protected]>
AuthorDate: Mon Nov 28 09:44:35 2022 -0700
Fix unable to create DSRs for updating existing DSs (#7217)
* Fix unable to create DSRs for updating DSes in API versions 4.0 and 4.1
That possibly also affected Delete-type requests, didn't check; the
resolution would have been the same.
* Add a test for creating a DSR for updating a DS
---
.../api/v4/deliveryservice_requests_test.go | 40 +++++++++++++++++++++-
.../deliveryservice/deliveryservices.go | 2 +-
.../deliveryservice/request/requests.go | 24 +++++--------
3 files changed, 48 insertions(+), 18 deletions(-)
diff --git a/traffic_ops/testing/api/v4/deliveryservice_requests_test.go
b/traffic_ops/testing/api/v4/deliveryservice_requests_test.go
index 9f60632ce4..947a338791 100644
--- a/traffic_ops/testing/api/v4/deliveryservice_requests_test.go
+++ b/traffic_ops/testing/api/v4/deliveryservice_requests_test.go
@@ -54,7 +54,9 @@ func resetDS(ds *tc.DeliveryServiceV4) {
}
func TestDeliveryServiceRequests(t *testing.T) {
- WithObjs(t, []TCObj{CDNs, Types, Parameters, Tenants,
DeliveryServiceRequests}, func() {
+ WithObjs(t, []TCObj{CDNs, Types, Parameters, Tenants, Users, Profiles,
Statuses, Divisions, Regions, PhysLocations, CacheGroups, Servers, Topologies,
ServerCapabilities, ServiceCategories, DeliveryServices,
DeliveryServiceRequests}, func() {
+
+ t.Run("update DSR crud", testUpdateDSR)
currentTime := time.Now().UTC().Add(-15 * time.Second)
currentTimeRFC := currentTime.Format(time.RFC1123)
@@ -326,6 +328,42 @@ func TestDeliveryServiceRequests(t *testing.T) {
})
}
+func testUpdateDSR(t *testing.T) {
+ resp, _, err := TOSession.GetDeliveryServices(client.RequestOptions{})
+ if err != nil {
+ t.Fatalf("failed to get Delivery Services: %#v - response:
%+v", err, resp)
+ }
+
+ if len(resp.Response) < 1 {
+ t.Fatal("need at least one Delivery Service to test updating a
DS with a DSR")
+ }
+
+ ds := resp.Response[0]
+ if ds.DisplayName == nil {
+ t.Fatalf("Traffic Ops returned a DS with a nil Display Name:
%+v", ds)
+ }
+ *ds.DisplayName += " - Update DSR test"
+
+ dsr := tc.DeliveryServiceRequestV4{
+ ChangeType: tc.DSRChangeTypeUpdate,
+ Requested: &ds,
+ Status: tc.RequestStatusDraft,
+ }
+ creationResp, _, err := TOSession.CreateDeliveryServiceRequest(dsr,
client.RequestOptions{})
+ if err != nil {
+ t.Fatalf("failed to create an update DSR: %#v - response: %+v",
err, creationResp)
+ }
+
+ id := creationResp.Response.ID
+ if id == nil {
+ t.Fatalf("Traffic Ops returned a created DSR without an ID:
%+v", creationResp)
+ }
+ deleteResp, _, err := TOSession.DeleteDeliveryServiceRequest(*id,
client.RequestOptions{})
+ if err != nil {
+ t.Errorf("failed to delete the created update DSR: %#v -
response: %+v", err, deleteResp)
+ }
+}
+
func GetDeliveryServiceRequestId(t *testing.T, xmlId string) func() int {
return func() int {
opts := client.NewRequestOptions()
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
index 1cc3525545..809c586477 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
@@ -1884,7 +1884,7 @@ func GetDeliveryServices(query string, queryValues
map[string]interface{}, tx *s
// ensure json generated from this slice won't come out as `null` if
empty
dsQueryParams := []string{}
- geoLimitCountries := util.StrPtr("")
+ geoLimitCountries := new(string)
for rows.Next() {
var ds tc.DeliveryServiceV5
var longDesc1 *string
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/request/requests.go
b/traffic_ops/traffic_ops_golang/deliveryservice/request/requests.go
index 4b3ddac65c..a86d9f35f7 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/request/requests.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/request/requests.go
@@ -498,31 +498,23 @@ func createV4(w http.ResponseWriter, r *http.Request, inf
*api.APIInfo) (result
return
}
- dsr.SetXMLID()
- if ok, err = dbhelpers.DSRExistsWithXMLID(dsr.XMLID, tx); err != nil {
- err = fmt.Errorf("checking for existence of DSR with xmlid
'%s'", dsr.XMLID)
+ upgraded.SetXMLID()
+ if ok, err = dbhelpers.DSRExistsWithXMLID(upgraded.XMLID, tx); err !=
nil {
+ err = fmt.Errorf("checking for existence of DSR with xmlid
'%s'", upgraded.XMLID)
api.HandleErr(w, r, tx, http.StatusInternalServerError, nil,
err)
return
} else if ok {
- userErr := fmt.Errorf("an open Delivery Service Request for
XMLID '%s' already exists", dsr.XMLID)
+ userErr := fmt.Errorf("an open Delivery Service Request for
XMLID '%s' already exists", upgraded.XMLID)
api.HandleErr(w, r, tx, http.StatusBadRequest, userErr, nil)
return
}
- if dsr.Original != nil {
- if dsr.Original.LongDesc1 != nil || dsr.Original.LongDesc2 !=
nil {
- api.HandleErr(w, r, tx, http.StatusBadRequest,
errors.New("the longDesc1 and longDesc2 fields are no longer supported in API
4.0 onwards"), nil)
- return
- }
- if len(dsr.Original.TLSVersions) < 1 {
+ if upgraded.Original != nil {
+ if len(upgraded.Original.TLSVersions) < 1 {
upgraded.Original.TLSVersions = nil
}
}
- if dsr.Requested != nil {
- if dsr.Requested.LongDesc1 != nil || dsr.Requested.LongDesc2 !=
nil {
- api.HandleErr(w, r, tx, http.StatusBadRequest,
errors.New("the longDesc1 and longDesc2 fields are no longer supported in API
4.0 onwards"), nil)
- return
- }
- if len(dsr.Requested.TLSVersions) < 1 {
+ if upgraded.Requested != nil {
+ if len(upgraded.Requested.TLSVersions) < 1 {
upgraded.Requested.TLSVersions = nil
}
}