Files
sourcekit-lsp/Tests/LanguageServerProtocolJSONRPCTests/ConnectionPerfTests.swift
Alex Hoppen df594e332c Set a default timeout duration
Instead of having ad-hoc timeout durations in all the test cases, specify a default timeout duration that can be used by tests.

This allows us increase the timeout duration for all tests if we discover that e.g. sourcekitd is slower in CI setups.

rdar://91615376
2022-06-14 17:26:06 +02: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: defaultTimeout)
}
}
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(Int(defaultTimeout))), .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(Int(defaultTimeout))), .success)
}
}
}
}