Replace symlinks with plain files containing relative paths
- Remove all symlink creation and resolution in favor of plain files - currentvault file now contains relative path like "vaults.d/default" - current-unlocker file now contains relative path like "unlockers.d/passphrase" - current version file now contains relative path like "versions/20231215.001" - Simplify path resolution to just read file contents and join with parent dir - Update all tests to read files instead of using os.Readlink
This commit is contained in:
@@ -26,9 +26,9 @@ func TestVaultWithRealFilesystem(t *testing.T) {
|
||||
t.Setenv(secret.EnvMnemonic, testMnemonic)
|
||||
t.Setenv(secret.EnvUnlockPassphrase, "test-passphrase")
|
||||
|
||||
// Test symlink handling
|
||||
t.Run("SymlinkHandling", func(t *testing.T) {
|
||||
stateDir := filepath.Join(tempDir, "symlink-test")
|
||||
// Test currentvault file handling (plain file with relative path)
|
||||
t.Run("CurrentVaultFileHandling", func(t *testing.T) {
|
||||
stateDir := filepath.Join(tempDir, "currentvault-test")
|
||||
if err := os.MkdirAll(stateDir, 0o700); err != nil {
|
||||
t.Fatalf("Failed to create state dir: %v", err)
|
||||
}
|
||||
@@ -45,31 +45,26 @@ func TestVaultWithRealFilesystem(t *testing.T) {
|
||||
t.Fatalf("Failed to get vault directory: %v", err)
|
||||
}
|
||||
|
||||
// Create a symlink to the vault directory in a different location
|
||||
symlinkPath := filepath.Join(tempDir, "test-symlink")
|
||||
if err := os.Symlink(vaultDir, symlinkPath); err != nil {
|
||||
t.Fatalf("Failed to create symlink: %v", err)
|
||||
// Verify the currentvault file exists and contains the right relative path
|
||||
currentVaultPath := filepath.Join(stateDir, "currentvault")
|
||||
currentVaultContents, err := os.ReadFile(currentVaultPath)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to read currentvault file: %v", err)
|
||||
}
|
||||
|
||||
// Test that we can resolve the symlink correctly
|
||||
resolvedPath, err := vault.ResolveVaultSymlink(fs, symlinkPath)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to resolve symlink: %v", err)
|
||||
expectedRelativePath := "vaults.d/test-vault"
|
||||
if string(currentVaultContents) != expectedRelativePath {
|
||||
t.Errorf("Expected currentvault to contain %q, got %q", expectedRelativePath, string(currentVaultContents))
|
||||
}
|
||||
|
||||
// On some platforms, the resolved path might have different case or format
|
||||
// We'll use filepath.EvalSymlinks to get the canonical path for comparison
|
||||
expectedPath, err := filepath.EvalSymlinks(vaultDir)
|
||||
// Test that ResolveVaultSymlink correctly resolves the path
|
||||
resolvedPath, err := vault.ResolveVaultSymlink(fs, currentVaultPath)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to evaluate symlink: %v", err)
|
||||
}
|
||||
actualPath, err := filepath.EvalSymlinks(resolvedPath)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to evaluate resolved path: %v", err)
|
||||
t.Fatalf("Failed to resolve currentvault path: %v", err)
|
||||
}
|
||||
|
||||
if actualPath != expectedPath {
|
||||
t.Errorf("Expected symlink to resolve to %s, got %s", expectedPath, actualPath)
|
||||
if resolvedPath != vaultDir {
|
||||
t.Errorf("Expected resolved path to be %s, got %s", vaultDir, resolvedPath)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user