resolver_test.go 2.35 KB
Newer Older
zelig's avatar
zelig committed
1 2 3 4
package resolver

import (
	"testing"
zelig's avatar
zelig committed
5 6 7

	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/crypto"
zelig's avatar
zelig committed
8 9
)

zelig's avatar
zelig committed
10 11 12 13 14 15 16
type testBackend struct {
	// contracts mock
	contracts map[string](map[string]string)
}

var (
	text     = "test"
17 18
	codehash = common.StringToHash("1234")
	hash     = common.BytesToHash(crypto.Sha3([]byte(text)))
zelig's avatar
zelig committed
19 20 21 22
	url      = "bzz://bzzhash/my/path/contr.act"
)

func NewTestBackend() *testBackend {
23 24
	HashRegContractAddress = common.BigToAddress(common.Big0).Hex()[2:]
	UrlHintContractAddress = common.BigToAddress(common.Big1).Hex()[2:]
zelig's avatar
zelig committed
25 26 27
	self := &testBackend{}
	self.contracts = make(map[string](map[string]string))

28 29 30
	self.contracts[HashRegContractAddress] = make(map[string]string)
	key := storageAddress(storageMapping(storageIdx2Addr(1), codehash[:]))
	self.contracts[HashRegContractAddress][key] = hash.Hex()
zelig's avatar
zelig committed
31

32
	self.contracts[UrlHintContractAddress] = make(map[string]string)
33
	mapaddr := storageMapping(storageIdx2Addr(1), hash[:])
zsfelfoldi's avatar
zsfelfoldi committed
34 35

	key = storageAddress(storageFixedArray(mapaddr, storageIdx2Addr(0)))
36
	self.contracts[UrlHintContractAddress][key] = common.ToHex([]byte(url))
zsfelfoldi's avatar
zsfelfoldi committed
37
	key = storageAddress(storageFixedArray(mapaddr, storageIdx2Addr(1)))
38
	self.contracts[UrlHintContractAddress][key] = "0x00"
zelig's avatar
zelig committed
39
	return self
zelig's avatar
zelig committed
40 41
}

zelig's avatar
zelig committed
42 43 44 45 46 47 48 49
func (self *testBackend) StorageAt(ca, sa string) (res string) {
	c := self.contracts[ca]
	if c == nil {
		return
	}
	res = c[sa]
	return
}
zelig's avatar
zelig committed
50

51 52 53 54
func (self *testBackend) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceStr, codeStr string) (string, error) {
	return "", nil
}

55
func TestKeyToContentHash(t *testing.T) {
zelig's avatar
zelig committed
56
	b := NewTestBackend()
57
	res := New(b)
58

59
	got, err := res.KeyToContentHash(codehash)
zelig's avatar
zelig committed
60 61 62
	if err != nil {
		t.Errorf("expected no error, got %v", err)
	} else {
63
		if got != hash {
64
			t.Errorf("incorrect result, expected '%v', got '%v'", hash.Hex(), got.Hex())
zelig's avatar
zelig committed
65 66
		}
	}
zelig's avatar
zelig committed
67 68
}

zelig's avatar
zelig committed
69 70
func TestContentHashToUrl(t *testing.T) {
	b := NewTestBackend()
71
	res := New(b)
72
	got, err := res.ContentHashToUrl(hash)
zelig's avatar
zelig committed
73 74 75
	if err != nil {
		t.Errorf("expected no error, got %v", err)
	} else {
76 77
		if got != url {
			t.Errorf("incorrect result, expected '%v', got '%s'", url, got)
zelig's avatar
zelig committed
78 79 80
		}
	}
}
zelig's avatar
zelig committed
81

82
func TestKeyToUrl(t *testing.T) {
83
	b := NewTestBackend()
84
	res := New(b)
85 86 87 88
	got, _, err := res.KeyToUrl(codehash)
	if err != nil {
		t.Errorf("expected no error, got %v", err)
	} else {
89 90
		if got != url {
			t.Errorf("incorrect result, expected \n'%s', got \n'%s'", url, got)
91 92
		}
	}
zelig's avatar
zelig committed
93
}