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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d56c7de8b5d8ad2df54f756ad961cfe05d6d12e961b3c9bcca2d68084fd5413
4
- data.tar.gz: 9a39e7cdd7d5f72d6cdb427765a3320c76e1201dba20bc75c958a764b78f4c21
3
+ metadata.gz: b45eb7502a2f6155788228c055c05232ad0ab7baf47509e70cb783479047eb07
4
+ data.tar.gz: 62266da53d1c2f5a58376fd64b340b7e6b94dac05af6ca16c1580f84723bf177
5
5
  SHA512:
6
- metadata.gz: 6b0ce87b22d20082ce0d9848e7ba01d64bc35375f5970a3efe04fd28ea79c72bda22887bb5d69b7588946d02cbaf7105ca65fd2ea08bc07cf791c081abddc439
7
- data.tar.gz: 5b6f1d8f4057601fc3fc394b18ae60db944c59f4f10dc305a038759be2da8cdab76fe88dab71a3698d6804e077f481f8ab16ed808610e314f475ca542411b0c1
6
+ metadata.gz: 764bf51ba64a579c4906633cf19d46d156e143b66a642c96a285e6fb862cc34357da75f8c3ec2627afc4cedc3d72ca38d95a69990b53d42fbbfc9d8280b0521b
7
+ data.tar.gz: 57611bdee9877c384c651c8e45c928ecc85af77c888cb985c794fe9903735aed4660d3619afc5dd8ff0d191cf8509327baeeda65bfff9a8d73c33357607103c7
data/Makefile CHANGED
@@ -2,4 +2,4 @@ lint:
2
2
  bundle exec rubocop
3
3
 
4
4
  test:
5
- bin/anyt --self-check
5
+ bin/anyt --self-check --require=etc/tests/*.rb
@@ -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.1"
26
+ spec.add_dependency "minitest", "~> 5.10"
27
27
  spec.add_dependency "minitest-reporters", "~> 1.1.0"
28
- spec.add_dependency "rails", "~> 5.0"
28
+ spec.add_dependency "rails", ">= 5.0"
29
29
  spec.add_dependency "anycable-rails", "~> 0.6.0"
30
- spec.add_dependency "redis", "~> 3.0"
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
@@ -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
@@ -48,6 +48,7 @@ module Anyt
48
48
  end
49
49
 
50
50
  ws.on(:message) do |event|
51
+ next if event.type == :ping
51
52
  if event.type == :close
52
53
  closed.set
53
54
  else
@@ -7,9 +7,16 @@ module Anyt
7
7
  class Config < Anyway::Config
8
8
  attr_config :command,
9
9
  :only_tests,
10
- target_url: "ws://localhost:9292/",
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 "action_cable"
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
@@ -7,4 +7,6 @@ require_relative "../tests"
7
7
  # Load channels from tests
8
8
  Anyt::Tests.load_all_tests
9
9
 
10
- run ActionCable.server
10
+ Rails.application.initialize!
11
+
12
+ run Rails.application
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.routes.draw do
4
+ end
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Anyt # :nodoc:
4
- require "anyt/dummy/application"
5
- require "anycable"
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
- @thread = Thread.new { AnyCable::Server.start }
18
- @thread.abort_on_exception = true
22
+ AnyCable.server_callbacks.each(&:call)
19
23
 
20
- wait(2) { AnyCable::Server.running? }
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
- return unless AnyCable::Server.running?
27
-
28
- AnyCable::Server.grpc_server.stop
39
+ @server.stop
29
40
  end
30
41
  end
31
42
 
@@ -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
- Dir.glob(pattern).each do |file|
32
- if file.match?(filter)
33
- require file
34
- else
35
- skipped << file.gsub(File.join(__dir__, 'tests/'), '').gsub('_test.rb', '')
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
- pattern = File.expand_path("tests/**/*.rb", __dir__)
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
- Dir.glob(pattern).each { |file| require file }
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
@@ -4,7 +4,7 @@ feature "Welcome" do
4
4
  scenario %{
5
5
  Client receives "welcome" message
6
6
  } do
7
- client = build_client
7
+ client = build_client(ignore: ["ping"])
8
8
  assert_equal client.receive, "type" => "welcome"
9
9
  end
10
10
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Anyt
4
- VERSION = "0.8.0"
4
+ VERSION = "0.8.5"
5
5
  end
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.0
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: 2018-12-03 00:00:00.000000000 Z
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.1
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.1
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: '3.0'
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: '3.0'
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
- rubyforge_project:
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