mirror of
https://github.com/iyear/tdl
synced 2025-01-07 03:16:41 +08:00
138 lines
3.2 KiB
Go
138 lines
3.2 KiB
Go
package test
|
|
|
|
import (
|
|
"log"
|
|
"math/rand"
|
|
"os"
|
|
"path/filepath"
|
|
"strconv"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/tidwall/gjson"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("Test tdl upload", FlakeAttempts(3), func() {
|
|
BeforeEach(func() {
|
|
args = []string{"upload"}
|
|
})
|
|
|
|
var (
|
|
dir string
|
|
files []string
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
dir = GinkgoT().TempDir()
|
|
// create files
|
|
files = make([]string, 0)
|
|
for i := 0; i < rand.Intn(3)+3; i++ {
|
|
file := filepath.Join(dir, uuid.New().String())
|
|
|
|
// generate random file with size between 1MB and 2MB
|
|
f, err := os.Create(file)
|
|
Expect(err).To(Succeed())
|
|
Expect(f.Truncate(int64(rand.Intn(1e5)) + 1e5)).To(Succeed())
|
|
Expect(f.Close()).To(Succeed())
|
|
|
|
files = append(files, file)
|
|
}
|
|
})
|
|
|
|
checkFiles := func(chat string, n int, expected []string) {
|
|
By("check if files are uploaded")
|
|
exportFile := filepath.Join(dir, "export.json")
|
|
exec(cmd, []string{"chat", "-c", chat, "export", "-T", "last", "-i", strconv.Itoa(n), "-o", exportFile}, true)
|
|
|
|
exportBytes, err := os.ReadFile(exportFile)
|
|
Expect(err).To(Succeed())
|
|
|
|
actualFiles := make([]string, 0)
|
|
gjson.GetBytes(exportBytes, "messages").ForEach(func(key, value gjson.Result) bool {
|
|
actualFiles = append(actualFiles, filepath.Join(dir, value.Get("file").String()))
|
|
return true
|
|
})
|
|
log.Printf("actual files on server: %v", actualFiles)
|
|
|
|
Expect(actualFiles).To(ConsistOf(expected))
|
|
}
|
|
|
|
When("use path flag", func() {
|
|
It("should success", func() {
|
|
args = append(args, "-p", dir)
|
|
exec(cmd, args, true)
|
|
|
|
checkFiles("", len(files), files)
|
|
})
|
|
|
|
It("should fail with invalid path", func() {
|
|
args = append(args, "-p", "foo")
|
|
exec(cmd, args, false)
|
|
})
|
|
|
|
It("should fail with invalid file", func() {
|
|
args = append(args, "-p", "foo.bar")
|
|
exec(cmd, args, false)
|
|
})
|
|
})
|
|
|
|
When("use rm flag", func() {
|
|
It("should success", func() {
|
|
args = append(args, "-p", dir, "--rm")
|
|
exec(cmd, args, true)
|
|
|
|
checkFiles("", len(files), files)
|
|
|
|
By("check if files are removed")
|
|
for _, file := range files {
|
|
_, err := os.Stat(file)
|
|
Expect(os.IsNotExist(err)).To(BeTrue())
|
|
}
|
|
})
|
|
})
|
|
|
|
When("use chat flag", func() {
|
|
It("should success", func() {
|
|
By("get a private chat id")
|
|
exec(cmd, []string{"chat", "ls", "-o", "json", "-f", "Type contains 'private'"}, true)
|
|
chat := gjson.Get(output, "0.id").String()
|
|
Expect(chat).NotTo(BeEmpty())
|
|
|
|
args = append(args, "-p", dir, "-c", chat)
|
|
exec(cmd, args, true)
|
|
|
|
checkFiles(chat, len(files), files)
|
|
})
|
|
|
|
It("should fail with invalid chat domain", func() {
|
|
args = append(args, "-p", dir, "-c", "foo")
|
|
exec(cmd, args, false)
|
|
})
|
|
|
|
It("should fail with invalid chat id", func() {
|
|
args = append(args, "-p", dir, "-c", "-100")
|
|
exec(cmd, args, false)
|
|
})
|
|
})
|
|
|
|
When("use exclude flag", func() {
|
|
It("should success", func() {
|
|
By("modify files' extension")
|
|
modify, remain := files[:len(files)/2], files[len(files)/2:]
|
|
log.Printf("modify files: %v", modify)
|
|
log.Printf("remain files: %v", remain)
|
|
|
|
for _, file := range modify {
|
|
Expect(os.Rename(file, file+".foo")).To(Succeed())
|
|
}
|
|
|
|
args = append(args, "-p", dir, "-e", ".foo")
|
|
exec(cmd, args, true)
|
|
|
|
checkFiles("", len(remain), remain)
|
|
})
|
|
})
|
|
})
|