cmd/smart: add validation for uploaded vs downloaded file. use strings trim for getting rid of 0x"

This commit is contained in:
Anton Evangelatov 2018-03-30 13:01:02 +02:00
parent 84759594dc
commit 86c8c0a27f

View file

@ -17,10 +17,14 @@
package main package main
import ( import (
"bytes"
"crypto/md5"
"crypto/rand" "crypto/rand"
"io"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"os" "os"
"strings"
"testing" "testing"
"github.com/ethereum/go-ethereum/swarm" "github.com/ethereum/go-ethereum/swarm"
@ -55,7 +59,7 @@ func TestCLISwarmExportImport(t *testing.T) {
defer cluster.Cleanup() defer cluster.Cleanup()
// generate an export.tar // 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() exportCmd.ExpectExit()
// start second cluster // start second cluster
@ -71,11 +75,11 @@ func TestCLISwarmExportImport(t *testing.T) {
defer cluster2.Cleanup() defer cluster2.Cleanup()
// import the export.tar // 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() importCmd.ExpectExit()
// spin second cluster back up // 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 // try to fetch imported file
res, err := http.Get(cluster2.Nodes[0].URL + "/bzz:/" + hash) 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) 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()) { func generateRandomFile(t *testing.T, size int) (f *os.File, teardown func()) {