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