Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-cid
Commits
efe2d2de
Commit
efe2d2de
authored
Oct 13, 2020
by
Rod Vagg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
coverage: more tests for cid
parent
46aac888
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
177 additions
and
12 deletions
+177
-12
cid_test.go
cid_test.go
+177
-12
No files found.
cid_test.go
View file @
efe2d2de
...
...
@@ -5,6 +5,7 @@ import (
"encoding/json"
"fmt"
"math/rand"
"reflect"
"strings"
"testing"
...
...
@@ -185,8 +186,32 @@ func TestBasesMarshaling(t *testing.T) {
}
s2
:=
cid
.
Encode
(
encoder
)
if
s
!=
s2
{
t
.
Fatalf
(
"
'%s' != '%s'
"
,
s
,
s2
)
t
.
Fatalf
(
"
%q != %q
"
,
s
,
s2
)
}
ee
,
err
:=
ExtractEncoding
(
s
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
ee
!=
b
{
t
.
Fatalf
(
"could not properly determine base (got %v)"
,
ee
)
}
}
ee
,
err
:=
ExtractEncoding
(
"QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
ee
!=
mbase
.
Base58BTC
{
t
.
Fatalf
(
"expected Base58BTC from Qm string (got %v)"
,
ee
)
}
ee
,
err
=
ExtractEncoding
(
"1"
)
if
err
==
nil
{
t
.
Fatal
(
"expected too-short error from ExtractEncoding"
)
}
if
ee
!=
-
1
{
t
.
Fatal
(
"expected -1 from too-short ExtractEncoding"
)
}
}
...
...
@@ -195,18 +220,32 @@ func TestBinaryMarshaling(t *testing.T) {
hash
,
_
:=
mh
.
Sum
(
data
,
mh
.
SHA2_256
,
-
1
)
c
:=
NewCidV1
(
DagCBOR
,
hash
)
var
c2
Cid
var
c3
Cid
data
,
err
:=
c
.
MarshalBinary
()
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
err
=
c2
.
UnmarshalBinary
(
data
)
if
err
!=
nil
{
if
err
=
c2
.
UnmarshalBinary
(
data
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
c
.
Equals
(
c2
)
{
t
.
Errorf
(
"cids should be the same: %s %s"
,
c
,
c2
)
}
var
buf
bytes
.
Buffer
wrote
,
err
:=
c
.
WriteBytes
(
&
buf
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
wrote
!=
36
{
t
.
Fatalf
(
"expected 36 bytes written (got %d)"
,
wrote
)
}
if
err
=
c3
.
UnmarshalBinary
(
data
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
c
.
Equals
(
c3
)
{
t
.
Errorf
(
"cids should be the same: %s %s"
,
c
,
c3
)
}
}
func
TestTextMarshaling
(
t
*
testing
.
T
)
{
...
...
@@ -219,13 +258,16 @@ func TestTextMarshaling(t *testing.T) {
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
err
=
c2
.
UnmarshalText
(
data
)
if
err
!=
nil
{
if
err
=
c2
.
UnmarshalText
(
data
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
c
.
Equals
(
c2
)
{
t
.
Errorf
(
"cids should be the same: %s %s"
,
c
,
c2
)
}
if
c
.
KeyString
()
!=
string
(
c
.
Bytes
())
{
t
.
Errorf
(
"got unexpected KeyString() result"
)
}
}
func
TestEmptyString
(
t
*
testing
.
T
)
{
...
...
@@ -255,6 +297,11 @@ func TestV0Handling(t *testing.T) {
t
.
Fatal
(
"marshaling roundtrip failed"
)
}
byteLen
:=
cid
.
ByteLen
()
if
byteLen
!=
34
{
t
.
Fatalf
(
"expected V0 ByteLen to be 34 (got %d)"
,
byteLen
)
}
new
,
err
:=
cid
.
StringOfBase
(
mbase
.
Base58BTC
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
...
...
@@ -270,6 +317,11 @@ func TestV0Handling(t *testing.T) {
if
cid
.
Encode
(
encoder
)
!=
old
{
t
.
Fatal
(
"Encode roundtrip failed"
)
}
_
,
err
=
cid
.
StringOfBase
(
mbase
.
Base32
)
if
err
!=
ErrInvalidEncoding
{
t
.
Fatalf
(
"expected ErrInvalidEncoding for V0 StringOfBase(Base32) (got %v)"
,
err
)
}
}
func
TestV0ErrorCases
(
t
*
testing
.
T
)
{
...
...
@@ -370,7 +422,14 @@ func TestInvalidV0Prefix(t *testing.T) {
t
.
Fatalf
(
"should error (index %d)"
,
i
)
}
}
}
func
TestBadPrefix
(
t
*
testing
.
T
)
{
p
:=
Prefix
{
Version
:
3
,
Codec
:
DagProtobuf
,
MhType
:
mh
.
SHA2_256
,
MhLength
:
3
}
_
,
err
:=
p
.
Sum
([]
byte
{
0x00
,
0x01
,
0x03
})
if
err
==
nil
{
t
.
Fatalf
(
"expected error on v3 prefix Sum"
)
}
}
func
TestPrefixRoundtrip
(
t
*
testing
.
T
)
{
...
...
@@ -402,6 +461,25 @@ func TestPrefixRoundtrip(t *testing.T) {
}
}
func
TestBadPrefixFromBytes
(
t
*
testing
.
T
)
{
_
,
err
:=
PrefixFromBytes
([]
byte
{
0x80
})
if
err
==
nil
{
t
.
Fatal
(
"expected error for bad byte 0"
)
}
_
,
err
=
PrefixFromBytes
([]
byte
{
0x01
,
0x80
})
if
err
==
nil
{
t
.
Fatal
(
"expected error for bad byte 1"
)
}
_
,
err
=
PrefixFromBytes
([]
byte
{
0x01
,
0x01
,
0x80
})
if
err
==
nil
{
t
.
Fatal
(
"expected error for bad byte 2"
)
}
_
,
err
=
PrefixFromBytes
([]
byte
{
0x01
,
0x01
,
0x01
,
0x80
})
if
err
==
nil
{
t
.
Fatal
(
"expected error for bad byte 3"
)
}
}
func
Test16BytesVarint
(
t
*
testing
.
T
)
{
data
:=
[]
byte
(
"this is some test content"
)
hash
,
_
:=
mh
.
Sum
(
data
,
mh
.
SHA2_256
,
-
1
)
...
...
@@ -449,7 +527,7 @@ func TestParse(t *testing.T) {
return
err
}
if
cid
.
Version
()
!=
0
{
return
fmt
.
Errorf
(
"expected version 0, got
%s"
,
fmt
.
Sprintf
(
"
%d"
,
cid
.
Version
())
)
return
fmt
.
Errorf
(
"expected version 0, got %d"
,
cid
.
Version
())
}
actual
:=
cid
.
Hash
()
.
B58String
()
if
actual
!=
expected
{
...
...
@@ -463,8 +541,7 @@ func TestParse(t *testing.T) {
}
for
_
,
args
:=
range
assertions
{
err
:=
assert
(
args
[
0
],
args
[
1
]
.
(
string
))
if
err
!=
nil
{
if
err
:=
assert
(
args
[
0
],
args
[
1
]
.
(
string
));
err
!=
nil
{
t
.
Fatal
(
err
)
}
}
...
...
@@ -498,8 +575,7 @@ func TestFromJson(t *testing.T) {
cval
:=
"bafkreie5qrjvaw64n4tjm6hbnm7fnqvcssfed4whsjqxzslbd3jwhsk3mm"
jsoncid
:=
[]
byte
(
`{"/":"`
+
cval
+
`"}`
)
var
c
Cid
err
:=
json
.
Unmarshal
(
jsoncid
,
&
c
)
if
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
jsoncid
,
&
c
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
@@ -509,6 +585,7 @@ func TestFromJson(t *testing.T) {
}
func
TestJsonRoundTrip
(
t
*
testing
.
T
)
{
expectedJSON
:=
`{"/":"bafkreie5qrjvaw64n4tjm6hbnm7fnqvcssfed4whsjqxzslbd3jwhsk3mm"}`
exp
,
err
:=
Decode
(
"bafkreie5qrjvaw64n4tjm6hbnm7fnqvcssfed4whsjqxzslbd3jwhsk3mm"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
...
...
@@ -520,21 +597,50 @@ func TestJsonRoundTrip(t *testing.T) {
t
.
Fatal
(
err
)
}
var
actual
Cid
err
=
json
.
Unmarshal
(
enc
,
&
actual
)
if
err
=
json
.
Unmarshal
(
enc
,
&
actual
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
exp
.
Equals
(
actual
)
{
t
.
Fatal
(
"cids not equal for *Cid"
)
}
if
string
(
enc
)
!=
expectedJSON
{
t
.
Fatalf
(
"did not get expected JSON form (got %q)"
,
string
(
enc
))
}
// Verify it works for a Cid.
enc
,
err
=
json
.
Marshal
(
exp
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
var
actual2
Cid
err
=
json
.
Unmarshal
(
enc
,
&
actual2
)
if
err
=
json
.
Unmarshal
(
enc
,
&
actual2
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
exp
.
Equals
(
actual2
)
{
t
.
Fatal
(
"cids not equal for Cid"
)
}
if
err
=
actual2
.
UnmarshalJSON
([]
byte
(
"1"
));
err
==
nil
{
t
.
Fatal
(
"expected error for too-short JSON"
)
}
if
err
=
actual2
.
UnmarshalJSON
([]
byte
(
`{"nope":"nope"}`
));
err
==
nil
{
t
.
Fatal
(
"expected error for bad CID JSON"
)
}
if
err
=
actual2
.
UnmarshalJSON
([]
byte
(
`bad "" json!`
));
err
==
nil
{
t
.
Fatal
(
"expected error for bad JSON"
)
}
var
actual3
Cid
enc
,
err
=
actual3
.
MarshalJSON
()
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
string
(
enc
)
!=
"null"
{
t
.
Fatalf
(
"expected 'null' string for undefined CID (got %q)"
,
string
(
enc
))
}
}
func
BenchmarkStringV1
(
b
*
testing
.
B
)
{
...
...
@@ -589,6 +695,52 @@ func TestReadCidsFromBuffer(t *testing.T) {
}
}
func
TestBadCidFromBytes
(
t
*
testing
.
T
)
{
l
,
c
,
err
:=
CidFromBytes
([]
byte
{
mh
.
SHA2_256
,
32
,
0x00
})
if
err
==
nil
{
t
.
Fatal
(
"expected not-enough-bytes for V0 CidFromBytes"
)
}
if
l
!=
0
{
t
.
Fatal
(
"expected length=0 from bad CidFromBytes"
)
}
if
c
!=
Undef
{
t
.
Fatal
(
"expected Undef CID from bad CidFromBytes"
)
}
c
,
err
=
Decode
(
"bafkreie5qrjvaw64n4tjm6hbnm7fnqvcssfed4whsjqxzslbd3jwhsk3mm"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
byts
:=
make
([]
byte
,
c
.
ByteLen
())
copy
(
byts
,
c
.
Bytes
())
byts
[
1
]
=
0x80
// bad codec varint
byts
[
2
]
=
0x00
l
,
c
,
err
=
CidFromBytes
(
byts
)
if
err
==
nil
{
t
.
Fatal
(
"expected not-enough-bytes for V1 CidFromBytes"
)
}
if
l
!=
0
{
t
.
Fatal
(
"expected length=0 from bad CidFromBytes"
)
}
if
c
!=
Undef
{
t
.
Fatal
(
"expected Undef CID from bad CidFromBytes"
)
}
copy
(
byts
,
c
.
Bytes
())
byts
[
2
]
=
0x80
// bad multihash varint
byts
[
3
]
=
0x00
l
,
c
,
err
=
CidFromBytes
(
byts
)
if
err
==
nil
{
t
.
Fatal
(
"expected not-enough-bytes for V1 CidFromBytes"
)
}
if
l
!=
0
{
t
.
Fatal
(
"expected length=0 from bad CidFromBytes"
)
}
if
c
!=
Undef
{
t
.
Fatal
(
"expected Undef CID from bad CidFromBytes"
)
}
}
func
TestBadParse
(
t
*
testing
.
T
)
{
hash
,
err
:=
mh
.
Sum
([]
byte
(
"foobar"
),
mh
.
SHA3_256
,
-
1
)
if
err
!=
nil
{
...
...
@@ -599,3 +751,16 @@ func TestBadParse(t *testing.T) {
t
.
Fatal
(
"expected to fail to parse an invalid CIDv1 CID"
)
}
}
func
TestLoggable
(
t
*
testing
.
T
)
{
c
,
err
:=
Decode
(
"bafkreie5qrjvaw64n4tjm6hbnm7fnqvcssfed4whsjqxzslbd3jwhsk3mm"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
actual
:=
c
.
Loggable
()
expected
:=
make
(
map
[
string
]
interface
{})
expected
[
"cid"
]
=
c
if
!
reflect
.
DeepEqual
(
actual
,
expected
)
{
t
.
Fatalf
(
"did not get expected loggable form (got %v)"
,
actual
)
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment