mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-05-19 18:58:03 +02:00
feat: add filemanager session and crypto version detection (#516)
* 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
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user