You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by oc...@apache.org on 2022/11/22 22:53:46 UTC
[trafficcontrol] branch master updated: Added catch for missing POST body when posted to profileparameters (#7194)
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 e82501c92f Added catch for missing POST body when posted to profileparameters (#7194)
e82501c92f is described below
commit e82501c92f150aa8bc7b8a7dcd80c26adc30a66e
Author: Kurtis Michie <49...@users.noreply.github.com>
AuthorDate: Tue Nov 22 15:53:40 2022 -0700
Added catch for missing POST body when posted to profileparameters (#7194)
* Added catch for missing POST body when posted to profileparameters
* Added test for missing POST body to profileparameters into v3 and v5, and added change into changelog.md
* Delete traffic-ops-test.conf
* Accidentally deleted. Meant to revert. Adding back in.
* Update traffic-ops-test.conf
Added new line to end of file
* Created one off test to check POST for an empty JSON body
* Corrected correct URL Path for versions 3.0 and 4.0
---
CHANGELOG.md | 1 +
traffic_ops/testing/api/v3/profile_parameters_test.go | 12 ++++++++++++
traffic_ops/testing/api/v4/profile_parameters_test.go | 12 ++++++++++++
traffic_ops/testing/api/v5/profile_parameters_test.go | 12 ++++++++++++
traffic_ops/traffic_ops_golang/api/shared_handlers.go | 5 +++++
5 files changed, 42 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 910320a44c..50e949a7a3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -31,6 +31,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
- Switched Delivery Service active state to a three-value system, adding a state that will be used to prevent cache servers from deploying DS configuration.
### Fixed
+- [#4428](https://github.com/apache/trafficcontrol/issues/4428) *Traffic Ops* Fixed Internal Server Error with POST to `profileparameters` when POST body is empty
- [#7179](https://github.com/apache/trafficcontrol/issues/7179) *Traffic Portal* Fixed search filter for Delivery Service Table
- [#7174](https://github.com/apache/trafficcontrol/issues/7174) *Traffic Portal* Fixed topologies sort (table and Delivery Service's form)
- [#5970](https://github.com/apache/trafficcontrol/issues/5970) *Traffic Portal* Fixed numeric sort in Delivery Service's form for DSCP
diff --git a/traffic_ops/testing/api/v3/profile_parameters_test.go b/traffic_ops/testing/api/v3/profile_parameters_test.go
index b2931a7cec..fe73aa262b 100644
--- a/traffic_ops/testing/api/v3/profile_parameters_test.go
+++ b/traffic_ops/testing/api/v3/profile_parameters_test.go
@@ -34,6 +34,8 @@ const queryParamFormat = "?profileId=%s¶meterId=%s"
func TestProfileParameters(t *testing.T) {
WithObjs(t, []TCObj{CDNs, Types, Parameters, Profiles, ProfileParameters}, func() {
+ // This is a one off test to check POST with an empty JSON body
+ TestPostWithEmptyBody(t)
currentTime := time.Now().UTC().Add(-15 * time.Second)
tomorrow := currentTime.AddDate(0, 0, 1).Format(time.RFC1123)
@@ -163,6 +165,16 @@ func TestProfileParameters(t *testing.T) {
})
}
+func TestPostWithEmptyBody(t *testing.T) {
+ resp, err := TOSession.Client.Post(TOSession.URL+"/api/3.0/profileparameters", "application/json", nil)
+ if err != nil {
+ t.Fatalf("error sending post to create profile parameter with an empty body: %v", err)
+ }
+ if resp.StatusCode != http.StatusBadRequest {
+ t.Errorf("expected to get a 400 error code, but received %d instead", resp.StatusCode)
+ }
+}
+
func CreateTestProfileParameters(t *testing.T) {
for _, profile := range testData.Profiles {
profileID := GetProfileID(t, profile.Name)()
diff --git a/traffic_ops/testing/api/v4/profile_parameters_test.go b/traffic_ops/testing/api/v4/profile_parameters_test.go
index efa620533e..23365c12f0 100644
--- a/traffic_ops/testing/api/v4/profile_parameters_test.go
+++ b/traffic_ops/testing/api/v4/profile_parameters_test.go
@@ -33,6 +33,8 @@ import (
func TestProfileParameters(t *testing.T) {
WithObjs(t, []TCObj{CDNs, Types, Parameters, Profiles, ProfileParameters}, func() {
+ // This is a one off test to check POST with an empty JSON body
+ TestPostWithEmptyBody(t)
currentTime := time.Now().UTC().Add(-15 * time.Second)
tomorrow := currentTime.AddDate(0, 0, 1).Format(time.RFC1123)
@@ -172,6 +174,16 @@ func TestProfileParameters(t *testing.T) {
})
}
+func TestPostWithEmptyBody(t *testing.T) {
+ resp, err := TOSession.Client.Post(TOSession.URL+"/api/4.0/profileparameters", "application/json", nil)
+ if err != nil {
+ t.Fatalf("error sending post to create profile parameter with an empty body: %v", err)
+ }
+ if resp.StatusCode != http.StatusBadRequest {
+ t.Errorf("expected to get a 400 error code, but received %d instead", resp.StatusCode)
+ }
+}
+
func TestProfileParameter(t *testing.T) {
WithObjs(t, []TCObj{CDNs, Types, Parameters, Profiles}, func() {
diff --git a/traffic_ops/testing/api/v5/profile_parameters_test.go b/traffic_ops/testing/api/v5/profile_parameters_test.go
index e44ebd7831..e2b264a231 100644
--- a/traffic_ops/testing/api/v5/profile_parameters_test.go
+++ b/traffic_ops/testing/api/v5/profile_parameters_test.go
@@ -33,6 +33,8 @@ import (
func TestProfileParameters(t *testing.T) {
WithObjs(t, []TCObj{CDNs, Types, Parameters, Profiles, ProfileParameters}, func() {
+ // This is a one off test to check POST with an empty JSON body
+ TestPostWithEmptyBody(t)
currentTime := time.Now().UTC().Add(-15 * time.Second)
tomorrow := currentTime.AddDate(0, 0, 1).Format(time.RFC1123)
@@ -172,6 +174,16 @@ func TestProfileParameters(t *testing.T) {
})
}
+func TestPostWithEmptyBody(t *testing.T) {
+ resp, err := TOSession.Client.Post(TOSession.URL+"/api/5.0/profileparameters", "application/json", nil)
+ if err != nil {
+ t.Fatalf("error sending post to create profile parameter with an empty body: %v", err)
+ }
+ if resp.StatusCode != http.StatusBadRequest {
+ t.Errorf("expected to get a 400 error code, but received %d instead", resp.StatusCode)
+ }
+}
+
func TestProfileParameter(t *testing.T) {
WithObjs(t, []TCObj{CDNs, Types, Parameters, Profiles}, func() {
diff --git a/traffic_ops/traffic_ops_golang/api/shared_handlers.go b/traffic_ops/traffic_ops_golang/api/shared_handlers.go
index 3fe6e786d7..2f7e139801 100644
--- a/traffic_ops/traffic_ops_golang/api/shared_handlers.go
+++ b/traffic_ops/traffic_ops_golang/api/shared_handlers.go
@@ -495,6 +495,11 @@ func CreateHandler(creator Creator) http.HandlerFunc {
return
}
+ if len(data) == 0 {
+ HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, errors.New("no request body supplied"), nil)
+ return
+ }
+
objSlice, err := parseMultipleCreates(data, objectType, inf)
if err != nil {
HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError, nil, err)