61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
package onions
|
|
|
|
import (
|
|
"math/rand"
|
|
"net"
|
|
"net/netip"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/indra-labs/indra/pkg/crypto/nonce"
|
|
"github.com/indra-labs/indra/pkg/engine/coding"
|
|
)
|
|
|
|
func TestOnionSkins_Forward(t *testing.T) {
|
|
ipSizes := []int{net.IPv4len, net.IPv6len}
|
|
for i := range ipSizes {
|
|
n := nonce.New()
|
|
ip := net.IP(n[:ipSizes[i]])
|
|
var adr netip.Addr
|
|
if ipSizes[i] == net.IPv4len {
|
|
ip = ip.To4()
|
|
}
|
|
if ipSizes[i] == net.IPv6len {
|
|
ip = ip.To16()
|
|
}
|
|
var ok bool
|
|
if adr, ok = netip.AddrFromSlice(ip); !ok {
|
|
t.Error("unable to get netip.Addr")
|
|
t.FailNow()
|
|
}
|
|
port := uint16(rand.Uint32())
|
|
ap := netip.AddrPortFrom(adr, port)
|
|
on := Skins{}.
|
|
Forward(&ap).
|
|
Assemble()
|
|
s := Encode(on)
|
|
s.SetCursor(0)
|
|
var onr coding.Codec
|
|
if onr = Recognise(s); onr == nil {
|
|
t.Error("did not unwrap")
|
|
t.FailNow()
|
|
}
|
|
if e := onr.Decode(s); fails(e) {
|
|
t.Error("did not decode")
|
|
t.FailNow()
|
|
|
|
}
|
|
var cf *Forward
|
|
if cf, ok = onr.(*Forward); !ok {
|
|
t.Error("did not unwrap expected type expected *Reverse got",
|
|
reflect.TypeOf(onr))
|
|
t.FailNow()
|
|
}
|
|
if cf.AddrPort.String() != ap.String() {
|
|
log.I.S(cf.AddrPort, ap)
|
|
t.Error("reverse AddrPort did not unwrap correctly")
|
|
t.FailNow()
|
|
}
|
|
}
|
|
}
|