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
                }
        }

Reply via email to