anyt 0.8.0 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +1 -1
- data/anyt.gemspec +3 -3
- data/etc/tests/channel_broadcast_test.rb +51 -0
- data/lib/anyt/cli.rb +9 -0
- data/lib/anyt/client.rb +1 -0
- data/lib/anyt/config.rb +8 -1
- data/lib/anyt/dummy/application.rb +16 -1
- data/lib/anyt/dummy/config.ru +3 -1
- data/lib/anyt/dummy/routes.rb +4 -0
- data/lib/anyt/rpc.rb +20 -9
- data/lib/anyt/tests.rb +25 -11
- data/lib/anyt/tests/core/welcome_test.rb +1 -1
- data/lib/anyt/version.rb +1 -1
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b45eb7502a2f6155788228c055c05232ad0ab7baf47509e70cb783479047eb07
|
4
|
+
data.tar.gz: 62266da53d1c2f5a58376fd64b340b7e6b94dac05af6ca16c1580f84723bf177
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 764bf51ba64a579c4906633cf19d46d156e143b66a642c96a285e6fb862cc34357da75f8c3ec2627afc4cedc3d72ca38d95a69990b53d42fbbfc9d8280b0521b
|
7
|
+
data.tar.gz: 57611bdee9877c384c651c8e45c928ecc85af77c888cb985c794fe9903735aed4660d3619afc5dd8ff0d191cf8509327baeeda65bfff9a8d73c33357607103c7
|
data/Makefile
CHANGED
data/anyt.gemspec
CHANGED
@@ -23,11 +23,11 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.executables << "anyt"
|
24
24
|
|
25
25
|
spec.add_dependency "rack", "~> 2"
|
26
|
-
spec.add_dependency "minitest", "~> 5.10
|
26
|
+
spec.add_dependency "minitest", "~> 5.10"
|
27
27
|
spec.add_dependency "minitest-reporters", "~> 1.1.0"
|
28
|
-
spec.add_dependency "rails", "
|
28
|
+
spec.add_dependency "rails", ">= 5.0"
|
29
29
|
spec.add_dependency "anycable-rails", "~> 0.6.0"
|
30
|
-
spec.add_dependency "redis", "~>
|
30
|
+
spec.add_dependency "redis", "~> 4.0"
|
31
31
|
spec.add_dependency "websocket", "~> 1.2.4"
|
32
32
|
spec.add_dependency "websocket-client-simple", "~> 0.3.0"
|
33
33
|
spec.add_dependency "concurrent-ruby", "~> 1.0.0"
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
feature "Broadcast data from channel" do
|
4
|
+
channel do
|
5
|
+
def subscribed
|
6
|
+
stream_from "a"
|
7
|
+
end
|
8
|
+
|
9
|
+
def speak(msg)
|
10
|
+
ActionCable.server.broadcast "a", text: msg["msg"]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:client2) { build_client(ignore: %w[ping welcome]) }
|
15
|
+
|
16
|
+
before do
|
17
|
+
subscribe_request = { command: "subscribe", identifier: { channel: channel }.to_json }
|
18
|
+
|
19
|
+
client.send(subscribe_request)
|
20
|
+
client2.send(subscribe_request)
|
21
|
+
|
22
|
+
ack = {
|
23
|
+
"identifier" => { channel: channel }.to_json, "type" => "confirm_subscription"
|
24
|
+
}
|
25
|
+
|
26
|
+
assert_equal ack, client.receive
|
27
|
+
assert_equal ack, client2.receive
|
28
|
+
end
|
29
|
+
|
30
|
+
scenario %{
|
31
|
+
Multiple clients receive messages from stream
|
32
|
+
} do
|
33
|
+
perform_request = {
|
34
|
+
command: "message",
|
35
|
+
identifier: { channel: channel }.to_json,
|
36
|
+
"data" => { "action" => "speak", "msg" => "hey there!"}.to_json
|
37
|
+
}
|
38
|
+
|
39
|
+
client.send(perform_request)
|
40
|
+
|
41
|
+
msg = {
|
42
|
+
"identifier" => { channel: channel }.to_json,
|
43
|
+
"message" => {
|
44
|
+
"text" => "hey there!"
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
assert_equal msg, client.receive
|
49
|
+
assert_equal msg, client2.receive
|
50
|
+
end
|
51
|
+
end
|
data/lib/anyt/cli.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require "logger"
|
4
4
|
require "optparse"
|
5
5
|
|
6
|
+
require "anyt/version"
|
6
7
|
require "anyt/rpc"
|
7
8
|
require "anyt/command"
|
8
9
|
require "anyt/tests"
|
@@ -21,6 +22,8 @@ module Anyt
|
|
21
22
|
|
22
23
|
result = 1
|
23
24
|
|
25
|
+
$stdout.puts "Starting AnyT v#{Anyt::VERSION} (pid: #{Process.pid})\n"
|
26
|
+
|
24
27
|
begin
|
25
28
|
# Load all test scenarios
|
26
29
|
Tests.load_tests
|
@@ -92,6 +95,12 @@ module Anyt
|
|
92
95
|
Anyt.config.wait_command = timeout
|
93
96
|
end
|
94
97
|
|
98
|
+
cli.on("-rPATH", "--require=PATH",
|
99
|
+
"Path to additional tests (e.g. features/*.rb") do |path|
|
100
|
+
Anyt.config.tests_relative_path = path
|
101
|
+
ENV["ANYT_TESTS_RELATIVE_PATH"] = path
|
102
|
+
end
|
103
|
+
|
95
104
|
cli.on("--debug", "Enable debug mode.") do
|
96
105
|
AnyCable.config.debug = true
|
97
106
|
end
|
data/lib/anyt/client.rb
CHANGED
data/lib/anyt/config.rb
CHANGED
@@ -7,9 +7,16 @@ module Anyt
|
|
7
7
|
class Config < Anyway::Config
|
8
8
|
attr_config :command,
|
9
9
|
:only_tests,
|
10
|
-
|
10
|
+
:tests_relative_path,
|
11
|
+
target_url: "ws://localhost:9292/cable",
|
11
12
|
wait_command: 2
|
12
13
|
|
14
|
+
def tests_path
|
15
|
+
return unless tests_relative_path
|
16
|
+
|
17
|
+
File.expand_path(tests_relative_path, Dir.pwd)
|
18
|
+
end
|
19
|
+
|
13
20
|
def filter_tests?
|
14
21
|
!only_tests.nil?
|
15
22
|
end
|
@@ -1,10 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "rails"
|
4
|
-
require "
|
4
|
+
require "action_controller/railtie"
|
5
|
+
require "action_cable/engine"
|
6
|
+
|
5
7
|
require "redis"
|
8
|
+
require "anycable-rails"
|
9
|
+
|
6
10
|
require "action_dispatch/middleware/cookies"
|
7
11
|
|
12
|
+
class TestApp < Rails::Application
|
13
|
+
secrets.secret_token = "secret_token"
|
14
|
+
secrets.secret_key_base = "secret_key_base"
|
15
|
+
|
16
|
+
config.logger = Logger.new(STDOUT)
|
17
|
+
config.log_level = :fatal
|
18
|
+
config.eager_load = true
|
19
|
+
|
20
|
+
config.paths["config/routes.rb"] << File.join(__dir__, "routes.rb")
|
21
|
+
end
|
22
|
+
|
8
23
|
module ApplicationCable
|
9
24
|
class Connection < ActionCable::Connection::Base
|
10
25
|
delegate :params, to: :request
|
data/lib/anyt/dummy/config.ru
CHANGED
data/lib/anyt/rpc.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require "anyt/dummy/application"
|
4
|
+
require "anycable-rails"
|
5
|
+
require "redis"
|
6
6
|
|
7
|
+
module Anyt # :nodoc:
|
7
8
|
# Runs AnyCable RPC server in the background
|
8
9
|
module RPC
|
9
10
|
using AsyncHelpers
|
@@ -11,21 +12,31 @@ module Anyt # :nodoc:
|
|
11
12
|
class << self
|
12
13
|
attr_accessor :running
|
13
14
|
|
15
|
+
# rubocop: disable Metrics/AbcSize,Metrics/MethodLength
|
14
16
|
def start
|
17
|
+
ActionCable.server.config.cable = { "adapter" => "any_cable" }
|
18
|
+
Rails.application.initialize!
|
19
|
+
|
15
20
|
AnyCable.logger.debug "Starting RPC server ..."
|
16
21
|
|
17
|
-
|
18
|
-
@thread.abort_on_exception = true
|
22
|
+
AnyCable.server_callbacks.each(&:call)
|
19
23
|
|
20
|
-
|
24
|
+
@server = AnyCable::Server.new(
|
25
|
+
host: AnyCable.config.rpc_host,
|
26
|
+
**AnyCable.config.to_grpc_params,
|
27
|
+
interceptors: AnyCable.middleware.to_a
|
28
|
+
)
|
29
|
+
|
30
|
+
AnyCable.middleware.freeze
|
31
|
+
|
32
|
+
@server.start
|
21
33
|
|
22
34
|
AnyCable.logger.debug "RPC server started"
|
23
35
|
end
|
36
|
+
# rubocop: enable Metrics/AbcSize,Metrics/MethodLength
|
24
37
|
|
25
38
|
def stop
|
26
|
-
|
27
|
-
|
28
|
-
AnyCable::Server.grpc_server.stop
|
39
|
+
@server.stop
|
29
40
|
end
|
30
41
|
end
|
31
42
|
|
data/lib/anyt/tests.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "anyt"
|
4
|
+
require "anyt/client"
|
5
|
+
require_relative "ext/minitest"
|
6
|
+
|
3
7
|
module Anyt
|
4
8
|
# Loads and runs test cases
|
5
9
|
module Tests
|
6
|
-
require "anyt/client"
|
7
|
-
require_relative "ext/minitest"
|
8
|
-
|
9
10
|
class << self
|
11
|
+
DEFAULT_PATTERNS = [
|
12
|
+
File.expand_path("tests/**/*.rb", __dir__)
|
13
|
+
].freeze
|
14
|
+
|
10
15
|
# Run all loaded tests
|
11
16
|
def run
|
12
17
|
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
@@ -24,15 +29,16 @@ module Anyt
|
|
24
29
|
def load_tests
|
25
30
|
return load_all_tests unless Anyt.config.filter_tests?
|
26
31
|
|
27
|
-
pattern = File.expand_path("tests/**/*.rb", __dir__)
|
28
32
|
skipped = []
|
29
33
|
filter = Anyt.config.tests_filter
|
30
34
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
35
|
+
test_files_patterns.each do |pattern|
|
36
|
+
Dir.glob(pattern).each do |file|
|
37
|
+
if file.match?(filter)
|
38
|
+
require file
|
39
|
+
else
|
40
|
+
skipped << file.gsub(File.join(__dir__, 'tests/'), '').gsub('_test.rb', '')
|
41
|
+
end
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
@@ -41,9 +47,17 @@ module Anyt
|
|
41
47
|
|
42
48
|
# Load all test files
|
43
49
|
def load_all_tests
|
44
|
-
|
50
|
+
test_files_patterns.each do |pattern|
|
51
|
+
Dir.glob(pattern).each { |file| require file }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
45
56
|
|
46
|
-
|
57
|
+
def test_files_patterns
|
58
|
+
@test_files_patterns ||= DEFAULT_PATTERNS.dup.tap do |patterns|
|
59
|
+
patterns << Anyt.config.tests_path if Anyt.config.tests_path
|
60
|
+
end
|
47
61
|
end
|
48
62
|
end
|
49
63
|
end
|
data/lib/anyt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anyt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- palkan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 5.10
|
33
|
+
version: '5.10'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 5.10
|
40
|
+
version: '5.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest-reporters
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,14 +56,14 @@ dependencies:
|
|
56
56
|
name: rails
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '5.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '5.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '4.0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '4.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: websocket
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,6 +254,7 @@ files:
|
|
254
254
|
- bin/console
|
255
255
|
- bin/setup
|
256
256
|
- circle.yml
|
257
|
+
- etc/tests/channel_broadcast_test.rb
|
257
258
|
- lib/anyt.rb
|
258
259
|
- lib/anyt/cli.rb
|
259
260
|
- lib/anyt/client.rb
|
@@ -261,6 +262,7 @@ files:
|
|
261
262
|
- lib/anyt/config.rb
|
262
263
|
- lib/anyt/dummy/application.rb
|
263
264
|
- lib/anyt/dummy/config.ru
|
265
|
+
- lib/anyt/dummy/routes.rb
|
264
266
|
- lib/anyt/ext/minitest.rb
|
265
267
|
- lib/anyt/rpc.rb
|
266
268
|
- lib/anyt/tests.rb
|
@@ -298,8 +300,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
298
300
|
- !ruby/object:Gem::Version
|
299
301
|
version: '0'
|
300
302
|
requirements: []
|
301
|
-
|
302
|
-
rubygems_version: 2.7.7
|
303
|
+
rubygems_version: 3.0.6
|
303
304
|
signing_key:
|
304
305
|
specification_version: 4
|
305
306
|
summary: Anycable conformance testing tool
|