package download import ( "github.com/monkeyWie/gopeed/internal/test" "github.com/monkeyWie/gopeed/pkg/base" "reflect" "sync" "testing" "time" ) func TestDownloader_Resolve(t *testing.T) { listener := test.StartTestFileServer() defer listener.Close() downloader := NewDownloader(nil) if err := downloader.Setup(); err != nil { t.Fatal(err) } defer downloader.Clear() req := &base.Request{ URL: "http://" + listener.Addr().String() + "/" + test.BuildName, } res, err := downloader.Resolve(req) if err != nil { t.Fatal(err) } want := &base.Resource{ Name: test.BuildName, Req: req, Size: test.BuildSize, Range: true, Files: []*base.FileInfo{ { Name: test.BuildName, Path: "", Size: test.BuildSize, }, }, } if !reflect.DeepEqual(want, res) { t.Errorf("Resolve() got = %v, want %v", res, want) } } func TestDownloader_Create(t *testing.T) { listener := test.StartTestFileServer() defer listener.Close() downloader := NewDownloader(nil) if err := downloader.Setup(); err != nil { t.Fatal(err) } defer downloader.Clear() req := &base.Request{ URL: "http://" + listener.Addr().String() + "/" + test.BuildName, } res, err := downloader.Resolve(req) if err != nil { t.Fatal(err) } var wg sync.WaitGroup wg.Add(1) downloader.Listener(func(event *Event) { if event.Key == EventKeyDone { wg.Done() } }) _, err = downloader.Create(res, &base.Options{ Path: test.Dir, Name: test.DownloadName, Connections: 4, }) if err != nil { t.Fatal(err) } wg.Wait() want := test.FileMd5(test.BuildFile) got := test.FileMd5(test.DownloadFile) if want != got { t.Errorf("Download() got = %v, want %v", got, want) } } func TestDownloader_StoreAndRestore(t *testing.T) { listener := test.StartTestSlowFileServer(time.Millisecond * 2000) defer listener.Close() downloader := NewDownloader(&DownloaderConfig{ Storage: NewBoltStorage("./"), }) if err := downloader.Setup(); err != nil { t.Fatal(err) } defer downloader.Clear() req := &base.Request{ URL: "http://" + listener.Addr().String() + "/" + test.BuildName, } res, err := downloader.Resolve(req) if err != nil { t.Fatal(err) } id, err := downloader.Create(res, &base.Options{ Path: test.Dir, Name: test.DownloadName, Connections: 4, }) if err != nil { t.Fatal(err) } time.Sleep(time.Millisecond * 1001) err = downloader.Pause(id) if err != nil { t.Fatal(err) } downloader.Close() downloader = NewDownloader(&DownloaderConfig{ Storage: NewBoltStorage("./"), }) if err := downloader.Setup(); err != nil { t.Fatal(err) } task := downloader.GetTask(id) if task == nil { t.Fatal("task is nil") } var wg sync.WaitGroup wg.Add(1) downloader.Listener(func(event *Event) { if event.Key == EventKeyDone { wg.Done() } }) err = downloader.Continue(id) wg.Wait() if err != nil { t.Fatal(err) } want := test.FileMd5(test.BuildFile) got := test.FileMd5(test.DownloadFile) if want != got { t.Errorf("StoreAndResume() got = %v, want %v", got, want) } downloader.Clear() }