mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-06 16:40:32 +00:00
470 lines
9.9 KiB
Go
470 lines
9.9 KiB
Go
package base
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestDownloaderStoreConfig_Init(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
fields *DownloaderStoreConfig
|
|
want *DownloaderStoreConfig
|
|
}{
|
|
{
|
|
"Init",
|
|
&DownloaderStoreConfig{},
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 5,
|
|
ProtocolConfig: map[string]any{},
|
|
Proxy: &DownloaderProxyConfig{},
|
|
Webhook: &WebhookConfig{},
|
|
Script: &ScriptConfig{},
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: false,
|
|
DeleteAfterDownload: false,
|
|
},
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: false,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Init MaxRunning",
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 10,
|
|
},
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 10,
|
|
ProtocolConfig: map[string]any{},
|
|
Proxy: &DownloaderProxyConfig{},
|
|
Webhook: &WebhookConfig{},
|
|
Script: &ScriptConfig{},
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: false,
|
|
DeleteAfterDownload: false,
|
|
},
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: false,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Init ProtocolConfig",
|
|
&DownloaderStoreConfig{
|
|
ProtocolConfig: map[string]any{
|
|
"key": "value",
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 5,
|
|
ProtocolConfig: map[string]any{
|
|
"key": "value",
|
|
},
|
|
Proxy: &DownloaderProxyConfig{},
|
|
Webhook: &WebhookConfig{},
|
|
Script: &ScriptConfig{},
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: false,
|
|
DeleteAfterDownload: false,
|
|
},
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: false,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Init Proxy",
|
|
&DownloaderStoreConfig{
|
|
Proxy: &DownloaderProxyConfig{
|
|
Enable: true,
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 5,
|
|
ProtocolConfig: map[string]any{},
|
|
Proxy: &DownloaderProxyConfig{
|
|
Enable: true,
|
|
},
|
|
Webhook: &WebhookConfig{},
|
|
Script: &ScriptConfig{},
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: false,
|
|
DeleteAfterDownload: false,
|
|
},
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: false,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Init AutoTorrent",
|
|
&DownloaderStoreConfig{
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: true,
|
|
DeleteAfterDownload: true,
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 5,
|
|
ProtocolConfig: map[string]any{},
|
|
Proxy: &DownloaderProxyConfig{},
|
|
Webhook: &WebhookConfig{},
|
|
Script: &ScriptConfig{},
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: true,
|
|
DeleteAfterDownload: true,
|
|
},
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: false,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Init Archive",
|
|
&DownloaderStoreConfig{
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: true,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 5,
|
|
ProtocolConfig: map[string]any{},
|
|
Proxy: &DownloaderProxyConfig{},
|
|
Webhook: &WebhookConfig{},
|
|
Script: &ScriptConfig{},
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: false,
|
|
DeleteAfterDownload: false,
|
|
},
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: true,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
cfg := &DownloaderStoreConfig{
|
|
FirstLoad: tt.fields.FirstLoad,
|
|
DownloadDir: tt.fields.DownloadDir,
|
|
MaxRunning: tt.fields.MaxRunning,
|
|
ProtocolConfig: tt.fields.ProtocolConfig,
|
|
Extra: tt.fields.Extra,
|
|
Proxy: tt.fields.Proxy,
|
|
Webhook: tt.fields.Webhook,
|
|
Script: tt.fields.Script,
|
|
AutoTorrent: tt.fields.AutoTorrent,
|
|
Archive: tt.fields.Archive,
|
|
}
|
|
if got := cfg.Init(); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("Init() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDownloaderStoreConfig_Merge(t *testing.T) {
|
|
type args struct {
|
|
beforeCfg *DownloaderStoreConfig
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields *DownloaderStoreConfig
|
|
args args
|
|
want *DownloaderStoreConfig
|
|
}{
|
|
{
|
|
"Merge Nil",
|
|
&DownloaderStoreConfig{},
|
|
args{
|
|
beforeCfg: nil,
|
|
},
|
|
&DownloaderStoreConfig{},
|
|
},
|
|
{
|
|
"Merge DownloadDir No Override",
|
|
&DownloaderStoreConfig{
|
|
DownloadDir: "before",
|
|
},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
DownloadDir: "after",
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
DownloadDir: "before",
|
|
},
|
|
},
|
|
{
|
|
"Merge DownloadDir Override",
|
|
&DownloaderStoreConfig{},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
DownloadDir: "after",
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
DownloadDir: "after",
|
|
},
|
|
},
|
|
{
|
|
"Merge MaxRunning No Override",
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 1,
|
|
},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
MaxRunning: 10,
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 1,
|
|
},
|
|
},
|
|
{
|
|
"Merge MaxRunning Override",
|
|
&DownloaderStoreConfig{},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
MaxRunning: 10,
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
MaxRunning: 10,
|
|
},
|
|
},
|
|
{
|
|
"Merge ProtocolConfig No Override",
|
|
&DownloaderStoreConfig{
|
|
ProtocolConfig: map[string]any{},
|
|
},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
ProtocolConfig: map[string]any{
|
|
"key": "after",
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
ProtocolConfig: map[string]any{},
|
|
},
|
|
},
|
|
{
|
|
"Merge ProtocolConfig Override",
|
|
&DownloaderStoreConfig{},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
ProtocolConfig: map[string]any{
|
|
"key": "after",
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
ProtocolConfig: map[string]any{
|
|
"key": "after",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Merge Extra No Override",
|
|
&DownloaderStoreConfig{
|
|
Extra: map[string]any{},
|
|
},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
Extra: map[string]any{
|
|
"key": "after",
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
Extra: map[string]any{},
|
|
},
|
|
},
|
|
{
|
|
"Merge Extra Override",
|
|
&DownloaderStoreConfig{},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
Extra: map[string]any{
|
|
"key": "after",
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
Extra: map[string]any{
|
|
"key": "after",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Merge Proxy No Override",
|
|
&DownloaderStoreConfig{
|
|
Proxy: &DownloaderProxyConfig{},
|
|
},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
Proxy: &DownloaderProxyConfig{
|
|
Scheme: "http",
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
Proxy: &DownloaderProxyConfig{},
|
|
},
|
|
},
|
|
{
|
|
"Merge Proxy Override",
|
|
&DownloaderStoreConfig{},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
Proxy: &DownloaderProxyConfig{
|
|
Scheme: "http",
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
Proxy: &DownloaderProxyConfig{
|
|
Scheme: "http",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Merge AutoTorrent No Override",
|
|
&DownloaderStoreConfig{
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: true,
|
|
},
|
|
},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: false,
|
|
DeleteAfterDownload: false,
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Merge AutoTorrent Override",
|
|
&DownloaderStoreConfig{},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: true,
|
|
DeleteAfterDownload: true,
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
AutoTorrent: &AutoTorrentConfig{
|
|
Enable: true,
|
|
DeleteAfterDownload: true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Merge Archive No Override",
|
|
&DownloaderStoreConfig{
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: true,
|
|
},
|
|
},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: false,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Merge Archive Override",
|
|
&DownloaderStoreConfig{},
|
|
args{
|
|
beforeCfg: &DownloaderStoreConfig{
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: false,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
&DownloaderStoreConfig{
|
|
Archive: &ArchiveConfig{
|
|
AutoExtract: false,
|
|
DeleteAfterExtract: false,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
cfg := &DownloaderStoreConfig{
|
|
FirstLoad: tt.fields.FirstLoad,
|
|
DownloadDir: tt.fields.DownloadDir,
|
|
MaxRunning: tt.fields.MaxRunning,
|
|
ProtocolConfig: tt.fields.ProtocolConfig,
|
|
Extra: tt.fields.Extra,
|
|
Proxy: tt.fields.Proxy,
|
|
Webhook: tt.fields.Webhook,
|
|
AutoTorrent: tt.fields.AutoTorrent,
|
|
Archive: tt.fields.Archive,
|
|
}
|
|
if got := cfg.Merge(tt.args.beforeCfg); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("Merge() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestOptions_Checksum(t *testing.T) {
|
|
opts := &Options{
|
|
Name: "test.zip",
|
|
Path: "/downloads",
|
|
Checksum: &ChecksumOption{
|
|
Algorithm: "sha256",
|
|
Expected: "abcdef1234567890",
|
|
},
|
|
}
|
|
|
|
cloned := opts.Clone()
|
|
if cloned.Checksum == nil {
|
|
t.Fatal("expected cloned options to have non-nil Checksum")
|
|
}
|
|
if cloned.Checksum.Algorithm != "sha256" || cloned.Checksum.Expected != "abcdef1234567890" {
|
|
t.Fatalf("cloned checksum mismatch: got %+v", cloned.Checksum)
|
|
}
|
|
|
|
// Verify deep clone isolation
|
|
cloned.Checksum.Expected = "modified"
|
|
if opts.Checksum.Expected != "abcdef1234567890" {
|
|
t.Fatal("modifying cloned checksum affected original options")
|
|
}
|
|
|
|
// Verify nil checksum options clone
|
|
optsNil := &Options{Name: "nil_check.zip"}
|
|
clonedNil := optsNil.Clone()
|
|
if clonedNil.Checksum != nil {
|
|
t.Fatal("expected nil checksum in cloned options")
|
|
}
|
|
}
|