github.com/weave-lab/sipparser@v0.0.0-20180914193222-6e225e4cbd1f/parser_test.go (about)

     1  package sipparser
     2  
     3  // Imports from the go standard library
     4  import (
     5  	//"fmt"
     6  	"testing"
     7  )
     8  
     9  func TestHeader(t *testing.T) {
    10  	h := Header{"t", "v"}
    11  	if h.String() != "t: v" {
    12  		t.Errorf("Error with header.String() method.  Unexpected res.")
    13  	}
    14  }
    15  
    16  // makes sure that the body is what is expected
    17  func TestBody(t *testing.T) {
    18  	s := ParseMsg("fake\r\nheader\r\n\r\nbody ...\r\n\r\n")
    19  	if s.Body != "body ...\r\n\r\n" {
    20  		t.Errorf("[TestBody] Error getting the right body from the string.")
    21  	}
    22  }
    23  
    24  // actual msg testing
    25  func TestParseMsg(t *testing.T) {
    26  	m := "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 0.0.0.0:5060;branch=z9hG4bK24477ab511325213INV52e94be64e6687e3;received=0.0.0.0\r\nContact: <sip:10003053258853@0.0.0.0:6060>\r\nTo: <sip:10003053258853@0.0.0.0;user=phone;noa=national>;tag=a94c095b773be1dd6e8d668a785a9c843f6f2cc0\r\nFrom: <sip:8173383772@0.0.0.0;user=phone;noa=national>;tag=52e94be6-co2998-INS002\r\nCall-ID: 111118149-3524331107-398662@barinfo.fooinfous.com\r\nCSeq: 299801 INVITE\r\nAccept: application/sdp, application/dtmf-relay, text/plain\r\nX-Nonsense-Hdr: nonsense\r\nAllow: PRACK, INVITE, BYE, REGISTER, ACK, OPTIONS, CANCEL, SUBSCRIBE, NOTIFY, INFO, REFER, UPDATE\r\nContent-Type: application/sdp\r\nServer: Dialogic-SIP/10.5.3.231 IMGDAL0001 0\r\nSupported: 100rel, path, replaces, timer, tdialog\r\nContent-Length: 239\r\n\r\nv=0\r\no=Dialogic_SDP 1452654 0 IN IP4 0.0.0.0\r\ns=Dialogic-SIP\r\nc=IN IP4 4.71.122.135\r\nt=0 0\r\nm=audio 11676 RTP/AVP 0 101\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:101 telephone-event/8000\r\na=fmtp:101 0-15\r\na=silenceSupp:off - - - -\r\na=ptime:20\r\n\r\n"
    27  	s := ParseMsg(m)
    28  	if s.Error != nil {
    29  		t.Errorf("[TestParseMsg] Error parsing msg. Recevied: " + s.Error.Error())
    30  	}
    31  	if len(s.Body) == 0 {
    32  		t.Errorf("[TestParseMsg] Error parsing msg.  Body should have a length.")
    33  	}
    34  	if len(s.Headers) == 0 {
    35  		t.Errorf("[TestParseMsg] Error parsing msg.  Does not appear to be any headers.")
    36  	}
    37  	if s.Via == nil || len(s.Via) == 0 {
    38  		t.Errorf("[TestParseMsg] Error parsing msg.  Does not appear to be any vias parsed.")
    39  		//fmt.Println("msg:", s.Msg)
    40  		//fmt.Println("body:", s.Body)
    41  		//fmt.Println("via:", s.Via)
    42  		//fmt.Println("crlf:", s.crlf)
    43  	}
    44  	if s.ContentLength != "239" {
    45  		t.Errorf("[TestParseMsg] Error parsing msg.  Content length should be 239.  Received: " + s.ContentLength)
    46  	}
    47  	if len(s.Supported) != 5 {
    48  		t.Errorf("[TestParseMsg] Error parsing msg.  s.Support should have length of 5.")
    49  	}
    50  }
    51  
    52  func BenchmarkParseMsg(b *testing.B) {
    53  	testInviteMsg := "INVITE sip:15554440000@X.X.X.X:5060;user=phone SIP/2.0\r\nVia: SIP/2.0/UDP X.X.X.X:5060;branch=z9hG4bK34133a599ll241207INV21d7d0684e84a2d2\r\nMax-Forwards: 35\r\nContact: <sip:X.X.X.X:5060>\r\nTo: <sip:15554440000@X.X.X.X;user=phone;noa=national>\r\nFrom: \"Unavailable\"<sip:X.X.X.X;user=phone;noa=national>;tag=21d7d068-co2149-FOOI003\r\nCall-ID: 1393184968_47390262@domain.com\r\nCSeq: 214901 INVITE\r\nAllow: INVITE,ACK,CANCEL,BYE,REFER,OPTIONS,NOTIFY,SUBSCRIBE,PRACK,INFO\r\nContent-Type: application/sdp\r\nDate: Thu, 29 Sep 2011 16:54:42 GMT\r\nUser-Agent: FAKE-UA-DATA\r\nP-Asserted-Identity: \"Unavailable\"<sip:Restricted@X.X.X.X:5060>\r\nContent-Length: 322\r\n\r\nv=0\r\no=- 567791720 567791720 IN IP4 X.X.X.X\r\ns=FAKE-DATA\r\nc=IN IP4 X.X.X.X\r\nt=0 0\r\nm=audio 17354 RTP/AVP 0 8 86 18 96\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:86 G726-32/8000\r\na=rtpmap:18 G729/8000\r\na=rtpmap:96 telephone-event/8000\r\na=maxptime:20\r\na=fmtp:18 annexb=yes\r\na=fmtp:96 0-15\r\na=sendrecv\r\n"
    54  	testTryingMsg := "SIP/2.0 100 Giving a try\r\nVia: SIP/2.0/UDP X.X.X.X:5060;branch=z9hG4bK24477ab511bbebdbINV4eed095f4e84a4c4\r\nTo: <sip:15554440000@2.2.2.2;user=phone;noa=national>\r\nFrom: \"Unknown\"<sip:5556661000@X.X.X.X;user=phone;noa=national>;tag=4eed095f-co11196-FOS002\r\nCall-ID: ba317db9-655f-122f-52a3-0015c5ee608e\r\nCSeq: 1119601 INVITE\r\nUser-Agent: FAKE-UA-DATA\r\nContent-Length: 0\r\n\r\n"
    55  	testOptionsMsg := "OPTIONS sip:some_vendor@X.X.X.X:5060;transport=udp SIP/2.0\r\nVia: SIP/2.0/UDP X.X.X.X:5060;rport;branch=z9hG4bK-d447b18336e8e27b7de04bdc143c043c-alias.foo-info.net-1\r\nAllow-Events: message-summary, refer, dialog, line-seize, presence, call-info, as-feature-event\r\nMax-Forwards: 70\r\nCall-ID: A1BF42F3@alias.foo-info.net\r\nFrom: <sip:some_vendor@X.X.X.X:5060>;tag=alias.foo-info.net+1+0+fde1e5dc\r\nCSeq: 177329608 OPTIONS\r\nOrganization:\r\nSupported: 100rel, resource-priority\r\nContent-Length: 0\r\nContact: <sip:some_vendor@X.X.X.X:5060>\r\nTo: <sip:some_vendor@X.X.X.X>\r\n\r\n"
    56  	testSessionProgressMsg := "SIP/2.0 183 Session Progress\r\nVia: SIP/2.0/UDP X.X.X.X:5060;branch=z9hG4bK24477ab51139bd4bINV66a300a74e861f52;received=X.X.X.X\r\nCall-ID: 889323860_112911699@X.X.X.X\r\nFrom: <sip:8885551000@X.X.X.X;user=phone;noa=national>;tag=66a300a7-co3440-FOS002\r\nTo: <sip:5554441000@X.X.X.X;user=phone;noa=national>;tag=a94c095b773be1dd6e8d668a785a9c8415431228\r\nContact: <sip:5554441000@X.X.X.X:6060>\r\nCSeq: 344001 INVITE\r\nAllow: OPTIONS, CANCEL, UPDATE\r\nServer: Dialogic-SIP/2.2.2.2 IMGDAL0002 1\r\nContent-Type: application/sdp\r\nContent-Length: 239\r\n\r\nv=0\r\no=Dialogic_SDP 5877551 0 IN IP4 X.X.X.X\r\ns=Dialogic-SIP\r\nc=IN IP4 X.X.X.X\r\nt=0 0\r\nm=audio 11792 RTP/AVP 0 101\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:101 telephone-event/8000\r\na=fmtp:101 0-15\r\na=silenceSupp:off - - - -\r\na=ptime:20\r\n"
    57  	testAckMsg := "ACK sip:18885551000@X.X.X.X:5060;user=phone SIP/2.0\r\nVia: SIP/2.0/UDP X.X.X.X:5060;branch=z9hG4bK34133a599113fd0c3INV290f15484e861d60\r\nTo: <sip:18885551000@X.X.X.X;user=phone;noa=national>;tag=526fa7f1-co3633-FOS002\r\nFrom: \"FOOBARINFO\"<sip:X.X.X.X;user=phone;noa=national>;tag=290f1548-co3802-FOOI003\r\nCall-ID: 218256626-3526401492-574930@foo.bar.com\r\nCSeq: 380201 ACK\r\nContent-Length: 0\r\n"
    58  	testOKMsg := "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP X.X.X.X:5060;branch=z9hG4bK24477ab5ll45a3c7BYE558eface4e861ebc\r\nTo: \"8885551000\"<sip:8885551000@X.X.X.X:5060>;tag=56e1439e-co6299-FOOI007\r\nFrom: <sip:15554441000@X.X.X.X:5060>;tag=558f0659-co4149-FOS002\r\nCall-ID: 5d1d1cc6753f94863fad610b011c94c9@foo.bar.com\r\nCSeq: 414901 BYE\r\nUser-Agent: FOO-UA-DATA\r\nContent-Length: 0\r\n\r\n"
    59  	testByeMsg := "BYE sip:5554441000@X.X.X.X:5060 SIP/2.0\r\nVia: SIP/2.0/UDP X.X.X.X:5060;branch=z9hG4bK34133a599mm3b558aBYE60e40fcb4e8872ba\r\nMax-Forwards: 35\r\nTo: <sip:5554441000@X.X.X.X;user=phone;noa=national>;tag=747a9240-co11617-FOOI002\r\nFrom: <sip:18884442000@X.X.X.X;user=phone;isup-oli=00;noa=national>;tag=60e40fcb-co3535-FOOI003\r\nCall-ID: CDEA230-32F333@foo.bar.com\r\nCSeq: 353502 BYE\r\nUser-Agent: FAKE-UA-DATA\r\nContent-Length: 0\r\n\r\n"
    60  	testCancelMsg := "CANCEL sip:5554448000@X.X.X.X:5060;user=phone SIP/2.0\r\nVia: SIP/2.0/UDP X.X.X.X:5060;branch=z9hG4bK24477ab5115bcff3INVdf0e3ed4e8875ec\r\nMax-Forwards: 35\r\nTo: <sip:5554448000@X.X.X.X;user=phone;noa=national>\r\nFrom: <sip:18885552000@X.X.X.X;user=phone;noa=national>;tag=df0e3ed-co5470-FOOI002\r\nCall-ID: 50d49946ed0311e0830100151702a864@X.X.X.X\r\nCSeq: 547001 CANCEL\r\nUser-Agent: FAKE-UA-DATA\r\nContent-Length: 0\r\n\r\n"
    61  	for i:=0;i<10000;i++{
    62  	ParseMsg(testInviteMsg)
    63  	ParseMsg(testTryingMsg)
    64  	ParseMsg(testOptionsMsg)
    65  	ParseMsg(testSessionProgressMsg)
    66  	ParseMsg(testAckMsg)
    67  	ParseMsg(testOKMsg)
    68  	ParseMsg(testByeMsg)
    69  	ParseMsg(testCancelMsg)
    70  	}
    71  }
    72  
    73  // testing the GetCallingParty functionality
    74  func TestGetCallingParty(t *testing.T) {
    75  	rpid := "\"UNKNOWN\" <sip:8885551000@0.0.0.0>;party=calling;screen=yes;privacy=off"
    76  	s := &SipMsg{RemotePartyIdVal: rpid}
    77  	err := s.GetCallingParty(CALLING_PARTY_RPID)
    78  	if err != nil {
    79  		t.Errorf("[TestGetCallingParty] Err with GetCallingParty.  rcvd: " + err.Error())
    80  	}
    81  	if s.CallingParty == nil {
    82  		t.Errorf("[TestGetCallingParty] Err calling GetCallingParty.  CallingParty field should not be nil.")
    83  	}
    84  	if s.CallingParty.Name != "UNKNOWN" {
    85  		t.Errorf("[TestGetCallingParty] Err calling GetCallingParty.  Name should be \"UNKNOWN\".")
    86  	}
    87  	if s.CallingParty.Number != "8885551000" {
    88  		t.Errorf("[TestGetCallingParty] Err with GetCallingParty. Number should be \"8885551000\".")
    89  	}
    90  	paid := "<sip:8884441000@0.0.0.0:5060;user=phone>"
    91  	s = &SipMsg{PAssertedIdVal: paid}
    92  	err = s.GetCallingParty(CALLING_PARTY_PAID)
    93  	if err != nil {
    94  		t.Errorf("[TestGetCallingParty] Err with GetCallingParty on paid.  rcvd: " + err.Error())
    95  	}
    96  	if s.CallingParty == nil {
    97  		t.Errorf("[TestGetCallingParty] Err with GetCallingParty on paid.  No CallingPartyInfo.")
    98  	}
    99  	if s.CallingParty.Name != "" {
   100  		t.Errorf("[TestGetCallingParty] Err with GetCallingParty on paid.  Name should be \"\".")
   101  	}
   102  	if s.CallingParty.Number != "8884441000" {
   103  		t.Errorf("[TestGetCallingParty] Err with GetCallingParty on paid.  Number should be \"8884441000\".")
   104  	}
   105  	s = &SipMsg{}
   106  	s.parseFrom("\"5556661000\" <sip:5556661000@0.0.0.0>;tag=ZN21rHN5B7U0K")
   107  	err = s.GetCallingParty("")
   108  	if err != nil {
   109  		t.Errorf("[TestGetCallingParty] Err calling GetCallingParty on default.  rcvd: " + err.Error())
   110  	}
   111  	if s.CallingParty == nil {
   112  		t.Errorf("[TestGetCallingParty] Err calling GetCallingParty on default.  No CallingPartyInfo.")
   113  	}
   114  	if s.CallingParty.Name != "5556661000" {
   115  		t.Errorf("[TestGetCallingParty] Err calling GetCallingParty on default.  Name should be \"5556661000\".")
   116  	}
   117  	if s.CallingParty.Number != "5556661000" {
   118  		t.Errorf("[TestGetCallingParty] Err calling GetCallingParty on default. Number should be \"5556661000\".")
   119  	}
   120  }