envoy / Embassy

Super lightweight async HTTP server library in pure Swift runs in iOS / MacOS / Linux

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Tests fail to compile when running under Swift 3.1.1

felix91gr opened this issue · comments

I'm using the precompiled binaries, under Linux. I made a test function using the command env to make sure my libraries were representative of the real setups.

The package passes all the tests under Swift 3.0.2, but actually fails to compile them under Swift 3.1.1.

These are the errors I get:

Compile Swift Module 'EmbassyTests' (10 sources)
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:120:39: error: 'Error?' is not convertible to 'NSError?'; did you mean to use 'as!' to force downcast?
                receivedError = error as NSError?
                                ~~~~~~^~~~~~~~~~~
                                      as!
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:161:39: error: 'Error?' is not convertible to 'NSError?'; did you mean to use 'as!' to force downcast?
                receivedError = error as NSError?
                                ~~~~~~^~~~~~~~~~~
                                      as!
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:209:39: error: 'Error?' is not convertible to 'NSError?'; did you mean to use 'as!' to force downcast?
                receivedError = error as NSError?
                                ~~~~~~^~~~~~~~~~~
                                      as!

As an... addendum? Here are my results after changing the " as " segments to " as! " to let the test suite compile: (this is long, btw...)

Compile Swift Module 'EmbassyTests' (10 sources)
Linking ./.build/debug/EmbassyPackageTests.xctest
Test Suite 'All tests' started at 13:26:58.264
Test Suite 'debug.xctest' started at 13:26:58.265
Test Suite 'HeapSortTetsts' started at 13:26:58.266
Test Case 'HeapSortTetsts.testPush' started at 13:26:58.266
Test Case 'HeapSortTetsts.testPush' passed (0.0 seconds)
Test Case 'HeapSortTetsts.testPop' started at 13:26:58.266
Test Case 'HeapSortTetsts.testPop' passed (0.0 seconds)
Test Case 'HeapSortTetsts.testSortWithRandomNumbers' started at 13:26:58.266
Test Case 'HeapSortTetsts.testSortWithRandomNumbers' passed (0.001 seconds)
Test Case 'HeapSortTetsts.testSortWithRandomNumbersWithCustomCompareFunction' started at 13:26:58.267
Test Case 'HeapSortTetsts.testSortWithRandomNumbersWithCustomCompareFunction' passed (0.001 seconds)
Test Suite 'HeapSortTetsts' passed at 13:26:58.269
	 Executed 4 tests, with 0 failures (0 unexpected) in 0.003 (0.003) seconds
