Files
go-i2p/lib/common/lease_set_test.go

204 lines
4.2 KiB
Go
Raw Normal View History

package common
2016-06-16 22:45:38 -07:00
import (
2016-07-04 14:42:02 -07:00
"bytes"
2016-07-03 20:26:20 -07:00
"github.com/stretchr/testify/assert"
"testing"
2016-06-16 22:45:38 -07:00
)
2016-07-03 20:26:20 -07:00
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 {
2016-07-04 14:42:02 -07:00
pk := make([]byte, 256)
for i := range pk {
pk[i] = 0x01
}
return pk
2016-07-03 20:26:20 -07:00
}
func buildSigningKey() []byte {
2016-07-04 14:42:02 -07:00
sk := make([]byte, 128)
for i := range sk {
sk[i] = 0x02
}
return sk
2016-07-03 20:26:20 -07:00
}
func buildLease(n int) []byte {
2016-07-05 21:35:24 -07:00
data := make([]byte, 0)
for i := 0; i < n; i++ {
lease := make([]byte, LEASE_SIZE)
2016-07-17 13:24:32 -07:00
for p := range lease {
lease[p] = byte(i)
2016-07-05 21:35:24 -07:00
}
2016-07-17 13:24:32 -07:00
for q := LEASE_SIZE - 9; q < LEASE_SIZE-1; q++ {
lease[q] = 0x00
}
lease[LEASE_SIZE-1] = byte(i + 10)
2016-07-05 21:35:24 -07:00
data = append(data, lease...)
}
return data
2016-07-03 20:26:20 -07:00
}
2016-07-05 21:35:24 -07:00
func buildSignature(size int) []byte {
sig := make([]byte, size)
for i := range sig {
sig[i] = 0x08
}
return sig
2016-07-03 20:26:20 -07:00
}
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)...)
2016-07-05 21:35:24 -07:00
lease_set_data = append(lease_set_data, buildSignature(64)...)
2016-07-03 20:26:20 -07:00
return LeaseSet(lease_set_data)
}
2016-07-04 14:27:17 -07:00
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)
}
2016-07-03 20:26:20 -07:00
2016-07-04 14:42:02 -07:00
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)
2016-07-03 20:26:20 -07:00
2016-07-04 14:42:02 -07:00
lease_set := buildFullLeaseSet(1)
sk, err := lease_set.SigningKey()
if assert.Nil(err) {
assert.Equal(128, sk.Len())
}
}
2016-07-03 20:26:20 -07:00
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)
}
}
2016-07-03 20:57:36 -07:00
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)
}
2016-07-05 21:35:24 -07:00
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)
2016-07-17 13:24:32 -07:00
for p := range lease {
lease[p] = byte(i)
}
for q := LEASE_SIZE - 9; q < LEASE_SIZE-1; q++ {
lease[q] = 0x00
2016-07-05 21:35:24 -07:00
}
2016-07-17 13:24:32 -07:00
lease[LEASE_SIZE-1] = byte(i + 10)
2016-07-05 21:35:24 -07:00
assert.Equal(
0,
bytes.Compare(
lease,
leases[i][:],
),
)
}
}
}
}
func TestSignatureIsCorrect(t *testing.T) {
assert := assert.New(t)
2016-07-03 20:26:20 -07:00
2016-07-05 21:35:24 -07:00
lease_set := buildFullLeaseSet(1)
sig, err := lease_set.Signature()
if assert.Nil(err) {
assert.Equal(
0,
bytes.Compare(
buildSignature(64),
sig,
),
)
}
}
2016-07-03 20:26:20 -07:00
2016-07-17 13:24:32 -07:00
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,
)
}