mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-05-19 18:58:03 +02:00
12436217ae
* feat: add filemanager session and crypto version detection * refactor: move copy logic into filemanager, remove fileutil dependency * fix: apply review suggestions for filemanager * feat: add Windows locked file tests, fix readFileContent with ReadFile+FileMapping fallback * fix: remove self-PID skip in findFileHandle to fix Windows CI test * fix: seek to file start before reading duplicated handle * fix: use full path matching in findFileHandle to avoid cross-app handle collision * test: enhance Windows copyLocked tests with write-then-read, large file, and normal copy scenarios * fix: check all errors in Windows tests, use bytes.Equal for large file comparison * fix: use stable path suffix matching to handle Windows short path names in CI
104 lines
2.5 KiB
Go
104 lines
2.5 KiB
Go
package filemanager
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNewSession(t *testing.T) {
|
|
s, err := NewSession()
|
|
require.NoError(t, err)
|
|
defer s.Cleanup()
|
|
|
|
assert.DirExists(t, s.TempDir())
|
|
assert.Contains(t, s.TempDir(), "hbd-")
|
|
}
|
|
|
|
func TestSession_Cleanup(t *testing.T) {
|
|
s, err := NewSession()
|
|
require.NoError(t, err)
|
|
|
|
dir := s.TempDir()
|
|
assert.DirExists(t, dir)
|
|
|
|
s.Cleanup()
|
|
assert.NoDirExists(t, dir)
|
|
}
|
|
|
|
func TestSession_Acquire_File(t *testing.T) {
|
|
s, err := NewSession()
|
|
require.NoError(t, err)
|
|
defer s.Cleanup()
|
|
|
|
// Create a source file
|
|
srcDir := t.TempDir()
|
|
srcFile := filepath.Join(srcDir, "Login Data")
|
|
require.NoError(t, os.WriteFile(srcFile, []byte("test data"), 0o644))
|
|
|
|
// Acquire it
|
|
dst := filepath.Join(s.TempDir(), "Login Data")
|
|
err = s.Acquire(srcFile, dst, false)
|
|
assert.NoError(t, err)
|
|
|
|
// Verify copy
|
|
data, err := os.ReadFile(dst)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "test data", string(data))
|
|
}
|
|
|
|
func TestSession_Acquire_WAL(t *testing.T) {
|
|
s, err := NewSession()
|
|
require.NoError(t, err)
|
|
defer s.Cleanup()
|
|
|
|
srcDir := t.TempDir()
|
|
srcFile := filepath.Join(srcDir, "Cookies")
|
|
require.NoError(t, os.WriteFile(srcFile, []byte("db"), 0o644))
|
|
require.NoError(t, os.WriteFile(srcFile+"-wal", []byte("wal"), 0o644))
|
|
require.NoError(t, os.WriteFile(srcFile+"-shm", []byte("shm"), 0o644))
|
|
|
|
dst := filepath.Join(s.TempDir(), "Cookies")
|
|
err = s.Acquire(srcFile, dst, false)
|
|
assert.NoError(t, err)
|
|
|
|
// Main file copied
|
|
assert.FileExists(t, dst)
|
|
// WAL and SHM also copied
|
|
assert.FileExists(t, dst+"-wal")
|
|
assert.FileExists(t, dst+"-shm")
|
|
}
|
|
|
|
func TestSession_Acquire_Dir(t *testing.T) {
|
|
s, err := NewSession()
|
|
require.NoError(t, err)
|
|
defer s.Cleanup()
|
|
|
|
// Create a source directory with files
|
|
srcDir := filepath.Join(t.TempDir(), "leveldb")
|
|
require.NoError(t, os.MkdirAll(srcDir, 0o755))
|
|
require.NoError(t, os.WriteFile(filepath.Join(srcDir, "000001.ldb"), []byte("data"), 0o644))
|
|
require.NoError(t, os.WriteFile(filepath.Join(srcDir, "LOCK"), []byte(""), 0o644))
|
|
|
|
dst := filepath.Join(s.TempDir(), "leveldb")
|
|
err = s.Acquire(srcDir, dst, true)
|
|
assert.NoError(t, err)
|
|
|
|
// Data file copied
|
|
assert.FileExists(t, filepath.Join(dst, "000001.ldb"))
|
|
// LOCK file skipped (CopyDir skips "lock" suffix)
|
|
}
|
|
|
|
func TestSession_Acquire_NotFound(t *testing.T) {
|
|
s, err := NewSession()
|
|
require.NoError(t, err)
|
|
defer s.Cleanup()
|
|
|
|
dst := filepath.Join(s.TempDir(), "nope")
|
|
err = s.Acquire("/nonexistent/file", dst, false)
|
|
assert.Error(t, err)
|
|
}
|