Test Suite 'HTTPHeaderParserTests' started at 13:26:58.269
Test Case 'HTTPHeaderParserTests.testSimpleParsing' started at 13:26:58.269
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPHeaderParserTests.swift:53: error: HTTPHeaderParserTests.testSimpleParsing : XCTAssertEqual failed: ("[Embassy.HTTPHeaderParser.Element.head(method: "GET", path: "/index.html", version: "HTTP/1.1"), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: "")]") is not equal to ("[Embassy.HTTPHeaderParser.Element.head(method: "GET", path: "/index.html", version: "HTTP/1.1"), Embassy.HTTPHeaderParser.Element.header(key: "Host", value: "www.example.com"), Embassy.HTTPHeaderParser.Element.end(14 bytes)]") - 
Test Case 'HTTPHeaderParserTests.testSimpleParsing' failed (0.002 seconds)
Test Case 'HTTPHeaderParserTests.testPartialParsing' started at 13:26:58.271
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPHeaderParserTests.swift:83: error: HTTPHeaderParserTests.testPartialParsing : XCTAssertEqual failed: ("[]") is not equal to ("[Embassy.HTTPHeaderParser.Element.header(key: "Host", value: "www.example.com")]") - 
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPHeaderParserTests.swift:91: error: HTTPHeaderParserTests.testPartialParsing : XCTAssertEqual failed: ("[Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: "")]") is not equal to ("[Embassy.HTTPHeaderParser.Element.end(19 bytes)]") - 
Test Case 'HTTPHeaderParserTests.testPartialParsing' failed (0.001 seconds)
Test Case 'HTTPHeaderParserTests.testHeaders' started at 13:26:58.271
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPHeaderParserTests.swift:112: error: HTTPHeaderParserTests.testHeaders : XCTAssertEqual failed: ("[Embassy.HTTPHeaderParser.Element.head(method: "GET", path: "/index.html", version: "HTTP/1.1"), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: "")]") is not equal to ("[Embassy.HTTPHeaderParser.Element.head(method: "GET", path: "/index.html", version: "HTTP/1.1"), Embassy.HTTPHeaderParser.Element.header(key: "Host", value: "foobar.com"), Embassy.HTTPHeaderParser.Element.header(key: "Date", value: "Mon, 23 May 2005 22:38:34 GMT"), Embassy.HTTPHeaderParser.Element.header(key: "Content-Type", value: "text/html; charset=UTF-8"), Embassy.HTTPHeaderParser.Element.header(key: "Content-Encoding", value: "UTF-8"), Embassy.HTTPHeaderParser.Element.header(key: "Content-Length", value: "138"), Embassy.HTTPHeaderParser.Element.header(key: "Last-Modified", value: "Wed, 08 Jan 2003 23:11:55 GMT"), Embassy.HTTPHeaderParser.Element.header(key: "Server", value: "Apache/1.3.3.7 (Unix) (Red-Hat/Linux)"), Embassy.HTTPHeaderParser.Element.header(key: "ETag", value: "\"3f80f-1b6-3e1cb03b\""), Embassy.HTTPHeaderParser.Element.header(key: "Accept-Ranges", value: "bytes"), Embassy.HTTPHeaderParser.Element.header(key: "Connection", value: "close"), Embassy.HTTPHeaderParser.Element.end(0 bytes)]") - 
Test Case 'HTTPHeaderParserTests.testHeaders' failed (0.003 seconds)
Test Case 'HTTPHeaderParserTests.testColonInHeader' started at 13:26:58.274
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPHeaderParserTests.swift:137: error: HTTPHeaderParserTests.testColonInHeader : XCTAssertEqual failed: ("[Embassy.HTTPHeaderParser.Element.head(method: "GET", path: "/index.html", version: "HTTP/1.1"), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: "")]") is not equal to ("[Embassy.HTTPHeaderParser.Element.head(method: "GET", path: "/index.html", version: "HTTP/1.1"), Embassy.HTTPHeaderParser.Element.header(key: "Host", value: "foobar.com"), Embassy.HTTPHeaderParser.Element.header(key: "X-My-Header", value: "MyFaboriteColor: Green"), Embassy.HTTPHeaderParser.Element.header(key: "Connection", value: "close"), Embassy.HTTPHeaderParser.Element.end(0 bytes)]") - 
Test Case 'HTTPHeaderParserTests.testColonInHeader' failed (0.001 seconds)
Test Case 'HTTPHeaderParserTests.testNoSpaceAfterColonForHeader' started at 13:26:58.275
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPHeaderParserTests.swift:155: error: HTTPHeaderParserTests.testNoSpaceAfterColonForHeader : XCTAssertEqual failed: ("[Embassy.HTTPHeaderParser.Element.head(method: "GET", path: "/index.html", version: "HTTP/1.1"), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: ""), Embassy.HTTPHeaderParser.Element.header(key: "GET /index.html HTTP/1.1", value: "")]") is not equal to ("[Embassy.HTTPHeaderParser.Element.head(method: "GET", path: "/index.html", version: "HTTP/1.1"), Embassy.HTTPHeaderParser.Element.header(key: "Host", value: "foobar.com"), Embassy.HTTPHeaderParser.Element.header(key: "X-My-Header", value: "MyFaboriteColor: Green"), Embassy.HTTPHeaderParser.Element.header(key: "Connection", value: "close"), Embassy.HTTPHeaderParser.Element.end(0 bytes)]") - 
Test Case 'HTTPHeaderParserTests.testNoSpaceAfterColonForHeader' failed (0.001 seconds)
Test Case 'HTTPHeaderParserTests.testStripLeadingSpaces' started at 13:26:58.276
Test Case 'HTTPHeaderParserTests.testStripLeadingSpaces' passed (0.0 seconds)
Test Suite 'HTTPHeaderParserTests' failed at 13:26:58.276
	 Executed 6 tests, with 6 failures (0 unexpected) in 0.007 (0.007) seconds
