90 lines
2.8 KiB
Go
90 lines
2.8 KiB
Go
package server
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDiskSpacePrimitives(t *testing.T) {
|
|
// Create DiskSpacePrimitives instance
|
|
space, err := NewDiskSpacePrimitives(t.TempDir(), "")
|
|
assert.NoError(t, err, "Failed to create DiskSpacePrimitives")
|
|
|
|
// Run all test suites using local testing utilities
|
|
TestSpacePrimitives(t, space)
|
|
}
|
|
|
|
// Test path safety - specific to disk implementation
|
|
func TestSafePath(t *testing.T) {
|
|
space, err := NewDiskSpacePrimitives(t.TempDir(), "")
|
|
assert.NoError(t, err, "Failed to create DiskSpacePrimitives")
|
|
|
|
// Test that paths outside root are rejected
|
|
_, err = space.safePath("../outside")
|
|
assert.Equal(t, ErrPathOutsideRoot, err, "Expected ErrPathOutsideRoot for '../outside'")
|
|
|
|
_, err = space.safePath("/etc/passwd")
|
|
assert.Equal(t, ErrPathOutsideRoot, err, "Expected ErrPathOutsideRoot for '/etc/passwd'")
|
|
|
|
// Test that valid paths work
|
|
_, err = space.safePath("valid/path.txt")
|
|
assert.NoError(t, err, "Valid path should not error")
|
|
|
|
_, err = space.safePath("./valid.txt")
|
|
assert.NoError(t, err, "Valid relative path should not error")
|
|
}
|
|
|
|
func TestGitIgnore(t *testing.T) {
|
|
space, err := NewDiskSpacePrimitives(t.TempDir(), "*.txt\n*.jpg")
|
|
assert.NoError(t, err, "Failed to create DiskSpacePrimitives")
|
|
|
|
// Initially no files
|
|
fileList, err := space.FetchFileList()
|
|
assert.NoError(t, err)
|
|
assert.Len(t, fileList, 0)
|
|
|
|
// Write a file matching the gitignore pattern
|
|
_, err = space.WriteFile("test.txt", []byte("Test"), nil)
|
|
assert.NoError(t, err)
|
|
// And one that doesn't
|
|
_, err = space.WriteFile("test.md", []byte("Test"), nil)
|
|
assert.NoError(t, err)
|
|
|
|
fileList, err = space.FetchFileList()
|
|
assert.NoError(t, err)
|
|
// Only 1 file
|
|
assert.Len(t, fileList, 1)
|
|
assert.Equal(t, fileList[0].Name, "test.md")
|
|
|
|
}
|
|
|
|
// Test directory cleanup - specific to disk implementation
|
|
func TestCleanOrphaned(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
space, err := NewDiskSpacePrimitives(tmpDir, "")
|
|
assert.NoError(t, err, "Failed to create DiskSpacePrimitives")
|
|
|
|
// Create nested directory structure with a file
|
|
_, err = space.WriteFile("deep/nested/dir/file.txt", []byte("test"), nil)
|
|
assert.NoError(t, err, "Failed to write nested file")
|
|
|
|
// Verify the directories were created
|
|
nestedPath := filepath.Join(tmpDir, "deep", "nested", "dir")
|
|
_, err = os.Stat(nestedPath)
|
|
assert.False(t, os.IsNotExist(err), "Nested directory should exist")
|
|
|
|
// Delete the file
|
|
err = space.DeleteFile("deep/nested/dir/file.txt")
|
|
assert.NoError(t, err, "Failed to delete nested file")
|
|
|
|
_, err = os.Stat(nestedPath)
|
|
assert.True(t, os.IsNotExist(err), "Empty nested directory should be cleaned up")
|
|
|
|
deepPath := filepath.Join(tmpDir, "deep")
|
|
_, err = os.Stat(deepPath)
|
|
assert.True(t, os.IsNotExist(err), "Empty parent directory should be cleaned up")
|
|
}
|