mirror of https://github.com/cloudreve/Cloudreve
Test: new database models and middlewares
parent
e41ec9defa
commit
3064ed60f3
|
@ -1,12 +1,17 @@
|
||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
model "github.com/cloudreve/Cloudreve/v3/models"
|
model "github.com/cloudreve/Cloudreve/v3/models"
|
||||||
|
"github.com/cloudreve/Cloudreve/v3/pkg/aria2/common"
|
||||||
"github.com/cloudreve/Cloudreve/v3/pkg/auth"
|
"github.com/cloudreve/Cloudreve/v3/pkg/auth"
|
||||||
"github.com/cloudreve/Cloudreve/v3/pkg/cluster"
|
"github.com/cloudreve/Cloudreve/v3/pkg/cluster"
|
||||||
|
"github.com/cloudreve/Cloudreve/v3/pkg/mq"
|
||||||
|
"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
testMock "github.com/stretchr/testify/mock"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
@ -74,7 +79,78 @@ func TestSlaveRPCSignRequired(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SlaveControllerMock struct {
|
||||||
|
testMock.Mock
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s SlaveControllerMock) HandleHeartBeat(pingReq *serializer.NodePingReq) (serializer.NodePingResp, error) {
|
||||||
|
args := s.Called(pingReq)
|
||||||
|
return args.Get(0).(serializer.NodePingResp), args.Error(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s SlaveControllerMock) GetAria2Instance(s2 string) (common.Aria2, error) {
|
||||||
|
args := s.Called(s2)
|
||||||
|
return args.Get(0).(common.Aria2), args.Error(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s SlaveControllerMock) SendNotification(s3 string, s2 string, message mq.Message) error {
|
||||||
|
args := s.Called(s3, s2, message)
|
||||||
|
return args.Error(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s SlaveControllerMock) SubmitTask(s3 string, i interface{}, s2 string, f func(interface{})) error {
|
||||||
|
args := s.Called(s3, i, s2, f)
|
||||||
|
return args.Error(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s SlaveControllerMock) GetMasterInfo(s2 string) (*cluster.MasterInfo, error) {
|
||||||
|
args := s.Called(s2)
|
||||||
|
return args.Get(0).(*cluster.MasterInfo), args.Error(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s SlaveControllerMock) GetOneDriveToken(s2 string, u uint) (string, error) {
|
||||||
|
args := s.Called(s2, u)
|
||||||
|
return args.String(0), args.Error(1)
|
||||||
|
}
|
||||||
|
|
||||||
func TestUseSlaveAria2Instance(t *testing.T) {
|
func TestUseSlaveAria2Instance(t *testing.T) {
|
||||||
a := assert.New(t)
|
a := assert.New(t)
|
||||||
|
|
||||||
|
// MasterSiteID not set
|
||||||
|
{
|
||||||
|
testController := &SlaveControllerMock{}
|
||||||
|
useSlaveAria2InstanceFunc := UseSlaveAria2Instance(testController)
|
||||||
|
c, _ := gin.CreateTestContext(httptest.NewRecorder())
|
||||||
|
c.Request = httptest.NewRequest("GET", "/", nil)
|
||||||
|
useSlaveAria2InstanceFunc(c)
|
||||||
|
a.True(c.IsAborted())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cannot get aria2 instances
|
||||||
|
{
|
||||||
|
testController := &SlaveControllerMock{}
|
||||||
|
useSlaveAria2InstanceFunc := UseSlaveAria2Instance(testController)
|
||||||
|
c, _ := gin.CreateTestContext(httptest.NewRecorder())
|
||||||
|
c.Request = httptest.NewRequest("GET", "/", nil)
|
||||||
|
c.Set("MasterSiteID", "expectedSiteID")
|
||||||
|
testController.On("GetAria2Instance", "expectedSiteID").Return(&common.DummyAria2{}, errors.New("error"))
|
||||||
|
useSlaveAria2InstanceFunc(c)
|
||||||
|
a.True(c.IsAborted())
|
||||||
|
testController.AssertExpectations(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Success
|
||||||
|
{
|
||||||
|
testController := &SlaveControllerMock{}
|
||||||
|
useSlaveAria2InstanceFunc := UseSlaveAria2Instance(testController)
|
||||||
|
c, _ := gin.CreateTestContext(httptest.NewRecorder())
|
||||||
|
c.Request = httptest.NewRequest("GET", "/", nil)
|
||||||
|
c.Set("MasterSiteID", "expectedSiteID")
|
||||||
|
testController.On("GetAria2Instance", "expectedSiteID").Return(&common.DummyAria2{}, nil)
|
||||||
|
useSlaveAria2InstanceFunc(c)
|
||||||
|
a.False(c.IsAborted())
|
||||||
|
res, _ := c.Get("MasterAria2Instance")
|
||||||
|
a.NotNil(res)
|
||||||
|
testController.AssertExpectations(t)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,3 +177,14 @@ func TestDownload_Delete(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDownload_GetNodeID(t *testing.T) {
|
||||||
|
a := assert.New(t)
|
||||||
|
record := Download{}
|
||||||
|
|
||||||
|
// compatible with 3.4
|
||||||
|
a.EqualValues(1, record.GetNodeID())
|
||||||
|
|
||||||
|
record.NodeID = 5
|
||||||
|
a.EqualValues(5, record.GetNodeID())
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/DATA-DOG/go-sqlmock"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetNodeByID(t *testing.T) {
|
||||||
|
a := assert.New(t)
|
||||||
|
mock.ExpectQuery("SELECT(.+)nodes").WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1))
|
||||||
|
res, err := GetNodeByID(1)
|
||||||
|
a.NoError(err)
|
||||||
|
a.EqualValues(1, res.ID)
|
||||||
|
a.NoError(mock.ExpectationsWereMet())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetNodesByStatus(t *testing.T) {
|
||||||
|
a := assert.New(t)
|
||||||
|
mock.ExpectQuery("SELECT(.+)nodes").WillReturnRows(sqlmock.NewRows([]string{"status"}).AddRow(NodeActive))
|
||||||
|
res, err := GetNodesByStatus(NodeActive)
|
||||||
|
a.NoError(err)
|
||||||
|
a.Len(res, 1)
|
||||||
|
a.EqualValues(NodeActive, res[0].Status)
|
||||||
|
a.NoError(mock.ExpectationsWereMet())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNode_AfterFind(t *testing.T) {
|
||||||
|
a := assert.New(t)
|
||||||
|
node := &Node{}
|
||||||
|
|
||||||
|
// No aria2 options
|
||||||
|
{
|
||||||
|
a.NoError(node.AfterFind())
|
||||||
|
}
|
||||||
|
|
||||||
|
// with aria2 options
|
||||||
|
{
|
||||||
|
node.Aria2Options = `{"timeout":1}`
|
||||||
|
a.NoError(node.AfterFind())
|
||||||
|
a.Equal(1, node.Aria2OptionsSerialized.Timeout)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNode_BeforeSave(t *testing.T) {
|
||||||
|
a := assert.New(t)
|
||||||
|
node := &Node{}
|
||||||
|
|
||||||
|
node.Aria2OptionsSerialized.Timeout = 1
|
||||||
|
a.NoError(node.BeforeSave())
|
||||||
|
a.Contains("1", node.Aria2Options)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNode_SetStatus(t *testing.T) {
|
||||||
|
a := assert.New(t)
|
||||||
|
node := &Node{}
|
||||||
|
|
||||||
|
mock.ExpectBegin()
|
||||||
|
mock.ExpectExec("UPDATE(.+)nodes").WithArgs(NodeActive, sqlmock.AnyArg()).WillReturnResult(sqlmock.NewResult(1, 1))
|
||||||
|
mock.ExpectCommit()
|
||||||
|
a.NoError(node.SetStatus(NodeActive))
|
||||||
|
a.Equal(NodeActive, node.Status)
|
||||||
|
a.NoError(mock.ExpectationsWereMet())
|
||||||
|
}
|
|
@ -188,18 +188,6 @@ func TestShare_CanBeDownloadBy(t *testing.T) {
|
||||||
asserts.Error(share.CanBeDownloadBy(user))
|
asserts.Error(share.CanBeDownloadBy(user))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 未登录,需要积分
|
|
||||||
{
|
|
||||||
user := &User{
|
|
||||||
Group: Group{
|
|
||||||
OptionsSerialized: GroupOption{
|
|
||||||
ShareDownload: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
asserts.Error(share.CanBeDownloadBy(user))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 成功
|
// 成功
|
||||||
{
|
{
|
||||||
user := &User{
|
user := &User{
|
||||||
|
|
|
@ -177,10 +177,10 @@ func TestNewUser(t *testing.T) {
|
||||||
|
|
||||||
func TestUser_AfterFind(t *testing.T) {
|
func TestUser_AfterFind(t *testing.T) {
|
||||||
asserts := assert.New(t)
|
asserts := assert.New(t)
|
||||||
cache.Deletes([]string{"1"}, "policy_")
|
cache.Deletes([]string{"0"}, "policy_")
|
||||||
|
|
||||||
policyRows := sqlmock.NewRows([]string{"id", "name"}).
|
policyRows := sqlmock.NewRows([]string{"id", "name"}).
|
||||||
AddRow(1, "默认存储策略")
|
AddRow(144, "默认存储策略")
|
||||||
mock.ExpectQuery("^SELECT (.+)").WillReturnRows(policyRows)
|
mock.ExpectQuery("^SELECT (.+)").WillReturnRows(policyRows)
|
||||||
|
|
||||||
newUser := NewUser()
|
newUser := NewUser()
|
||||||
|
@ -240,11 +240,6 @@ func TestUser_GetRemainingCapacity(t *testing.T) {
|
||||||
newUser.Group.MaxStorage = 100
|
newUser.Group.MaxStorage = 100
|
||||||
newUser.Storage = 200
|
newUser.Storage = 200
|
||||||
asserts.Equal(uint64(0), newUser.GetRemainingCapacity())
|
asserts.Equal(uint64(0), newUser.GetRemainingCapacity())
|
||||||
|
|
||||||
cache.Set("pack_size_0", uint64(10), 0)
|
|
||||||
newUser.Group.MaxStorage = 100
|
|
||||||
newUser.Storage = 101
|
|
||||||
asserts.Equal(uint64(9), newUser.GetRemainingCapacity())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUser_DeductionCapacity(t *testing.T) {
|
func TestUser_DeductionCapacity(t *testing.T) {
|
||||||
|
@ -280,10 +275,6 @@ func TestUser_DeductionCapacity(t *testing.T) {
|
||||||
asserts.Equal(false, newUser.IncreaseStorage(1))
|
asserts.Equal(false, newUser.IncreaseStorage(1))
|
||||||
asserts.Equal(uint64(100), newUser.Storage)
|
asserts.Equal(uint64(100), newUser.Storage)
|
||||||
|
|
||||||
cache.Set("pack_size_1", uint64(1), 0)
|
|
||||||
asserts.Equal(true, newUser.IncreaseStorage(1))
|
|
||||||
asserts.Equal(uint64(101), newUser.Storage)
|
|
||||||
|
|
||||||
asserts.True(newUser.IncreaseStorage(0))
|
asserts.True(newUser.IncreaseStorage(0))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue