mirror of
https://github.com/iyear/tdl
synced 2025-01-07 03:16:41 +08:00
101 lines
2.3 KiB
Go
101 lines
2.3 KiB
Go
package test
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"fmt"
|
|
"io/fs"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strconv"
|
|
"sync"
|
|
|
|
"github.com/tidwall/gjson"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("Test tdl download", FlakeAttempts(3), func() {
|
|
var (
|
|
once sync.Once
|
|
fileHash = make(map[string][16]byte)
|
|
id int64
|
|
remoteFiles = make([]int64, 0)
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
once.Do(func() {
|
|
By("collect local file hashes")
|
|
Expect(filepath.WalkDir("testdata", func(path string, d fs.DirEntry, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if d.IsDir() {
|
|
return nil
|
|
}
|
|
|
|
bytes, err := os.ReadFile(path)
|
|
Expect(err, Succeed())
|
|
h := md5.Sum(bytes)
|
|
fileHash[filepath.Base(path)] = h
|
|
log.Println("path:", path, "md5:", h)
|
|
|
|
return nil
|
|
})).To(Succeed())
|
|
|
|
By("upload files")
|
|
exec(cmd, []string{"upload", "-p", "testdata"}, true)
|
|
|
|
By("export uploaded files")
|
|
exportFile := filepath.Join(GinkgoT().TempDir(), "export.json")
|
|
exec(cmd, []string{"chat", "export", "-T", "last", "-i", strconv.Itoa(len(fileHash)), "-o", exportFile}, true)
|
|
exportBytes, err := os.ReadFile(exportFile)
|
|
Expect(err).To(Succeed())
|
|
|
|
By("get chat id and remote file ids")
|
|
id = gjson.GetBytes(exportBytes, "id").Int()
|
|
Expect(id).NotTo(BeZero())
|
|
|
|
gjson.GetBytes(exportBytes, "messages").ForEach(func(key, value gjson.Result) bool {
|
|
remoteFiles = append(remoteFiles, value.Get("id").Int())
|
|
return true
|
|
})
|
|
Expect(len(remoteFiles)).To(Equal(len(fileHash)))
|
|
})
|
|
})
|
|
|
|
When("use url flag", func() {
|
|
It("should success", func() {
|
|
urls := make([]string, 0)
|
|
for _, u := range remoteFiles {
|
|
urls = append(urls, "-u", fmt.Sprintf("https://t.me/%d/%d", id, u))
|
|
}
|
|
|
|
dir := GinkgoT().TempDir()
|
|
args := []string{"download", "-d", dir, "--template", "{{ .FileName }}"}
|
|
args = append(args, urls...)
|
|
exec(cmd, args, true)
|
|
|
|
log.Println("check local files")
|
|
Expect(filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if d.IsDir() {
|
|
return nil
|
|
}
|
|
|
|
bytes, err := os.ReadFile(path)
|
|
Expect(err, Succeed())
|
|
h := md5.Sum(bytes)
|
|
log.Println("path:", path, "md5:", h)
|
|
|
|
Expect(h).To(Equal(fileHash[filepath.Base(path)]))
|
|
return nil
|
|
})).To(Succeed())
|
|
})
|
|
})
|
|
})
|