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 2021/09/14 12:49:26 UTC
[trafficcontrol] branch master updated: Add TO Client API for
Tenant Automation (#6165)
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 6367342 Add TO Client API for Tenant Automation (#6165)
6367342 is described below
commit 6367342d28e5024adc969c0687a1215689c0cfd4
Author: dmohan001c <de...@comcast.com>
AuthorDate: Tue Sep 14 18:19:12 2021 +0530
Add TO Client API for Tenant Automation (#6165)
* added tests for pagination and sort:
* removed unnecessary statements
* formatted the code
* updated the error statement
---
traffic_ops/testing/api/v4/tenants_test.go | 127 +++++++++++++++++++++++++++++
1 file changed, 127 insertions(+)
diff --git a/traffic_ops/testing/api/v4/tenants_test.go b/traffic_ops/testing/api/v4/tenants_test.go
index 3c649ff..320fa89 100644
--- a/traffic_ops/testing/api/v4/tenants_test.go
+++ b/traffic_ops/testing/api/v4/tenants_test.go
@@ -18,6 +18,8 @@ package v4
import (
"fmt"
"net/http"
+ "net/url"
+ "reflect"
"sort"
"strconv"
"testing"
@@ -44,6 +46,9 @@ func TestTenants(t *testing.T) {
etag := rfc.ETag(currentTime)
header.Set(rfc.IfMatch, etag)
UpdateTestTenantsWithHeaders(t, header)
+ GetTestTenantsByActive(t)
+ GetTestPaginationSupportTenant(t)
+ SortTestTenantDesc(t)
})
}
@@ -103,6 +108,23 @@ func CreateTestTenants(t *testing.T) {
}
}
+func GetTestTenantsByActive(t *testing.T) {
+ opts := client.NewRequestOptions()
+ for _, ten := range testData.Tenants {
+ opts.QueryParameters.Set("active", strconv.FormatBool(ten.Active))
+ resp, reqInf, err := TOSession.GetTenants(opts)
+ if len(resp.Response) < 1 {
+ t.Errorf("Expected atleast one Tenants response %v", resp)
+ }
+ if err != nil {
+ t.Errorf("cannot get Tenant by Active: %v - alerts: %+v", err, resp.Alerts)
+ }
+ if reqInf.StatusCode != http.StatusOK {
+ t.Errorf("Expected 200 status code, got %v", reqInf.StatusCode)
+ }
+ }
+}
+
func GetTestTenants(t *testing.T) {
resp, _, err := TOSession.GetTenants(client.RequestOptions{})
if err != nil {
@@ -432,3 +454,108 @@ func setTenantActive(t *testing.T, name string, active bool) {
t.Fatalf("cannot update Tenant: %v - alerts: %+v", err, response.Alerts)
}
}
+
+func GetTestPaginationSupportTenant(t *testing.T) {
+ opts := client.NewRequestOptions()
+ opts.QueryParameters.Set("orderby", "id")
+ resp, _, err := TOSession.GetTenants(opts)
+ if err != nil {
+ t.Fatalf("cannot Get Tenant: %v - alerts: %+v", err, resp.Alerts)
+ }
+ tenant := resp.Response
+ if len(tenant) < 3 {
+ t.Fatalf("Need at least 3 Tenants in Traffic Ops to test pagination support, found: %d", len(tenant))
+ }
+
+ opts.QueryParameters.Set("limit", "1")
+ tenantsWithLimit, _, err := TOSession.GetTenants(opts)
+ if err != nil {
+ t.Fatalf("cannot Get Tenant with Limit: %v - alerts: %+v", err, tenantsWithLimit.Alerts)
+ }
+ if !reflect.DeepEqual(tenant[:1], tenantsWithLimit.Response) {
+ t.Error("expected GET tenants with limit = 1 to return first result")
+ }
+
+ opts.QueryParameters.Set("offset", "1")
+ tenantsWithOffset, _, err := TOSession.GetTenants(opts)
+ if err != nil {
+ t.Fatalf("cannot Get Tenant with Limit and Offset: %v - alerts: %+v", err, tenantsWithOffset.Alerts)
+ }
+ if !reflect.DeepEqual(tenant[1:2], tenantsWithOffset.Response) {
+ t.Error("expected GET tenant with limit = 1, offset = 1 to return second result")
+ }
+
+ opts.QueryParameters.Del("offset")
+ opts.QueryParameters.Set("page", "2")
+ tenantsWithPage, _, err := TOSession.GetTenants(opts)
+ if err != nil {
+ t.Fatalf("cannot Get Tenant with Limit and Page: %v - alerts: %+v", err, tenantsWithPage.Alerts)
+ }
+ if !reflect.DeepEqual(tenant[1:2], tenantsWithPage.Response) {
+ t.Error("expected GET tenant with limit = 1, page = 2 to return second result")
+ }
+
+ opts.QueryParameters = url.Values{}
+ opts.QueryParameters.Set("limit", "-2")
+ resp, _, err = TOSession.GetTenants(opts)
+ if err == nil {
+ t.Error("expected GET tenant to return an error when limit is not bigger than -1")
+ } else if !alertsHaveError(resp.Alerts.Alerts, "must be bigger than -1") {
+ t.Errorf("expected GET tenant to return an error for limit is not bigger than -1, actual error: %v - alerts: %+v", err, resp.Alerts)
+ }
+
+ opts.QueryParameters.Set("limit", "1")
+ opts.QueryParameters.Set("offset", "0")
+ resp, _, err = TOSession.GetTenants(opts)
+ if err == nil {
+ t.Error("expected GET tenant to return an error when offset is not a positive integer")
+ } else if !alertsHaveError(resp.Alerts.Alerts, "must be a positive integer") {
+ t.Errorf("expected GET tenant 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")
+ resp, _, err = TOSession.GetTenants(opts)
+ if err == nil {
+ t.Error("expected GET tenant to return an error when page is not a positive integer")
+ } else if !alertsHaveError(resp.Alerts.Alerts, "must be a positive integer") {
+ t.Errorf("expected GET tenant to return an error for page is not a positive integer, actual error: %v - alerts: %+v", err, resp.Alerts)
+ }
+}
+
+func SortTestTenantDesc(t *testing.T) {
+ resp, _, err := TOSession.GetTenants(client.RequestOptions{})
+ if err != nil {
+ t.Errorf("Expected no error, but got error in Tenant with default ordering: %v - alerts: %+v", err, resp.Alerts)
+ }
+ respAsc := resp.Response
+ if len(respAsc) < 1 {
+ t.Fatal("Need at least one Tenant in Traffic Ops to test Tenant sort ordering")
+ }
+
+ opts := client.NewRequestOptions()
+ opts.QueryParameters.Set("sortOrder", "desc")
+ resp, _, err = TOSession.GetTenants(opts)
+ if err != nil {
+ t.Errorf("Expected no error, but got error in Tenant with Descending ordering: %v - alerts: %+v", err, resp.Alerts)
+ }
+ respDesc := resp.Response
+ if len(respDesc) < 1 {
+ t.Fatal("Need at least one Tenant in Traffic Ops to test Tenant sort ordering")
+ }
+
+ if len(respAsc) != len(respDesc) {
+ t.Fatalf("Traffic Ops returned %d Tenant using default sort order, but %d Tenant when sort order was explicitly set to descending", len(respAsc), len(respDesc))
+ }
+
+ // reverse the descending-sorted response and compare it to the ascending-sorted one
+ // TODO ensure at least two in each slice? A list of length one is
+ // trivially sorted both ascending and descending.
+ for start, end := 0, len(respDesc)-1; start < end; start, end = start+1, end-1 {
+ respDesc[start], respDesc[end] = respDesc[end], respDesc[start]
+ }
+ if respDesc[0].Name != respAsc[0].Name {
+ t.Errorf("Tenant responses are not equal after reversal: Asc: %s - Desc: %s", respDesc[0].Name, respAsc[0].Name)
+ }
+}