mirror of
https://github.com/gortc/stun.git
synced 2025-09-26 20:41:36 +08:00
115 lines
2.2 KiB
Go
115 lines
2.2 KiB
Go
package stun
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func BenchmarkBuildOverhead(b *testing.B) {
|
|
var (
|
|
t = BindingRequest
|
|
username = NewUsername("username")
|
|
nonce = NewNonce("nonce")
|
|
realm = NewRealm("example.org")
|
|
)
|
|
b.Run("Build", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
m := new(Message)
|
|
for i := 0; i < b.N; i++ {
|
|
m.Build(&t, &username, &nonce, &realm, &Fingerprint)
|
|
}
|
|
})
|
|
b.Run("BuildNonPointer", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
m := new(Message)
|
|
for i := 0; i < b.N; i++ {
|
|
m.Build(t, username, nonce, realm, Fingerprint)
|
|
}
|
|
})
|
|
b.Run("Raw", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
m := new(Message)
|
|
for i := 0; i < b.N; i++ {
|
|
m.Reset()
|
|
m.WriteHeader()
|
|
m.SetType(t)
|
|
username.AddTo(m)
|
|
nonce.AddTo(m)
|
|
realm.AddTo(m)
|
|
Fingerprint.AddTo(m)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestMessage_Apply(t *testing.T) {
|
|
var (
|
|
integrity = NewShortTermIntegrity("password")
|
|
decoded = new(Message)
|
|
)
|
|
m, err := Build(BindingRequest, TransactionID,
|
|
NewUsername("username"),
|
|
NewNonce("nonce"),
|
|
NewRealm("example.org"),
|
|
integrity,
|
|
Fingerprint,
|
|
)
|
|
if err != nil {
|
|
t.Fatal("failed to build:", err)
|
|
}
|
|
if m.Check(Fingerprint, integrity); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := decoded.Write(m.Raw); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !decoded.Equal(m) {
|
|
t.Error("not equal")
|
|
}
|
|
if err := integrity.Check(decoded); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
type errReturner struct {
|
|
Err error
|
|
}
|
|
|
|
func (e errReturner) AddTo(m *Message) error {
|
|
return e.Err
|
|
}
|
|
|
|
func (e errReturner) Check(m *Message) error {
|
|
return e.Err
|
|
}
|
|
|
|
func (e errReturner) GetFrom(m *Message) error {
|
|
return e.Err
|
|
}
|
|
|
|
func TestHelpersErrorHandling(t *testing.T) {
|
|
m := New()
|
|
e := errReturner{Err: errors.New("tError")}
|
|
if err := m.Build(e); err != e.Err {
|
|
t.Error(err, "!=", e.Err)
|
|
}
|
|
if err := m.Check(e); err != e.Err {
|
|
t.Error(err, "!=", e.Err)
|
|
}
|
|
if err := m.Parse(e); err != e.Err {
|
|
t.Error(err, "!=", e.Err)
|
|
}
|
|
t.Run("MustBuild", func(t *testing.T) {
|
|
t.Run("Positive", func(t *testing.T) {
|
|
MustBuild(NewTransactionIDSetter(transactionID{}))
|
|
})
|
|
defer func() {
|
|
if p := recover(); p != e.Err {
|
|
t.Errorf("%s != %s",
|
|
p, e.Err,
|
|
)
|
|
}
|
|
}()
|
|
MustBuild(e)
|
|
})
|
|
}
|