Merge pull request #2950 from terinjokes/patches/swift-segment-hash
swift: correct segment path generationmaster
						commit
						1fb7fffdb2
					
				|  | @ -667,13 +667,16 @@ func (d *driver) swiftPath(path string) string { | ||||||
| 	return strings.TrimLeft(strings.TrimRight(d.Prefix+"/files"+path, "/"), "/") | 	return strings.TrimLeft(strings.TrimRight(d.Prefix+"/files"+path, "/"), "/") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // swiftSegmentPath returns a randomly generated path in the segments directory.
 | ||||||
| func (d *driver) swiftSegmentPath(path string) (string, error) { | func (d *driver) swiftSegmentPath(path string) (string, error) { | ||||||
| 	checksum := sha1.New() | 	checksum := sha1.New() | ||||||
| 	random := make([]byte, 32) | 	checksum.Write([]byte(path)) | ||||||
| 	if _, err := rand.Read(random); err != nil { | 
 | ||||||
|  | 	if _, err := io.CopyN(checksum, rand.Reader, 32); err != nil { | ||||||
| 		return "", err | 		return "", err | ||||||
| 	} | 	} | ||||||
| 	path = hex.EncodeToString(checksum.Sum(append([]byte(path), random...))) | 
 | ||||||
|  | 	path = hex.EncodeToString(checksum.Sum(nil)) | ||||||
| 	return strings.TrimLeft(strings.TrimRight(d.Prefix+"/segments/"+path[0:3]+"/"+path[3:], "/"), "/"), nil | 	return strings.TrimLeft(strings.TrimRight(d.Prefix+"/segments/"+path[0:3]+"/"+path[3:], "/"), "/"), nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -243,3 +243,39 @@ func TestFilenameChunking(t *testing.T) { | ||||||
| 		t.Fatal("expected error for size = -1") | 		t.Fatal("expected error for size = -1") | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestSwiftSegmentPath(t *testing.T) { | ||||||
|  | 	d := &driver{ | ||||||
|  | 		Prefix: "/test/segment/path", | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	s1, err := d.swiftSegmentPath("foo-baz") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("unexpected error generating segment path: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	s2, err := d.swiftSegmentPath("foo-baz") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("unexpected error generating segment path: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if !strings.HasPrefix(s1, "test/segment/path/segments/") { | ||||||
|  | 		t.Fatalf("expected to be prefixed: %s", s1) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if !strings.HasPrefix(s1, "test/segment/path/segments/") { | ||||||
|  | 		t.Fatalf("expected to be prefixed: %s", s2) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if len(s1) != 68 { | ||||||
|  | 		t.Fatalf("unexpected segment path length, %d != %d", len(s1), 68) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if len(s2) != 68 { | ||||||
|  | 		t.Fatalf("unexpected segment path length, %d != %d", len(s2), 68) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if s1 == s2 { | ||||||
|  | 		t.Fatalf("expected segment paths to differ, %s == %s", s1, s2) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue