model_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package server
  2. import (
  3. "archive/zip"
  4. "bytes"
  5. "io"
  6. "os"
  7. "path/filepath"
  8. "slices"
  9. "testing"
  10. "github.com/ollama/ollama/api"
  11. )
  12. func createZipFile(t *testing.T, name string) *os.File {
  13. t.Helper()
  14. f, err := os.CreateTemp(t.TempDir(), "")
  15. if err != nil {
  16. t.Fatal(err)
  17. }
  18. zf := zip.NewWriter(f)
  19. defer zf.Close()
  20. zh, err := zf.CreateHeader(&zip.FileHeader{Name: name})
  21. if err != nil {
  22. t.Fatal(err)
  23. }
  24. if _, err := io.Copy(zh, bytes.NewReader([]byte(""))); err != nil {
  25. t.Fatal(err)
  26. }
  27. return f
  28. }
  29. func TestExtractFromZipFile(t *testing.T) {
  30. cases := []struct {
  31. name string
  32. expect []string
  33. }{
  34. {
  35. name: "good",
  36. expect: []string{"good"},
  37. },
  38. {
  39. name: filepath.Join("..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "bad"),
  40. },
  41. }
  42. for _, tt := range cases {
  43. t.Run(tt.name, func(t *testing.T) {
  44. f := createZipFile(t, tt.name)
  45. defer f.Close()
  46. tempDir := t.TempDir()
  47. if err := extractFromZipFile(tempDir, f, func(api.ProgressResponse) {}); err != nil {
  48. t.Fatal(err)
  49. }
  50. var matches []string
  51. if err := filepath.Walk(tempDir, func(p string, fi os.FileInfo, err error) error {
  52. if err != nil {
  53. return err
  54. }
  55. if !fi.IsDir() {
  56. matches = append(matches, p)
  57. }
  58. return nil
  59. }); err != nil {
  60. t.Fatal(err)
  61. }
  62. var actual []string
  63. for _, match := range matches {
  64. rel, err := filepath.Rel(tempDir, match)
  65. if err != nil {
  66. t.Error(err)
  67. }
  68. actual = append(actual, rel)
  69. }
  70. if !slices.Equal(actual, tt.expect) {
  71. t.Fatalf("expected %d files, got %d", len(tt.expect), len(matches))
  72. }
  73. })
  74. }
  75. }