em-cometio-client 0.0.1 → 0.0.2

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.
data/Gemfile CHANGED
@@ -2,3 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in em-cometio-client.gemspec
4
4
  gemspec
5
+ gem 'minitest'
6
+ gem 'sinatra-cometio'
7
+ gem 'thin'
@@ -1,3 +1,7 @@
1
+ === 0.0.2 2013-3-4
2
+
3
+ * add test
4
+
1
5
  === 0.0.1 2013-3-4
2
6
 
3
7
  * EM::CometIO::Client
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  em-cometio-client
2
2
  =================
3
- [Sinatra CometIO](https://github.com/shokai/em-cometio-client) client for eventmachine
3
+ [Sinatra CometIO](https://github.com/shokai/em-cometio-client) Client for eventmachine
4
4
 
5
5
  * https://github.com/shokai/em-cometio-client
6
6
 
@@ -61,6 +61,16 @@ sample chat client
61
61
  % ruby sample/cui_chat_client.rb
62
62
 
63
63
 
64
+ Test
65
+ ----
66
+
67
+ % gem install bundler
68
+ % bundle install
69
+ % export PORT=5000
70
+ % export PID_FILE=/tmp/em-cometio-client-testapp.pid
71
+ % rake test
72
+
73
+
64
74
  Contributing
65
75
  ------------
66
76
  1. Fork it
data/Rakefile CHANGED
@@ -1 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.pattern = "test/test_*.rb"
6
+ end
7
+
8
+ task :default => :test
@@ -1,7 +1,7 @@
1
1
  module EventMachine
2
2
  module CometIO
3
3
  class Client
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,57 @@
1
+ class App
2
+
3
+ def self.running
4
+ @running ? true : false
5
+ end
6
+
7
+ def self.port
8
+ ENV['PORT'] || 5000
9
+ end
10
+
11
+ def self.cometio_url
12
+ "http://localhost:#{port}/cometio/io"
13
+ end
14
+
15
+ def self.pid_file
16
+ ENV['PID_FILE'] || "/tmp/em-cometio-client-testapp.pid"
17
+ end
18
+
19
+ def self.app_dir
20
+ File.expand_path 'app', File.dirname(__FILE__)
21
+ end
22
+
23
+ def self.pid
24
+ return unless @running
25
+ File.open(pid_file) do |f|
26
+ pid = f.gets.strip.to_i
27
+ return pid if pid > 0
28
+ end
29
+ return
30
+ end
31
+
32
+ def self.start
33
+ return if @running
34
+ File.delete pid_file if File.exists? pid_file
35
+ Thread.new do
36
+ IO::popen "cd #{app_dir} && PID_FILE=#{pid_file} rackup config.ru -p #{port} > /dev/null 2>&1"
37
+ end
38
+ @running = true
39
+ 100.times do
40
+ if File.exists? pid_file
41
+ sleep 1
42
+ return true
43
+ end
44
+ sleep 0.1
45
+ end
46
+ @running = false
47
+ return false
48
+ end
49
+
50
+ def self.stop
51
+ return unless @running
52
+ system "kill #{pid}"
53
+ File.delete pid_file if File.exists? pid_file
54
+ @running = false
55
+ end
56
+
57
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.require
4
+ $stdout.sync = true
5
+ require 'sinatra'
6
+ require 'sinatra/cometio'
7
+ require File.dirname(__FILE__)+'/main'
8
+
9
+ run TestApp
@@ -0,0 +1,31 @@
1
+ pid_file = ENV['PID_FILE'] || "/tmp/sinatra-cometio-test-pid"
2
+ File.open(pid_file, "w+") do |f|
3
+ f.write Process.pid.to_s
4
+ end
5
+
6
+ class TestApp < Sinatra::Application
7
+
8
+ get '/' do
9
+ "sinatra-cometio v#{Sinatra::CometIO::VERSION}"
10
+ end
11
+
12
+ CometIO.on :connect do |session|
13
+ puts "new client <#{session}>"
14
+ end
15
+
16
+ CometIO.on :disconnect do |session|
17
+ puts "disconnect client <#{session}>"
18
+ end
19
+
20
+ CometIO.on :broadcast do |data, from|
21
+ puts from
22
+ puts "broadcast <#{from}> - #{data.to_json}"
23
+ push :broadcast, data
24
+ end
25
+
26
+ CometIO.on :message do |data, from|
27
+ puts "message <#{from}> - #{data.to_json}"
28
+ push :message, data, :to => data['to']
29
+ end
30
+
31
+ end
@@ -0,0 +1,136 @@
1
+ require File.expand_path 'test_helper', File.dirname(__FILE__)
2
+
3
+ class TestEmCometioClient < MiniTest::Unit::TestCase
4
+
5
+ def setup
6
+ App.start
7
+ end
8
+
9
+ def teardown
10
+ App.stop
11
+ end
12
+
13
+ def test_simple
14
+ post_data = {:time => Time.now.to_s, :msg => 'hello!!'}
15
+ res = nil
16
+
17
+ EM::run do
18
+ client = EM::CometIO::Client.new(App.cometio_url).connect
19
+ client.on :broadcast do |data|
20
+ res = data
21
+ client.close
22
+ EM::add_timer 1 do
23
+ EM::stop
24
+ end
25
+ end
26
+
27
+ client.on :connect do |session|
28
+ push :broadcast, post_data
29
+ end
30
+
31
+ client.on :error do |err|
32
+ EM::add_timer 1 do
33
+ EM::stop
34
+ end
35
+ end
36
+ end
37
+
38
+ assert res != nil, 'server not respond'
39
+ assert res["time"] == post_data[:time]
40
+ assert res["msg"] == post_data[:msg]
41
+ end
42
+
43
+ def test_client_to_client2
44
+ ## client --> server --> client2
45
+ post_data = {:time => Time.now.to_s, :msg => 'hello!!', :to => nil}
46
+ res = nil
47
+ res2 = nil
48
+ EM::run do
49
+ client = EM::CometIO::Client.new(App.cometio_url).connect
50
+ client.on :message do |data|
51
+ res = data
52
+ end
53
+
54
+ client.on :error do |err|
55
+ EM::add_timer 1 do
56
+ EM::stop
57
+ end
58
+ end
59
+
60
+ client.on :connect do |session|
61
+ client2 = EM::CometIO::Client.new(App.cometio_url).connect
62
+ client2.on :error do |err|
63
+ EM::add_timer 1 do
64
+ EM::stop
65
+ end
66
+ end
67
+ client2.on :connect do |session2|
68
+ post_data['to'] = session2
69
+ client.push :message, post_data
70
+ end
71
+ client2.on :message do |data|
72
+ res2 = data
73
+ client2.close
74
+ client.close
75
+ EM::add_timer 1 do
76
+ EM::stop
77
+ end
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ assert res2 != nil, 'server not respond'
84
+ assert res2["time"] == post_data[:time]
85
+ assert res2["msg"] == post_data[:msg]
86
+ assert res == nil
87
+ end
88
+
89
+
90
+ def test_broadcast
91
+ ## client --> server --> client&client2
92
+ post_data = {:time => Time.now.to_s, :msg => 'hello!!'}
93
+ res = nil
94
+ res2 = nil
95
+ EM::run do
96
+ client = EM::CometIO::Client.new(App.cometio_url).connect
97
+ client.on :broadcast do |data|
98
+ res = data
99
+ client.close
100
+ end
101
+
102
+ client.on :error do |err|
103
+ EM::add_timer 1 do
104
+ EM::stop
105
+ end
106
+ end
107
+
108
+ client.on :connect do |session|
109
+ client2 = EM::CometIO::Client.new(App.cometio_url).connect
110
+ client2.on :error do |err|
111
+ EM::add_timer 1 do
112
+ EM::stop
113
+ end
114
+ end
115
+ client2.on :connect do |session2|
116
+ client.push :broadcast, post_data
117
+ end
118
+ client2.on :broadcast do |data|
119
+ res2 = data
120
+ client2.close
121
+ EM::add_timer 1 do
122
+ EM::stop
123
+ end
124
+ end
125
+ end
126
+
127
+ end
128
+ assert res != nil, 'server not respond'
129
+ assert res["time"] == post_data[:time]
130
+ assert res["msg"] == post_data[:msg]
131
+ assert res2 != nil
132
+ assert res2["time"] == post_data[:time]
133
+ assert res2["msg"] == post_data[:msg]
134
+ end
135
+
136
+ end
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'minitest/autorun'
3
+ require 'em-cometio-client'
4
+ require File.expand_path 'app', File.dirname(__FILE__)
5
+
6
+ $:.unshift File.expand_path '../lib', File.dirname(__FILE__)
7
+
8
+ ['SIGHUP', 'SIGINT', 'SIGKILL', 'SIGTERM'].each do |sig|
9
+ Kernel.trap sig do
10
+ App.stop
11
+ EM::add_timer do
12
+ EM::stop
13
+ end
14
+ end
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-cometio-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -93,6 +93,11 @@ files:
93
93
  - lib/em-cometio-client/client.rb
94
94
  - lib/em-cometio-client/version.rb
95
95
  - sample/cui_chat_client.rb
96
+ - test/app.rb
97
+ - test/app/config.ru
98
+ - test/app/main.rb
99
+ - test/test_em_cometio_client.rb
100
+ - test/test_helper.rb
96
101
  homepage: https://github.com/shokai/em-cometio-client
97
102
  licenses: []
98
103
  post_install_message:
@@ -117,4 +122,9 @@ rubygems_version: 1.8.24
117
122
  signing_key:
118
123
  specification_version: 3
119
124
  summary: Sinatra CometIO client for eventmachine
120
- test_files: []
125
+ test_files:
126
+ - test/app.rb
127
+ - test/app/config.ru
128
+ - test/app/main.rb
129
+ - test/test_em_cometio_client.rb
130
+ - test/test_helper.rb