1// +build !js 2 3package stun 4 5import ( 6 "encoding/base64" 7 "io" 8 "testing" 9) 10 11func BenchmarkErrorCode_AddTo(b *testing.B) { 12 m := New() 13 b.ReportAllocs() 14 for i := 0; i < b.N; i++ { 15 CodeStaleNonce.AddTo(m) 16 m.Reset() 17 } 18} 19 20func BenchmarkErrorCodeAttribute_AddTo(b *testing.B) { 21 m := New() 22 b.ReportAllocs() 23 a := &ErrorCodeAttribute{ 24 Code: 404, 25 Reason: []byte("not found!"), 26 } 27 for i := 0; i < b.N; i++ { 28 a.AddTo(m) 29 m.Reset() 30 } 31} 32 33func BenchmarkErrorCodeAttribute_GetFrom(b *testing.B) { 34 m := New() 35 b.ReportAllocs() 36 a := &ErrorCodeAttribute{ 37 Code: 404, 38 Reason: []byte("not found!"), 39 } 40 a.AddTo(m) 41 for i := 0; i < b.N; i++ { 42 a.GetFrom(m) 43 } 44} 45 46func TestErrorCodeAttribute_GetFrom(t *testing.T) { 47 m := New() 48 m.Add(AttrErrorCode, []byte{1}) 49 c := new(ErrorCodeAttribute) 50 if err := c.GetFrom(m); err != io.ErrUnexpectedEOF { 51 t.Errorf("GetFrom should return <%s>, but got <%s>", 52 io.ErrUnexpectedEOF, err, 53 ) 54 } 55} 56 57func TestMessage_AddErrorCode(t *testing.T) { 58 m := New() 59 transactionID, err := base64.StdEncoding.DecodeString("jxhBARZwX+rsC6er") 60 if err != nil { 61 t.Error(err) 62 } 63 copy(m.TransactionID[:], transactionID) 64 expectedCode := ErrorCode(438) 65 expectedReason := "Stale Nonce" 66 CodeStaleNonce.AddTo(m) 67 m.WriteHeader() 68 69 mRes := New() 70 if _, err = mRes.ReadFrom(m.reader()); err != nil { 71 t.Fatal(err) 72 } 73 errCodeAttr := new(ErrorCodeAttribute) 74 if err = errCodeAttr.GetFrom(mRes); err != nil { 75 t.Error(err) 76 } 77 code := errCodeAttr.Code 78 if err != nil { 79 t.Error(err) 80 } 81 if code != expectedCode { 82 t.Error("bad code", code) 83 } 84 if string(errCodeAttr.Reason) != expectedReason { 85 t.Error("bad reason", string(errCodeAttr.Reason)) 86 } 87} 88 89func TestErrorCode(t *testing.T) { 90 a := &ErrorCodeAttribute{ 91 Code: 404, 92 Reason: []byte("not found!"), 93 } 94 if a.String() != "404: not found!" { 95 t.Error("bad string", a) 96 } 97 m := New() 98 cod := ErrorCode(666) 99 if err := cod.AddTo(m); err != ErrNoDefaultReason { 100 t.Error("should be ErrNoDefaultReason", err) 101 } 102 if err := a.GetFrom(m); err == nil { 103 t.Error("attr should not be in message") 104 } 105 a.Reason = make([]byte, 2048) 106 if err := a.AddTo(m); err == nil { 107 t.Error("should error") 108 } 109} 110