tlb-rspec1 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/.emacs_project +18 -6
  2. data/lib/tlb.rb +116 -24
  3. data/test.sh +42 -0
  4. metadata +83 -87
@@ -1,7 +1,19 @@
1
1
  (setq rspec-executable "spec")
2
- (setenv "GEM_HOME" "/home/janmejay/.rvm/gems/ruby-1.9.2-head@rspec-1")
3
- (setenv "GEM_PATH" "/home/janmejay/.rvm/gems/ruby-1.9.2-head@rspec-1:/home/janmejay/.rvm/gems/ruby-1.9.2-head@global")
4
- (let ((bindir "/home/janmejay/.rvm/gems/ruby-1.9.2-head@rspec-1/bin")
5
- (path (getenv "PATH")))
6
- (unless (string-match-p bindir path)
7
- (setenv "PATH" (concat bindir ":" path))))
2
+ (setq rb_platform "jruby")
3
+ (setq rb_platform "mri")
4
+
5
+ (unless (getenv "ORIG_PATH")
6
+ (setenv "ORIG_PATH" (getenv "PATH")))
7
+
8
+ (defun add-gem-bin (gem-bin)
9
+ (setenv "PATH" (concat gem-bin ":" (getenv "ORIG_PATH"))))
10
+
11
+ (if (equal rb_platform "jruby")
12
+ (progn
13
+ (setenv "GEM_HOME" "/home/janmejay/.rvm/gems/jruby-1.5.6@tlb")
14
+ (setenv "GEM_PATH" "/home/janmejay/.rvm/gems/jruby-1.5.6@tlb:/home/janmejay/.rvm/gems/jruby-1.5.6@global")
15
+ (add-gem-bin "/home/janmejay/.rvm/gems/jruby-1.5.6@tlb/bin"))
16
+ (progn
17
+ (setenv "GEM_HOME" "/home/janmejay/.rvm/gems/ruby-1.9.2-head@rspec-1")
18
+ (setenv "GEM_PATH" "/home/janmejay/.rvm/gems/ruby-1.9.2-head@rspec-1:/home/janmejay/.rvm/gems/ruby-1.8.7-head@global")
19
+ (add-gem-bin "/home/janmejay/.rvm/gems/ruby-1.9.2-head@rspec-1/bin")))
data/lib/tlb.rb CHANGED
@@ -23,7 +23,7 @@ module Tlb
23
23
  end
24
24
 
25
25
  def self.port
26
- ENV[TLB_BALANCER_PORT]
26
+ ENV[TLB_BALANCER_PORT] || '8019'
27
27
  end
28
28
 
29
29
  def self.send path, data
@@ -44,10 +44,13 @@ module Tlb
44
44
  false
45
45
  end
46
46
 
47
+ def self.terminate
48
+ get("/control/suicide")
49
+ end
50
+
47
51
  def self.wait_for_start
48
52
  loop do
49
53
  begin
50
- TCPSocket.new(host, port)
51
54
  break if running?
52
55
  rescue
53
56
  #ignore
@@ -103,37 +106,126 @@ module Tlb
103
106
  "java -jar #{tlb_jar}"
104
107
  end
105
108
 
106
- def self.write_to_file file_var, clob
107
- File.open(ENV[file_var], 'a') do |h|
108
- h.write(clob)
109
+ def self.can_fork?
110
+ RUBY_PLATFORM != 'java'
111
+ end
112
+
113
+ class BalancerProcess
114
+ class StreamPumper
115
+ def initialize stream, file
116
+ @stream, @file = stream, file
117
+ @thd = Thread.new { pump }
118
+ end
119
+
120
+ def pump
121
+ loop do
122
+ data_available? && flush_stream
123
+ Thread.current[:stop_pumping] && break
124
+ sleep 0.1
125
+ end
126
+ end
127
+
128
+ def flush_stream
129
+ File.open(ENV[@file], 'a') do |h|
130
+ h.write(read)
131
+ end
132
+ end
133
+
134
+ def stop_pumping!
135
+ @thd[:stop_pumping] = true
136
+ @thd.join
137
+ end
138
+ end
139
+
140
+ def initialize server_command
141
+ pumper_type, out, err = start(server_command)
142
+ @out_pumper = pumper_type.new(out, TLB_OUT_FILE)
143
+ @err_pumper = pumper_type.new(err, TLB_ERR_FILE)
144
+ end
145
+
146
+ def stop_pumping
147
+ @out_pumper.stop_pumping!
148
+ @err_pumper.stop_pumping!
149
+ end
150
+
151
+ def die
152
+ Balancer.terminate
153
+ stop_pumping
109
154
  end
