6f3c8611f4
If we use a chain backend that only understands IP addresses (like Neutrino for example), we need to turn any Onion v2 host addresses into a fake IPv6 representation, otherwise it would be resolved incorrectly. To do this, we use the same fake IPv6 address format that bitcoind and btcd use internally to represent Onion v2 hidden service addresses.
37 lines
945 B
Go
37 lines
945 B
Go
package tor
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
const (
|
|
testOnion = "ld47qlr6h2b7hrrf.onion"
|
|
testFakeIP = "fd87:d87e:eb43:58f9:f82e:3e3e:83f3:c625"
|
|
)
|
|
|
|
// TestOnionHostToFakeIP tests that an onion host address can be converted into
|
|
// a fake tcp6 address successfully.
|
|
func TestOnionHostToFakeIP(t *testing.T) {
|
|
ip, err := OnionHostToFakeIP(testOnion)
|
|
require.NoError(t, err)
|
|
require.Equal(t, testFakeIP, ip.String())
|
|
}
|
|
|
|
// TestFakeIPToOnionHost tests that a fake tcp6 address can be converted back
|
|
// into its original .onion host address successfully.
|
|
func TestFakeIPToOnionHost(t *testing.T) {
|
|
tcpAddr, err := net.ResolveTCPAddr(
|
|
"tcp6", fmt.Sprintf("[%s]:8333", testFakeIP),
|
|
)
|
|
require.NoError(t, err)
|
|
require.True(t, IsOnionFakeIP(tcpAddr))
|
|
|
|
onionHost, err := FakeIPToOnionHost(tcpAddr)
|
|
require.NoError(t, err)
|
|
require.Equal(t, fmt.Sprintf("%s:8333", testOnion), onionHost.String())
|
|
}
|