From eb2d20ff17c3275b9f010d45dc4c0870cf6f499f Mon Sep 17 00:00:00 2001 From: Fabio Barone Date: Sun, 3 Feb 2019 20:07:24 -0500 Subject: [PATCH] swarm/storage: GetAllReferences test and fixes --- swarm/storage/filestore.go | 6 +++--- swarm/storage/filestore_test.go | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/swarm/storage/filestore.go b/swarm/storage/filestore.go index 4894a846cf..410b4407b1 100644 --- a/swarm/storage/filestore.go +++ b/swarm/storage/filestore.go @@ -99,20 +99,20 @@ func (f *FileStore) HashSize() int { // Public API. This endpoint returns all chunk hashes (only) for a given file func (f *FileStore) GetAllReferences(ctx context.Context, data io.Reader) (addrs []Address, err error) { - var addrs = make([]Address, 0) + addrs = make([]Address, 0) // create a special kind of putter, which only will store the references putter := &HashExplorer{ hasherStore: NewHasherStore(f.ChunkStore, f.hashFunc, false), References: make([]Reference, 0), } // do the actual splitting anyway, no way around it - _, _, err := PyramidSplit(ctx, data, putter, putter) + _, _, err = PyramidSplit(ctx, data, putter, putter) if err != nil { return nil, err } // collect all references for _, ref := range putter.References { - addrs = append(addrs, ref) + addrs = append(addrs, Address(ref)) } return addrs, nil } diff --git a/swarm/storage/filestore_test.go b/swarm/storage/filestore_test.go index fb0f761a4a..f46ce86b76 100644 --- a/swarm/storage/filestore_test.go +++ b/swarm/storage/filestore_test.go @@ -173,3 +173,39 @@ func testFileStoreCapacity(toEncrypt bool, t *testing.T) { t.Fatalf("Comparison error after clearing memStore.") } } + +// TestGetAllReferences only tests that GetAllReferences returns an expected +// number of references for a given file +func TestGetAllReferences(t *testing.T) { + tdb, cleanup, err := newTestDbStore(false, false) + defer cleanup() + if err != nil { + t.Fatalf("init dbStore failed: %v", err) + } + db := tdb.LDBStore + memStore := NewMemStore(NewDefaultStoreParams(), db) + localStore := &LocalStore{ + memStore: memStore, + DbStore: db, + } + fileStore := NewFileStore(localStore, NewFileStoreParams()) + + checkRefs := func(dataSize int, expectedLen int) { + slice := testutil.RandomBytes(1, dataSize) + + addrs, err := fileStore.GetAllReferences(context.Background(), bytes.NewReader(slice)) + if err != nil { + t.Fatal(err) + } + if len(addrs) != expectedLen { + t.Fatalf("Expected reference array length to be %d, but is %d", expectedLen, len(addrs)) + } + } + + // testRuns[i] and expectedLen[i] are dataSize and expected length respectively + testRuns := []int{1024, 8192, 16000, 30000, 1000000} + expectedLens := []int{1, 3, 5, 9, 248} + for i, r := range testRuns { + checkRefs(r, expectedLens[i]) + } +}