Test Suite 'MultiDictionaryTests' started at 13:26:58.276
Test Case 'MultiDictionaryTests.testCaseInsenstiveMultiDictionary' started at 13:26:58.276
Test Case 'MultiDictionaryTests.testCaseInsenstiveMultiDictionary' passed (0.004 seconds)
Test Case 'MultiDictionaryTests.testCaseSenstiveMultiDictionary' started at 13:26:58.280
Test Case 'MultiDictionaryTests.testCaseSenstiveMultiDictionary' passed (0.0 seconds)
Test Suite 'MultiDictionaryTests' passed at 13:26:58.280
	 Executed 2 tests, with 0 failures (0 unexpected) in 0.004 (0.004) seconds
Test Suite 'TCPSocketTests' started at 13:26:58.280
Test Case 'TCPSocketTests.testAccept' started at 13:26:58.280
Test Case 'TCPSocketTests.testAccept' passed (0.011 seconds)
Test Case 'TCPSocketTests.testReadAndWrite' started at 13:26:58.291
Test Case 'TCPSocketTests.testReadAndWrite' passed (0.001 seconds)
Test Case 'TCPSocketTests.testGetPeerName' started at 13:26:58.292
Test Case 'TCPSocketTests.testGetPeerName' passed (0.001 seconds)
Test Case 'TCPSocketTests.testGetSockName' started at 13:26:58.293
Test Case 'TCPSocketTests.testGetSockName' passed (0.001 seconds)
Test Suite 'TCPSocketTests' passed at 13:26:58.293
	 Executed 4 tests, with 0 failures (0 unexpected) in 0.013 (0.013) seconds
Test Suite 'SelectSelectorTests' started at 13:26:58.293
Test Case 'SelectSelectorTests.testRegister' started at 13:26:58.294
Test Case 'SelectSelectorTests.testRegister' passed (0.0 seconds)
Test Case 'SelectSelectorTests.testUnregister' started at 13:26:58.294
Test Case 'SelectSelectorTests.testUnregister' passed (0.0 seconds)
Test Case 'SelectSelectorTests.testRegisterKeyError' started at 13:26:58.294
Test Case 'SelectSelectorTests.testRegisterKeyError' passed (0.0 seconds)
Test Case 'SelectSelectorTests.testUnregisterKeyError' started at 13:26:58.295
Test Case 'SelectSelectorTests.testUnregisterKeyError' passed (0.0 seconds)
Test Case 'SelectSelectorTests.testSelectOneSocket' started at 13:26:58.295
Test Case 'SelectSelectorTests.testSelectOneSocket' passed (4.003 seconds)
Test Case 'SelectSelectorTests.testSelectEventFilter' started at 13:27:02.298
Test Case 'SelectSelectorTests.testSelectEventFilter' passed (3.004 seconds)
Test Case 'SelectSelectorTests.testSelectAfterUnregister' started at 13:27:05.302
Test Case 'SelectSelectorTests.testSelectAfterUnregister' passed (3.003 seconds)
Test Case 'SelectSelectorTests.testSelectMultipleSocket' started at 13:27:08.305
Test Case 'SelectSelectorTests.testSelectMultipleSocket' passed (2.001 seconds)
Test Suite 'SelectSelectorTests' passed at 13:27:10.306
	 Executed 8 tests, with 0 failures (0 unexpected) in 12.012 (12.012) seconds
Test Suite 'SelectorEventLoopTests' started at 13:27:10.306
Test Case 'SelectorEventLoopTests.testStop' started at 13:27:10.306
Test Case 'SelectorEventLoopTests.testStop' passed (1.001 seconds)
Test Case 'SelectorEventLoopTests.testCallSoon' started at 13:27:11.307
Test Case 'SelectorEventLoopTests.testCallSoon' passed (0.0 seconds)
Test Case 'SelectorEventLoopTests.testCallLater' started at 13:27:11.308
Test Case 'SelectorEventLoopTests.testCallLater' passed (2.001 seconds)
Test Case 'SelectorEventLoopTests.testCallAtOrder' started at 13:27:13.309
Test Case 'SelectorEventLoopTests.testCallAtOrder' passed (0.001 seconds)
Test Case 'SelectorEventLoopTests.testSetReader' started at 13:27:13.310
Test Case 'SelectorEventLoopTests.testSetReader' passed (1.002 seconds)
Test Case 'SelectorEventLoopTests.testSetWriter' started at 13:27:14.312
Test Case 'SelectorEventLoopTests.testSetWriter' passed (1.002 seconds)
Test Case 'SelectorEventLoopTests.testRemoveReader' started at 13:27:15.314
Test Case 'SelectorEventLoopTests.testRemoveReader' passed (4.002 seconds)
Test Suite 'SelectorEventLoopTests' passed at 13:27:19.315
	 Executed 7 tests, with 0 failures (0 unexpected) in 9.008 (9.008) seconds
