| /* | |
| * Copyright 2018 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| #import <Foundation/Foundation.h> | |
| #import <XCTest/XCTest.h> | |
| #include <vector> | |
| #include "rtc_base/gunit.h" | |
| #import "api/peerconnection/RTCConfiguration+Private.h" | |
| #import "api/peerconnection/RTCConfiguration.h" | |
| #import "api/peerconnection/RTCIceServer.h" | |
| #import "api/peerconnection/RTCMediaConstraints.h" | |
| #import "api/peerconnection/RTCPeerConnection.h" | |
| #import "api/peerconnection/RTCPeerConnectionFactory.h" | |
| #import "helpers/NSString+StdString.h" | |
| @interface RTCCertificateTest : XCTestCase | |
| @end | |
| @implementation RTCCertificateTest | |
| - (void)testCertificateIsUsedInConfig { | |
| RTC_OBJC_TYPE(RTCConfiguration) *originalConfig = | |
| [[RTC_OBJC_TYPE(RTCConfiguration) alloc] init]; | |
| NSArray *urlStrings = @[ @"stun:stun1.example.net" ]; | |
| RTC_OBJC_TYPE(RTCIceServer) *server = | |
| [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithURLStrings:urlStrings]; | |
| originalConfig.iceServers = @[ server ]; | |
| // Generate a new certificate. | |
| RTC_OBJC_TYPE(RTCCertificate) *originalCertificate = | |
| [RTC_OBJC_TYPE(RTCCertificate) generateCertificateWithParams:@{ | |
| @"expires" : @100000, | |
| @"name" : @"RSASSA-PKCS1-v1_5" | |
| }]; | |
| // Store certificate in configuration. | |
| originalConfig.certificate = originalCertificate; | |
| RTC_OBJC_TYPE(RTCMediaConstraints) *contraints = | |
| [[RTC_OBJC_TYPE(RTCMediaConstraints) alloc] | |
| initWithMandatoryConstraints:@{} | |
| optionalConstraints:nil]; | |
| RTC_OBJC_TYPE(RTCPeerConnectionFactory) *factory = | |
| [[RTC_OBJC_TYPE(RTCPeerConnectionFactory) alloc] init]; | |
| // Create PeerConnection with this certificate. | |
| RTC_OBJC_TYPE(RTCPeerConnection) *peerConnection = | |
| [factory peerConnectionWithConfiguration:originalConfig | |
| constraints:contraints | |
| delegate:nil]; | |
| // Retrieve certificate from the configuration. | |
| RTC_OBJC_TYPE(RTCConfiguration) *retrievedConfig = | |
| peerConnection.configuration; | |
| // Extract PEM strings from original certificate. | |
| std::string originalPrivateKeyField = | |
| [[originalCertificate private_key] UTF8String]; | |
| std::string originalCertificateField = | |
| [[originalCertificate certificate] UTF8String]; | |
| // Extract PEM strings from certificate retrieved from configuration. | |
| RTC_OBJC_TYPE(RTCCertificate) *retrievedCertificate = | |
| retrievedConfig.certificate; | |
| std::string retrievedPrivateKeyField = | |
| [[retrievedCertificate private_key] UTF8String]; | |
| std::string retrievedCertificateField = | |
| [[retrievedCertificate certificate] UTF8String]; | |
| // Check that the original certificate and retrieved certificate match. | |
| EXPECT_EQ(originalPrivateKeyField, retrievedPrivateKeyField); | |
| EXPECT_EQ(retrievedCertificateField, retrievedCertificateField); | |
| } | |
| @end |