Something went wrong. Try again.
🧱 Chunk is a download manager for slow and unstable servers
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162package chunk
import ( "os" "path/filepath" "sync" "testing")
func TestProgress_FromScratch(t *testing.T) { tmp := t.TempDir() name := filepath.Join(tmp, "chunk.zip") p, err := newProgress(name, tmp, "https://test.etc/chunk.zip", 5, 3, false) if err != nil { t.Errorf("expected no error creating the progress, got %s", err) } if err := p.done(1, 3); err != nil { t.Errorf("expected no error marking chunk as done, got %s", err) } for i := range 3 { got, err := p.shouldDownload(i) if err != nil { t.Errorf("expected no error checking if chunk %d should be downloaded, got %s", i, err) } if i == 1 { if got { t.Errorf("expected chunk %d to be downloaded", i) } } else { if !got { t.Errorf("expected chunk %d not to be downloaded", i) } } } if err := p.close(); err != nil { t.Errorf("expected no errors saving the progress file, got %s", err) } if _, err := os.ReadFile(p.path); err != nil { t.Errorf("expected no errors reading the progress file, got %s", err) }}
func TestProgress_ParallelComplete(t *testing.T) { tmp := t.TempDir() name := filepath.Join(tmp, "chunk.zip") p, err := newProgress(name, tmp, "https://test.etc/chunk.zip", 5, 2048, false) if err != nil { t.Errorf("expected no error creating the progress, got %s", err) } var wg sync.WaitGroup errs := make(chan error) for i := range 2048 { wg.Add(1) go func(i int) { defer wg.Done() errs <- p.done(i, 2048) }(i) } for range 2048 { err := <-errs if err != nil { t.Errorf("expected no error marking chunk as done, got %s", err) } } close(errs) if err := p.close(); err != nil { t.Errorf("expected no errors removing the progress file, got %s", err) } if _, err := os.ReadFile(p.path); !os.IsNotExist(err) { t.Errorf("expected progress file not to exist, rediong it returned error %s", err) }}
func TestProgress_FromFile(t *testing.T) { tmp := t.TempDir() name := filepath.Join(tmp, "chunk.zip") old, err := newProgress(name, tmp, "https://test.etc/chunk.zip", 5, 3, false) if err != nil { t.Errorf("expected no error creating the old progress, got %s", err) } if err := old.done(1, 3); err != nil { t.Errorf("failed to mark chunk done: %v", err) } if err := old.close(); err != nil { t.Errorf("failed to close progress: %v", err) }
p, err := newProgress(name, tmp, "https://test.etc/chunk.zip", 5, 3, false) if err != nil { t.Errorf("expected no error creating the progress, got %s", err) } for i := range 3 { got, err := p.shouldDownload(i) if err != nil { t.Errorf("expected no error checking if chunk %d should be downloaded, got %s", i, err) } if i == 1 { if got { t.Errorf("expected chunk %d to be downloaded", i) } } else { if !got { t.Errorf("expected chunk %d not to be downloaded", i) } } } if err := p.close(); err != nil { t.Errorf("expected no errors saving the progress file, got %s", err) } if _, err := os.ReadFile(p.path); err != nil { t.Errorf("expected no errors reading the progress file, got %s", err) }}
func TestProgress_FromFileWithInvalidChunkSize(t *testing.T) { tmp := t.TempDir() name := filepath.Join(tmp, "chunk.zip") old, err := newProgress(name, tmp, "https://test.etc/chunk.zip", 5, 3, false) if err != nil { t.Errorf("expected no error creating the old progress, got %s", err) } if err := old.done(1, 3); err != nil { t.Errorf("failed to mark chunk done: %v", err) } if err := old.close(); err != nil { t.Errorf("failed to close progress: %v", err) }
if _, err := newProgress(name, tmp, "https://test.etc/chunk.zip", 10, 3, false); err == nil { t.Error("expected error creating the progress with different chunk size") }}
func TestProgress_FromFileWithRestart(t *testing.T) { tmp := t.TempDir() name := filepath.Join(tmp, "chunk.zip") old, err := newProgress(name, tmp, "https://test.etc/chunk.zip", 5, 3, false) if err != nil { t.Errorf("expected no error creating the old progress, got %s", err) } if err := old.done(1, 3); err != nil { t.Errorf("failed to mark chunk done: %v", err) } if err := old.close(); err != nil { t.Errorf("failed to close progress: %v", err) }
p, err := newProgress(name, tmp, "https://test.etc/chunk.zip", 10, 3, true) if err != nil { t.Errorf("expected no error creating the progress, got %s", err) } for i := range 3 { got, err := p.shouldDownload(i) if err != nil { t.Errorf("expected no error checking if chunk %d should be downloaded, got %s", i, err) } if !got { t.Errorf("expected chunk %d not to be downloaded", i) } }}