Test Suite 'TransportTests' started at 13:27:19.316
Test Case 'TransportTests.testBigChunkReadAndWrite' started at 13:27:19.316
Test Case 'TransportTests.testBigChunkReadAndWrite' passed (6.226 seconds)
Test Case 'TransportTests.testReadAndWrite' started at 13:27:25.542
Test Case 'TransportTests.testReadAndWrite' passed (6.002 seconds)
Test Case 'TransportTests.testCloseByPeer' started at 13:27:31.544
Test Case 'TransportTests.testCloseByPeer' passed (13.088 seconds)
Test Case 'TransportTests.testReadingPause' started at 13:27:44.633
Test Case 'TransportTests.testReadingPause' passed (10.004 seconds)
Test Suite 'TransportTests' passed at 13:27:54.637
	 Executed 4 tests, with 0 failures (0 unexpected) in 35.321 (35.321) seconds
Test Suite 'HTTPServerTests' started at 13:27:54.637
Test Case 'HTTPServerTests.testEnviron' started at 13:27:54.637
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:45: error: HTTPServerTests.testEnviron : failed - Time out
fatal error: unexpectedly found nil while unwrapping an Optional value
Current stack trace:
0    libswiftCore.so                    0x00007f0a799581c0 swift_reportError + 120
1    libswiftCore.so                    0x00007f0a79972be0 _swift_stdlib_reportFatalError + 62
2    libswiftCore.so                    0x00007f0a7976cbe6 <unavailable> + 1186790
3    libswiftCore.so                    0x00007f0a798cbead <unavailable> + 2625197
4    libswiftCore.so                    0x00007f0a7976cbe6 <unavailable> + 1186790
5    libswiftCore.so                    0x00007f0a79887060 specialized _fatalErrorMessage(StaticString, StaticString, file : StaticString, line : UInt, flags : UInt32) -> Never + 96
6    EmbassyPackageTests.xctest         0x0000000000452d09 <unavailable> + 339209
7    EmbassyPackageTests.xctest         0x0000000000452f28 <unavailable> + 339752
8    EmbassyPackageTests.xctest         0x000000000041665e <unavailable> + 91742
9    EmbassyPackageTests.xctest         0x0000000000453091 <unavailable> + 340113
10   libXCTest.so                       0x00007f0a79ba6b4b <unavailable> + 129867
11   libXCTest.so                       0x00007f0a79ba65fb <unavailable> + 128507
12   libXCTest.so                       0x00007f0a79ba6510 XCTAssertEqual<A where ...> (@autoclosure () throws -> A?, @autoclosure () throws -> A?, @autoclosure () -> String, file : StaticString, line : UInt) -> () + 89
13   EmbassyPackageTests.xctest         0x0000000000450ff7 <unavailable> + 331767
14   EmbassyPackageTests.xctest         0x0000000000463cfa <unavailable> + 408826
15   EmbassyPackageTests.xctest         0x000000000040eab1 <unavailable> + 60081
16   EmbassyPackageTests.xctest         0x0000000000463c91 <unavailable> + 408721
17   libXCTest.so                       0x00007f0a79bcd4db <unavailable> + 287963
18   libXCTest.so                       0x00007f0a79ba3502 <unavailable> + 115970
19   libXCTest.so                       0x00007f0a79bcd490 <unavailable> + 287888
20   libXCTest.so                       0x00007f0a79bcd2a0 <unavailable> + 287392
21   libXCTest.so                       0x00007f0a79ba2b20 XCTestCase.invokeTest() -> () + 112
22   libXCTest.so                       0x00007f0a79bc2d20 specialized XCTestCase.perform(XCTestRun) -> () + 313
23   libXCTest.so                       0x00007f0a79ba2a50 XCTestCase.perform(XCTestRun) -> () + 14
24   libXCTest.so                       0x00007f0a79ba0540 XCTest.run() -> () + 516
25   libXCTest.so                       0x00007f0a79bc32a0 specialized XCTestSuite.perform(XCTestRun) -> () + 892
26   libXCTest.so                       0x00007f0a79bc32a0 specialized XCTestSuite.perform(XCTestRun) -> () + 2007
27   libXCTest.so                       0x00007f0a79bc32a0 specialized XCTestSuite.perform(XCTestRun) -> () + 2007
28   libXCTest.so                       0x00007f0a79ba3800 XCTMain([(testCaseClass : XCTestCase.Type, allTests : [(String, (XCTestCase) throws -> ())])]) -> Never + 4317
29   EmbassyPackageTests.xctest         0x000000000040e53a <unavailable> + 58682
30   libc.so.6                          0x00007f0a778ca740 __libc_start_main + 240
31   EmbassyPackageTests.xctest         0x000000000040e239 <unavailable> + 57913

