You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by mi...@apache.org on 2021/03/30 16:27:36 UTC
[trafficcontrol] branch master updated: Adding additional tests for
snapshot endpoints (#5677)
This is an automated email from the ASF dual-hosted git repository.
mitchell852 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 2cc067b Adding additional tests for snapshot endpoints (#5677)
2cc067b is described below
commit 2cc067b824a2d606598773bd5f5e4913aba4a68e
Author: Srijeet Chatterjee <30...@users.noreply.github.com>
AuthorDate: Tue Mar 30 10:27:24 2021 -0600
Adding additional tests for snapshot endpoints (#5677)
---
traffic_ops/testing/api/v4/crconfig_test.go | 49 +++++++++++++++++++++++++++++
traffic_ops/testing/api/v4/user_test.go | 28 +++++++++++++++++
2 files changed, 77 insertions(+)
diff --git a/traffic_ops/testing/api/v4/crconfig_test.go b/traffic_ops/testing/api/v4/crconfig_test.go
index 6d44eca..83c3c8b 100644
--- a/traffic_ops/testing/api/v4/crconfig_test.go
+++ b/traffic_ops/testing/api/v4/crconfig_test.go
@@ -17,9 +17,13 @@ package v4
import (
"encoding/json"
+ "net/http"
"testing"
+ "time"
"github.com/apache/trafficcontrol/lib/go-tc"
+ "github.com/apache/trafficcontrol/lib/go-util"
+ toclient "github.com/apache/trafficcontrol/traffic_ops/v4-client"
)
func TestCRConfig(t *testing.T) {
@@ -29,9 +33,54 @@ func TestCRConfig(t *testing.T) {
SnapshotTestCDNbyInvalidName(t)
SnapshotTestCDNbyID(t)
SnapshotTestCDNbyInvalidID(t)
+ SnapshotWithReadOnlyUser(t)
})
}
+func SnapshotWithReadOnlyUser(t *testing.T) {
+ if len(testData.CDNs) == 0 {
+ t.Fatalf("expected one or more valid CDNs, but got none")
+ }
+ resp, _, err := TOSession.TenantByNameWithHdr("root", nil)
+ if err != nil {
+ t.Fatalf("couldn't get the root tenant ID: %v", err)
+ }
+ if resp == nil {
+ t.Fatalf("expected a valid tenant response, but got nothing")
+ }
+
+ toReqTimeout := time.Second * time.Duration(Config.Default.Session.TimeoutInSecs)
+ user := tc.User{
+ Username: util.StrPtr("test_user"),
+ RegistrationSent: tc.TimeNoModFromTime(time.Now()),
+ LocalPassword: util.StrPtr("test_pa$$word"),
+ ConfirmLocalPassword: util.StrPtr("test_pa$$word"),
+ RoleName: util.StrPtr("read-only user"),
+ }
+ user.Email = util.StrPtr("email@domain.com")
+ user.TenantID = util.IntPtr(resp.ID)
+ user.FullName = util.StrPtr("firstName LastName")
+
+ u, _, err := TOSession.CreateUser(&user)
+ if err != nil {
+ t.Fatalf("could not create read-only user: %v", err)
+ }
+ client, _, err := toclient.LoginWithAgent(TOSession.URL, "test_user", "test_pa$$word", true, "to-api-v4-client-tests/tenant4user", true, toReqTimeout)
+ if err != nil {
+ t.Fatalf("failed to log in with test_user: %v", err.Error())
+ }
+ reqInf, err := client.SnapshotCRConfigWithHdr(testData.CDNs[0].Name, nil)
+ if err == nil {
+ t.Errorf("expected to get an error about a read-only client trying to snap a CDN, but got none")
+ }
+ if reqInf.StatusCode != http.StatusForbidden {
+ t.Errorf("expected a 403 forbidden status code, but got %d", reqInf.StatusCode)
+ }
+ if u != nil && u.Response.Username != nil {
+ ForceDeleteTestUsersByUsernames(t, []string{"test_user"})
+ }
+}
+
func UpdateTestCRConfigSnapshot(t *testing.T) {
if len(testData.CDNs) < 1 {
t.Error("no cdn test data")
diff --git a/traffic_ops/testing/api/v4/user_test.go b/traffic_ops/testing/api/v4/user_test.go
index 28ccf37..d761708 100644
--- a/traffic_ops/testing/api/v4/user_test.go
+++ b/traffic_ops/testing/api/v4/user_test.go
@@ -507,6 +507,34 @@ func ForceDeleteTestUsers(t *testing.T) {
}
}
+func ForceDeleteTestUsersByUsernames(t *testing.T, usernames []string) {
+
+ // NOTE: Special circumstances! This should *NOT* be done without a really good reason!
+ // Connects directly to the DB to remove users rather than going thru the client.
+ // This is required here because the DeleteUser action does not really delete users, but disables them.
+ db, err := OpenConnection()
+ if err != nil {
+ t.Error("cannot open db")
+ }
+ defer db.Close()
+
+ for i, u := range usernames {
+ usernames[i] = `'` + u + `'`
+ }
+ // there is a constraint that prevents users from being deleted when they have a log
+ q := `DELETE FROM log WHERE NOT tm_user = (SELECT id FROM tm_user WHERE username = 'admin')`
+ err = execSQL(db, q)
+ if err != nil {
+ t.Errorf("cannot execute SQL: %s; SQL is %s", err.Error(), q)
+ }
+
+ q = `DELETE FROM tm_user WHERE username IN (` + strings.Join(usernames, ",") + `)`
+ err = execSQL(db, q)
+ if err != nil {
+ t.Errorf("cannot execute SQL: %s; SQL is %s", err.Error(), q)
+ }
+}
+
func DeleteTestUsers(t *testing.T) {
for _, user := range testData.Users {