mirror of
https://github.com/pion/stun.git
synced 2025-10-15 12:20:46 +08:00
all: refactor attributes
This commit is contained in:
@@ -10,21 +10,24 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMessage_AddSoftware(t *testing.T) {
|
||||
func TestSoftware_GetFrom(t *testing.T) {
|
||||
m := New()
|
||||
v := "Client v0.0.1"
|
||||
m.AddRaw(AttrSoftware, []byte(v))
|
||||
m.Add(AttrSoftware, []byte(v))
|
||||
m.WriteHeader()
|
||||
|
||||
m2 := &Message{
|
||||
Raw: make([]byte, 0, 256),
|
||||
}
|
||||
software := new(Software)
|
||||
if _, err := m2.ReadFrom(m.reader()); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
vRead := m.GetSoftware()
|
||||
if vRead != v {
|
||||
t.Errorf("Expected %s, got %s.", v, vRead)
|
||||
if err := software.GetFrom(m); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if software.String() != v {
|
||||
t.Errorf("Expected %q, got %q.", v, software)
|
||||
}
|
||||
|
||||
sAttr, ok := m.Attributes.Get(AttrSoftware)
|
||||
@@ -37,29 +40,18 @@ func TestMessage_AddSoftware(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMessage_GetSoftware(t *testing.T) {
|
||||
m := New()
|
||||
v := m.GetSoftware()
|
||||
if v != "" {
|
||||
t.Errorf("%s should be blank.", v)
|
||||
}
|
||||
vByte := m.GetSoftwareBytes()
|
||||
if vByte != nil {
|
||||
t.Errorf("%s should be nil.", vByte)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkMessage_AddXORMappedAddress(b *testing.B) {
|
||||
func BenchmarkXORMappedAddress_AddTo(b *testing.B) {
|
||||
m := New()
|
||||
b.ReportAllocs()
|
||||
ip := net.ParseIP("192.168.1.32")
|
||||
for i := 0; i < b.N; i++ {
|
||||
m.AddXORMappedAddress(ip, 3654)
|
||||
addr := &XORMappedAddress{IP: ip, Port: 3654}
|
||||
addr.AddTo(m)
|
||||
m.Reset()
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkMessage_GetXORMappedAddress(b *testing.B) {
|
||||
func BenchmarkXORMappedAddress_GetFrom(b *testing.B) {
|
||||
m := New()
|
||||
transactionID, err := base64.StdEncoding.DecodeString("jxhBARZwX+rsC6er")
|
||||
if err != nil {
|
||||
@@ -70,10 +62,13 @@ func BenchmarkMessage_GetXORMappedAddress(b *testing.B) {
|
||||
if err != nil {
|
||||
b.Error(err)
|
||||
}
|
||||
m.Add(AttrXORMappedAddress, addrValue)
|
||||
addr := new(XORMappedAddress)
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
m.AddRaw(AttrXORMappedAddress, addrValue)
|
||||
m.GetXORMappedAddress()
|
||||
m.Reset()
|
||||
if err := addr.GetFrom(m); err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,16 +83,16 @@ func TestMessage_GetXORMappedAddress(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
m.AddRaw(AttrXORMappedAddress, addrValue)
|
||||
ip, port, err := m.GetXORMappedAddress()
|
||||
if err != nil {
|
||||
m.Add(AttrXORMappedAddress, addrValue)
|
||||
addr := new(XORMappedAddress)
|
||||
if err = addr.GetFrom(m); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if !ip.Equal(net.ParseIP("213.141.156.236")) {
|
||||
t.Error("bad ip", ip, "!=", "213.141.156.236")
|
||||
if !addr.IP.Equal(net.ParseIP("213.141.156.236")) {
|
||||
t.Error("bad IP", addr.IP, "!=", "213.141.156.236")
|
||||
}
|
||||
if port != 48583 {
|
||||
t.Error("bad port", port, "!=", 48583)
|
||||
if addr.Port != 48583 {
|
||||
t.Error("bad Port", addr.Port, "!=", 48583)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,13 +105,15 @@ func TestMessage_GetXORMappedAddressBad(t *testing.T) {
|
||||
copy(m.TransactionID[:], transactionID)
|
||||
expectedIP := net.ParseIP("213.141.156.236")
|
||||
expectedPort := 21254
|
||||
addr := new(XORMappedAddress)
|
||||
|
||||
_, _, err = m.GetXORMappedAddress()
|
||||
if err == nil {
|
||||
if err = addr.GetFrom(m); err == nil {
|
||||
t.Fatal(err, "should be nil")
|
||||
}
|
||||
|
||||
m.AddXORMappedAddress(expectedIP, expectedPort)
|
||||
addr.IP = expectedIP
|
||||
addr.Port = expectedPort
|
||||
addr.AddTo(m)
|
||||
m.WriteHeader()
|
||||
|
||||
mRes := New()
|
||||
@@ -124,8 +121,7 @@ func TestMessage_GetXORMappedAddressBad(t *testing.T) {
|
||||
if _, err = mRes.ReadFrom(bytes.NewReader(m.Raw)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, _, err = m.GetXORMappedAddress()
|
||||
if err == nil {
|
||||
if err = addr.GetFrom(m); err == nil {
|
||||
t.Fatal(err, "should not be nil")
|
||||
}
|
||||
}
|
||||
@@ -139,22 +135,26 @@ func TestMessage_AddXORMappedAddress(t *testing.T) {
|
||||
copy(m.TransactionID[:], transactionID)
|
||||
expectedIP := net.ParseIP("213.141.156.236")
|
||||
expectedPort := 21254
|
||||
m.AddXORMappedAddress(expectedIP, expectedPort)
|
||||
addr := &XORMappedAddress{
|
||||
IP: net.ParseIP("213.141.156.236"),
|
||||
Port: expectedPort,
|
||||
}
|
||||
if err = addr.AddTo(m); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
m.WriteHeader()
|
||||
|
||||
mRes := New()
|
||||
if _, err = mRes.ReadFrom(m.reader()); err != nil {
|
||||
if _, err = mRes.Write(m.Raw); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ip, port, err := m.GetXORMappedAddress()
|
||||
if err != nil {
|
||||
if err = addr.GetFrom(mRes); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !ip.Equal(expectedIP) {
|
||||
t.Error("bad ip", ip, "!=", expectedIP)
|
||||
if !addr.IP.Equal(expectedIP) {
|
||||
t.Errorf("%s (got) != %s (expected)", addr.IP, expectedIP)
|
||||
}
|
||||
if port != expectedPort {
|
||||
t.Error("bad port", port, "!=", expectedPort)
|
||||
if addr.Port != expectedPort {
|
||||
t.Error("bad Port", addr.Port, "!=", expectedPort)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,30 +167,47 @@ func TestMessage_AddXORMappedAddressV6(t *testing.T) {
|
||||
copy(m.TransactionID[:], transactionID)
|
||||
expectedIP := net.ParseIP("fe80::dc2b:44ff:fe20:6009")
|
||||
expectedPort := 21254
|
||||
m.AddXORMappedAddress(expectedIP, expectedPort)
|
||||
addr := &XORMappedAddress{
|
||||
IP: net.ParseIP("fe80::dc2b:44ff:fe20:6009"),
|
||||
Port: 21254,
|
||||
}
|
||||
addr.AddTo(m)
|
||||
m.WriteHeader()
|
||||
|
||||
mRes := New()
|
||||
if _, err = mRes.ReadFrom(m.reader()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ip, port, err := m.GetXORMappedAddress()
|
||||
if err != nil {
|
||||
gotAddr := new(XORMappedAddress)
|
||||
if err = gotAddr.GetFrom(m); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !ip.Equal(expectedIP) {
|
||||
t.Error("bad ip", ip, "!=", expectedIP)
|
||||
if !gotAddr.IP.Equal(expectedIP) {
|
||||
t.Error("bad IP", gotAddr.IP, "!=", expectedIP)
|
||||
}
|
||||
if port != expectedPort {
|
||||
t.Error("bad port", port, "!=", expectedPort)
|
||||
if gotAddr.Port != expectedPort {
|
||||
t.Error("bad Port", gotAddr.Port, "!=", expectedPort)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkMessage_AddErrorCode(b *testing.B) {
|
||||
func BenchmarkErrorCode_AddTo(b *testing.B) {
|
||||
m := New()
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
m.AddErrorCode(404, "Not found")
|
||||
CodeStaleNonce.AddTo(m)
|
||||
m.Reset()
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkErrorCodeAttribute_AddTo(b *testing.B) {
|
||||
m := New()
|
||||
b.ReportAllocs()
|
||||
a := &ErrorCodeAttribute{
|
||||
Code: 404,
|
||||
Reason: []byte("not found!"),
|
||||
}
|
||||
for i := 0; i < b.N; i++ {
|
||||
a.AddTo(m)
|
||||
m.Reset()
|
||||
}
|
||||
}
|
||||
@@ -202,51 +219,27 @@ func TestMessage_AddErrorCode(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
copy(m.TransactionID[:], transactionID)
|
||||
expectedCode := 404
|
||||
expectedReason := "Not found"
|
||||
m.AddErrorCode(expectedCode, expectedReason)
|
||||
expectedCode := ErrorCode(428)
|
||||
expectedReason := "Stale Nonce"
|
||||
CodeStaleNonce.AddTo(m)
|
||||
m.WriteHeader()
|
||||
|
||||
mRes := New()
|
||||
if _, err = mRes.ReadFrom(m.reader()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
code, reason, err := mRes.GetErrorCode()
|
||||
errCodeAttr := new(ErrorCodeAttribute)
|
||||
if err = errCodeAttr.GetFrom(mRes); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
code := errCodeAttr.Code
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if code != expectedCode {
|
||||
t.Error("bad code", code)
|
||||
}
|
||||
if string(reason) != expectedReason {
|
||||
t.Error("bad reason", string(reason))
|
||||
}
|
||||
}
|
||||
|
||||
func TestMessage_AddErrorCodeDefault(t *testing.T) {
|
||||
m := New()
|
||||
transactionID, err := base64.StdEncoding.DecodeString("jxhBARZwX+rsC6er")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
copy(m.TransactionID[:], transactionID)
|
||||
expectedCode := 500
|
||||
expectedReason := "Server Error"
|
||||
m.AddErrorCodeDefault(expectedCode)
|
||||
m.WriteHeader()
|
||||
|
||||
mRes := New()
|
||||
if _, err = mRes.ReadFrom(m.reader()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
code, reason, err := mRes.GetErrorCode()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if code != expectedCode {
|
||||
t.Error("bad code", code)
|
||||
}
|
||||
if string(reason) != expectedReason {
|
||||
t.Error("bad reason", string(reason))
|
||||
if string(errCodeAttr.Reason) != expectedReason {
|
||||
t.Error("bad reason", string(errCodeAttr.Reason))
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user