mirror of
https://github.com/go-i2p/go-i2p.git
synced 2025-07-03 21:05:06 -04:00
204 lines
4.2 KiB
Go
204 lines
4.2 KiB
Go
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func buildDestination() RouterIdentity {
|
|
router_ident_data := make([]byte, 128+256)
|
|
router_ident_data = append(router_ident_data, []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00}...)
|
|
return RouterIdentity(router_ident_data)
|
|
}
|
|
|
|
func buildPublicKey() []byte {
|
|
pk := make([]byte, 256)
|
|
for i := range pk {
|
|
pk[i] = 0x01
|
|
}
|
|
return pk
|
|
}
|
|
|
|
func buildSigningKey() []byte {
|
|
sk := make([]byte, 128)
|
|
for i := range sk {
|
|
sk[i] = 0x02
|
|
}
|
|
return sk
|
|
}
|
|
|
|
func buildLease(n int) []byte {
|
|
data := make([]byte, 0)
|
|
for i := 0; i < n; i++ {
|
|
lease := make([]byte, LEASE_SIZE)
|
|
for p := range lease {
|
|
lease[p] = byte(i)
|
|
}
|
|
for q := LEASE_SIZE - 9; q < LEASE_SIZE-1; q++ {
|
|
lease[q] = 0x00
|
|
}
|
|
lease[LEASE_SIZE-1] = byte(i + 10)
|
|
data = append(data, lease...)
|
|
}
|
|
return data
|
|
}
|
|
|
|
func buildSignature(size int) []byte {
|
|
sig := make([]byte, size)
|
|
for i := range sig {
|
|
sig[i] = 0x08
|
|
}
|
|
return sig
|
|
}
|
|
|
|
func buildFullLeaseSet(n int) LeaseSet {
|
|
lease_set_data := make([]byte, 0)
|
|
lease_set_data = append(lease_set_data, buildDestination()...)
|
|
lease_set_data = append(lease_set_data, buildPublicKey()...)
|
|
lease_set_data = append(lease_set_data, buildSigningKey()...)
|
|
lease_set_data = append(lease_set_data, byte(n))
|
|
lease_set_data = append(lease_set_data, buildLease(n)...)
|
|
lease_set_data = append(lease_set_data, buildSignature(64)...)
|
|
return LeaseSet(lease_set_data)
|
|
}
|
|
|
|
func TestDestinationIsCorrect(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(1)
|
|
dest, err := lease_set.Destination()
|
|
assert.Nil(err)
|
|
dest_cert, err := dest.Certificate()
|
|
assert.Nil(err)
|
|
cert_type, err := dest_cert.Type()
|
|
assert.Nil(err)
|
|
assert.Equal(CERT_KEY, cert_type)
|
|
}
|
|
|
|
func TestPublicKeyIsCorrect(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(1)
|
|
pk, err := lease_set.PublicKey()
|
|
if assert.Nil(err) {
|
|
assert.Equal(
|
|
0,
|
|
bytes.Compare(
|
|
[]byte(buildPublicKey()),
|
|
pk[:],
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestSigningKeyIsCorrect(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(1)
|
|
sk, err := lease_set.SigningKey()
|
|
if assert.Nil(err) {
|
|
assert.Equal(128, sk.Len())
|
|
}
|
|
}
|
|
|
|
func TestLeaseCountCorrect(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(1)
|
|
count, err := lease_set.LeaseCount()
|
|
if assert.Nil(err) {
|
|
assert.Equal(1, count)
|
|
}
|
|
}
|
|
|
|
func TestLeaseCountCorrectWithMultiple(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(3)
|
|
count, err := lease_set.LeaseCount()
|
|
if assert.Nil(err) {
|
|
assert.Equal(3, count)
|
|
}
|
|
}
|
|
|
|
func TestLeaseCountErrorWithTooMany(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(17)
|
|
count, err := lease_set.LeaseCount()
|
|
if assert.NotNil(err) {
|
|
assert.Equal("invalid lease set: more than 16 leases", err.Error())
|
|
}
|
|
assert.Equal(17, count)
|
|
}
|
|
|
|
func TestLeasesHaveCorrectData(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(3)
|
|
count, err := lease_set.LeaseCount()
|
|
if assert.Nil(err) && assert.Equal(3, count) {
|
|
leases, err := lease_set.Leases()
|
|
if assert.Nil(err) {
|
|
for i := 0; i < count; i++ {
|
|
lease := make([]byte, LEASE_SIZE)
|
|
for p := range lease {
|
|
lease[p] = byte(i)
|
|
}
|
|
for q := LEASE_SIZE - 9; q < LEASE_SIZE-1; q++ {
|
|
lease[q] = 0x00
|
|
}
|
|
lease[LEASE_SIZE-1] = byte(i + 10)
|
|
assert.Equal(
|
|
0,
|
|
bytes.Compare(
|
|
lease,
|
|
leases[i][:],
|
|
),
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSignatureIsCorrect(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(1)
|
|
sig, err := lease_set.Signature()
|
|
if assert.Nil(err) {
|
|
assert.Equal(
|
|
0,
|
|
bytes.Compare(
|
|
buildSignature(64),
|
|
sig,
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestNewestExpirationIsCorrect(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(5)
|
|
latest, err := lease_set.NewestExpiration()
|
|
assert.Nil(err)
|
|
assert.Equal(
|
|
Date{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, byte(4 + 10)},
|
|
latest,
|
|
)
|
|
}
|
|
|
|
func TestOldestExpirationIsCorrect(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
lease_set := buildFullLeaseSet(5)
|
|
latest, err := lease_set.OldestExpiration()
|
|
assert.Nil(err)
|
|
assert.Equal(
|
|
Date{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a},
|
|
latest,
|
|
)
|
|
}
|