EDIT: The problem seems to be that my computer is very slow, and therefore it's triggering the timeout. I'm running it now with a 100-fold increase in the timeout. Let's see how it goes :)

EDIT 2: After that change, it still hit timeout. I think the problem must lie somewhere else, I don't know where 🤔

Further testing

I think the error must be a tiny detail, because when compiling the same code with the 3.0 toolchain all the tests pass, but they fail with a 3.1 toolchain.

Therefore, I've started printing every object in the failing methods. I'm gonna list any interesting findings here as I go.

testAsyncBody

These are the changes I've made so far to see these results. The commented assert is the one that makes the test suite crash under Swift 3.1.

I see a subtle change in the server, in particular, in its pipeSender and pipeReciever properties. This code prints, respectively:

In Swift 3.0:

Test Suite 'Selected tests' started at 15:16:39.892
Test Suite 'HTTPServerTests' started at 15:16:39.894
Test Case 'HTTPServerTests.testAsyncSendBody' started at 15:16:39.894
port: 59637
server: 
	logger: Embassy.DefaultLogger
	app: (Function)
	interface: ::1
	port: 59637
	acceptSocket: nil
	eventLoop: 
		running: false
		selector: Embassy.SelectSelector
		pipeSender: 5
		pipeReceiver: 4
		readyCallbacks: Embassy.Atomic<Swift.Array<(()) -> ()>>
		scheduledCallbacks: Embassy.Atomic<Swift.Array<(Foundation.Date, (()) -> ())>>
	connections: []
Async_FIR
Async_SEC
Async_THI
Async_FOU
Async_THT
Async_FIF
Async_ELE
Async_TWE
Async_SIX
Async_SEV
Async_EIG
Async_NIN
Async_TEN
Async_FTH
Async_FFT
Async_STH
Async_SVT
Test Case 'HTTPServerTests.testAsyncSendBody' passed (4.03 seconds).
Test Suite 'HTTPServerTests' passed at 15:16:43.923
	 Executed 1 test, with 0 failures (0 unexpected) in 4.03 (4.03) seconds
Test Suite 'Selected tests' passed at 15:16:43.924
	 Executed 1 test, with 0 failures (0 unexpected) in 4.03 (4.03) seconds

In Swift 3.1:

Test Suite 'Selected tests' started at 15:23:21.148
Test Suite 'HTTPServerTests' started at 15:23:21.150
Test Case 'HTTPServerTests.testAsyncSendBody' started at 15:23:21.150
port: 42629
server: 
	logger: Embassy.DefaultLogger
	app: (Function)
	interface: ::1
	port: 42629
	acceptSocket: nil
	eventLoop: 
		running: false
		selector: Embassy.SelectSelector
		pipeSender: 7
		pipeReceiver: 6
		readyCallbacks: Embassy.Atomic<Swift.Array<() -> ()>>
		scheduledCallbacks: Embassy.Atomic<Swift.Array<(Foundation.Date, () -> ())>>
	connections: []
Async_FIR
Async_SEC
Async_THI
Async_FOU
Async_THT
Async_FIF
Async_ELE
Async_TWE
Async_SIX
Async_SEV
Async_EIG
Async_NIN
Async_TEN
Async_FTH
Async_FFT
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:247: error: HTTPServerTests.testAsyncSendBody : XCTAssertNil failed: "URLError(_nsError: The operation could not be completed)" - 
Async_STH
/home/felix/Documents/SKD/TestingDependencies/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:249: error: HTTPServerTests.testAsyncSendBody : XCTAssertEqual failed: ("nil") is not equal to ("Optional(200)") - 
Async_SVT
Test Case 'HTTPServerTests.testAsyncSendBody' failed (61.072 seconds)
Test Suite 'HTTPServerTests' failed at 15:24:22.223
	 Executed 1 test, with 2 failures (0 unexpected) in 61.072 (61.072) seconds
