| Current Path : /home/hotlineuser/mobius/cmd/mobius-hotline-server/ |
| Current File : //home/hotlineuser/mobius/cmd/mobius-hotline-server/main_test.go |
package main
import (
"os"
"path"
"testing"
"github.com/jhalter/mobius/internal/mobius"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCopyDir(t *testing.T) {
// Test using the actual embedded config directory
dstDir := t.TempDir()
// Execute copyDir with the embedded mobius/config directory
err := copyDir("mobius/config", dstDir)
require.NoError(t, err)
// Verify some expected files exist (based on the embedded config)
expectedFiles := []string{
"config.yaml",
"Agreement.txt",
"MessageBoard.txt",
"ThreadedNews.yaml",
"Users/admin.yaml",
"Users/guest.yaml",
"banner.jpg",
}
for _, expectedFile := range expectedFiles {
fullPath := path.Join(dstDir, expectedFile)
assert.FileExists(t, fullPath, "Expected file %s to exist", expectedFile)
// Verify file is not empty
info, err := os.Stat(fullPath)
require.NoError(t, err)
assert.Greater(t, info.Size(), int64(0), "File %s should not be empty", expectedFile)
}
// Verify directories were created
expectedDirs := []string{
"Users",
"Files",
}
for _, expectedDir := range expectedDirs {
fullPath := path.Join(dstDir, expectedDir)
info, err := os.Stat(fullPath)
require.NoError(t, err)
assert.True(t, info.IsDir(), "Expected %s to be a directory", expectedDir)
}
}
func TestCopyDirNonexistentSource(t *testing.T) {
dstDir := t.TempDir()
err := copyDir("nonexistent/directory", dstDir)
assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to read source directory")
}
func TestCopyDirRecursive(t *testing.T) {
// Test the recursive functionality using embedded config
dstDir := t.TempDir()
err := copyDirRecursive("mobius/config", dstDir)
require.NoError(t, err)
// Verify nested structure is copied correctly
nestedPath := path.Join(dstDir, "Users", "admin.yaml")
assert.FileExists(t, nestedPath)
// Verify nested Files directory
filesDir := path.Join(dstDir, "Files")
info, err := os.Stat(filesDir)
require.NoError(t, err)
assert.True(t, info.IsDir())
}
func TestCopyFile(t *testing.T) {
dstDir := t.TempDir()
dstFile := path.Join(dstDir, "copied.yaml")
// Copy a single file from embedded config
err := copyFile("mobius/config/config.yaml", dstFile)
require.NoError(t, err)
// Verify file was copied correctly
assert.FileExists(t, dstFile)
// Verify file is not empty
info, err := os.Stat(dstFile)
require.NoError(t, err)
assert.Greater(t, info.Size(), int64(0))
}
func TestCopyFileErrors(t *testing.T) {
t.Run("source file does not exist", func(t *testing.T) {
dstDir := t.TempDir()
err := copyFile("nonexistent.txt", path.Join(dstDir, "dest.txt"))
assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to open source file")
})
t.Run("destination directory does not exist", func(t *testing.T) {
err := copyFile("mobius/config/config.yaml", "/nonexistent/directory/dest.txt")
assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to create destination file")
})
}
func TestCopyDirPermissions(t *testing.T) {
dstDir := t.TempDir()
err := copyDir("mobius/config", dstDir)
require.NoError(t, err)
// Check directory permissions
info, err := os.Stat(path.Join(dstDir, "Users"))
require.NoError(t, err)
assert.True(t, info.IsDir())
// Check that directory has reasonable permissions (at least readable/executable)
mode := info.Mode()
assert.True(t, mode&0400 != 0, "Directory should be readable")
assert.True(t, mode&0100 != 0, "Directory should be executable")
}
func TestFindConfigPath(t *testing.T) {
// Test function behavior by checking it returns one of the expected paths or fallback
t.Run("returns valid path", func(t *testing.T) {
result := findConfigPath()
// Should return either one of the search paths that exists, or "config" fallback
validPaths := append([]string{"config"}, mobius.ConfigSearchOrder...)
found := false
for _, validPath := range validPaths {
if result == validPath {
found = true
break
}
}
assert.True(t, found, "findConfigPath should return one of the valid paths or fallback, got: %s", result)
})
// Test directory vs file validation
t.Run("validates directory vs file", func(t *testing.T) {
// This test verifies the function logic but can't control system directories
// The function correctly validates that only directories are returned
result := findConfigPath()
// Verify result is an actual directory if it exists
if result != "config" {
info, err := os.Stat(result)
require.NoError(t, err, "Returned path should exist")
assert.True(t, info.IsDir(), "Returned path should be a directory")
}
})
// Test with existing directory
t.Run("finds existing directory", func(t *testing.T) {
tmpDir := t.TempDir()
originalDir, err := os.Getwd()
require.NoError(t, err)
defer func() { _ = os.Chdir(originalDir) }()
err = os.Chdir(tmpDir)
require.NoError(t, err)
// Create a config directory
err = os.Mkdir("config", 0755)
require.NoError(t, err)
result := findConfigPath()
assert.Equal(t, "config", result)
})
}