From 73eb0778c0234be99828824f075d5c28fbaa517e Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 23 Jul 2018 10:46:34 -0400 Subject: [PATCH] Add unit tests around byte parser. --- Signal.xcodeproj/project.pbxproj | 4 + Signal/test/util/ByteParserTest.swift | 168 ++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 Signal/test/util/ByteParserTest.swift diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index d27f2bc02..f93c298df 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -53,6 +53,7 @@ 3421981621061A0700C57195 /* JSQMVC-README.md in Resources */ = {isa = PBXBuildFile; fileRef = 3421980C21061A0700C57195 /* JSQMVC-README.md */; }; 3421981721061A0700C57195 /* JSQMVC-SIGNAL.md in Resources */ = {isa = PBXBuildFile; fileRef = 3421980D21061A0700C57195 /* JSQMVC-SIGNAL.md */; }; 3421981821061A0700C57195 /* JSQMessageAvatarImageDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3421980E21061A0700C57195 /* JSQMessageAvatarImageDataSource.h */; }; + 3421981C21061D2E00C57195 /* ByteParserTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3421981B21061D2E00C57195 /* ByteParserTest.swift */; }; 34277A5E20751BDC006049F2 /* OWSQuotedMessageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34277A5C20751BDC006049F2 /* OWSQuotedMessageView.m */; }; 3427C64320F500E000EEC730 /* OWSMessageTimerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3427C64220F500DF00EEC730 /* OWSMessageTimerView.m */; }; 3430FE181F7751D4000EC51B /* GiphyAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3430FE171F7751D4000EC51B /* GiphyAPI.swift */; }; @@ -669,6 +670,7 @@ 3421980C21061A0700C57195 /* JSQMVC-README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = "JSQMVC-README.md"; sourceTree = ""; }; 3421980D21061A0700C57195 /* JSQMVC-SIGNAL.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = "JSQMVC-SIGNAL.md"; sourceTree = ""; }; 3421980E21061A0700C57195 /* JSQMessageAvatarImageDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQMessageAvatarImageDataSource.h; sourceTree = ""; }; + 3421981B21061D2E00C57195 /* ByteParserTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ByteParserTest.swift; sourceTree = ""; }; 34277A5C20751BDC006049F2 /* OWSQuotedMessageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSQuotedMessageView.m; sourceTree = ""; }; 34277A5D20751BDC006049F2 /* OWSQuotedMessageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSQuotedMessageView.h; sourceTree = ""; }; 3427C64120F500DE00EEC730 /* OWSMessageTimerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMessageTimerView.h; sourceTree = ""; }; @@ -2334,6 +2336,7 @@ isa = PBXGroup; children = ( 3491D9A021022DB7001EF5A1 /* CDSSigningCertificateTest.m */, + 3421981B21061D2E00C57195 /* ByteParserTest.swift */, 45E7A6A61E71CA7E00D44FB5 /* DisplayableTextFilterTest.swift */, B660F6AA1C29868000687D6E /* ExceptionsTest.h */, B660F6AB1C29868000687D6E /* ExceptionsTest.m */, @@ -3435,6 +3438,7 @@ 3491D9A121022DB7001EF5A1 /* CDSSigningCertificateTest.m in Sources */, 340B02BA1FA0D6C700F9CFEC /* ConversationViewItemTest.m in Sources */, 458E383A1D6699FA0094BD24 /* OWSDeviceProvisioningURLParserTest.m in Sources */, + 3421981C21061D2E00C57195 /* ByteParserTest.swift in Sources */, 45360B901F9527DA00FA666C /* SearcherTest.swift in Sources */, B660F7561C29988E00687D6E /* PushManager.m in Sources */, 34DB0BED2011548B007B313F /* OWSDatabaseConverterTest.m in Sources */, diff --git a/Signal/test/util/ByteParserTest.swift b/Signal/test/util/ByteParserTest.swift new file mode 100644 index 000000000..192d95c9c --- /dev/null +++ b/Signal/test/util/ByteParserTest.swift @@ -0,0 +1,168 @@ +// +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// + +import XCTest +@testable import Signal + +class ByteParserTest: XCTestCase { + + override func setUp() { + super.setUp() +// self.imageCache = ImageCache() +// imageCache.setImage(firstVariation, forKey:cacheKey1, diameter:100) +// imageCache.setImage(secondVariation, forKey:cacheKey1, diameter:200) +// imageCache.setImage(otherImage, forKey:cacheKey2, diameter:100) + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testGetShort_Empty() { + let parser = ByteParser(data: Data(), littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(0, parser.nextShort()) + XCTAssertTrue(parser.hasError) + } + + func testGetShort() { + let data = Data(bytes: [0x01, 0x00, 0x00, 0x01, 0x01, 0x01 ]) + let parser = ByteParser(data: data, littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(1, parser.nextShort()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(256, parser.nextShort()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(257, parser.nextShort()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(0, parser.nextShort()) + XCTAssertTrue(parser.hasError) + } + + func testGetInt_Empty() { + let parser = ByteParser(data: Data(), littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(0, parser.nextInt()) + XCTAssertTrue(parser.hasError) + } + + func testGetInt() { + let data = Data(bytes: [0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00 ]) + let parser = ByteParser(data: data, littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(1, parser.nextInt()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(256, parser.nextInt()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(257, parser.nextInt()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(0, parser.nextInt()) + XCTAssertTrue(parser.hasError) + } + + func testGetLong_Empty() { + let parser = ByteParser(data: Data(), littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(0, parser.nextLong()) + XCTAssertTrue(parser.hasError) + } + + func testGetLong() { + let data = Data(bytes: [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]) + let parser = ByteParser(data: data, littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(1, parser.nextLong()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(256, parser.nextLong()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(257, parser.nextLong()) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(0, parser.nextLong()) + XCTAssertTrue(parser.hasError) + } + + func testReadZero_Empty() { + let parser = ByteParser(data: Data(), littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertFalse(parser.readZero(1)) + XCTAssertTrue(parser.hasError) + } + + func testReadZero() { + let data = Data(bytes: [0x00, 0x01, 0x00, 0x00, 0x01, 0x00]) + let parser = ByteParser(data: data, littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertTrue(parser.readZero(1)) + XCTAssertFalse(parser.hasError) + + XCTAssertFalse(parser.readZero(1)) + XCTAssertFalse(parser.hasError) + + XCTAssertTrue(parser.readZero(2)) + XCTAssertFalse(parser.hasError) + + XCTAssertFalse(parser.readZero(2)) + XCTAssertFalse(parser.hasError) + + XCTAssertFalse(parser.readZero(1)) + XCTAssertTrue(parser.hasError) + } + + func testReadBytes_Empty() { + let parser = ByteParser(data: Data(), littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertNil(parser.readBytes(1)) + XCTAssertTrue(parser.hasError) + } + + func testReadBytes() { + let data = Data(bytes: [0x00, 0x01, 0x02, 0x03, 0x04, 0x05]) + let parser = ByteParser(data: data, littleEndian: true) + XCTAssertNotNil(parser) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(Data(bytes: [0x00 ]), parser.readBytes(1)) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(Data(bytes: [0x01 ]), parser.readBytes(1)) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(Data(bytes: [0x02, 0x03]), parser.readBytes(2)) + XCTAssertFalse(parser.hasError) + + XCTAssertEqual(Data(bytes: [0x04, 0x05]), parser.readBytes(2)) + XCTAssertFalse(parser.hasError) + + XCTAssertNil(parser.readBytes(1)) + XCTAssertTrue(parser.hasError) + } +}