110
155
  end
111
156
 
112
- def self.start_server
113
- ENV[TLB_APP] = 'tlb.balancer.BalancerInitializer'
114
- @pid, input, out, err = Open4.popen4(server_command)
115
- @out_pumper = stream_pumper_for(out, TLB_OUT_FILE)
116
- @err_pumper = stream_pumper_for(err, TLB_ERR_FILE)
117
- Balancer.wait_for_start
157
+ class ForkBalancerProcess < BalancerProcess
158
+ def start server_command
159
+ @pid, input, out, err = Open4.popen4(server_command)
160
+ unless (out)
161
+ raise "out was nil"
162
+ end
163
+ return Class.new(StreamPumper) do
164
+ def data_available?
165
+ not @stream.eof?
166
+ end
167
+
168
+ def read
169
+ @stream.read
170
+ end
171
+ end, out, err
172
+ end
173
+
174
+ def die
175
+ super
176
+ @pid = nil
177
+ Process.wait
178
+ end
118
179
  end
119
180
 
120
- def self.stream_pumper_for stream, dump_file
121
- Thread.new do
122
- loop do
123
- stream.eof? || write_to_file(dump_file, stream.read)
124
- Thread.current[:stop_pumping] && break
125
- sleep 1
181
+ class JavaBalancerProcess < BalancerProcess
182
+ def start server_command
183
+ require 'java'
184
+ pb = java.lang.ProcessBuilder.new(server_command.split)
185
+ ENV.each do |key, val|
186
+ pb.environment[key] = val
126
187
  end
188
+ @process = pb.start()
189
+ return Class.new(StreamPumper) do
190
+ def data_available?
191
+ @stream.ready
192
+ end
193
+
194
+ def read
195
+ @stream.read_line
196
+ end
197
+
198
+ def stop_pumping!
199
+ super
200
+ @stream.close
201
+ end
202
+ end, buf_reader(@process.input_stream), buf_reader(@process.error_stream)
127
203
  end
204
+
205
+ def buf_reader stream
206
+ java.io.BufferedReader.new(java.io.InputStreamReader.new(stream))
207
+ end
208
+
209
+ def die
210
+ super
211
+ @process.destroy
212
+ @process.waitFor
213
+ @process = nil
214
+ end
215
+ end
216
+
217
+ def self.balancer_process_type
218
+ can_fork? ? ForkBalancerProcess : JavaBalancerProcess
219
+ end
220
+
221
+ def self.start_server
222
+ ENV[TLB_APP] = 'tlb.balancer.BalancerInitializer'
223
+ bal_klass = balancer_process_type
224
+ @balancer_process = bal_klass.new(server_command)
225
+ Balancer.wait_for_start
128
226
  end
129
227
 
130
228
  def self.stop_server
131
- Process.kill(Signal.list["TERM"], @pid)
132
- @pid = nil
133
- @out_pumper[:stop_pumping] = true
134
- @err_pumper[:stop_pumping] = true
135
- @out_pumper.join
136
- @err_pumper.join
137
- Process.wait
229
+ @balancer_process.die
138
230
  end
139
231
  end
