anyt 1.0.2 → 1.0.3

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: cc9f527d5ead1058291854236f7b011c64df27da0be2559bb27893c1dbb471fc
4
- data.tar.gz: 0dce342de8720db9d2208e4fc44c7c1ba3b489c0d82bce7b936152df2c70ccca
3
+ metadata.gz: 42cd66b2a05dcf5d46c060a2a9540c26368fe003f86febfb94c8104a3ccfacc9
4
+ data.tar.gz: e1f8c0cbe88a223d9383f8467e44f75f05ad6d1718c309d19f7d90a102b7f9ad
5
5
  SHA512:
6
- metadata.gz: 6237b496a2cfb034d4b0d83eff127be84c360a124039bf14c32e4886732f9b9cff9def7e1515168dc87027ca85bcc64b78dfdd4d10988a1e84206b9fc4be7b3a
7
- data.tar.gz: 9cd9d41ebdaf1321d13a08685b1955fe92875fb86fda8c4a230b1df9d30e7e39e5564a2614fb1693666a203926770cbdf3d9a0fda7265f3893524baa7cb8f89a
6
+ metadata.gz: 86714f4bfbddf5242491bb371b714becfaffd3353fe275f8badb3839731bcdcfc66b96d2188d9fe4089ca612234edd72243c13c0e0263932337df5758a19eaa9
7
+ data.tar.gz: b3b2af67d98a2542ba05912694f76b052d5a51b4bb3d84159af45aece063faf03242f46065687e765268395fef52d607a7bfc0989918af62b4d2582e46d37020
@@ -32,7 +32,7 @@ module Anyt
32
32
  end
33
33
 
34
34
  # Load all test scenarios
35
- Tests.load_tests
35
+ Tests.load_tests unless @skip_tests
36
36
 
37
37
  Rails.application.initialize!
38
38
 
@@ -50,8 +50,14 @@ module Anyt
50
50
  # Start webosocket server under test
51
51
  Command.run
52
52
 
53
- # Run tests
54
- result = Tests.run ? 0 : 1
53
+ unless @skip_tests
54
+ # Run tests
55
+ result = Tests.run ? 0 : 1
56
+ end
57
+
58
+ wait_till_terminated if @only_rails
59
+ rescue Interrupt => e
60
+ $stdout.puts "#{e.message}. Good-bye!"
55
61
  ensure
56
62
  RPC.stop unless @skip_rpc
57
63
  Command.stop
@@ -91,16 +97,21 @@ module Anyt
91
97
 
92
98
  cli.on("--only-rpc", TrueClass, "Run only RPC server") do |flag|
93
99
  @only_rpc = flag
100
+ @skip_tests = true
101
+ end
102
+
103
+ cli.on("--only-rails", TrueClass, "Run only Rails server") do
104
+ @skip_rpc = true
105
+ @only_rails = true
106
+ @skip_tests = true
107
+
108
+ configure_rails_command!
94
109
  end
95
110
 
96
111
  cli.on("--self-check", "Run tests again Action Cable itself") do
97
112
  @skip_rpc = true
98
- dummy_path = ::File.expand_path(
99
- "config.ru",
100
- ::File.join(::File.dirname(__FILE__), "dummy")
101
- )
102
- Anyt.config.command = "bundle exec puma #{dummy_path}"
103
- Anyt.config.use_action_cable = true
113
+
114
+ configure_rails_command!
104
115
  end
105
116
 
106
117
  cli.on("--only test1,test2,test3", Array, "Run only specified tests") do |only_tests|
@@ -149,6 +160,36 @@ module Anyt
149
160
  puts "Use `anyt --help` to list all available options."
150
161
  exit 1
151
162
  end
163
+
164
+ def configure_rails_command!
165
+ dummy_path = ::File.expand_path(
166
+ "config.ru",
167
+ ::File.join(::File.dirname(__FILE__), "dummy")
168
+ )
169
+ Anyt.config.command = "bundle exec puma #{dummy_path}"
170
+ Anyt.config.use_action_cable = true
171
+ end
172
+
173
+ def wait_till_terminated
174
+ self_read = setup_signals
175
+
176
+ while readable_io = IO.select([self_read]) # rubocop:disable Lint/AssignmentInCondition
177
+ signal = readable_io.first[0].gets.strip
178
+ raise Interrupt, "SIG#{signal} received"
179
+ end
180
+ end
181
+
182
+ def setup_signals
183
+ self_read, self_write = IO.pipe
184
+
185
+ %w[INT TERM].each do |signal|
186
+ trap signal do
187
+ self_write.puts signal
188
+ end
189
+ end
190
+
191
+ self_read
192
+ end
152
193
  end
153
194
  end
154
195
  end
@@ -11,6 +11,8 @@ module Anyt
11
11
  def run
12
12
  return if running?
13
13
 
14
+ raise "Please, specify command via -c (--command) option" unless Anyt.config.command
15
+
14
16
  AnyCable.logger.debug "Running command: #{Anyt.config.command}"
15
17
 
16
18
  @process = ChildProcess.build(*Anyt.config.command.split(/\s+/))
@@ -42,6 +42,29 @@ module ApplicationCable
42
42
  end
43
43
  end
44
44
 
45
+ # BenchmarkChannel is useful when running Rails app only or RPC only
46
+ class BenchmarkChannel < ApplicationCable::Channel
47
+ def subscribed
48
+ stream_from "all#{stream_id}"
49
+ end
50
+
51
+ def echo(data)
52
+ transmit data
53
+ end
54
+
55
+ def broadcast(data)
56
+ ActionCable.server.broadcast "all#{stream_id}", data
57
+ data["action"] = "broadcastResult"
58
+ transmit data
59
+ end
60
+
61
+ private
62
+
63
+ def stream_id
64
+ params[:id] || ""
65
+ end
66
+ end
67
+
45
68
  ActionCable.server.config.cable = {"adapter" => "redis"}
46
69
  ActionCable.server.config.connection_class = -> { ApplicationCable::Connection }
47
70
  ActionCable.server.config.disable_request_forgery_protection = true
@@ -17,6 +17,8 @@ feature "Channel state" do
17
17
  end
18
18
 
19
19
  def unsubscribed
20
+ return unless params["notify_disconnect"]
21
+
20
22
  ActionCable.server.broadcast("state_counts", data: "user left: #{user[:name]}")
21
23
  end
22
24
  end
@@ -24,7 +26,7 @@ feature "Channel state" do
24
26
  let(:identifier) { {channel: channel, name: "chipolino"}.to_json }
25
27
 
26
28
  let(:client2) { build_client(ignore: %w[ping welcome]) }
27
- let(:identifier2) { {channel: channel, name: "chipollone"}.to_json }
29
+ let(:identifier2) { {channel: channel, name: "chipollone", notify_disconnect: true}.to_json }
28
30
 
29
31
  before do
30
32
  subscribe_request = {command: "subscribe", identifier: identifier}
@@ -67,13 +69,13 @@ feature "Channel state" do
67
69
 
68
70
  assert_equal ack, client2.receive
69
71
 
70
- client.close
72
+ client2.close
71
73
 
72
74
  msg = {
73
- "identifier" => identifier2,
74
- "message" => {"data" => "user left: chipolino"}
75
+ "identifier" => identifier,
76
+ "message" => {"data" => "user left: chipollone"}
75
77
  }
76
78
 
77
- assert_equal msg, client2.receive
79
+ assert_equal msg, client.receive
78
80
  end
79
81
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Anyt
4
- VERSION = "1.0.2"
4
+ VERSION = "1.0.3"
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: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-08 00:00:00.000000000 Z
11
+ date: 2020-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack