blob: 3ebec7ef35e637d4ac631793f8ad7c86d1cf1662 [file] [log] [blame]
/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v4
import (
"net/http"
"net/url"
"reflect"
"strconv"
"strings"
"sync"
"testing"
"time"
"github.com/apache/trafficcontrol/lib/go-rfc"
tc "github.com/apache/trafficcontrol/lib/go-tc"
"github.com/apache/trafficcontrol/lib/go-util"
client "github.com/apache/trafficcontrol/traffic_ops/v4-client"
)
func TestParameters(t *testing.T) {
//toReqTimeout := time.Second * time.Duration(Config.Default.Session.TimeoutInSecs)
//SwitchSession(toReqTimeout, Config.TrafficOps.URL, Config.TrafficOps.Users.Admin, Config.TrafficOps.UserPassword, Config.TrafficOps.Users.Portal, Config.TrafficOps.UserPassword)
WithObjs(t, []TCObj{Parameters}, func() {
GetTestSecureParameter(t)
GetTestParametersIMS(t)
GetTestParametersByConfigfile(t)
GetTestParametersByValue(t)
GetTestParametersByName(t)
currentTime := time.Now().UTC().Add(-5 * time.Second)
time := currentTime.Format(time.RFC1123)
var header http.Header = make(map[string][]string)
header.Set(rfc.IfModifiedSince, time)
header.Set(rfc.IfUnmodifiedSince, time)
UpdateTestParameters(t)
UpdateTestParametersWithHeaders(t, header)
GetTestParameters(t)
GetTestParametersIMSAfterChange(t, header)
header = make(map[string][]string)
etag := rfc.ETag(currentTime)
header.Set(rfc.IfMatch, etag)
UpdateTestParametersWithHeaders(t, header)
GetTestPaginationSupportParameters(t)
GetParametersByInvalidId(t)
GetParametersByInvalidName(t)
GetParametersByInvalidConfigfile(t)
GetParametersByInvalidValue(t)
CreateTestParametersAlreadyExist(t)
CreateTestParametersMissingName(t)
CreateTestParametersMissingconfigFile(t)
CreateMultipleTestParameters(t)
DeleteTestParametersByInvalidId(t)
UpdateParametersEmptyValue(t)
UpdateParametersEmptyName(t)
UpdateParametersEmptyConfigFile(t)
})
}
func GetTestSecureParameter(t *testing.T) {
tenantResp, _, err := TOSession.GetTenants(client.NewRequestOptions())
if err != nil {
t.Fatalf("couldn't get tenants: %v", err)
}
if len(tenantResp.Response) == 0 {
t.Fatalf("got no tenants in response")
}
param := tc.Parameter{
ConfigFile: string(tc.GlobalConfigFileName),
Name: "test_secure_param",
Secure: true,
Value: "100",
}
_, _, err = TOSession.CreateParameter(param, client.NewRequestOptions())
if err != nil {
t.Fatalf("couldn't create secure parameter: %v", err)
}
opts := client.NewRequestOptions()
opts.QueryParameters.Set("name", "test_secure_param")
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Fatalf("couldn't get param by name: %v", err)
}
if len(resp.Response) != 1 {
t.Fatalf("expected just one response, got %d", len(resp.Response))
}
if resp.Response[0].Value != "100" {
t.Errorf("expected value 100, but got %s", resp.Response[0].Value)
}
// Create a new user with operations level privileges
user1 := tc.UserV4{
Username: "lock_user1",
RegistrationSent: new(time.Time),
LocalPassword: util.StrPtr("test_pa$$word"),
Role: "operations",
}
user1.Email = util.StrPtr("lockuseremail@domain.com")
user1.TenantID = tenantResp.Response[0].ID
user1.FullName = util.StrPtr("firstName LastName")
_, _, err = TOSession.CreateUser(user1, client.RequestOptions{})
if err != nil {
t.Fatalf("could not create test user with username: %s, err: %v", user1.Username, err)
}
defer ForceDeleteTestUsersByUsernames(t, []string{"lock_user1"})
// Establish a session with the newly created non admin level user
userSession, _, err := client.LoginWithAgent(Config.TrafficOps.URL, user1.Username, *user1.LocalPassword, true, "to-api-v4-client-tests", false, toReqTimeout)
if err != nil {
t.Fatalf("could not login with user lock_user1: %v", err)
}
resp, _, err = userSession.GetParameters(opts)
if err != nil {
t.Fatalf("couldn't get param by name: %v", err)
}
if len(resp.Response) != 1 {
t.Fatalf("expected just one response, got %d", len(resp.Response))
}
if resp.Response[0].Value != "********" {
t.Errorf("expected value of secure param to be hidden, but got %s instead", resp.Response[0].Value)
}
_, _, err = TOSession.DeleteParameter(resp.Response[0].ID, client.NewRequestOptions())
if err != nil {
t.Errorf("failed to delete param: %v", err)
}
}
func UpdateTestParametersWithHeaders(t *testing.T, header http.Header) {
if len(testData.Parameters) < 1 {
t.Fatal("Need at least one Parameter to test updating Parameters with HTTP headers")
}
firstParameter := testData.Parameters[0]
// Retrieve the Parameter by name so we can get the id for the Update
opts := client.NewRequestOptions()
opts.Header = header
opts.QueryParameters.Set("name", firstParameter.Name)
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot get Parameter by name '%s': %v - alerts: %+v", firstParameter.Name, err, resp.Alerts)
}
if len(resp.Response) < 1 {
t.Fatalf("Expected at least one Parameter to exist with name '%s'", firstParameter.Name)
}
remoteParameter := resp.Response[0]
expectedParameterValue := "UPDATED"
remoteParameter.Value = expectedParameterValue
_, reqInf, err := TOSession.UpdateParameter(remoteParameter.ID, remoteParameter, opts)
if err == nil {
t.Error("Expected error about precondition failed, but got none")
}
if reqInf.StatusCode != http.StatusPreconditionFailed {
t.Errorf("Expected status code 412, got %d", reqInf.StatusCode)
}
}
func GetTestParametersIMSAfterChange(t *testing.T, header http.Header) {
opts := client.NewRequestOptions()
opts.Header = header
for _, pl := range testData.Parameters {
opts.QueryParameters.Set("name", pl.Name)
resp, reqInf, err := TOSession.GetParameters(opts)
if err != nil {
t.Fatalf("Expected no error, but got %v - alerts: %+v", err, resp.Alerts)
}
if reqInf.StatusCode != http.StatusOK {
t.Fatalf("Expected 200 status code, got %d", reqInf.StatusCode)
}
}
currentTime := time.Now().UTC()
currentTime = currentTime.Add(1 * time.Second)
timeStr := currentTime.Format(time.RFC1123)
opts.Header.Set(rfc.IfModifiedSince, timeStr)
for _, pl := range testData.Parameters {
opts.QueryParameters.Set("name", pl.Name)
resp, reqInf, err := TOSession.GetParameters(opts)
if err != nil {
t.Fatalf("Expected no error, but got: %v - alerts: %+v", err, resp.Alerts)
}
if reqInf.StatusCode != http.StatusNotModified {
t.Fatalf("Expected 304 status code, got %d", reqInf.StatusCode)
}
}
}
func CreateTestParameters(t *testing.T) {
resp, _, err := TOSession.CreateMultipleParameters(testData.Parameters, client.RequestOptions{})
if err != nil {
t.Errorf("could not create Parameters: %v - alerts: %+v", err, resp)
}
}
func UpdateTestParameters(t *testing.T) {
if len(testData.Parameters) < 1 {
t.Fatal("Need at least one Parameter to test updating Parameters")
}
firstParameter := testData.Parameters[0]
// Retrieve the Parameter by name so we can get the id for the Update
opts := client.NewRequestOptions()
opts.QueryParameters.Set("name", firstParameter.Name)
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot get Parameter by name '%s': %v - alerts: %+v", firstParameter.Name, err, resp.Alerts)
}
if len(resp.Response) < 1 {
t.Fatalf("Expected at least one Parameter to exist with name '%s'", firstParameter.Name)
}
remoteParameter := resp.Response[0]
expectedParameterValue := "UPDATED"
remoteParameter.Value = expectedParameterValue
alert, _, err := TOSession.UpdateParameter(remoteParameter.ID, remoteParameter, client.RequestOptions{})
if err != nil {
t.Errorf("cannot update Parameter: %v - alerts: %+v", err, alert.Alerts)
}
// Retrieve the Parameter to check Parameter name got updated
opts.QueryParameters.Del("name")
opts.QueryParameters.Set("id", strconv.Itoa(remoteParameter.ID))
resp, _, err = TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot get Parameter by ID %d: %v - alerts: %+v", remoteParameter.ID, err, resp.Alerts)
}
if len(resp.Response) != 1 {
t.Fatalf("Expected exactly one Parameter to exist with ID %d, found: %d", remoteParameter.ID, len(resp.Response))
}
respParameter := resp.Response[0]
if respParameter.Value != expectedParameterValue {
t.Errorf("results do not match actual: %s, expected: %s", respParameter.Value, expectedParameterValue)
}
}
func GetTestParametersIMS(t *testing.T) {
futureTime := time.Now().AddDate(0, 0, 1)
time := futureTime.Format(time.RFC1123)
opts := client.NewRequestOptions()
opts.Header.Set(rfc.IfModifiedSince, time)
for _, pl := range testData.Parameters {
opts.QueryParameters.Set("name", pl.Name)
resp, reqInf, err := TOSession.GetParameters(opts)
if err != nil {
t.Fatalf("Expected no error, but got %v - alerts: %+v", err, resp.Alerts)
}
if reqInf.StatusCode != http.StatusNotModified {
t.Fatalf("Expected 304 status code, got %d", reqInf.StatusCode)
}
}
}
func GetTestParameters(t *testing.T) {
opts := client.NewRequestOptions()
for _, pl := range testData.Parameters {
opts.QueryParameters.Set("name", pl.Name)
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot GET Parameter by name '%s': %v - alerts: %+v", pl.Name, err, resp.Alerts)
}
}
}
func DeleteTestParametersParallel(t *testing.T) {
var wg sync.WaitGroup
for _, pl := range testData.Parameters {
wg.Add(1)
go func(p tc.Parameter) {
defer wg.Done()
DeleteTestParameter(t, p)
}(pl)
}
wg.Wait()
}
func DeleteTestParameters(t *testing.T) {
for _, pl := range testData.Parameters {
DeleteTestParameter(t, pl)
}
}
func DeleteTestParameter(t *testing.T, pl tc.Parameter) {
// Retrieve the Parameter by name so we can get the id for the Update
opts := client.NewRequestOptions()
opts.QueryParameters.Set("name", pl.Name)
opts.QueryParameters.Set("configFile", pl.ConfigFile)
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot get Parameter by name '%s' and configFile '%s': %v - alerts: %+v", pl.Name, pl.ConfigFile, err, resp.Alerts)
}
// TODO This fails for the ProfileParameters test; determine a way to check this, even for ProfileParameters
// if len(resp.Response) == 0 {
// t.Errorf("DeleteTestParameter got no params for %+v %+v", pl.Name, pl.ConfigFile)
// TODO figure out why this happens, and be more precise about deleting things where created.
// } else if len(resp.Response) > 1 {
// t.Errorf("DeleteTestParameter params for %+v %+v expected 1, actual %+v", pl.Name, pl.ConfigFile, len(resp))
// }
opts.QueryParameters.Del("name")
opts.QueryParameters.Del("configFile")
for _, respParameter := range resp.Response {
delResp, _, err := TOSession.DeleteParameter(respParameter.ID, client.RequestOptions{})
if err != nil {
t.Errorf("cannot delete Parameter #%d: %v - alerts: %+v", respParameter.ID, err, delResp.Alerts)
}
// Retrieve the Parameter to see if it got deleted
opts.QueryParameters.Set("id", strconv.Itoa(pl.ID))
pls, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("Unexpected error fetching Parameter #%d after deletion: %v - alerts: %+v", pl.ID, err, pls.Alerts)
}
if len(pls.Response) > 0 {
t.Errorf("expected Parameter with name '%s' and configFile '%s' to be deleted, but it was found in a Traffic Ops response", pl.Name, pl.ConfigFile)
}
}
}
func DeleteTestParametersByInvalidId(t *testing.T) {
opts := client.NewRequestOptions()
delResp, reqInf, err := TOSession.DeleteParameter(10000, opts)
if err == nil {
t.Errorf("cannot DELETE Parameters by Invalid ID: %v - %v", err, delResp)
}
if reqInf.StatusCode != http.StatusNotFound {
t.Errorf("Expected 404 status code, got %v", reqInf.StatusCode)
}
}
func GetTestPaginationSupportParameters(t *testing.T) {
opts := client.NewRequestOptions()
opts.QueryParameters.Set("orderby", "id")
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("Unexpected error getting Parameters: %v - alerts: %+v", err, resp.Alerts)
}
parameters := resp.Response
if len(parameters) > 0 {
opts.QueryParameters = url.Values{}
opts.QueryParameters.Set("orderby", "id")
opts.QueryParameters.Set("limit", "1")
parametersWithLimit, _, err := TOSession.GetParameters(opts)
if err == nil {
if !reflect.DeepEqual(parameters[:1], parametersWithLimit.Response) {
t.Error("expected GET Parameters with limit = 1 to return first result")
}
} else {
t.Errorf("Unexpected error getting Parameters with a limit: %v - alerts: %+v", err, parametersWithLimit.Alerts)
}
if len(parameters) > 1 {
opts.QueryParameters = url.Values{}
opts.QueryParameters.Set("orderby", "id")
opts.QueryParameters.Set("limit", "1")
opts.QueryParameters.Set("offset", "1")
parametersWithOffset, _, err := TOSession.GetParameters(opts)
if err == nil {
if !reflect.DeepEqual(parameters[1:2], parametersWithOffset.Response) {
t.Error("expected GET Parameters with limit = 1, offset = 1 to return second result")
}
} else {
t.Errorf("Unexpected error getting Parameters with a limit and an offset: %v - alerts: %+v", err, parametersWithOffset.Alerts)
}
opts.QueryParameters = url.Values{}
opts.QueryParameters.Set("orderby", "id")
opts.QueryParameters.Set("limit", "1")
opts.QueryParameters.Set("page", "2")
parametersWithPage, _, err := TOSession.GetParameters(opts)
if err == nil {
if !reflect.DeepEqual(parameters[1:2], parametersWithPage.Response) {
t.Error("expected GET Parameters with limit = 1, page = 2 to return second result")
}
} else {
t.Errorf("Unexpected error getting Parameters with a limit and a page: %v - alerts: %+v", err, parametersWithPage.Alerts)
}
} else {
t.Errorf("only one parameters found, so offset functionality can't test")
}
} else {
t.Errorf("No parameters found to check pagination")
}
opts.QueryParameters = url.Values{}
opts.QueryParameters.Set("limit", "-2")
_, _, err = TOSession.GetParameters(opts)
if err == nil {
t.Error("expected GET Parameters to return an error when limit is not bigger than -1")
} else if !strings.Contains(err.Error(), "must be bigger than -1") {
t.Errorf("expected GET Parameters to return an error for limit is not bigger than -1, actual error: %v - alerts: %+v", err, resp.Alerts)
}
opts.QueryParameters = url.Values{}
opts.QueryParameters.Set("limit", "1")
opts.QueryParameters.Set("offset", "0")
resp, _, err = TOSession.GetParameters(opts)
if err == nil {
t.Error("expected GET Parameters to return an error when offset is not a positive integer")
} else if !strings.Contains(err.Error(), "must be a positive integer") {
t.Errorf("expected GET Parameters to return an error for offset is not a positive integer, actual error: %v - alerts: %+v", err, resp.Alerts)
}
opts.QueryParameters = url.Values{}
opts.QueryParameters.Set("limit", "1")
opts.QueryParameters.Set("page", "0")
_, _, err = TOSession.GetParameters(opts)
if err == nil {
t.Error("expected GET Parameters to return an error when page is not a positive integer")
} else if !strings.Contains(err.Error(), "must be a positive integer") {
t.Errorf("expected GET Parameters to return an error for page is not a positive integer, actual error: %v - alerts: %+v", err, resp.Alerts)
}
}
func GetTestParametersByConfigfile(t *testing.T) {
for _, parameters := range testData.Parameters {
opts := client.NewRequestOptions()
opts.QueryParameters.Set("configFile", parameters.ConfigFile)
resp, reqInf, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot GET Parameter by Config File: %v - %v", parameters.ConfigFile, err)
}
if reqInf.StatusCode != http.StatusOK {
t.Errorf("Expected 200 status code, got %v", reqInf.StatusCode)
}
if len(resp.Response) <= 0 {
t.Errorf("No data available for Get Parameters by Config file")
}
}
}
func GetTestParametersByValue(t *testing.T) {
for _, parameters := range testData.Parameters {
opts := client.NewRequestOptions()
opts.QueryParameters.Set("value", parameters.Value)
resp, reqInf, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot GET Parameter by Value: %v - %v", parameters.Value, err)
}
if reqInf.StatusCode != http.StatusOK {
t.Errorf("Expected 200 status code, got %v", reqInf.StatusCode)
}
if len(resp.Response) <= 0 {
t.Errorf("No data available for Get Parameters by Value")
}
}
}
func GetTestParametersByName(t *testing.T) {
for _, parameters := range testData.Parameters {
opts := client.NewRequestOptions()
opts.QueryParameters.Set("name", parameters.Name)
resp, reqInf, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot GET Parameter by Name: %v - %v", parameters.Name, err)
}
if reqInf.StatusCode != http.StatusOK {
t.Errorf("Expected 200 status code, got %v", reqInf.StatusCode)
}
if len(resp.Response) <= 0 {
t.Errorf("No data available for Get Parameters by Name")
}
}
}
func GetParametersByInvalidId(t *testing.T) {
opts := client.NewRequestOptions()
opts.QueryParameters.Set("id", strconv.Itoa(10000))
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("Getting Parameters by Invalid ID %v", err)
}
if len(resp.Response) >= 1 {
t.Errorf("Invalid ID shouldn't have any response %v Error %v", resp, err)
}
}
func GetParametersByInvalidName(t *testing.T) {
opts := client.NewRequestOptions()
opts.QueryParameters.Set("name", "invalidname")
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("Getting Parameters by Invalid Name %v", err)
}
if len(resp.Response) >= 1 {
t.Errorf("Invalid name shouldn't have any response %v Error %v", resp, err)
}
}
func GetParametersByInvalidConfigfile(t *testing.T) {
opts := client.NewRequestOptions()
opts.QueryParameters.Set("configFile", "invalidfile")
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("Getting Parameters by Invalid ConfigFile %v", err)
}
if len(resp.Response) >= 1 {
t.Errorf("Invalid config file shouldn't have any response %v Error %v", resp, err)
}
}
func GetParametersByInvalidValue(t *testing.T) {
opts := client.NewRequestOptions()
opts.QueryParameters.Set("value", "invalidvalue")
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("Getting Parameters by Invalid value %v", err)
}
if len(resp.Response) >= 1 {
t.Errorf("Invalid value shouldn't have any response %v Error %v", resp, err)
}
}
func CreateTestParametersAlreadyExist(t *testing.T) {
opts := client.NewRequestOptions()
resp, _, _ := TOSession.GetParameters(opts)
if len(resp.Response) > 0 {
_, reqInf, _ := TOSession.CreateParameter(resp.Response[0], opts)
if reqInf.StatusCode != http.StatusBadRequest {
t.Errorf("Expected 400 status code, got %v", reqInf.StatusCode)
}
} else {
t.Errorf("No existing parameters available to validate duplicate functionality")
}
}
func CreateTestParametersMissingName(t *testing.T) {
opts := client.NewRequestOptions()
if len(testData.Parameters) > 0 {
firstParameter := testData.Parameters[0]
firstParameter.Name = ""
_, reqInf, _ := TOSession.CreateParameter(firstParameter, opts)
if reqInf.StatusCode != http.StatusBadRequest {
t.Errorf("Expected 400 status code, got %v", reqInf.StatusCode)
}
} else {
t.Errorf("No Parameters available, So Create Parameters with missing name can't validate")
}
}
func CreateTestParametersMissingconfigFile(t *testing.T) {
opts := client.NewRequestOptions()
if len(testData.Parameters) > 0 {
firstParameter := testData.Parameters[0]
firstParameter.ConfigFile = ""
_, reqInf, _ := TOSession.CreateParameter(firstParameter, opts)
if reqInf.StatusCode != http.StatusBadRequest {
t.Errorf("Expected 400 status code, got %v", reqInf.StatusCode)
}
} else {
t.Errorf("No Parameters available, So Create Parameters with missing Config file can't validate")
}
}
func UpdateParametersEmptyValue(t *testing.T) {
if len(testData.Parameters) > 0 {
firstParameter := testData.Parameters[0]
// Retrieve the Parameter by name so we can get the id for the Update
opts := client.NewRequestOptions()
opts.QueryParameters.Set("name", firstParameter.Name)
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot GET Parameter by name: %v - %v", firstParameter.Name, err)
}
if len(resp.Response) > 0 {
remoteParameter := resp.Response[0]
//Parameters can be updated with empty value, so no error while updating
remoteParameter.Value = ""
opts = client.NewRequestOptions()
alert, reqInf, err := TOSession.UpdateParameter(remoteParameter.ID, remoteParameter, opts)
if err != nil {
t.Errorf("cannot UPDATE Parameter by id: %v - %v", err, alert)
}
if reqInf.StatusCode != http.StatusOK {
t.Errorf("Expected 200 status code, got %v", reqInf.StatusCode)
}
} else {
t.Errorf("No parameters available to update negative scenarios")
}
} else {
t.Errorf("No parameters available to update negative scenarios")
}
}
func UpdateParametersEmptyName(t *testing.T) {
if len(testData.Parameters) > 0 {
firstParameter := testData.Parameters[0]
// Retrieve the Parameter by name so we can get the id for the Update
opts := client.NewRequestOptions()
opts.QueryParameters.Set("name", firstParameter.Name)
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot GET Parameter by name: %v - %v", firstParameter.Name, err)
}
if len(resp.Response) > 0 {
remoteParameter := resp.Response[0]
remoteParameter.Name = ""
opts = client.NewRequestOptions()
alert, reqInf, err := TOSession.UpdateParameter(remoteParameter.ID, remoteParameter, opts)
if err == nil {
t.Errorf("Invalid name has been updated by ID: %v - %v", err, alert)
}
if reqInf.StatusCode != http.StatusBadRequest {
t.Errorf("Expected 400 status code, got %v", reqInf.StatusCode)
}
} else {
t.Errorf("No parameters available to update negative scenarios")
}
} else {
t.Errorf("No parameters available to update negative scenarios")
}
}
func UpdateParametersEmptyConfigFile(t *testing.T) {
if len(testData.Parameters) > 0 {
firstParameter := testData.Parameters[0]
// Retrieve the Parameter by name so we can get the id for the Update
opts := client.NewRequestOptions()
opts.QueryParameters.Set("name", firstParameter.Name)
resp, _, err := TOSession.GetParameters(opts)
if err != nil {
t.Errorf("cannot GET Parameter by name: %v - %v", firstParameter.Name, err)
}
if len(resp.Response) > 0 {
remoteParameter := resp.Response[0]
remoteParameter.ConfigFile = ""
opts = client.NewRequestOptions()
alert, reqInf, err := TOSession.UpdateParameter(remoteParameter.ID, remoteParameter, opts)
if err == nil {
t.Errorf("Invalid Config File has been updated by ID: %v - %v", err, alert)
}
if reqInf.StatusCode != http.StatusBadRequest {
t.Errorf("Expected 400 status code, got %v", reqInf.StatusCode)
}
} else {
t.Errorf("No parameters available to update negative scenarios")
}
} else {
t.Errorf("No parameters available to update negative scenarios")
}
}
func CreateMultipleTestParameters(t *testing.T) {
opts := client.NewRequestOptions()
//To avoid duplicate issue, deleting and creating new parameters
DeleteTestParameters(t)
_, _, err := TOSession.CreateMultipleParameters(testData.Parameters, opts)
if err != nil {
t.Errorf("could not CREATE parameters: %v", err)
}
}