Skip to content

Commit b15960a

Browse files
authored
clear pingData before writing new data (#11)
* clear pingData before writing new data * Add test
1 parent 06e5e25 commit b15960a

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

Sources/WSCore/WebSocketStateMachine.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ struct WebSocketStateMachine {
118118
}
119119
// creating random payload
120120
let random = (0..<Self.pingDataSize).map { _ in UInt8.random(in: 0...255) }
121+
state.pingData.clear()
121122
state.pingData.writeBytes(random)
122123
state.lastPingTime = .now
123124
self.state = .open(state)

Tests/WebSocketTests/WebSocketStateMachineTests.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,34 @@ final class WebSocketStateMachineTests: XCTestCase {
9696
return
9797
}
9898
}
99+
100+
// Verify ping buffer size doesnt grow
101+
func testPingBufferSize() async throws {
102+
var stateMachine = WebSocketStateMachine(autoPingSetup: .enabled(timePeriod: .milliseconds(1)))
103+
var currentBuffer = ByteBuffer()
104+
var count = 0
105+
while true {
106+
switch stateMachine.sendPing() {
107+
case .sendPing(let buffer):
108+
XCTAssertEqual(buffer.readableBytes, 16)
109+
currentBuffer = buffer
110+
count += 1
111+
if count > 4 {
112+
return
113+
}
114+
115+
case .wait(let time):
116+
try await Task.sleep(for: time)
117+
stateMachine.receivedPong(frameData: currentBuffer)
118+
119+
case .closeConnection:
120+
XCTFail("Should not timeout")
121+
return
122+
123+
case .stop:
124+
XCTFail("Should not stop")
125+
return
126+
}
127+
}
128+
}
99129
}

0 commit comments

Comments
 (0)