Skip to content
This repository has been archived by the owner on Aug 2, 2021. It is now read-only.

Commit

Permalink
swarm/storage: Convert TestHasherStore to table-driven test
Browse files Browse the repository at this point in the history
  • Loading branch information
gbalint committed Mar 29, 2018
1 parent bc32751 commit ba258d7
Showing 1 changed file with 73 additions and 70 deletions.
143 changes: 73 additions & 70 deletions swarm/storage/hasherstore_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,92 +28,95 @@ import (
)

func TestHasherStore(t *testing.T) {
testHasherStore(10, false, t)
testHasherStore(100, false, t)
testHasherStore(1000, false, t)
testHasherStore(4096, false, t)
testHasherStore(10, true, t)
testHasherStore(100, true, t)
testHasherStore(1000, true, t)
testHasherStore(4096, true, t)
}

func testHasherStore(chunkLength int, toEncrypt bool, t *testing.T) {
chunkStore := newTestChunkStore()
hasherStore := NewHasherStore(chunkStore, MakeHashFunc(SHA3Hash), toEncrypt)
var tests = []struct {
chunkLength int
toEncrypt bool
}{
{10, false},
{100, false},
{1000, false},
{4096, false},
{10, true},
{100, true},
{1000, true},
{4096, true},
}

// Put two random chunks into the hasherStore
for _, tt := range tests {
chunkStore := newTestChunkStore()
hasherStore := NewHasherStore(chunkStore, MakeHashFunc(SHA3Hash), tt.toEncrypt)

chunkData1 := generateRandomChunkData(chunkLength)
key1, err := hasherStore.Put(chunkData1)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}
// Put two random chunks into the hasherStore
chunkData1 := generateRandomChunkData(tt.chunkLength)
key1, err := hasherStore.Put(chunkData1)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}

chunkData2 := generateRandomChunkData(chunkLength)
key2, err := hasherStore.Put(chunkData2)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}
chunkData2 := generateRandomChunkData(tt.chunkLength)
key2, err := hasherStore.Put(chunkData2)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}

hasherStore.Close()
hasherStore.Close()

// Wait until chunks are really stored
hasherStore.Wait()
// Wait until chunks are really stored
hasherStore.Wait()

// Get the first chunk
retrievedChunkData1, err := hasherStore.Get(key1)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}
// Get the first chunk
retrievedChunkData1, err := hasherStore.Get(key1)
if err != nil {
t.Fatalf("Expected no error, got \"%v\"", err)
}

// Retrieved data should be same as the original
if !bytes.Equal(chunkData1, retrievedChunkData1) {
t.Fatalf("Expected retrieved chunk data %v got %v", common.Bytes2Hex(chunkData1), common.Bytes2Hex(retrievedChunkData1))
}
// Retrieved data should be same as the original
if !bytes.Equal(chunkData1, retrievedChunkData1) {
t.Fatalf("Expected retrieved chunk data %v, got %v", common.Bytes2Hex(chunkData1), common.Bytes2Hex(retrievedChunkData1))
}

// Get the second chunk
retrievedChunkData2, err := hasherStore.Get(key2)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}
// Get the second chunk
retrievedChunkData2, err := hasherStore.Get(key2)
if err != nil {
t.Fatalf("Expected no error, got \"%v\"", err)
}

// Retrieved data should be same as the original
if !bytes.Equal(chunkData2, retrievedChunkData2) {
t.Fatalf("Expected retrieved chunk data %v got %v", common.Bytes2Hex(chunkData2), common.Bytes2Hex(retrievedChunkData2))
}
// Retrieved data should be same as the original
if !bytes.Equal(chunkData2, retrievedChunkData2) {
t.Fatalf("Expected retrieved chunk data %v, got %v", common.Bytes2Hex(chunkData2), common.Bytes2Hex(retrievedChunkData2))
}

hash1, encryptionKey1, err := parseReference(key1)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}
hash1, encryptionKey1, err := parseReference(key1)
if err != nil {
t.Fatalf("Expected no error, got \"%v\"", err)
}

if toEncrypt {
if encryptionKey1 == nil {
t.Fatal("Expected non-nil encryption key got nil")
} else if len(encryptionKey1) != encryption.KeyLength {
t.Fatalf("Expected encryption key length %v got %v", encryption.KeyLength, len(encryptionKey1))
if tt.toEncrypt {
if encryptionKey1 == nil {
t.Fatal("Expected non-nil encryption key, got nil")
} else if len(encryptionKey1) != encryption.KeyLength {
t.Fatalf("Expected encryption key length %v, got %v", encryption.KeyLength, len(encryptionKey1))
}
}
if !tt.toEncrypt && encryptionKey1 != nil {
t.Fatalf("Expected nil encryption key, got key with length %v", len(encryptionKey1))
}
}
if !toEncrypt && encryptionKey1 != nil {
t.Fatalf("Expected nil encryption key got key with length %v", len(encryptionKey1))
}

// Check if chunk data in store is encrypted or not
chunkInStore, err := chunkStore.Get(hash1)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}
// Check if chunk data in store is encrypted or not
chunkInStore, err := chunkStore.Get(hash1)
if err != nil {
t.Fatalf("Expected no error got \"%v\"", err)
}

chunkDataInStore := chunkInStore.SData
chunkDataInStore := chunkInStore.SData

if toEncrypt && bytes.Equal(chunkData1, chunkDataInStore) {
t.Fatalf("Chunk expected to be encrypted but it is stored without encryption")
}
if !toEncrypt && !bytes.Equal(chunkData1, chunkDataInStore) {
t.Fatalf("Chunk expected to be not encrypted but stored content is different. Expected %v got %v", common.Bytes2Hex(chunkData1), common.Bytes2Hex(chunkDataInStore))
if tt.toEncrypt && bytes.Equal(chunkData1, chunkDataInStore) {
t.Fatalf("Chunk expected to be encrypted but it is stored without encryption")
}
if !tt.toEncrypt && !bytes.Equal(chunkData1, chunkDataInStore) {
t.Fatalf("Chunk expected to be not encrypted but stored content is different. Expected %v got %v", common.Bytes2Hex(chunkData1), common.Bytes2Hex(chunkDataInStore))
}
}

}

func generateRandomChunkData(length int) ChunkData {
Expand Down

0 comments on commit ba258d7

Please sign in to comment.