forked from huydx/hget
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathresume_test.go
133 lines (114 loc) · 3.33 KB
/
resume_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package main
import (
"encoding/json"
"os"
"os/user"
"path/filepath"
"testing"
)
// Test setup and cleanup helpers
func prepareResume(t *testing.T, url string, parts []Part) (string, string) {
// Create a temporary state file and part files for testing resume
usr, _ := user.Current()
homeDir := usr.HomeDir
taskName := TaskFromURL(url)
folderPath := filepath.Join(homeDir, dataFolder, taskName)
stateFilePath := filepath.Join(folderPath, stateFileName)
// Create the folder
err := os.MkdirAll(folderPath, 0755)
if err != nil {
t.Fatalf("Failed to create test directory: %v", err)
}
// Create the state file
state := &State{
URL: url,
Parts: parts,
}
stateData, err := json.Marshal(state)
if err != nil {
t.Fatalf("Failed to marshal test state: %v", err)
}
err = os.WriteFile(stateFilePath, stateData, 0644)
if err != nil {
t.Fatalf("Failed to write test state file: %v", err)
}
// Create part files with some content to simulate partial downloads
for _, part := range parts {
partPath := filepath.Join(folderPath, filepath.Base(part.Path))
// Write different amounts of data to each part file to test resuming
contentSize := part.RangeFrom / 2 // Arbitrary formula for test data size
if contentSize == 0 {
contentSize = 10 // Minimum size for test
}
content := make([]byte, contentSize)
err = os.WriteFile(partPath, content, 0644)
if err != nil {
t.Fatalf("Failed to create test part file: %v", err)
}
}
return folderPath, taskName
}
func cleanupResume(folderPath string) {
os.RemoveAll(folderPath)
}
func TestTaskPrint(t *testing.T) {
// Setup test environment
originalDataFolder := dataFolder
dataFolder = ".hget_test/"
defer func() {
dataFolder = originalDataFolder
usr, _ := user.Current()
testFolder := filepath.Join(usr.HomeDir, dataFolder)
os.RemoveAll(testFolder)
}()
// Create a few test download directories
usr, _ := user.Current()
homeDir := usr.HomeDir
testFolder := filepath.Join(homeDir, dataFolder)
err := os.MkdirAll(testFolder, 0755)
if err != nil {
t.Fatalf("Failed to create test directory: %v", err)
}
testDirs := []string{"test1", "test2", "test3"}
for _, dir := range testDirs {
err := os.MkdirAll(filepath.Join(testFolder, dir), 0755)
if err != nil {
t.Fatalf("Failed to create test subdirectory: %v", err)
}
}
// Create a file too (should be ignored by TaskPrint)
testFile := filepath.Join(testFolder, "testfile.txt")
err = os.WriteFile(testFile, []byte("test content"), 0644)
if err != nil {
t.Fatalf("Failed to create test file: %v", err)
}
// Test TaskPrint
err = TaskPrint()
if err != nil {
t.Fatalf("TaskPrint() failed: %v", err)
}
// Note: We can't easily check stdout, but we've verified the function executes without error
}
func TestResumeNonExistent(t *testing.T) {
// Setup test environment
originalDataFolder := dataFolder
dataFolder = ".hget_test/"
defer func() {
dataFolder = originalDataFolder
usr, _ := user.Current()
testFolder := filepath.Join(usr.HomeDir, dataFolder)
os.RemoveAll(testFolder)
}()
// Test resuming a non-existent task
_, err := Resume("nonexistent-task")
if err == nil {
t.Errorf("Expected error when resuming non-existent task, got nil")
}
}
// Go 1.21 has min function built-in, but for compatibility with older Go versions
func min(a, b int64) int64 {
if a < b {
return a
}
return b
}