diff --git a/cmd/swarm/export_test.go b/cmd/swarm/export_test.go index 7a0ab4858d..525538ad75 100644 --- a/cmd/swarm/export_test.go +++ b/cmd/swarm/export_test.go @@ -17,10 +17,14 @@ package main import ( + "bytes" + "crypto/md5" "crypto/rand" + "io" "io/ioutil" "net/http" "os" + "strings" "testing" "github.com/ethereum/go-ethereum/swarm" @@ -55,7 +59,7 @@ func TestCLISwarmExportImport(t *testing.T) { defer cluster.Cleanup() // generate an export.tar - exportCmd := runSwarm(t, "db", "export", info.Path+"/chunks", info.Path+"/export.tar", info.BzzKey[2:]) + exportCmd := runSwarm(t, "db", "export", info.Path+"/chunks", info.Path+"/export.tar", strings.TrimPrefix(info.BzzKey, "0x")) exportCmd.ExpectExit() // start second cluster @@ -71,11 +75,11 @@ func TestCLISwarmExportImport(t *testing.T) { defer cluster2.Cleanup() // import the export.tar - importCmd := runSwarm(t, "db", "import", info2.Path+"/chunks", info.Path+"/export.tar", info2.BzzKey[2:]) + importCmd := runSwarm(t, "db", "import", info2.Path+"/chunks", info.Path+"/export.tar", strings.TrimPrefix(info2.BzzKey, "0x")) importCmd.ExpectExit() // spin second cluster back up - cluster2.StartExistingNodes(t, 1, info2.BzzAccount[2:]) + cluster2.StartExistingNodes(t, 1, strings.TrimPrefix(info2.BzzAccount, "0x")) // try to fetch imported file res, err := http.Get(cluster2.Nodes[0].URL + "/bzz:/" + hash) @@ -87,7 +91,27 @@ func TestCLISwarmExportImport(t *testing.T) { t.Fatalf("expected HTTP status %d, got %s", 200, res.Status) } - //TODO: compare res with generated random file + // compare downloaded file with the generated random file + mustEqualFiles(t, f, res.Body) +} + +func mustEqualFiles(t *testing.T, up io.Reader, down io.Reader) { + h := md5.New() + upLen, err := io.Copy(h, up) + if err != nil { + t.Fatal(err) + } + upHash := h.Sum(nil) + h.Reset() + downLen, err := io.Copy(h, down) + if err != nil { + t.Fatal(err) + } + downHash := h.Sum(nil) + + if !bytes.Equal(upHash, downHash) || upLen != downLen { + t.Fatalf("downloaded imported file md5=%x (length %v) is not the same as the generated one mp5=%x (length %v)", downHash, downLen, upHash, upLen) + } } func generateRandomFile(t *testing.T, size int) (f *os.File, teardown func()) {