wsdirector-core 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/.rbnext/2.7/wsdirector/protocols/base.rb +12 -3
- data/lib/.rbnext/2.7/wsdirector/scenario_reader.rb +6 -1
- data/lib/.rbnext/3.0/wsdirector/protocols/base.rb +12 -3
- data/lib/.rbnext/3.1/wsdirector/scenario_reader.rb +6 -1
- data/lib/wsdirector/protocols/base.rb +12 -3
- data/lib/wsdirector/scenario_reader.rb +6 -1
- data/lib/wsdirector/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d062f547a78c242ffc0b863fc7cd0e9405fc8b4621791ca2bb30f077a6778885
|
4
|
+
data.tar.gz: c75f03818f180eb0ee202402272189ec23a2d53ad2dd28cc9657971b9abde523
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a276cdde656fd94d4e019aa398d1bbce8509e57561bc318e9af681871d3647137f367db714c70eaaeea1b1722c81f19881c6fccb57db123885b4b6c04618ebe7
|
7
|
+
data.tar.gz: d735cf99e4c64f826ce23cf82bd66fbb2469066c3c660d05e30ed4c31610cff3498ea5d58b98558ce60ef007c34a1717326677f2457ac132a8bb43a7af401bc1
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 1.0.3 (2023-10-03)
|
6
|
+
|
7
|
+
- Add `timeout` option to receive to limit the amount of time we wait for the expected message. ([@palkan][])
|
8
|
+
|
9
|
+
- Add `loop` action to multiply several actions. ([@palkan][])
|
10
|
+
|
5
11
|
## 1.0.2 (2023-01-12)
|
6
12
|
|
7
13
|
- Fix adding transpiled files to releases. ([@palkan][])
|
@@ -99,6 +99,9 @@ module WSDirector
|
|
99
99
|
|
100
100
|
# Base protocol describes basic actions
|
101
101
|
class Base
|
102
|
+
class ReceiveTimeoutError < StandardError
|
103
|
+
end
|
104
|
+
|
102
105
|
include WSDirector::Utils
|
103
106
|
|
104
107
|
def initialize(task, scale: 1, logger: nil, id: nil, color: nil)
|
@@ -155,9 +158,11 @@ module WSDirector
|
|
155
158
|
def receive(step)
|
156
159
|
expected = step["data"] || PartialMatcher.new(step["data>"])
|
157
160
|
ordered = step["ordered"]
|
161
|
+
timeout = step.fetch("timeout", 5).to_f
|
158
162
|
|
159
|
-
log { "Receive a message: #{expected.truncate(
|
163
|
+
log { "Receive a message in #{timeout}s: #{expected.truncate(100)}" }
|
160
164
|
|
165
|
+
start = Time.now.to_f
|
161
166
|
received = nil
|
162
167
|
|
163
168
|
client.each_message do |msg, id|
|
@@ -170,10 +175,14 @@ module WSDirector
|
|
170
175
|
if ordered
|
171
176
|
raise UnmatchedExpectationError, prepare_receive_error(expected, received)
|
172
177
|
end
|
178
|
+
|
179
|
+
if Time.now.to_f - start > timeout
|
180
|
+
raise ReceiveTimeoutError
|
181
|
+
end
|
173
182
|
end
|
174
183
|
|
175
|
-
log(:done) { "Received a message: #{received&.truncate(
|
176
|
-
rescue ThreadError
|
184
|
+
log(:done) { "Received a message: #{received&.truncate(100)}" }
|
185
|
+
rescue ThreadError, ReceiveTimeoutError
|
177
186
|
if received
|
178
187
|
raise UnmatchedExpectationError, prepare_receive_error(expected, received)
|
179
188
|
else
|
@@ -92,7 +92,12 @@ module WSDirector
|
|
92
92
|
data["sample"] = [1, parse_multiplier(data["sample"])].max if data["sample"]
|
93
93
|
|
94
94
|
multiplier = parse_multiplier(data.delete("multiplier") || "1")
|
95
|
-
|
95
|
+
|
96
|
+
if type == "loop"
|
97
|
+
handle_steps(data.fetch("actions")) * multiplier
|
98
|
+
else
|
99
|
+
Array.new(multiplier) { {"type" => type, "id" => id}.merge(data) }
|
100
|
+
end
|
96
101
|
else
|
97
102
|
{"type" => step, "id" => id}
|
98
103
|
end
|
@@ -99,6 +99,9 @@ module WSDirector
|
|
99
99
|
|
100
100
|
# Base protocol describes basic actions
|
101
101
|
class Base
|
102
|
+
class ReceiveTimeoutError < StandardError
|
103
|
+
end
|
104
|
+
|
102
105
|
include WSDirector::Utils
|
103
106
|
|
104
107
|
def initialize(task, scale: 1, logger: nil, id: nil, color: nil)
|
@@ -155,9 +158,11 @@ module WSDirector
|
|
155
158
|
def receive(step)
|
156
159
|
expected = step["data"] || PartialMatcher.new(step["data>"])
|
157
160
|
ordered = step["ordered"]
|
161
|
+
timeout = step.fetch("timeout", 5).to_f
|
158
162
|
|
159
|
-
log { "Receive a message: #{expected.truncate(
|
163
|
+
log { "Receive a message in #{timeout}s: #{expected.truncate(100)}" }
|
160
164
|
|
165
|
+
start = Time.now.to_f
|
161
166
|
received = nil
|
162
167
|
|
163
168
|
client.each_message do |msg, id|
|
@@ -170,10 +175,14 @@ module WSDirector
|
|
170
175
|
if ordered
|
171
176
|
raise UnmatchedExpectationError, prepare_receive_error(expected, received)
|
172
177
|
end
|
178
|
+
|
179
|
+
if Time.now.to_f - start > timeout
|
180
|
+
raise ReceiveTimeoutError
|
181
|
+
end
|
173
182
|
end
|
174
183
|
|
175
|
-
log(:done) { "Received a message: #{received&.truncate(
|
176
|
-
rescue ThreadError
|
184
|
+
log(:done) { "Received a message: #{received&.truncate(100)}" }
|
185
|
+
rescue ThreadError, ReceiveTimeoutError
|
177
186
|
if received
|
178
187
|
raise UnmatchedExpectationError, prepare_receive_error(expected, received)
|
179
188
|
else
|
@@ -92,7 +92,12 @@ module WSDirector
|
|
92
92
|
data["sample"] = [1, parse_multiplier(data["sample"])].max if data["sample"]
|
93
93
|
|
94
94
|
multiplier = parse_multiplier(data.delete("multiplier") || "1")
|
95
|
-
|
95
|
+
|
96
|
+
if type == "loop"
|
97
|
+
handle_steps(data.fetch("actions")) * multiplier
|
98
|
+
else
|
99
|
+
Array.new(multiplier) { {"type" => type, "id" => id}.merge(data) }
|
100
|
+
end
|
96
101
|
else
|
97
102
|
{"type" => step, "id" => id}
|
98
103
|
end
|
@@ -99,6 +99,9 @@ module WSDirector
|
|
99
99
|
|
100
100
|
# Base protocol describes basic actions
|
101
101
|
class Base
|
102
|
+
class ReceiveTimeoutError < StandardError
|
103
|
+
end
|
104
|
+
|
102
105
|
include WSDirector::Utils
|
103
106
|
|
104
107
|
def initialize(task, scale: 1, logger: nil, id: nil, color: nil)
|
@@ -155,9 +158,11 @@ module WSDirector
|
|
155
158
|
def receive(step)
|
156
159
|
expected = step["data"] || PartialMatcher.new(step["data>"])
|
157
160
|
ordered = step["ordered"]
|
161
|
+
timeout = step.fetch("timeout", 5).to_f
|
158
162
|
|
159
|
-
log { "Receive a message: #{expected.truncate(
|
163
|
+
log { "Receive a message in #{timeout}s: #{expected.truncate(100)}" }
|
160
164
|
|
165
|
+
start = Time.now.to_f
|
161
166
|
received = nil
|
162
167
|
|
163
168
|
client.each_message do |msg, id|
|
@@ -170,10 +175,14 @@ module WSDirector
|
|
170
175
|
if ordered
|
171
176
|
raise UnmatchedExpectationError, prepare_receive_error(expected, received)
|
172
177
|
end
|
178
|
+
|
179
|
+
if Time.now.to_f - start > timeout
|
180
|
+
raise ReceiveTimeoutError
|
181
|
+
end
|
173
182
|
end
|
174
183
|
|
175
|
-
log(:done) { "Received a message: #{received&.truncate(
|
176
|
-
rescue ThreadError
|
184
|
+
log(:done) { "Received a message: #{received&.truncate(100)}" }
|
185
|
+
rescue ThreadError, ReceiveTimeoutError
|
177
186
|
if received
|
178
187
|
raise UnmatchedExpectationError, prepare_receive_error(expected, received)
|
179
188
|
else
|
@@ -92,7 +92,12 @@ module WSDirector
|
|
92
92
|
data["sample"] = [1, parse_multiplier(data["sample"])].max if data["sample"]
|
93
93
|
|
94
94
|
multiplier = parse_multiplier(data.delete("multiplier") || "1")
|
95
|
-
|
95
|
+
|
96
|
+
if type == "loop"
|
97
|
+
handle_steps(data.fetch("actions")) * multiplier
|
98
|
+
else
|
99
|
+
Array.new(multiplier) { {"type" => type, "id" => id}.merge(data) }
|
100
|
+
end
|
96
101
|
else
|
97
102
|
{"type" => step, "id" => id}
|
98
103
|
end
|
data/lib/wsdirector/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wsdirector-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-10-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: websocket-client-simple
|
@@ -245,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
245
|
- !ruby/object:Gem::Version
|
246
246
|
version: '0'
|
247
247
|
requirements: []
|
248
|
-
rubygems_version: 3.
|
248
|
+
rubygems_version: 3.4.8
|
249
249
|
signing_key:
|
250
250
|
specification_version: 4
|
251
251
|
summary: Scenario-based WebSocket black-box testing
|