mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			118 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Swift
		
	
		
		
			
		
	
	
			118 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Swift
		
	
| 
											7 years ago
										 | // | ||
|  | //  Copyright (c) 2018 Open Whisper Systems. All rights reserved. | ||
|  | // | ||
|  | 
 | ||
|  | import XCTest | ||
|  | 
 | ||
|  | import SignalServiceKit | ||
|  | import SwiftProtobuf | ||
|  | 
 | ||
| 
											7 years ago
										 | class SSKProtoEnvelopeTest: XCTestCase { | ||
| 
											7 years ago
										 | 
 | ||
|  |     override func setUp() { | ||
|  |         super.setUp() | ||
|  |         // Put setup code here. This method is called before the invocation of each test method in the class. | ||
|  |     } | ||
|  | 
 | ||
|  |     override func tearDown() { | ||
|  |         // Put teardown code here. This method is called after the invocation of each test method in the class. | ||
|  |         super.tearDown() | ||
|  |     } | ||
|  | 
 | ||
|  |     func testParse_EmptyData() { | ||
|  |         let data = Data() | ||
| 
											7 years ago
										 |         XCTAssertThrowsError(try SSKProtoEnvelope.parseData(data)) | ||
| 
											7 years ago
										 |     } | ||
|  | 
 | ||
|  |     func testParse_UnparseableData() { | ||
|  |         let data = "asdf".data(using: .utf8)! | ||
| 
											7 years ago
										 |         XCTAssertThrowsError(try SSKProtoEnvelope.parseData(data)) { error in | ||
| 
											7 years ago
										 |             XCTAssert(error is SwiftProtobuf.BinaryDecodingError) | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     func testParse_ValidData() { | ||
|  |         // `encodedData` was derived thus: | ||
| 
											7 years ago
										 |         //     let builder = SSKProtoEnvelopeBuilder() | ||
| 
											7 years ago
										 |         //     builder.setTimestamp(NSDate.ows_millisecondTimeStamp()) | ||
|  |         //     builder.setSource("+15551231234") | ||
|  |         //     builder.setSourceDevice(1) | ||
| 
											7 years ago
										 |         //     builder.setType(SSKProtoEnvelopeType.ciphertext) | ||
| 
											7 years ago
										 |         //     let encodedData = builder.build().data()!.base64EncodedString() | ||
|  |         let encodedData = "CAESDCsxNTU1MTIzMTIzNCjKm4WazSw4AQ==" | ||
|  |         let data = Data(base64Encoded: encodedData)! | ||
|  | 
 | ||
| 
											7 years ago
										 |         XCTAssertNoThrow(try SSKProtoEnvelope.parseData(data)) | ||
| 
											7 years ago
										 |     } | ||
|  | 
 | ||
|  |     func testParse_invalidData() { | ||
|  |         // `encodedData` was derived thus: | ||
| 
											7 years ago
										 |         //     let builder = SSKProtoEnvelopeBuilder() | ||
| 
											7 years ago
										 |         //     builder.setTimestamp(NSDate.ows_millisecondTimeStamp()) | ||
|  |         //     builder.setSource("+15551231234") | ||
|  |         //     builder.setSourceDevice(1) | ||
|  |         //     // MISSING TYPE! | ||
|  |         //     let encodedData = builder.build().data()!.base64EncodedString() | ||
|  |         let encodedData = "EgwrMTU1NTEyMzEyMzQojdmOms0sOAE=" | ||
|  |         let data = Data(base64Encoded: encodedData)! | ||
|  | 
 | ||
| 
											7 years ago
										 |         XCTAssertThrowsError(try SSKProtoEnvelope.parseData(data)) { (error) -> Void in | ||
| 
											7 years ago
										 |             switch error { | ||
| 
											7 years ago
										 |             case SSKProtoError.invalidProtobuf: | ||
| 
											7 years ago
										 |                 break | ||
|  |             default: | ||
|  |                 XCTFail("unexpected error: \(error)") | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
| 
											7 years ago
										 | 
 | ||
|  |     func testParse_buildVsRequired() { | ||
|  |         let builder = SSKProtoEnvelope.SSKProtoEnvelopeBuilder() | ||
|  | 
 | ||
|  |         XCTAssertThrowsError(try builder.build()) { (error) -> Void in | ||
|  |             switch error { | ||
|  |             case SSKProtoError.invalidProtobuf: | ||
|  |                 break | ||
|  |             default: | ||
|  |                 XCTFail("unexpected error: \(error)") | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     func testParse_roundtrip() { | ||
|  |         let builder = SSKProtoEnvelope.SSKProtoEnvelopeBuilder() | ||
|  | 
 | ||
|  |         let phonyContent = "phony data".data(using: .utf8)! | ||
|  | 
 | ||
|  |         builder.setType(SSKProtoEnvelope.SSKProtoEnvelopeType.prekeyBundle) | ||
|  |         builder.setTimestamp(123) | ||
|  |         builder.setSource("+13213214321") | ||
|  |         builder.setSourceDevice(1) | ||
|  |         builder.setContent(phonyContent) | ||
|  | 
 | ||
|  |         var envelopeData: Data | ||
|  |         do { | ||
|  |             envelopeData = try builder.buildSerializedData() | ||
|  |         } catch { | ||
|  |             XCTFail("Couldn't serialize data.") | ||
|  |             return | ||
|  |         } | ||
|  | 
 | ||
|  |         var envelope: SSKProtoEnvelope | ||
|  |         do { | ||
|  |             envelope = try SSKProtoEnvelope.parseData(envelopeData) | ||
|  |         } catch { | ||
|  |             XCTFail("Couldn't serialize data.") | ||
|  |             return | ||
|  |         } | ||
|  | 
 | ||
|  |         XCTAssertEqual(envelope.type, SSKProtoEnvelope.SSKProtoEnvelopeType.prekeyBundle) | ||
|  |         XCTAssertEqual(envelope.timestamp, 123) | ||
|  |         XCTAssertEqual(envelope.source, "+13213214321") | ||
|  |         XCTAssertEqual(envelope.sourceDevice, 1) | ||
|  |         XCTAssertTrue(envelope.hasContent) | ||
|  |         XCTAssertEqual(envelope.content, phonyContent) | ||
|  |         XCTAssertFalse(envelope.hasLegacyMessage) | ||
|  |     } | ||
| 
											7 years ago
										 | } |