func TestBlockIterLongManifest(t *testing.T) { content, err := ioutil.ReadFile("testdata/long_manifest") if err != nil { t.Fatalf("Unexpected error reading manifest from file: %v", err) } manifest := Manifest{Text: string(content)} blockChannel := manifest.BlockIterWithDuplicates() firstBlock := <-blockChannel d, err := blockdigest.FromString("b746e3d2104645f2f64cd3cc69dd895d") if err != nil { t.Fatalf("Unexpected error during FromString for block: %v", err) } expectBlockLocator(t, firstBlock, blockdigest.BlockLocator{Digest: d, Size: 15693477, Hints: []string{"E2866e643690156651c03d876e638e674dcd79475@5441920c"}}) blocksRead := 1 var lastBlock blockdigest.BlockLocator for lastBlock = range blockChannel { blocksRead++ } expectEqual(t, blocksRead, 853) d, err = blockdigest.FromString("f9ce82f59e5908d2d70e18df9679b469") if err != nil { t.Fatalf("Unexpected error during FromString for block: %v", err) } expectBlockLocator(t, lastBlock, blockdigest.BlockLocator{Digest: d, Size: 31367794, Hints: []string{"E53f903684239bcc114f7bf8ff9bd6089f33058db@5441920c"}}) }
func ParseBlockLocator(s string) (b BlockLocator, err error) { if !LocatorPattern.MatchString(s) { err = fmt.Errorf("String \"%s\" does not match BlockLocator pattern "+ "\"%s\".", s, LocatorPattern.String()) } else { tokens := strings.Split(s, "+") var blockSize int64 var blockDigest blockdigest.BlockDigest // We expect both of the following to succeed since LocatorPattern // restricts the strings appropriately. blockDigest, err = blockdigest.FromString(tokens[0]) if err != nil { return } blockSize, err = strconv.ParseInt(tokens[1], 10, 0) if err != nil { return } b.Digest = blockDigest b.Size = int(blockSize) b.Hints = tokens[2:] } return }
func TestParseBlockLocatorSimple(t *testing.T) { b, err := ParseBlockLocator("365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf") if err != nil { t.Fatalf("Unexpected error parsing block locator: %v", err) } d, err := blockdigest.FromString("365f83f5f808896ec834c8b595288735") if err != nil { t.Fatalf("Unexpected error during FromString for block locator: %v", err) } expectBlockLocator(t, blockdigest.BlockLocator{b.Digest, b.Size, b.Hints}, blockdigest.BlockLocator{Digest: d, Size: 2310, Hints: []string{"K@qr1hi", "Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf"}}) }