anyt 0.8.0 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
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