Compare commits
14 Commits
gx/v0.7.14
...
gx/v0.7.17
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa428a337b | ||
|
|
e0f0e24c2d | ||
|
|
1aa1093d28 | ||
|
|
f4f9847100 | ||
|
|
83b0d39470 | ||
|
|
b7772ebfe3 | ||
|
|
e449699cc1 | ||
|
|
7d345d4817 | ||
|
|
3c03b9e581 | ||
|
|
f6990413f7 | ||
|
|
3f7f6c6a1d | ||
|
|
05eac5f7ca | ||
|
|
1f385a8224 | ||
|
|
b42583c8bf |
@@ -1 +1 @@
|
||||
0.7.14: QmTJRF2HyQfqXc9BBWVu9ZoumjAs7KsbvYaE6fRrzzoDRF
|
||||
0.7.17: QmTprEaAA2A9bst5XH7exuyi5KzNMK3SEDNN8rBDnKWcUS
|
||||
|
||||
32
.travis.yml
32
.travis.yml
@@ -1,24 +1,24 @@
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
sudo: false
|
||||
|
||||
|
||||
language: go
|
||||
|
||||
go:
|
||||
- 1.7
|
||||
|
||||
install: true
|
||||
|
||||
before_install:
|
||||
- make deps
|
||||
|
||||
- 'tip'
|
||||
|
||||
install:
|
||||
- go get github.com/whyrusleeping/gx
|
||||
- go get github.com/whyrusleeping/gx-go
|
||||
- gx install --global
|
||||
script:
|
||||
- go vet
|
||||
- $GOPATH/bin/goveralls -service="travis-ci"
|
||||
- gx test -v -race -coverprofile=coverage.txt -covermode=atomic .
|
||||
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $GOPATH/src/gx
|
||||
directories:
|
||||
- $GOPATH/src/gx
|
||||
|
||||
notifications:
|
||||
email: false
|
||||
email: false
|
||||
|
||||
|
||||
42
cid.go
42
cid.go
@@ -47,6 +47,10 @@ var (
|
||||
// ErrCidTooShort means that the cid passed to decode was not long
|
||||
// enough to be a valid Cid
|
||||
ErrCidTooShort = errors.New("cid too short")
|
||||
|
||||
// ErrInvalidEncoding means that selected encoding is not supported
|
||||
// by this Cid version
|
||||
ErrInvalidEncoding = errors.New("invalid base encoding")
|
||||
)
|
||||
|
||||
// These are multicodec-packed content types. The should match
|
||||
@@ -75,6 +79,28 @@ const (
|
||||
ZcashTx = 0xc1
|
||||
)
|
||||
|
||||
// Codecs maps the name of a codec to its type
|
||||
var Codecs = map[string]uint64{
|
||||
"v0": DagProtobuf,
|
||||
"raw": Raw,
|
||||
"protobuf": DagProtobuf,
|
||||
"cbor": DagCBOR,
|
||||
"git-raw": GitRaw,
|
||||
"eth-block": EthBlock,
|
||||
"eth-block-list": EthBlockList,
|
||||
"eth-tx-trie": EthTxTrie,
|
||||
"eth-tx": EthTx,
|
||||
"eth-tx-receipt-trie": EthTxReceiptTrie,
|
||||
"eth-tx-receipt": EthTxReceipt,
|
||||
"eth-state-trie": EthStateTrie,
|
||||
"eth-account-snapshot": EthAccountSnapshot,
|
||||
"eth-storage-trie": EthStorageTrie,
|
||||
"bitcoin-block": BitcoinBlock,
|
||||
"bitcoin-tx": BitcoinTx,
|
||||
"zcash-block": ZcashBlock,
|
||||
"zcash-tx": ZcashTx,
|
||||
}
|
||||
|
||||
// NewCidV0 returns a Cid-wrapped multihash.
|
||||
// They exist to allow IPFS to work with Cids while keeping
|
||||
// compatibility with the plain-multihash format used used in IPFS.
|
||||
@@ -247,6 +273,22 @@ func (c *Cid) String() string {
|
||||
}
|
||||
}
|
||||
|
||||
// String returns the string representation of a Cid
|
||||
// encoded is selected base
|
||||
func (c *Cid) StringOfBase(base mbase.Encoding) (string, error) {
|
||||
switch c.version {
|
||||
case 0:
|
||||
if base != mbase.Base58BTC {
|
||||
return "", ErrInvalidEncoding
|
||||
}
|
||||
return c.hash.B58String(), nil
|
||||
case 1:
|
||||
return mbase.Encode(base, c.bytesV1())
|
||||
default:
|
||||
panic("not possible to reach this point")
|
||||
}
|
||||
}
|
||||
|
||||
// Hash returns the multihash contained by a Cid.
|
||||
func (c *Cid) Hash() mh.Multihash {
|
||||
return c.hash
|
||||
|
||||
98
cid_test.go
98
cid_test.go
@@ -8,9 +8,33 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
mbase "github.com/multiformats/go-multibase"
|
||||
mh "github.com/multiformats/go-multihash"
|
||||
)
|
||||
|
||||
// Copying the "silly test" idea from
|
||||
// https://github.com/multiformats/go-multihash/blob/7aa9f26a231c6f34f4e9fad52bf580fd36627285/multihash_test.go#L13
|
||||
// Makes it so changing the table accidentally has to happen twice.
|
||||
var tCodecs = map[uint64]string{
|
||||
Raw: "raw",
|
||||
DagProtobuf: "protobuf",
|
||||
DagCBOR: "cbor",
|
||||
GitRaw: "git-raw",
|
||||
EthBlock: "eth-block",
|
||||
EthBlockList: "eth-block-list",
|
||||
EthTxTrie: "eth-tx-trie",
|
||||
EthTx: "eth-tx",
|
||||
EthTxReceiptTrie: "eth-tx-receipt-trie",
|
||||
EthTxReceipt: "eth-tx-receipt",
|
||||
EthStateTrie: "eth-state-trie",
|
||||
EthAccountSnapshot: "eth-account-snapshot",
|
||||
EthStorageTrie: "eth-storage-trie",
|
||||
BitcoinBlock: "bitcoin-block",
|
||||
BitcoinTx: "bitcoin-tx",
|
||||
ZcashBlock: "zcash-block",
|
||||
ZcashTx: "zcash-tx",
|
||||
}
|
||||
|
||||
func assertEqual(t *testing.T, a, b *Cid) {
|
||||
if a.codec != b.codec {
|
||||
t.Fatal("mismatch on type")
|
||||
@@ -25,6 +49,26 @@ func assertEqual(t *testing.T, a, b *Cid) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestTable(t *testing.T) {
|
||||
if len(tCodecs) != len(Codecs)-1 {
|
||||
t.Errorf("Item count mismatch in the Table of Codec. Should be %d, got %d", len(tCodecs)+1, len(Codecs))
|
||||
}
|
||||
|
||||
for k, v := range tCodecs {
|
||||
if Codecs[v] != k {
|
||||
t.Errorf("Table mismatch: 0x%x %s", k, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The table returns cid.DagProtobuf for "v0"
|
||||
// so we test it apart
|
||||
func TestTableForV0(t *testing.T) {
|
||||
if Codecs["v0"] != DagProtobuf {
|
||||
t.Error("Table mismatch: Codecs[\"v0\"] should resolve to DagProtobuf (0x70)")
|
||||
}
|
||||
}
|
||||
|
||||
func TestBasicMarshaling(t *testing.T) {
|
||||
h, err := mh.Sum([]byte("TEST"), mh.SHA3, 4)
|
||||
if err != nil {
|
||||
@@ -55,6 +99,60 @@ func TestBasicMarshaling(t *testing.T) {
|
||||
assertEqual(t, cid, out2)
|
||||
}
|
||||
|
||||
func TestBasesMarshaling(t *testing.T) {
|
||||
h, err := mh.Sum([]byte("TEST"), mh.SHA3, 4)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cid := &Cid{
|
||||
codec: 7,
|
||||
version: 1,
|
||||
hash: h,
|
||||
}
|
||||
|
||||
data := cid.Bytes()
|
||||
|
||||
out, err := Cast(data)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
assertEqual(t, cid, out)
|
||||
|
||||
testBases := []mbase.Encoding{
|
||||
mbase.Base16,
|
||||
mbase.Base32,
|
||||
mbase.Base32hex,
|
||||
mbase.Base32pad,
|
||||
mbase.Base32hexPad,
|
||||
mbase.Base58BTC,
|
||||
mbase.Base58Flickr,
|
||||
mbase.Base64pad,
|
||||
mbase.Base64urlPad,
|
||||
mbase.Base64url,
|
||||
mbase.Base64,
|
||||
}
|
||||
|
||||
for _, b := range testBases {
|
||||
s, err := cid.StringOfBase(b)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if s[0] != byte(b) {
|
||||
t.Fatal("Invalid multibase header")
|
||||
}
|
||||
|
||||
out2, err := Decode(s)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
assertEqual(t, cid, out2)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEmptyString(t *testing.T) {
|
||||
_, err := Decode("")
|
||||
if err == nil {
|
||||
|
||||
3
codecov.yml
Normal file
3
codecov.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
coverage:
|
||||
range: "50...100"
|
||||
comment: off
|
||||
@@ -9,9 +9,9 @@
|
||||
"gxDependencies": [
|
||||
{
|
||||
"author": "whyrusleeping",
|
||||
"hash": "QmVGtdTZdTFaLsaj2RwdVG8jcjNNcp1DE914DKZ2kHmXHw",
|
||||
"hash": "QmU9a9NV9RdPNwZQDYd5uKsm6N6LJLSvLbywDDYFbaaC6P",
|
||||
"name": "go-multihash",
|
||||
"version": "1.0.4"
|
||||
"version": "1.0.5"
|
||||
},
|
||||
{
|
||||
"author": "whyrusleeping",
|
||||
@@ -25,6 +25,6 @@
|
||||
"license": "MIT",
|
||||
"name": "go-cid",
|
||||
"releaseCmd": "git commit -a -m \"gx publish $VERSION\"",
|
||||
"version": "0.7.14"
|
||||
"version": "0.7.17"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user