This is an automated email from the ASF dual-hosted git repository.

srijeet0406 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 f7765ff008 [TO] Added unit tests for server folder (#7406)
f7765ff008 is described below

commit f7765ff00824d53db283321af91199dbd597c0b2
Author: Rima Shah <[email protected]>
AuthorDate: Wed Mar 22 23:23:04 2023 -0600

    [TO] Added unit tests for server folder (#7406)
    
    * Added unit tests for server folder.
    
    * Fix go vet issue.
    
    * updated test case(insertProfile).
    
    * updated test case(updateServer).
    
    * Arranged import and checking the correct error.
---
 .../traffic_ops_golang/server/put_status_test.go   |  20 ++
 .../server/servers_assignment.go                   |   2 +-
 .../server/servers_assignment_test.go              |  33 ++
 .../traffic_ops_golang/server/servers_test.go      | 389 ++++++++++++++++++++-
 4 files changed, 441 insertions(+), 3 deletions(-)

diff --git a/traffic_ops/traffic_ops_golang/server/put_status_test.go 
b/traffic_ops/traffic_ops_golang/server/put_status_test.go
index 82b81e72a8..def35a57bf 100644
--- a/traffic_ops/traffic_ops_golang/server/put_status_test.go
+++ b/traffic_ops/traffic_ops_golang/server/put_status_test.go
@@ -29,6 +29,26 @@ import (
        "gopkg.in/DATA-DOG/go-sqlmock.v1"
 )
 
+func TestInvalidStatusForDeliveryServicesAlertText(t *testing.T) {
+       type testStruct struct {
+               dsId     []int
+               expected string
+       }
+
+       var testData = []testStruct{
+               {[]int{0}, " #0 with no 'ONLINE' or 'REPORTED' EDGE servers"},
+               {[]int{0, 1}, "s #0 and #1 with no 'ONLINE' or 'REPORTED' EDGE 
servers"},
+               {[]int{0, 1, 2}, "s #0, #1, and #2 with no 'ONLINE' or 
'REPORTED' EDGE servers"},
+       }
+
+       for i, _ := range testData {
+               desc := InvalidStatusForDeliveryServicesAlertText("", "EDGE", 
testData[i].dsId)
+               if testData[i].expected != desc {
+                       t.Errorf("strings don't't match, got:%s; expected:%s", 
desc, testData[i].expected)
+               }
+       }
+}
+
 func TestCheckExistingStatusInfo(t *testing.T) {
        mockDB, mock, err := sqlmock.New()
        if err != nil {
diff --git a/traffic_ops/traffic_ops_golang/server/servers_assignment.go 
b/traffic_ops/traffic_ops_golang/server/servers_assignment.go
index fe11af3f65..27fa04cafa 100644
--- a/traffic_ops/traffic_ops_golang/server/servers_assignment.go
+++ b/traffic_ops/traffic_ops_golang/server/servers_assignment.go
@@ -310,7 +310,7 @@ func ValidateDSCapabilities(dsIDs []int, serverName string, 
tx *sql.Tx) (error,
                }
        }
 
-       return nil, nil, 0
+       return nil, nil, http.StatusOK
 }
 
 func assignDeliveryServicesToServer(server int, dses []int, replace bool, tx 
*sql.Tx) ([]int, error) {
diff --git a/traffic_ops/traffic_ops_golang/server/servers_assignment_test.go 
b/traffic_ops/traffic_ops_golang/server/servers_assignment_test.go
index 09027be538..5c387479da 100644
--- a/traffic_ops/traffic_ops_golang/server/servers_assignment_test.go
+++ b/traffic_ops/traffic_ops_golang/server/servers_assignment_test.go
@@ -183,3 +183,36 @@ func TestCheckTenancyAndCDN(t *testing.T) {
                t.Errorf("tenancy and cdn check for a given user failed with 
status code:%d", code)
        }
 }
+
+func TestValidateDSCapabilities(t *testing.T) {
+       mockDB, mock, err := sqlmock.New()
+       if err != nil {
+               t.Fatalf("an error '%v' was not expected when opening a stub 
database connection", err)
+       }
+       defer mockDB.Close()
+
+       db := sqlx.NewDb(mockDB, "sqlmock")
+       defer db.Close()
+
+       mock.ExpectBegin()
+       rows := sqlmock.NewRows([]string{"server_capability"})
+       rows.AddRow([]byte("{eas}"))
+       mock.ExpectQuery("SELECT").WithArgs("eas").WillReturnRows(rows)
+
+       dsIDs := []int64{1}
+       rows1 := sqlmock.NewRows([]string{"id", "required_capabilities"})
+       rows1.AddRow(1, []byte("{eas}"))
+       mock.ExpectQuery("SELECT 
").WithArgs(pq.Array(dsIDs)).WillReturnRows(rows1)
+       mock.ExpectCommit()
+
+       usrErr, sysErr, code := ValidateDSCapabilities([]int{1}, "eas", 
db.MustBegin().Tx)
+       if usrErr != nil {
+               t.Errorf("unable to validate DS capability, most likely cache 
doesn't have the DS capability, error: %v", usrErr)
+       }
+       if sysErr != nil {
+               t.Errorf("unable to validate DS Capability, system error: %v", 
sysErr)
+       }
+       if code != http.StatusOK {
+               t.Errorf("DS validation failed with status code:%d", code)
+       }
+}
diff --git a/traffic_ops/traffic_ops_golang/server/servers_test.go 
b/traffic_ops/traffic_ops_golang/server/servers_test.go
index 25e4f5dda7..bc15429d9c 100644
--- a/traffic_ops/traffic_ops_golang/server/servers_test.go
+++ b/traffic_ops/traffic_ops_golang/server/servers_test.go
@@ -28,10 +28,11 @@ import (
 
        "github.com/apache/trafficcontrol/lib/go-tc"
        "github.com/apache/trafficcontrol/lib/go-util"
-
        "github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
        "github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/auth"
+
        "github.com/jmoiron/sqlx"
+       "github.com/lib/pq"
        "gopkg.in/DATA-DOG/go-sqlmock.v1"
 )
 
@@ -119,7 +120,7 @@ func getTestServers() []ServerAndInterfaces {
 }
 
 // Test to make sure that updating the "cdn" of a server already assigned to a 
DS fails
-func TestUpdateServer(t *testing.T) {
+func TestCheckTypeChangeSafety(t *testing.T) {
        mockDB, mock, err := sqlmock.New()
        if err != nil {
                t.Fatalf("an error '%s' was not expected when opening a stub 
database connection", err)
@@ -722,3 +723,387 @@ func (s SortableServers) Swap(i, j int) {
 func (s SortableServers) Less(i, j int) bool {
        return s[i].HostName < s[j].HostName
 }
+
+func TestUpdateStatusLastUpdatedTime(t *testing.T) {
+       mockDB, mock, err := sqlmock.New()
+       if err != nil {
+               t.Fatalf("an error '%v' was not expected when opening a stub 
database connection", err)
+       }
+       defer mockDB.Close()
+
+       db := sqlx.NewDb(mockDB, "sqlmock")
+       defer db.Close()
+
+       lastUpdated := time.Now()
+       mock.ExpectBegin()
+       mock.ExpectExec("UPDATE").WithArgs(lastUpdated, 
1).WillReturnResult(sqlmock.NewResult(1, 1))
+       mock.ExpectCommit()
+
+       sysErr, _, code := updateStatusLastUpdatedTime(1, &lastUpdated, 
db.MustBegin().Tx)
+       if sysErr != nil {
+               t.Errorf("unable to update time, system error: %v", sysErr)
+       }
+       if code != http.StatusOK {
+               t.Errorf("updated time failed with status code:%d", code)
+       }
+}
+
+func TestCreateInterfaces(t *testing.T) {
+       mockDB, mock, err := sqlmock.New()
+       if err != nil {
+               t.Fatalf("an error '%v' was not expected when opening a stub 
database connection", err)
+       }
+       defer mockDB.Close()
+
+       db := sqlx.NewDb(mockDB, "sqlmock")
+       defer db.Close()
+
+       testInterface := getTestServers()[0].Interface
+       var iface []tc.ServerInterfaceInfoV40
+       iface = append(iface, testInterface)
+
+       mock.ExpectBegin()
+       mock.ExpectExec("INSERT INTO interface").
+               WithArgs(iface[0].MaxBandwidth, iface[0].Monitor, iface[0].MTU, 
iface[0].Name, 1, iface[0].RouterHostName, iface[0].RouterPortName).
+               WillReturnResult(sqlmock.NewResult(1, 1))
+
+       mock.ExpectExec("INSERT INTO ip_address").
+               WithArgs(iface[0].IPAddresses[0].Address, 
iface[0].IPAddresses[0].Gateway, iface[0].Name, 1, 
iface[0].IPAddresses[0].ServiceAddress).
+               WillReturnResult(sqlmock.NewResult(1, 1))
+       mock.ExpectCommit()
+
+       usrErr, sysErr, code := createInterfaces(1, iface, db.MustBegin().Tx)
+       if usrErr != nil {
+               t.Errorf("unable to create interface, user error: %v", usrErr)
+       }
+       if sysErr != nil {
+               t.Errorf("unable to create interface, system error: %v", sysErr)
+       }
+       if code != http.StatusOK {
+               t.Errorf("unable to create interface, failed with status 
code:%d", code)
+       }
+}
+
+func TestDeleteInterfaces(t *testing.T) {
+       mockDB, mock, err := sqlmock.New()
+       if err != nil {
+               t.Fatalf("an error '%v' was not expected when opening a stub 
database connection", err)
+       }
+       defer mockDB.Close()
+
+       db := sqlx.NewDb(mockDB, "sqlmock")
+       defer db.Close()
+
+       mock.ExpectBegin()
+       mock.ExpectExec("DELETE FROM 
ip_address").WithArgs(1).WillReturnResult(sqlmock.NewResult(1, 1))
+
+       mock.ExpectExec("DELETE FROM 
interface").WithArgs(1).WillReturnResult(sqlmock.NewResult(1, 1))
+       mock.ExpectCommit()
+
+       usrErr, sysErr, code := deleteInterfaces(1, db.MustBegin().Tx)
+       if usrErr != nil {
+               t.Errorf("unable to delete interface, user error: %v", usrErr)
+       }
+       if sysErr != nil {
+               t.Errorf("unable to delete interface, system error: %v", sysErr)
+       }
+       if code != http.StatusOK {
+               t.Errorf("unable to delete interface, failed with status 
code:%d", code)
+       }
+}
+
+func TestInsertServerProfile(t *testing.T) {
+       mockDB, mock, err := sqlmock.New()
+       if err != nil {
+               t.Fatalf("an error '%v' was not expected when opening a stub 
database connection", err)
+       }
+       defer mockDB.Close()
+
+       db := sqlx.NewDb(mockDB, "sqlmock")
+       defer db.Close()
+
+       profileName := []string{"traffic_ops", "global"}
+       priority := []int{0, 1}
+       mock.ExpectBegin()
+       mock.ExpectExec("INSERT INTO").WithArgs(1, pq.Array(profileName), 
pq.Array(priority)).WillReturnResult(sqlmock.NewResult(2, 2))
+       mock.ExpectCommit()
+
+       usrErr, sysErr, code := insertServerProfile(1, profileName, 
db.MustBegin().Tx)
+       if usrErr != nil {
+               t.Errorf("unable to insert profile, user error: %v", usrErr)
+       }
+       if sysErr != nil {
+               t.Errorf("unable to insert profile, system error: %v", sysErr)
+       }
+       if code != http.StatusOK {
+               t.Errorf("unable to insert profile, failed with status 
code:%d", code)
+       }
+}
+
+func TestCreateServerV4(t *testing.T) {
+       mockDB, mock, err := sqlmock.New()
+       if err != nil {
+               t.Fatalf("an error '%v' was not expected when opening a stub 
database connection", err)
+       }
+       defer mockDB.Close()
+
+       db := sqlx.NewDb(mockDB, "sqlmock")
+       defer db.Close()
+
+       s4 := getTestServers()[0].Server
+
+       mock.ExpectBegin()
+       rows0 := sqlmock.NewRows([]string{"id"})
+       rows0.AddRow(1)
+       
mock.ExpectQuery("SELECT").WithArgs(s4.ProfileNames[0]).WillReturnRows(rows0)
+
+       rows := sqlmock.NewRows([]string{
+               "cachegroup",
+               "cachegroup_id",
+               "cdn_id",
+               "cdn_name",
+               "domain_name",
+               "guid",
+               "host_name",
+               "https_port",
+               "id",
+               "ilo_ip_address",
+               "ilo_ip_gateway",
+               "ilo_ip_netmask",
+               "ilo_password",
+               "ilo_username",
+               "last_updated",
+               "mgmt_ip_address",
+               "mgmt_ip_gateway",
+               "mgmt_ip_netmask",
+               "offline_reason",
+               "phys_location",
+               "phys_location_id",
+               "profile_name",
+               "rack",
+               "status",
+               "status_id",
+               "tcp_port",
+               "server_type",
+               "server_type_id",
+       })
+       rows.AddRow(
+               *s4.Cachegroup,
+               *s4.CachegroupID,
+               *s4.CDNID,
+               *s4.CDNName,
+               *s4.DomainName,
+               *s4.GUID,
+               *s4.HostName,
+               *s4.HTTPSPort,
+               *s4.ID,
+               *s4.ILOIPAddress,
+               *s4.ILOIPGateway,
+               *s4.ILOIPNetmask,
+               *s4.ILOPassword,
+               *s4.ILOUsername,
+               *s4.LastUpdated,
+               *s4.MgmtIPAddress,
+               *s4.MgmtIPGateway,
+               *s4.MgmtIPNetmask,
+               *s4.OfflineReason,
+               *s4.PhysLocation,
+               *s4.PhysLocationID,
+               fmt.Sprintf("{%s}", strings.Join(s4.ProfileNames, ",")),
+               *s4.Rack,
+               *s4.Status,
+               *s4.StatusID,
+               *s4.TCPPort,
+               s4.Type,
+               *s4.TypeID,
+       )
+       mock.ExpectQuery("INSERT INTO server").
+               WithArgs(*s4.CachegroupID, *s4.CDNID, *s4.DomainName, 
*s4.HostName, *s4.HTTPSPort, *s4.ILOIPAddress,
+                       *s4.ILOIPNetmask, *s4.ILOIPGateway, *s4.ILOUsername, 
*s4.ILOPassword, *s4.MgmtIPAddress,
+                       *s4.MgmtIPNetmask, *s4.MgmtIPGateway, 
*s4.OfflineReason, *s4.PhysLocationID, 1, *s4.Rack,
+                       *s4.StatusID, *s4.TCPPort, *s4.TypeID, *s4.XMPPID, 
*s4.XMPPPasswd).
+               WillReturnRows(rows)
+       mock.ExpectCommit()
+
+       sid, err := createServerV4(db.MustBegin(), s4)
+       if err != nil {
+               t.Errorf("unable to create v4 server, error: %v", err)
+       }
+       if sid != int64(*s4.ID) {
+               t.Errorf("mismatched server ID, expected: %d, got: %d", *s4.ID, 
sid)
+       }
+}
+
+func TestCreateServerV3(t *testing.T) {
+       mockDB, mock, err := sqlmock.New()
+       if err != nil {
+               t.Fatalf("an error '%v' was not expected when opening a stub 
database connection", err)
+       }
+       defer mockDB.Close()
+
+       db := sqlx.NewDb(mockDB, "sqlmock")
+       defer db.Close()
+
+       s3 := tc.ServerV30{
+               CommonServerProperties: tc.CommonServerProperties{
+                       Cachegroup:       util.Ptr("mb"),
+                       CachegroupID:     util.Ptr(1),
+                       CDNID:            util.Ptr(1),
+                       CDNName:          util.Ptr("ALL"),
+                       DeliveryServices: nil,
+                       DomainName:       util.Ptr(""),
+                       FQDN:             nil,
+                       FqdnTime:         time.Time{},
+                       GUID:             util.Ptr(""),
+                       HostName:         util.Ptr("test"),
+                       HTTPSPort:        util.Ptr(8443),
+                       ID:               util.Ptr(1),
+                       ILOIPAddress:     util.Ptr(""),
+                       ILOIPGateway:     util.Ptr(""),
+                       ILOIPNetmask:     util.Ptr(""),
+                       ILOPassword:      util.Ptr(""),
+                       ILOUsername:      util.Ptr(""),
+                       LastUpdated:      util.Ptr(tc.TimeNoMod{}),
+                       MgmtIPAddress:    util.Ptr(""),
+                       MgmtIPGateway:    util.Ptr(""),
+                       MgmtIPNetmask:    util.Ptr(""),
+                       OfflineReason:    util.Ptr(""),
+                       PhysLocation:     util.Ptr("boulder"),
+                       PhysLocationID:   util.Ptr(1),
+                       Profile:          util.Ptr("GLOBAL"),
+                       ProfileDesc:      nil,
+                       ProfileID:        util.Ptr(1),
+                       Rack:             util.Ptr(""),
+                       RevalPending:     util.Ptr(false),
+                       Status:           util.Ptr("ACTIVE"),
+                       StatusID:         util.Ptr(1),
+                       TCPPort:          util.Ptr(8080),
+                       Type:             "EDGE",
+                       TypeID:           util.Ptr(2),
+                       UpdPending:       util.Ptr(false),
+                       XMPPID:           util.Ptr(""),
+                       XMPPPasswd:       util.Ptr(""),
+               },
+               RouterHostName:    util.Ptr(""),
+               RouterPortName:    util.Ptr(""),
+               Interfaces:        []tc.ServerInterfaceInfo{},
+               StatusLastUpdated: util.Ptr(time.Time{}),
+       }
+
+       mock.ExpectBegin()
+       rows := sqlmock.NewRows([]string{"id"})
+       rows.AddRow(1)
+       mock.ExpectQuery("INSERT INTO server").
+               WithArgs(*s3.CachegroupID, *s3.CDNID, *s3.DomainName, 
*s3.HostName, *s3.HTTPSPort, *s3.ILOIPAddress,
+                       *s3.ILOIPNetmask, *s3.ILOIPGateway, *s3.ILOUsername, 
*s3.ILOPassword, *s3.MgmtIPAddress,
+                       *s3.MgmtIPNetmask, *s3.MgmtIPGateway, 
*s3.OfflineReason, *s3.PhysLocationID, *s3.ProfileID,
+                       *s3.Rack, *s3.StatusID, *s3.TCPPort, *s3.TypeID, 
*s3.XMPPID, *s3.XMPPPasswd, *s3.StatusLastUpdated).
+               WillReturnRows(rows)
+       mock.ExpectCommit()
+
+       sid, err := createServerV3(db.MustBegin(), s3)
+       if err != nil {
+               t.Errorf("unable to create v3 server, error: %v", err)
+       }
+       if sid != int64(*s3.ID) {
+               t.Errorf("mismatched server ID, expected: %d, got: %d", *s3.ID, 
sid)
+       }
+}
+
+func TestUpdateServer(t *testing.T) {
+       mockDB, mock, err := sqlmock.New()
+       if err != nil {
+               t.Fatalf("an error '%v' was not expected when opening a stub 
database connection", err)
+       }
+       defer mockDB.Close()
+
+       db := sqlx.NewDb(mockDB, "sqlmock")
+       defer db.Close()
+
+       s4 := getTestServers()[0].Server
+
+       mock.ExpectBegin()
+       rows := sqlmock.NewRows([]string{
+               "cachegroup",
+               "cachegroup_id",
+               "cdn_id",
+               "cdn_name",
+               "domain_name",
+               "guid",
+               "host_name",
+               "https_port",
+               "id",
+               "ilo_ip_address",
+               "ilo_ip_gateway",
+               "ilo_ip_netmask",
+               "ilo_password",
+               "ilo_username",
+               "last_updated",
+               "mgmt_ip_address",
+               "mgmt_ip_gateway",
+               "mgmt_ip_netmask",
+               "offline_reason",
+               "phys_location",
+               "phys_location_id",
+               "profile_name",
+               "rack",
+               "status",
+               "status_id",
+               "tcp_port",
+               "server_type",
+               "server_type_id",
+               "status_last_updated",
+       })
+       rows.AddRow(
+               *s4.Cachegroup,
+               *s4.CachegroupID,
+               *s4.CDNID,
+               *s4.CDNName,
+               *s4.DomainName,
+               *s4.GUID,
+               *s4.HostName,
+               *s4.HTTPSPort,
+               *s4.ID,
+               *s4.ILOIPAddress,
+               *s4.ILOIPGateway,
+               *s4.ILOIPNetmask,
+               *s4.ILOPassword,
+               *s4.ILOUsername,
+               *s4.LastUpdated,
+               *s4.MgmtIPAddress,
+               *s4.MgmtIPGateway,
+               *s4.MgmtIPNetmask,
+               *s4.OfflineReason,
+               *s4.PhysLocation,
+               *s4.PhysLocationID,
+               fmt.Sprintf("{%s}", strings.Join(s4.ProfileNames, ",")),
+               *s4.Rack,
+               *s4.Status,
+               *s4.StatusID,
+               *s4.TCPPort,
+               s4.Type,
+               *s4.TypeID,
+               *s4.StatusLastUpdated,
+       )
+       mock.ExpectQuery("UPDATE server SET").
+               WithArgs(*s4.CachegroupID, *s4.CDNID, *s4.DomainName, 
*s4.HostName, *s4.HTTPSPort, *s4.ILOIPAddress,
+                       *s4.ILOIPNetmask, *s4.ILOIPGateway, *s4.ILOUsername, 
*s4.ILOPassword, *s4.MgmtIPAddress,
+                       *s4.MgmtIPNetmask, *s4.MgmtIPGateway, 
*s4.OfflineReason, *s4.PhysLocationID, 1, *s4.Rack,
+                       *s4.StatusID, *s4.TCPPort, *s4.TypeID, *s4.XMPPPasswd, 
*s4.StatusLastUpdated, *s4.ID).
+               WillReturnRows(rows)
+       mock.ExpectCommit()
+
+       sid, code, usrErr, sysErr := updateServer(db.MustBegin(), s4)
+       if usrErr != nil {
+               t.Errorf("unable to update v4 server, user error: %v", usrErr)
+       }
+       if sysErr != nil {
+               t.Errorf("unable to update v4 server, system error: %v", sysErr)
+       }
+       if sid != int64(*s4.ID) {
+               t.Errorf("updated incorrect server, expected:%d, got:%d", 
*s4.ID, sid)
+       }
+       if code != http.StatusOK {
+               t.Errorf("failed to update server with id:%d, expected: %d, 
got: %d", *s4.ID, http.StatusOK, code)
+       }
+}

Reply via email to