mirror of https://github.com/ollama/ollama.git
				
				
				
			
		
			
	
	
		
			84 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
|  | package server | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"io/fs" | ||
|  | 	"os" | ||
|  | 	"path/filepath" | ||
|  | 	"runtime" | ||
|  | 	"slices" | ||
|  | 	"strings" | ||
|  | 	"testing" | ||
|  | ) | ||
|  | 
 | ||
|  | func TestFixBlobs(t *testing.T) { | ||
|  | 	cases := []struct { | ||
|  | 		path []string | ||
|  | 		want []string | ||
|  | 	}{ | ||
|  | 		{path: []string{"sha256-1234"}, want: []string{"sha256-1234"}}, | ||
|  | 		{path: []string{"sha256:1234"}, want: []string{"sha256-1234"}}, | ||
|  | 		{path: []string{"sha259:5678"}, want: []string{"sha259:5678"}}, | ||
|  | 		{path: []string{"sha256:abcd"}, want: []string{"sha256-abcd"}}, | ||
|  | 		{path: []string{"x/y/sha256:abcd"}, want: []string{"x/y/sha256-abcd"}}, | ||
|  | 		{path: []string{"x:y/sha256:abcd"}, want: []string{"x:y/sha256-abcd"}}, | ||
|  | 		{path: []string{"x:y/sha256:abcd"}, want: []string{"x:y/sha256-abcd"}}, | ||
|  | 		{path: []string{"x:y/sha256:abcd", "sha256:1234"}, want: []string{"x:y/sha256-abcd", "sha256-1234"}}, | ||
|  | 		{path: []string{"x:y/sha256:abcd", "sha256-1234"}, want: []string{"x:y/sha256-abcd", "sha256-1234"}}, | ||
|  | 	} | ||
|  | 
 | ||
|  | 	for _, tt := range cases { | ||
|  | 		t.Run(strings.Join(tt.path, "|"), func(t *testing.T) { | ||
|  | 			hasColon := slices.ContainsFunc(tt.path, func(s string) bool { return strings.Contains(s, ":") }) | ||
|  | 			if hasColon && runtime.GOOS == "windows" { | ||
|  | 				t.Skip("skipping test on windows") | ||
|  | 			} | ||
|  | 
 | ||
|  | 			rootDir := t.TempDir() | ||
|  | 			for _, path := range tt.path { | ||
|  | 				fullPath := filepath.Join(rootDir, path) | ||
|  | 				fullDir, _ := filepath.Split(fullPath) | ||
|  | 
 | ||
|  | 				t.Logf("creating dir %s", fullDir) | ||
|  | 				if err := os.MkdirAll(fullDir, 0o755); err != nil { | ||
|  | 					t.Fatal(err) | ||
|  | 				} | ||
|  | 
 | ||
|  | 				t.Logf("writing file %s", fullPath) | ||
|  | 				if err := os.WriteFile(fullPath, nil, 0o644); err != nil { | ||
|  | 					t.Fatal(err) | ||
|  | 				} | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if err := fixBlobs(rootDir); err != nil { | ||
|  | 				t.Fatal(err) | ||
|  | 			} | ||
|  | 
 | ||
|  | 			got := slurpFiles(os.DirFS(rootDir)) | ||
|  | 
 | ||
|  | 			slices.Sort(tt.want) | ||
|  | 			slices.Sort(got) | ||
|  | 			if !slices.Equal(got, tt.want) { | ||
|  | 				t.Fatalf("got = %v, want %v", got, tt.want) | ||
|  | 			} | ||
|  | 		}) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func slurpFiles(fsys fs.FS) []string { | ||
|  | 	var sfs []string | ||
|  | 	fn := func(path string, d fs.DirEntry, err error) error { | ||
|  | 		if err != nil { | ||
|  | 			return err | ||
|  | 		} | ||
|  | 		if d.IsDir() { | ||
|  | 			return nil | ||
|  | 		} | ||
|  | 		sfs = append(sfs, path) | ||
|  | 		return nil | ||
|  | 	} | ||
|  | 	if err := fs.WalkDir(fsys, ".", fn); err != nil { | ||
|  | 		panic(err) | ||
|  | 	} | ||
|  | 	return sfs | ||
|  | } |