mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-02-21 18:37:26 +08:00
84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
// Package matest provides utilities for testing with multiaddrs.
|
|
package matest
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"github.com/multiformats/go-multiaddr"
|
|
)
|
|
|
|
type TestingT interface {
|
|
Errorf(format string, args ...interface{})
|
|
}
|
|
|
|
type tHelper interface {
|
|
Helper()
|
|
}
|
|
|
|
func AssertEqualMultiaddr(t TestingT, expected, actual multiaddr.Multiaddr) bool {
|
|
if h, ok := t.(tHelper); ok {
|
|
h.Helper()
|
|
}
|
|
if !expected.Equal(actual) {
|
|
t.Errorf("expected %v, got %v", expected, actual)
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func AssertEqualMultiaddrs(t TestingT, expected, actual []multiaddr.Multiaddr) bool {
|
|
if h, ok := t.(tHelper); ok {
|
|
h.Helper()
|
|
}
|
|
if len(expected) != len(actual) {
|
|
t.Errorf("expected %v, got %v", expected, actual)
|
|
return false
|
|
}
|
|
for i, e := range expected {
|
|
if !e.Equal(actual[i]) {
|
|
t.Errorf("expected %v, got %v", expected, actual)
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// AssertMultiaddrsMatch is the same as AssertEqualMultiaddrs, but it ignores the order of the elements.
|
|
func AssertMultiaddrsMatch(t TestingT, expected, actual []multiaddr.Multiaddr) bool {
|
|
if h, ok := t.(tHelper); ok {
|
|
h.Helper()
|
|
}
|
|
e := slices.Clone(expected)
|
|
a := slices.Clone(actual)
|
|
slices.SortFunc(e, func(a, b multiaddr.Multiaddr) int { return a.Compare(b) })
|
|
slices.SortFunc(a, func(a, b multiaddr.Multiaddr) int { return a.Compare(b) })
|
|
return AssertEqualMultiaddrs(t, e, a)
|
|
}
|
|
|
|
func AssertMultiaddrsContain(t TestingT, haystack []multiaddr.Multiaddr, needle multiaddr.Multiaddr) bool {
|
|
if h, ok := t.(tHelper); ok {
|
|
h.Helper()
|
|
}
|
|
for _, h := range haystack {
|
|
if h.Equal(needle) {
|
|
return true
|
|
}
|
|
}
|
|
t.Errorf("expected %v to contain %v", haystack, needle)
|
|
return false
|
|
}
|
|
|
|
type MultiaddrMatcher struct {
|
|
multiaddr.Multiaddr
|
|
}
|
|
|
|
// Implements the Matcher interface for gomock.Matcher
|
|
// Let's us use this struct in gomock tests. Example:
|
|
// Expect(mock.Method(gomock.Any(), multiaddrMatcher).Return(nil)
|
|
func (m MultiaddrMatcher) Matches(x interface{}) bool {
|
|
if m2, ok := x.(multiaddr.Multiaddr); ok {
|
|
return m.Equal(m2)
|
|
}
|
|
return false
|
|
}
|