tlb-rspec1 0.3.0 → 0.3.1

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.
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