routes_list_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package server
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/http"
  6. "slices"
  7. "testing"
  8. "github.com/gin-gonic/gin"
  9. "github.com/ollama/ollama/api"
  10. "github.com/ollama/ollama/envconfig"
  11. )
  12. func TestList(t *testing.T) {
  13. gin.SetMode(gin.TestMode)
  14. t.Setenv("OLLAMA_MODELS", t.TempDir())
  15. envconfig.LoadConfig()
  16. expectNames := []string{
  17. "mistral:7b-instruct-q4_0",
  18. "zephyr:7b-beta-q5_K_M",
  19. "apple/OpenELM:latest",
  20. "boreas:2b-code-v1.5-q6_K",
  21. "notus:7b-v1-IQ2_S",
  22. // TODO: host:port currently fails on windows (#4107)
  23. // "localhost:5000/library/eurus:700b-v0.5-iq3_XXS",
  24. "mynamespace/apeliotes:latest",
  25. "myhost/mynamespace/lips:code",
  26. }
  27. var s Server
  28. for _, n := range expectNames {
  29. createRequest(t, s.CreateModelHandler, api.CreateRequest{
  30. Name: n,
  31. Modelfile: fmt.Sprintf("FROM %s", createBinFile(t, nil, nil)),
  32. })
  33. }
  34. w := createRequest(t, s.ListModelsHandler, nil)
  35. if w.Code != http.StatusOK {
  36. t.Fatalf("expected status code 200, actual %d", w.Code)
  37. }
  38. var resp api.ListResponse
  39. if err := json.NewDecoder(w.Body).Decode(&resp); err != nil {
  40. t.Fatal(err)
  41. }
  42. if len(resp.Models) != len(expectNames) {
  43. t.Fatalf("expected %d models, actual %d", len(expectNames), len(resp.Models))
  44. }
  45. actualNames := make([]string, len(resp.Models))
  46. for i, m := range resp.Models {
  47. actualNames[i] = m.Name
  48. }
  49. slices.Sort(actualNames)
  50. slices.Sort(expectNames)
  51. if !slices.Equal(actualNames, expectNames) {
  52. t.Fatalf("expected slices to be equal %v", actualNames)
  53. }
  54. }