data/test.sh ADDED
@@ -0,0 +1,42 @@
1
+ #!/bin/bash
2
+
3
+ # this is a smart hack strictly meant for developer convinience, not for CI. -janmejay
4
+
5
+ [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
6
+
7
+ sep() {
8
+ in_red "-----------------------------------------------------------------"
9
+ echo
10
+ }
11
+
12
+ function in_red {
13
+ tput sgr0
14
+ tput setaf 1;
15
+ tput setab 7;
16
+ echo -n $1;
17
+ tput sgr0
18
+ }
19
+
20
+ function show_running_with {
21
+ echo -e "\n"
22
+ sep
23
+ in_red "|"
24
+ echo -n " "
25
+ tput setaf 4
26
+ echo -n "Running tests with: "
27
+ tput bold;
28
+ tput setaf 0
29
+ ruby --version
30
+ sep
31
+ echo
32
+ }
33
+
34
+ run_tests_with() {
35
+ rvm use $1
36
+ show_running_with
37
+ rake spec
38
+ }
39
+
40
+ run_tests_with ruby-1.9.2-head@rspec-1
41
+
42
+ run_tests_with jruby-1.5.6@rspec-1
metadata CHANGED
@@ -3,71 +3,68 @@ name: tlb-rspec1
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
- - 0
7
- - 3
8
- - 0
9
- version: 0.3.0
6
+ - 0
7
+ - 3
8
+ - 1
9
+ version: 0.3.1
10
10
  platform: ruby
11
11
  authors:
12
- - Janmejay Singh
13
- - Pavan KS
12
+ - Janmejay Singh
13
+ - Pavan KS
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-05 00:00:00 +05:30
18
+ date: 2011-05-11 00:00:00 +05:30
19
19
  default_executable:
20
20
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: open4
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- segments:
30
- - 1
31
- - 0
32
- - 1
33
- version: 1.0.1
34
- type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: rake
38
- prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- segments:
45
- - 0
46
- version: "0"
47
- type: :runtime
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
- name: rspec
51
- prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- segments:
58
- - 1
59
- - 3
60
- - 0
61
- version: 1.3.0
62
- - - <
63
- - !ruby/object:Gem::Version
64
- segments:
65
- - 2
66
- - 0
67
- - 0
68
- version: 2.0.0
69
- type: :runtime
70
- version_requirements: *id003
21
+ - !ruby/object:Gem::Dependency
22
+ name: open4
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 0
31
+ - 1
32
+ version: 1.0.1
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :runtime
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 1
56
+ - 3
57
+ - 0
58
+ version: 1.3.0
59
+ - - <
60
+ - !ruby/object:Gem::Version
61
+ segments:
62
+ - 2
63
+ - 0
64
+ - 0
65
+ version: 2.0.0
66
+ type: :runtime
67
+ version_requirements: *id003
71
68
  description: |
72
69
  TLB ruby implementation base, which provides support for load balancing tests written in rspec-1.x.
73
70
  TLB.rb test suite is not bundled, please check http://github.com/test-load-balancer/tlb.rb for tests.
@@ -79,21 +76,22 @@ executables: []
79
76
  extensions: []
80
77
 
81
78
  extra_rdoc_files:
82
- - README.markdown
79
+ - README.markdown
83
80
  files:
84
- - .emacs_project
85
- - .gitignore
86
- - .gitmodules
87
- - README.markdown
88
- - Rakefile
89
- - gem_common.rb
90
- - lib/tasks/tlb.rake
91
- - lib/tlb.rb
92
- - lib/tlb/spec_formatter.rb
93
- - lib/tlb/spec_task.rb
94
- - lib/tlb/util.rb
95
- - tlb-rspec1.gemspec
96
- - tlb-alien-g0.3.0.jar
81
+ - .emacs_project
82
+ - .gitignore
83
+ - .gitmodules
84
+ - README.markdown
85
+ - Rakefile
86
+ - gem_common.rb
87
+ - lib/tasks/tlb.rake
88
+ - lib/tlb.rb
89
+ - lib/tlb/spec_formatter.rb
90
+ - lib/tlb/spec_task.rb
91
+ - lib/tlb/util.rb
92
+ - test.sh
93
+ - tlb-rspec1.gemspec
94
+ - tlb-alien-g0.3.0-4-g1077d1b.jar
97
95
  has_rdoc: true
98
96
  homepage: http://github.com/test-load-balancer/tlb.rb
99
97
  licenses: []
@@ -117,31 +115,29 @@ post_install_message: |
117
115
  -------------------------------------------------------------------------
118
116
 
119
117
  rdoc_options:
120
- - --charset=UTF-8
118
+ - --charset=UTF-8
121
119
  require_paths:
122
- - lib
120
+ - lib
123
121
  required_ruby_version: !ruby/object:Gem::Requirement
124
- none: false
125
122
  requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- segments:
129
- - 0
130
- version: "0"
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ segments:
126
+ - 0
127
+ version: "0"
131
128
  required_rubygems_version: !ruby/object:Gem::Requirement
132
- none: false
133
129
  requirements:
134
- - - ">="
135
- - !ruby/object:Gem::Version
136
- segments:
137
- - 0
138
- version: "0"
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ segments:
133
+ - 0
134
+ version: "0"
139
135
  requirements: []
140
136
 
141
137
  rubyforge_project: tlb-rb
142
- rubygems_version: 1.3.7
138
+ rubygems_version: 1.3.6
143
139
  signing_key:
144
140
  specification_version: 3
145
- summary: tlb-rspec1-0.3.0-rspec-1
141
+ summary: tlb-rspec1-0.3.1-rspec-1
146
142
  test_files: []
147
143