Home | History | Annotate | Download | only in objctests
      1 /*
      2  *  Copyright 2015 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #import <Foundation/Foundation.h>
     12 
     13 #include "webrtc/base/gunit.h"
     14 
     15 #import "webrtc/api/objc/RTCSessionDescription.h"
     16 #import "webrtc/api/objc/RTCSessionDescription+Private.h"
     17 #import "webrtc/base/objc/NSString+StdString.h"
     18 
     19 @interface RTCSessionDescriptionTest : NSObject
     20 - (void)testSessionDescriptionConversion;
     21 - (void)testInitFromNativeSessionDescription;
     22 @end
     23 
     24 @implementation RTCSessionDescriptionTest
     25 
     26 /**
     27  * Test conversion of an Objective-C RTCSessionDescription to a native
     28  * SessionDescriptionInterface (based on the types and SDP strings being equal).
     29  */
     30 - (void)testSessionDescriptionConversion {
     31   RTCSessionDescription *description =
     32       [[RTCSessionDescription alloc] initWithType:RTCSdpTypeAnswer
     33                                               sdp:[self sdp]];
     34 
     35   webrtc::SessionDescriptionInterface *nativeDescription =
     36       description.nativeDescription;
     37 
     38   EXPECT_EQ(RTCSdpTypeAnswer,
     39       [RTCSessionDescription typeForString:nativeDescription->type()]);
     40 
     41   std::string sdp;
     42   nativeDescription->ToString(&sdp);
     43   EXPECT_EQ([self sdp].stdString, sdp);
     44 }
     45 
     46 - (void)testInitFromNativeSessionDescription {
     47   webrtc::SessionDescriptionInterface *nativeDescription;
     48 
     49   nativeDescription = webrtc::CreateSessionDescription(
     50       webrtc::SessionDescriptionInterface::kAnswer,
     51       [self sdp].stdString,
     52       nullptr);
     53 
     54   RTCSessionDescription *description =
     55       [[RTCSessionDescription alloc] initWithNativeDescription:
     56       nativeDescription];
     57   EXPECT_EQ(webrtc::SessionDescriptionInterface::kAnswer,
     58       [RTCSessionDescription stringForType:description.type]);
     59   EXPECT_TRUE([[self sdp] isEqualToString:description.sdp]);
     60 }
     61 
     62 - (NSString *)sdp {
     63     return @"v=0\r\n"
     64            "o=- 5319989746393411314 2 IN IP4 127.0.0.1\r\n"
     65            "s=-\r\n"
     66            "t=0 0\r\n"
     67            "a=group:BUNDLE audio video\r\n"
     68            "a=msid-semantic: WMS ARDAMS\r\n"
     69            "m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 0 8 126\r\n"
     70            "c=IN IP4 0.0.0.0\r\n"
     71            "a=rtcp:9 IN IP4 0.0.0.0\r\n"
     72            "a=ice-ufrag:f3o+0HG7l9nwIWFY\r\n"
     73            "a=ice-pwd:VDctmJNCptR2TB7+meDpw7w5\r\n"
     74            "a=fingerprint:sha-256 A9:D5:8D:A8:69:22:39:60:92:AD:94:1A:22:2D:5E:"
     75            "A5:4A:A9:18:C2:35:5D:46:5E:59:BD:1C:AF:38:9F:E6:E1\r\n"
     76            "a=setup:active\r\n"
     77            "a=mid:audio\r\n"
     78            "a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n"
     79            "a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/"
     80            "abs-send-time\r\n"
     81            "a=sendrecv\r\n"
     82            "a=rtcp-mux\r\n"
     83            "a=rtpmap:111 opus/48000/2\r\n"
     84            "a=fmtp:111 minptime=10; useinbandfec=1\r\n"
     85            "a=rtpmap:103 ISAC/16000\r\n"
     86            "a=rtpmap:9 G722/8000\r\n"
     87            "a=rtpmap:0 PCMU/8000\r\n"
     88            "a=rtpmap:8 PCMA/8000\r\n"
     89            "a=rtpmap:126 telephone-event/8000\r\n"
     90            "a=maxptime:60\r\n"
     91            "a=ssrc:1504474588 cname:V+FdIC5AJpxLhdYQ\r\n"
     92            "a=ssrc:1504474588 msid:ARDAMS ARDAMSa0\r\n"
     93            "a=ssrc:1504474588 mslabel:ARDAMS\r\n"
     94            "a=ssrc:1504474588 label:ARDAMSa0\r\n"
     95            "m=video 9 UDP/TLS/RTP/SAVPF 100 116 117 96\r\n"
     96            "c=IN IP4 0.0.0.0\r\n"
     97            "a=rtcp:9 IN IP4 0.0.0.0\r\n"
     98            "a=ice-ufrag:f3o+0HG7l9nwIWFY\r\n"
     99            "a=ice-pwd:VDctmJNCptR2TB7+meDpw7w5\r\n"
    100            "a=fingerprint:sha-256 A9:D5:8D:A8:69:22:39:60:92:AD:94:1A:22:2D:5E:"
    101            "A5:4A:A9:18:C2:35:5D:46:5E:59:BD:1C:AF:38:9F:E6:E1\r\n"
    102            "a=setup:active\r\n"
    103            "a=mid:video\r\n"
    104            "a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\n"
    105            "a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/"
    106            "abs-send-time\r\n"
    107            "a=extmap:4 urn:3gpp:video-orientation\r\n"
    108            "a=sendrecv\r\n"
    109            "a=rtcp-mux\r\n"
    110            "a=rtpmap:100 VP8/90000\r\n"
    111            "a=rtcp-fb:100 ccm fir\r\n"
    112            "a=rtcp-fb:100 nack\r\n"
    113            "a=rtcp-fb:100 nack pli\r\n"
    114            "a=rtcp-fb:100 goog-remb\r\n"
    115            "a=rtpmap:116 red/90000\r\n"
    116            "a=rtpmap:117 ulpfec/90000\r\n"
    117            "a=rtpmap:96 rtx/90000\r\n"
    118            "a=fmtp:96 apt=100\r\n"
    119            "a=ssrc-group:FID 498297514 1644357692\r\n"
    120            "a=ssrc:498297514 cname:V+FdIC5AJpxLhdYQ\r\n"
    121            "a=ssrc:498297514 msid:ARDAMS ARDAMSv0\r\n"
    122            "a=ssrc:498297514 mslabel:ARDAMS\r\n"
    123            "a=ssrc:498297514 label:ARDAMSv0\r\n"
    124            "a=ssrc:1644357692 cname:V+FdIC5AJpxLhdYQ\r\n"
    125            "a=ssrc:1644357692 msid:ARDAMS ARDAMSv0\r\n"
    126            "a=ssrc:1644357692 mslabel:ARDAMS\r\n"
    127            "a=ssrc:1644357692 label:ARDAMSv0\r\n";
    128 }
    129 
    130 @end
    131 
    132 TEST(RTCSessionDescriptionTest, SessionDescriptionConversionTest) {
    133   @autoreleasepool {
    134     RTCSessionDescriptionTest *test = [[RTCSessionDescriptionTest alloc] init];
    135     [test testSessionDescriptionConversion];
    136   }
    137 }
    138 
    139 TEST(RTCSessionDescriptionTest, InitFromSessionDescriptionTest) {
    140   @autoreleasepool {
    141     RTCSessionDescriptionTest *test = [[RTCSessionDescriptionTest alloc] init];
    142     [test testInitFromNativeSessionDescription];
    143   }
    144 }
    145