star/gdu/pkg/analyze/stored_test.go

311 lines
6.5 KiB
Go
Raw Normal View History

2025-04-26 19:33:14 +08:00
package analyze
import (
"bytes"
"encoding/gob"
"fmt"
"testing"
"b612.me/apps/b612/gdu/internal/testdir"
"b612.me/apps/b612/gdu/pkg/fs"
"github.com/stretchr/testify/assert"
)
func TestEncDec(t *testing.T) {
var d fs.Item = &StoredDir{
Dir: &Dir{
File: &File{
Name: "xxx",
},
BasePath: "/yyy",
},
}
b := &bytes.Buffer{}
enc := gob.NewEncoder(b)
err := enc.Encode(d)
assert.NoError(t, err)
var x fs.Item = &StoredDir{}
dec := gob.NewDecoder(b)
err = dec.Decode(x)
assert.NoError(t, err)
fmt.Println(d, x)
assert.Equal(t, d.GetName(), x.GetName())
}
func TestStoredAnalyzer(t *testing.T) {
fin := testdir.CreateTestDir()
defer fin()
a := CreateStoredAnalyzer("/tmp/badger")
dir := a.AnalyzeDir(
"test_dir", func(_, _ string) bool { return false }, false,
).(*StoredDir)
a.GetDone().Wait()
dir.UpdateStats(make(fs.HardLinkedItems))
// test dir info
assert.Equal(t, "test_dir", dir.Name)
assert.Equal(t, int64(7+4096*3), dir.Size)
assert.Equal(t, 5, dir.ItemCount)
assert.True(t, dir.IsDir())
// test dir tree
assert.Equal(t, "nested", dir.GetFiles()[0].GetName())
assert.Equal(t, "subnested", dir.GetFiles()[0].(*StoredDir).GetFiles()[1].GetName())
// test file
assert.Equal(t, "file2", dir.GetFiles()[0].(*StoredDir).GetFiles()[0].GetName())
assert.Equal(t, int64(2), dir.GetFiles()[0].(*StoredDir).GetFiles()[0].GetSize())
assert.Equal(t, int64(4096), dir.GetFiles()[0].(*StoredDir).GetFiles()[0].GetUsage())
assert.Equal(
t, "file", dir.GetFiles()[0].(*StoredDir).GetFiles()[1].(*StoredDir).GetFiles()[0].GetName(),
)
assert.Equal(
t, int64(5), dir.GetFiles()[0].(*StoredDir).GetFiles()[1].(*StoredDir).GetFiles()[0].GetSize(),
)
}
func TestRemoveStoredFile(t *testing.T) {
fin := testdir.CreateTestDir()
defer fin()
a := CreateStoredAnalyzer("/tmp/badger")
dir := a.AnalyzeDir(
"test_dir", func(_, _ string) bool { return false }, false,
).(*StoredDir)
a.GetDone().Wait()
a.ResetProgress()
dir.UpdateStats(make(fs.HardLinkedItems))
// test dir info
assert.Equal(t, "test_dir", dir.Name)
assert.Equal(t, int64(7+4096*3), dir.Size)
assert.Equal(t, 5, dir.ItemCount)
assert.True(t, dir.IsDir())
subdir := dir.GetFiles()[0].(*StoredDir)
subdir.RemoveFile(subdir.GetFiles()[0])
closeFn := DefaultStorage.Open()
defer closeFn()
stored, err := DefaultStorage.GetDirForPath("test_dir")
assert.NoError(t, err)
assert.Equal(t, 4, stored.GetItemCount())
assert.Equal(t, int64(5+4096*3), stored.GetSize())
file := stored.GetFiles()[0].GetFiles()[0].GetFiles()[0]
assert.Equal(t, false, file.IsDir())
assert.Equal(t, "file", file.GetName())
assert.Equal(t, "test_dir/nested/subnested", file.GetParent().GetPath())
}
func TestParentDirGetNamePanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetName()
}
func TestParentDirGetFlagPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetFlag()
}
func TestParentDirIsDirPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.IsDir()
}
func TestParentDirGetSizePanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetSize()
}
func TestParentDirGetTypePanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetType()
}
func TestParentDirGetUsagePanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetUsage()
}
func TestParentDirGetMtimePanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetMtime()
}
func TestParentDirGetItemCountPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetItemCount()
}
func TestParentDirGetParentPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetParent()
}
func TestParentDirSetParentPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.SetParent(nil)
}
func TestParentDirGetMultiLinkedInodePanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetMultiLinkedInode()
}
func TestParentDirEncodeJSONPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
err := dir.EncodeJSON(nil, false)
assert.NoError(t, err)
}
func TestParentDirUpdateStatsPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.UpdateStats(nil)
}
func TestParentDirAddFilePanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.AddFile(nil)
}
func TestParentDirGetFilesPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetFiles()
}
func TestParentDirGetFilesLockedPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetFilesLocked()
}
func TestParentDirRLockPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.RLock()
}
func TestParentDirSetFilesPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.SetFiles(nil)
}
func TestParentDirRemoveFilePanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.RemoveFile(nil)
}
func TestParentDirGetItemStatsPanics(t *testing.T) {
defer func() {
if r := recover(); r != nil {
assert.Equal(t, "must not be called", r)
}
}()
dir := &ParentDir{}
dir.GetItemStats(nil)
}