Files
sourcekit-lsp/Tests/LanguageServerProtocolJSONRPCTests/ConnectionPerfTests.swift
Alex Hoppen 05ecd26d08 Reorganize the repository into a set of bare LSP modules and SourceKit modules
We will be able to split the LSP modules off later. These LSP modules
will provide the ability to write custom LSP servers and clients in
Swift. The sourcekit-lsp repository will build on top of this new
package to provide an LSP implementation that creates a language server
for Swift and C-based-languages.
2019-11-14 10:35:06 -08:00

71 lines
2.0 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import LanguageServerProtocolJSONRPC
import LSPTestSupport
import XCTest
class ConnectionPerfTests: PerfTestCase {
var connection: TestJSONRPCConnection! = nil
override func setUp() {
connection = TestJSONRPCConnection()
}
override func tearDown() {
connection.close()
}
func testEcho1() {
let client = connection.client
self.measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) {
let expectation = self.expectation(description: "response received")
self.startMeasuring()
_ = client.send(EchoRequest(string: "hello!")) { _ in
self.stopMeasuring()
expectation.fulfill()
}
waitForExpectations(timeout: 10)
}
}
func testEcho100Latency() {
let client = connection.client
let sema = DispatchSemaphore(value: 0)
self.measure {
for _ in 1...100 {
_ = client.send(EchoRequest(string: "hello!")) { _ in
sema.signal()
}
XCTAssertEqual(sema.wait(timeout: .now() + .seconds(10)), .success)
}
}
}
func testEcho100Throughput() {
let client = connection.client
let sema = DispatchSemaphore(value: 0)
self.measure {
DispatchQueue.concurrentPerform(iterations: 100, execute: { _ in
_ = client.send(EchoRequest(string: "hello!")) { _ in
sema.signal()
}
})
for _ in 1...100 {
XCTAssertEqual(sema.wait(timeout: .now() + .seconds(10)), .success)
}
}
}
}