This commit is contained in:
Nicola Murino
2021-02-11 19:45:52 +01:00
parent 4ddfe41f23
commit 51f110bc7b
31 changed files with 428 additions and 77 deletions

View File

@@ -456,6 +456,12 @@ func TestBasicSFTPFsHandling(t *testing.T) {
assert.Equal(t, expectedQuotaFiles, user.UsedQuotaFiles)
assert.Equal(t, expectedQuotaSize, user.UsedQuotaSize)
stat, err := client.StatVFS("/")
assert.NoError(t, err)
assert.Equal(t, uint64(u.QuotaSize/4096), stat.Blocks)
assert.Equal(t, uint64((u.QuotaSize-testFileSize)/4096), stat.Bfree)
assert.Equal(t, uint64(1), stat.Files-stat.Ffree)
err = os.Remove(testFilePath)
assert.NoError(t, err)
err = os.Remove(localDownloadPath)
@@ -6371,6 +6377,136 @@ func TestGetVirtualFolderForPath(t *testing.T) {
assert.NoError(t, err)
}
func TestStatVFS(t *testing.T) {
usePubKey := false
user, _, err := httpdtest.AddUser(getTestUser(usePubKey), http.StatusCreated)
assert.NoError(t, err)
testFileSize := int64(65535)
client, err := getSftpClient(user, usePubKey)
if assert.NoError(t, err) {
defer client.Close()
stat, err := client.StatVFS("/")
assert.NoError(t, err)
assert.Greater(t, stat.ID, uint32(0))
assert.Greater(t, stat.Blocks, uint64(0))
assert.Greater(t, stat.Bsize, uint64(0))
_, err = client.StatVFS("missing-path")
assert.Error(t, err)
assert.True(t, os.IsNotExist(err))
}
user.QuotaFiles = 100
user, _, err = httpdtest.UpdateUser(user, http.StatusOK, "")
assert.NoError(t, err)
client, err = getSftpClient(user, usePubKey)
if assert.NoError(t, err) {
defer client.Close()
testFilePath := filepath.Join(homeBasePath, testFileName)
err = createTestFile(testFilePath, testFileSize)
assert.NoError(t, err)
err = sftpUploadFile(testFilePath, testFileName, testFileSize, client)
assert.NoError(t, err)
err = os.Remove(testFilePath)
assert.NoError(t, err)
stat, err := client.StatVFS("/")
assert.NoError(t, err)
assert.Greater(t, stat.ID, uint32(0))
assert.Greater(t, stat.Blocks, uint64(0))
assert.Greater(t, stat.Bsize, uint64(0))
assert.Equal(t, uint64(100), stat.Files)
assert.Equal(t, uint64(99), stat.Ffree)
}
user.QuotaSize = 8192
user, _, err = httpdtest.UpdateUser(user, http.StatusOK, "")
assert.NoError(t, err)
client, err = getSftpClient(user, usePubKey)
if assert.NoError(t, err) {
defer client.Close()
stat, err := client.StatVFS("/")
assert.NoError(t, err)
assert.Greater(t, stat.ID, uint32(0))
assert.Greater(t, stat.Blocks, uint64(0))
assert.Greater(t, stat.Bsize, uint64(0))
assert.Equal(t, uint64(100), stat.Files)
assert.Equal(t, uint64(0), stat.Ffree)
assert.Equal(t, uint64(2), stat.Blocks)
assert.Equal(t, uint64(0), stat.Bfree)
}
user.QuotaFiles = 0
user, _, err = httpdtest.UpdateUser(user, http.StatusOK, "")
assert.NoError(t, err)
client, err = getSftpClient(user, usePubKey)
if assert.NoError(t, err) {
defer client.Close()
stat, err := client.StatVFS("/")
assert.NoError(t, err)
assert.Greater(t, stat.ID, uint32(0))
assert.Greater(t, stat.Blocks, uint64(0))
assert.Greater(t, stat.Bsize, uint64(0))
assert.Greater(t, stat.Files, uint64(0))
assert.Equal(t, uint64(0), stat.Ffree)
assert.Equal(t, uint64(2), stat.Blocks)
assert.Equal(t, uint64(0), stat.Bfree)
}
user.QuotaSize = 1
user, _, err = httpdtest.UpdateUser(user, http.StatusOK, "")
assert.NoError(t, err)
client, err = getSftpClient(user, usePubKey)
if assert.NoError(t, err) {
defer client.Close()
stat, err := client.StatVFS("/")
assert.NoError(t, err)
assert.Greater(t, stat.ID, uint32(0))
assert.Equal(t, uint64(1), stat.Blocks)
assert.Equal(t, uint64(1), stat.Bsize)
assert.Greater(t, stat.Files, uint64(0))
assert.Equal(t, uint64(0), stat.Ffree)
assert.Equal(t, uint64(1), stat.Blocks)
assert.Equal(t, uint64(0), stat.Bfree)
}
_, err = httpdtest.RemoveUser(user, http.StatusOK)
assert.NoError(t, err)
err = os.RemoveAll(user.GetHomeDir())
assert.NoError(t, err)
}
func TestStatVFSCloudBackend(t *testing.T) {
usePubKey := true
u := getTestUser(usePubKey)
u.FsConfig.Provider = dataprovider.AzureBlobFilesystemProvider
u.FsConfig.AzBlobConfig.SASURL = "https://myaccount.blob.core.windows.net/sasurl"
user, _, err := httpdtest.AddUser(u, http.StatusCreated)
assert.NoError(t, err)
client, err := getSftpClient(user, usePubKey)
if assert.NoError(t, err) {
defer client.Close()
err = dataprovider.UpdateUserQuota(user, 100, 8192, true)
assert.NoError(t, err)
stat, err := client.StatVFS("/")
assert.NoError(t, err)
assert.Greater(t, stat.ID, uint32(0))
assert.Greater(t, stat.Blocks, uint64(0))
assert.Greater(t, stat.Bsize, uint64(0))
assert.Equal(t, uint64(1000000+100), stat.Files)
assert.Equal(t, uint64(2147483648+2), stat.Blocks)
assert.Equal(t, uint64(1000000), stat.Ffree)
assert.Equal(t, uint64(2147483648), stat.Bfree)
}
_, err = httpdtest.RemoveUser(user, http.StatusOK)
assert.NoError(t, err)
}
func TestSSHCommands(t *testing.T) {
usePubKey := false
user, _, err := httpdtest.AddUser(getTestUser(usePubKey), http.StatusCreated)