Test Suite 'Selected tests' failed at 15:24:22.223
	 Executed 1 test, with 2 failures (0 unexpected) in 61.072 (61.072) seconds

What are these properties? The change seems to stem from the toolchain change and nothing else.

I'll keep testing to see if any other differences arise.

I'm sorry to bother you again, @fangpenlin.

I haven't looked at this problem since I last commented on here. I think I made some mistakes while experimenting with the tests, so please don't pay attention to that.

I want to help fix this issue, though. Please tell me how can I do that :)

@fangpenlin: the tests fail to compile under Swift 3.1.x and above. Should I help you migrate Embassy to Swift 4.x? Give me a date from when you are available and let’s make it happen :)

@felix91gr sorry for late reply, is this issue for Linux only? I didn't test it with Linux environment, can you run it and let me know if it works?

sorry for the late reply

No worries 😊 I’m glad to see you’re back.

can you run it and let me know if it works?

Sure thing, I’ll update my toolchain to 4.0 and test it right away!

The problem, I’m guessing, was with the small source breaking changes that started in 3.1.1 and 3.2 🤔. We’ll see :)

Allright, I'm back. The library builds with no issues (just like before), but the tests fail to compile (like... before).

Here's what I've run:

Double-checking my swift version

~/D/P/Embassy (master) $ swift --version
Swift version 4.0 (swift-4.0-RELEASE)
Target: x86_64-unknown-linux-gnu

Checking out the 4.0 release

~/D/P/Embassy (master) $ git checkout v4.0.0 
Note: checking out 'v4.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 09fb02f... Fix broken HTTP header parser

Compiling the library itself (compiles)

~/D/P/Embassy ((v4.0.0)) $ swift build
Compile Swift Module 'Embassy' (29 sources)

Running the test suite (fails)

~/D/P/Embassy ((v4.0.0)) $ swift test
Compile Swift Module 'EmbassyTests' (10 sources)
/home/felix/Documents/Programming/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:120:39: error: 'Error?' is not convertible to 'NSError?'; did you mean to use 'as!' to force downcast?
                receivedError = error as NSError?
                                ~~~~~~^~~~~~~~~~~
                                      as!
/home/felix/Documents/Programming/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:161:39: error: 'Error?' is not convertible to 'NSError?'; did you mean to use 'as!' to force downcast?
                receivedError = error as NSError?
                                ~~~~~~^~~~~~~~~~~
                                      as!
/home/felix/Documents/Programming/Embassy/Tests/EmbassyTests/HTTPServerTests.swift:209:39: error: 'Error?' is not convertible to 'NSError?'; did you mean to use 'as!' to force downcast?
                receivedError = error as NSError?
                                ~~~~~~^~~~~~~~~~~
                                      as!
error: terminated(1): /home/felix/Documents/Programming/Binaries/swift.4.0/usr/bin/swift-build-tool -f /home/felix/Documents/Programming/Embassy/.build/debug.yaml test
~/D/P/Embassy ((v4.0.0)) $ 

What do you think, @fangpenlin?

@felix91gr I just pushed a new commit to master to fix that problem, can you try again?

I will! :)

Well, it looks like you fixed it!!

~/D/P/Embassy (master) $ swift test
Compile Swift Module 'EmbassyTests' (10 sources)
Compile Swift Module 'EmbassyPackageTests' (1 sources)
Linking ./.build/x86_64-unknown-linux/debug/EmbassyPackageTests.xctest
Test Suite 'All tests' started at 2017-09-21 01:02:41.465
Test Suite 'debug.xctest' started at 2017-09-21 01:02:41.565
...
...
...
Test Suite 'All tests' passed at 2017-09-21 01:03:48.427
	 Executed 43 tests, with 0 failures (0 unexpected) in 66.859 (66.859) seconds

Thank you so much, Fang-Pen Lin :)
Thank you!
🎉 🎉