5452b59a2e
* Update go-libp2p to v0.22.0 * Testing with go1.19 * build(deps): bump github.com/multiformats/go-multicodec Bumps [github.com/multiformats/go-multicodec](https://github.com/multiformats/go-multicodec) from 0.5.0 to 0.6.0. - [Release notes](https://github.com/multiformats/go-multicodec/releases) - [Commits](https://github.com/multiformats/go-multicodec/compare/v0.5.0...v0.6.0) --- updated-dependencies: - dependency-name: github.com/multiformats/go-multicodec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/ipld/go-car from 0.4.0 to 0.5.0 Bumps [github.com/ipld/go-car](https://github.com/ipld/go-car) from 0.4.0 to 0.5.0. - [Release notes](https://github.com/ipld/go-car/releases) - [Commits](https://github.com/ipld/go-car/compare/v0.4.0...v0.5.0) --- updated-dependencies: - dependency-name: github.com/ipld/go-car dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/prometheus/client_golang Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.12.2 to 1.13.0. - [Release notes](https://github.com/prometheus/client_golang/releases) - [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md) - [Commits](https://github.com/prometheus/client_golang/compare/v1.12.2...v1.13.0) --- updated-dependencies: - dependency-name: github.com/prometheus/client_golang dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/hashicorp/go-hclog from 1.2.1 to 1.3.0 Bumps [github.com/hashicorp/go-hclog](https://github.com/hashicorp/go-hclog) from 1.2.1 to 1.3.0. - [Release notes](https://github.com/hashicorp/go-hclog/releases) - [Commits](https://github.com/hashicorp/go-hclog/compare/v1.2.1...v1.3.0) --- updated-dependencies: - dependency-name: github.com/hashicorp/go-hclog dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/ipfs/go-ds-crdt from 0.3.6 to 0.3.7 Bumps [github.com/ipfs/go-ds-crdt](https://github.com/ipfs/go-ds-crdt) from 0.3.6 to 0.3.7. - [Release notes](https://github.com/ipfs/go-ds-crdt/releases) - [Commits](https://github.com/ipfs/go-ds-crdt/compare/v0.3.6...v0.3.7) --- updated-dependencies: - dependency-name: github.com/ipfs/go-ds-crdt dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/urfave/cli/v2 from 2.10.2 to 2.14.1 Bumps [github.com/urfave/cli/v2](https://github.com/urfave/cli) from 2.10.2 to 2.14.1. - [Release notes](https://github.com/urfave/cli/releases) - [Changelog](https://github.com/urfave/cli/blob/main/docs/CHANGELOG.md) - [Commits](https://github.com/urfave/cli/compare/v2.10.2...v2.14.1) --- updated-dependencies: - dependency-name: github.com/urfave/cli/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/libp2p/go-libp2p-http from 0.3.0 to 0.4.0 Bumps [github.com/libp2p/go-libp2p-http](https://github.com/libp2p/go-libp2p-http) from 0.3.0 to 0.4.0. - [Release notes](https://github.com/libp2p/go-libp2p-http/releases) - [Commits](https://github.com/libp2p/go-libp2p-http/compare/v0.3.0...v0.4.0) --- updated-dependencies: - dependency-name: github.com/libp2p/go-libp2p-http dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/libp2p/go-libp2p-gorpc from 0.4.0 to 0.5.0 Bumps [github.com/libp2p/go-libp2p-gorpc](https://github.com/libp2p/go-libp2p-gorpc) from 0.4.0 to 0.5.0. - [Release notes](https://github.com/libp2p/go-libp2p-gorpc/releases) - [Commits](https://github.com/libp2p/go-libp2p-gorpc/compare/v0.4.0...v0.5.0) --- updated-dependencies: - dependency-name: github.com/libp2p/go-libp2p-gorpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump contrib.go.opencensus.io/exporter/prometheus Bumps [contrib.go.opencensus.io/exporter/prometheus](https://github.com/census-ecosystem/opencensus-go-exporter-prometheus) from 0.4.1 to 0.4.2. - [Release notes](https://github.com/census-ecosystem/opencensus-go-exporter-prometheus/releases) - [Commits](https://github.com/census-ecosystem/opencensus-go-exporter-prometheus/compare/v0.4.1...v0.4.2) --- updated-dependencies: - dependency-name: contrib.go.opencensus.io/exporter/prometheus dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/libp2p/go-libp2p-raft from 0.1.8 to 0.2.0 Bumps [github.com/libp2p/go-libp2p-raft](https://github.com/libp2p/go-libp2p-raft) from 0.1.8 to 0.2.0. - [Release notes](https://github.com/libp2p/go-libp2p-raft/releases) - [Commits](https://github.com/libp2p/go-libp2p-raft/compare/v0.1.8...v0.2.0) --- updated-dependencies: - dependency-name: github.com/libp2p/go-libp2p-raft dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * build(deps): bump github.com/urfave/cli from 1.22.9 to 1.22.10 Bumps [github.com/urfave/cli](https://github.com/urfave/cli) from 1.22.9 to 1.22.10. - [Release notes](https://github.com/urfave/cli/releases) - [Changelog](https://github.com/urfave/cli/blob/main/docs/CHANGELOG.md) - [Commits](https://github.com/urfave/cli/compare/v1.22.9...v1.22.10) --- updated-dependencies: - dependency-name: github.com/urfave/cli dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * Fix checker/linter/staticcheck warnings Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
284 lines
6.5 KiB
Go
284 lines
6.5 KiB
Go
package api
|
|
|
|
import (
|
|
"bytes"
|
|
"net/url"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
peer "github.com/libp2p/go-libp2p/core/peer"
|
|
multiaddr "github.com/multiformats/go-multiaddr"
|
|
|
|
"github.com/ugorji/go/codec"
|
|
)
|
|
|
|
func TestTrackerFromString(t *testing.T) {
|
|
testcases := []string{"cluster_error", "pin_error", "unpin_error", "pinned", "pinning", "unpinning", "unpinned", "remote"}
|
|
for i, tc := range testcases {
|
|
if TrackerStatusFromString(tc).String() != TrackerStatus(1<<uint(i+1)).String() {
|
|
t.Errorf("%s does not match TrackerStatus %d", tc, i)
|
|
}
|
|
}
|
|
|
|
if TrackerStatusFromString("") != TrackerStatusUndefined ||
|
|
TrackerStatusFromString("xyz") != TrackerStatusUndefined {
|
|
t.Error("expected tracker status undefined for bad strings")
|
|
}
|
|
}
|
|
|
|
func TestIPFSPinStatusFromString(t *testing.T) {
|
|
testcases := []string{"direct", "recursive", "indirect"}
|
|
for i, tc := range testcases {
|
|
if IPFSPinStatusFromString(tc) != IPFSPinStatus(i+2) {
|
|
t.Errorf("%s does not match IPFSPinStatus %d", tc, i+2)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkIPFSPinStatusFromString(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
IPFSPinStatusFromString("indirect")
|
|
}
|
|
}
|
|
|
|
func TestMetric(t *testing.T) {
|
|
m := Metric{
|
|
Name: "hello",
|
|
Value: "abc",
|
|
}
|
|
|
|
if !m.Expired() {
|
|
t.Error("metric should be expired")
|
|
}
|
|
|
|
m.SetTTL(1 * time.Second)
|
|
if m.Expired() {
|
|
t.Error("metric should not be expired")
|
|
}
|
|
|
|
// let it expire
|
|
time.Sleep(1500 * time.Millisecond)
|
|
|
|
if !m.Expired() {
|
|
t.Error("metric should be expired")
|
|
}
|
|
|
|
m.SetTTL(30 * time.Second)
|
|
m.Valid = true
|
|
|
|
if m.Discard() {
|
|
t.Error("metric should be valid")
|
|
}
|
|
|
|
m.Valid = false
|
|
if !m.Discard() {
|
|
t.Error("metric should be invalid")
|
|
}
|
|
|
|
ttl := m.GetTTL()
|
|
if ttl > 30*time.Second || ttl < 29*time.Second {
|
|
t.Error("looks like a bad ttl")
|
|
}
|
|
}
|
|
|
|
func TestConvertPinType(t *testing.T) {
|
|
for _, t1 := range []PinType{BadType, ShardType} {
|
|
i := convertPinType(t1)
|
|
t2 := PinType(1 << uint64(i))
|
|
if t2 != t1 {
|
|
t.Error("bad conversion")
|
|
}
|
|
}
|
|
}
|
|
|
|
func checkDupTags(t *testing.T, name string, typ reflect.Type, tags map[string]struct{}) {
|
|
if tags == nil {
|
|
tags = make(map[string]struct{})
|
|
}
|
|
for i := 0; i < typ.NumField(); i++ {
|
|
f := typ.Field(i)
|
|
|
|
if f.Type.Kind() == reflect.Struct && f.Anonymous {
|
|
checkDupTags(t, name, f.Type, tags)
|
|
continue
|
|
}
|
|
|
|
tag := f.Tag.Get(name)
|
|
if tag == "" {
|
|
continue
|
|
}
|
|
val := strings.Split(tag, ",")[0]
|
|
|
|
t.Logf("%s: '%s:%s'", f.Name, name, val)
|
|
_, ok := tags[val]
|
|
if ok {
|
|
t.Errorf("%s: tag %s already used", f.Name, val)
|
|
}
|
|
tags[val] = struct{}{}
|
|
}
|
|
}
|
|
|
|
// TestDupTags checks that we are not re-using the same codec tag for
|
|
// different fields in the types objects.
|
|
func TestDupTags(t *testing.T) {
|
|
typ := reflect.TypeOf(Pin{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(ID{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(GlobalPinInfo{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(PinInfo{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(ConnectGraph{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(ID{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(NodeWithMeta{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(Metric{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(Error{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(IPFSRepoStat{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
|
|
typ = reflect.TypeOf(AddedOutput{})
|
|
checkDupTags(t, "codec", typ, nil)
|
|
}
|
|
|
|
func TestPinOptionsQuery(t *testing.T) {
|
|
testcases := []*PinOptions{
|
|
{
|
|
ReplicationFactorMax: 3,
|
|
ReplicationFactorMin: 2,
|
|
Name: "abc",
|
|
ShardSize: 33,
|
|
UserAllocations: StringsToPeers([]string{
|
|
"QmXZrtE5jQwXNqCJMfHUTQkvhQ4ZAnqMnmzFMJfLewuabc",
|
|
"QmUZ13osndQ5uL4tPWHXe3iBgBgq9gfewcBMSCAuMBsDJ6",
|
|
}),
|
|
ExpireAt: time.Now().Add(12 * time.Hour),
|
|
Metadata: map[string]string{
|
|
"hello": "bye",
|
|
"hello2": "bye2",
|
|
},
|
|
Origins: []Multiaddr{
|
|
NewMultiaddrWithValue(multiaddr.StringCast("/ip4/1.2.3.4/tcp/1234/p2p/12D3KooWKewdAMAU3WjYHm8qkAJc5eW6KHbHWNigWraXXtE1UCng")),
|
|
NewMultiaddrWithValue(multiaddr.StringCast("/ip4/2.3.3.4/tcp/1234/p2p/12D3KooWF6BgwX966ge5AVFs9Gd2wVTBmypxZVvaBR12eYnUmXkR")),
|
|
},
|
|
},
|
|
{
|
|
ReplicationFactorMax: -1,
|
|
ReplicationFactorMin: 0,
|
|
Name: "",
|
|
ShardSize: 0,
|
|
UserAllocations: []peer.ID{},
|
|
Metadata: nil,
|
|
},
|
|
{
|
|
ReplicationFactorMax: -1,
|
|
ReplicationFactorMin: 0,
|
|
Name: "",
|
|
ShardSize: 0,
|
|
UserAllocations: nil,
|
|
Metadata: map[string]string{
|
|
"": "bye",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testcases {
|
|
queryStr, err := tc.ToQuery()
|
|
if err != nil {
|
|
t.Fatal("error converting to query", err)
|
|
}
|
|
q, err := url.ParseQuery(queryStr)
|
|
if err != nil {
|
|
t.Error("error parsing query", err)
|
|
}
|
|
po2 := PinOptions{}
|
|
err = po2.FromQuery(q)
|
|
if err != nil {
|
|
t.Fatal("error parsing options", err)
|
|
}
|
|
if !tc.Equals(po2) {
|
|
t.Error("expected equal PinOptions")
|
|
t.Error(queryStr)
|
|
t.Errorf("%+v\n", tc)
|
|
t.Errorf("%+v\n", po2)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestIDCodec(t *testing.T) {
|
|
TestPeerID1, _ := peer.Decode("QmXZrtE5jQwXNqCJMfHUTQkvhQ4ZAnqMnmzFMJfLewuabc")
|
|
TestPeerID2, _ := peer.Decode("QmUZ13osndQ5uL4tPWHXe3iBgBgq9gfewcBMSCAuMBsDJ6")
|
|
TestPeerID3, _ := peer.Decode("QmPGDFvBkgWhvzEK9qaTWrWurSwqXNmhnK3hgELPdZZNPa")
|
|
addr, _ := NewMultiaddr("/ip4/1.2.3.4")
|
|
id := &ID{
|
|
ID: TestPeerID1,
|
|
Addresses: []Multiaddr{addr},
|
|
ClusterPeers: []peer.ID{TestPeerID2},
|
|
ClusterPeersAddresses: []Multiaddr{addr},
|
|
Version: "2",
|
|
Commit: "",
|
|
RPCProtocolVersion: "abc",
|
|
Error: "",
|
|
IPFS: IPFSID{
|
|
ID: TestPeerID3,
|
|
Addresses: []Multiaddr{addr},
|
|
Error: "",
|
|
},
|
|
Peername: "hi",
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
enc := codec.NewEncoder(&buf, &codec.MsgpackHandle{})
|
|
err := enc.Encode(id)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var buf2 = bytes.NewBuffer(buf.Bytes())
|
|
dec := codec.NewDecoder(buf2, &codec.MsgpackHandle{})
|
|
|
|
var id2 ID
|
|
|
|
err = dec.Decode(&id2)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestPinCodec(t *testing.T) {
|
|
ci, _ := DecodeCid("QmXZrtE5jQwXNqCJMfHUTQkvhQ4ZAnqMnmzFMJfLewuabc")
|
|
pin := PinCid(ci)
|
|
var buf bytes.Buffer
|
|
enc := codec.NewEncoder(&buf, &codec.MsgpackHandle{})
|
|
err := enc.Encode(pin)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var buf2 = bytes.NewBuffer(buf.Bytes())
|
|
dec := codec.NewDecoder(buf2, &codec.MsgpackHandle{})
|
|
|
|
var pin2 Pin
|
|
|
|
err = dec.Decode(&pin2)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|