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 <[email protected]>
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)
+       }
+}

Reply via email to