add tests
This commit is contained in:
@ -301,3 +301,122 @@ func TestOptionDownloader(t *testing.T) {
|
|||||||
}
|
}
|
||||||
dr.Close()
|
dr.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestInvalidOptionTypeField(t *testing.T) {
|
||||||
|
defer leakChecks(t)()
|
||||||
|
|
||||||
|
_, err := goutubedl.New(context.Background(), playlistRawURL, goutubedl.Options{
|
||||||
|
Type: 42,
|
||||||
|
})
|
||||||
|
if err == nil {
|
||||||
|
t.Error("should have failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDownloadPlaylistEntry(t *testing.T) {
|
||||||
|
defer leakChecks(t)()
|
||||||
|
// Download file by specifying the playlist index
|
||||||
|
stderrBuf := &bytes.Buffer{}
|
||||||
|
r, err := goutubedl.New(context.Background(), playlistRawURL, goutubedl.Options{
|
||||||
|
StderrFn: func(cmd *exec.Cmd) io.Writer {
|
||||||
|
return stderrBuf
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedTitle := "Kindred Phenomena"
|
||||||
|
if r.Info.Title != expectedTitle {
|
||||||
|
t.Errorf("expected title %q got %q", expectedTitle, r.Info.Title)
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedEntries := 8
|
||||||
|
if len(r.Info.Entries) != expectedEntries {
|
||||||
|
t.Errorf("expected %d entries got %d", expectedEntries, len(r.Info.Entries))
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedTitleOne := "B1 Mattheis - Ben M"
|
||||||
|
playlistIndex := 2
|
||||||
|
if r.Info.Entries[playlistIndex].Title != expectedTitleOne {
|
||||||
|
t.Errorf("expected title %q got %q", expectedTitleOne, r.Info.Entries[playlistIndex].Title)
|
||||||
|
}
|
||||||
|
|
||||||
|
dr, err := r.DownloadWithOptions(context.Background(), goutubedl.DownloadOptions{
|
||||||
|
PlaylistIndex: playlistIndex + 1,
|
||||||
|
Filter: r.Info.Entries[playlistIndex].Formats[0].FormatID,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
playlistBuf := &bytes.Buffer{}
|
||||||
|
n, err := io.Copy(playlistBuf, dr)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
dr.Close()
|
||||||
|
|
||||||
|
if n != int64(playlistBuf.Len()) {
|
||||||
|
t.Errorf("copy n not equal to download buffer: %d!=%d", n, playlistBuf.Len())
|
||||||
|
}
|
||||||
|
|
||||||
|
if n < 10000 {
|
||||||
|
t.Errorf("should have copied at least 10000 bytes: %d", n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !strings.Contains(stderrBuf.String(), "Destination") {
|
||||||
|
t.Errorf("did not find expected log message on stderr: %q", stderrBuf.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Download the same file but with the direct link
|
||||||
|
url := "https://soundcloud.com/mattheis/b1-mattheis-ben-m"
|
||||||
|
stderrBuf = &bytes.Buffer{}
|
||||||
|
r, err = goutubedl.New(context.Background(), url, goutubedl.Options{
|
||||||
|
StderrFn: func(cmd *exec.Cmd) io.Writer {
|
||||||
|
return stderrBuf
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.Info.Title != expectedTitleOne {
|
||||||
|
t.Errorf("expected title %q got %q", expectedTitleOne, r.Info.Title)
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedEntries = 0
|
||||||
|
if len(r.Info.Entries) != expectedEntries {
|
||||||
|
t.Errorf("expected %d entries got %d", expectedEntries, len(r.Info.Entries))
|
||||||
|
}
|
||||||
|
|
||||||
|
dr, err = r.Download(context.Background(), r.Info.Formats[0].FormatID)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
directLinkBuf := &bytes.Buffer{}
|
||||||
|
n, err = io.Copy(directLinkBuf, dr)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
dr.Close()
|
||||||
|
|
||||||
|
if n != int64(directLinkBuf.Len()) {
|
||||||
|
t.Errorf("copy n not equal to download buffer: %d!=%d", n, directLinkBuf.Len())
|
||||||
|
}
|
||||||
|
|
||||||
|
if n < 10000 {
|
||||||
|
t.Errorf("should have copied at least 10000 bytes: %d", n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !strings.Contains(stderrBuf.String(), "Destination") {
|
||||||
|
t.Errorf("did not find expected log message on stderr: %q", stderrBuf.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
if directLinkBuf.Len() != playlistBuf.Len() {
|
||||||
|
t.Errorf("not the same content size between the playlist index entry and the direct link entry: %d != %d", playlistBuf.Len(), directLinkBuf.Len())
|
||||||
|
}
|
||||||
|
|
||||||
|
if !bytes.Equal(directLinkBuf.Bytes(), playlistBuf.Bytes()) {
|
||||||
|
t.Error("not the same content between the playlist index entry and the direct link entry")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user