test_server_rb 0.2.0 → 1.0.0

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
  SHA1:
3
- metadata.gz: 161eb86462ccdd0f44087e996ed93cce19e298b0
4
- data.tar.gz: eeff69b5debd38143aed37cd976e37cab049d00a
3
+ metadata.gz: 289ffec419272ff9df85f63bd5010ced0c7e543a
4
+ data.tar.gz: cc92b99766d9795ea727b323d5a2b2b9f4c13fe5
5
5
  SHA512:
6
- metadata.gz: af5a2e95acd132c7cfedbf09ae030da9002b01022acf9fd3af131ce36764be30d6b1b551023628883d64efebbe623cfcb3b2a23dfe01086329a749c5076a641c
7
- data.tar.gz: 4c83df1ae0757dd5ae8e7763297ec7be7170ebcabba20d59f9f09eba224eedfafbfdf51388e43c7fe9b7f8f6240c69ed79a223ee082ad8c2210ab20779d3622f
6
+ metadata.gz: 53c25d84e06f3e7d91e586f9c9a096a374b44fa6370d91bea48a0c3072c065516d6cf69484fe97624ecf0f5ddaf98c2388218d720c2b263442c873d262feeb86
7
+ data.tar.gz: 58deeca4da3796aaf15c6d2818a9b80a3f55cc1f5f7a613aee06ff7d14b5e60cd697cc155396738f7e27e1feb527377ee2273bb17888cfce66922e7c30b9843e
data/exe/test_server CHANGED
@@ -2,66 +2,42 @@
2
2
 
3
3
  $: << 'test'
4
4
  require 'bundler/setup'
5
- require 'socket'
6
- require 'terminal-notifier' if ENV['NOTIFY']
5
+ require 'test_server'
6
+ require 'optparse'
7
7
 
8
- module TestServer
9
- class << self
10
- SOCK = "test.sock".freeze
8
+ options = {
9
+ remote: false,
10
+ sock: "test.sock"
11
+ }
11
12
 
12
- def client
13
- @client ||= UNIXSocket.new(SOCK)
14
- end
13
+ OptionParser.new do |opts|
14
+ opts.banner = "Usage: test_server [OPTIONS] [TEST...]"
15
15
 
16
- def server
17
- @server ||= UNIXServer.new(SOCK)
18
- end
16
+ opts.on("--serve", "Boot the server") do |mode|
17
+ options[:mode] = :serve
18
+ end
19
19
 
20
- def running?
21
- File.exist?(SOCK)
22
- end
20
+ opts.on("--test", "Push a test to the server") do |mode|
21
+ options[:mode] = :push
22
+ end
23
23
 
24
- def test(files)
25
- client.sendmsg files.join(' ')
26
- end
24
+ opts.on("--notify", "Send system notification based on test result") do |notify|
25
+ options[:notify_on_fail] = notify
26
+ options[:notify_on_pass] = notify
27
+ end
28
+
29
+ opts.on("--notify-on-pass", "Send system notification when the test passes") do |notify|
30
+ options[:notify_on_pass] = notify
31
+ end
27
32
 
28
- def start!
29
- `rm #{SOCK}` if running?
30
- puts "Initializing TestServer with pid #{$$}..."
31
- require 'test_helper'
32
- puts "Ready!"
33
- loop do
34
- conn = server.accept
35
- files, _ = conn.recvmsg
36
- pid = fork do
37
- puts "> Testing files: #{files}"
38
- if files == ":all".freeze
39
- all_glob = ENV['ALL_GLOB'] || 'test/unit/*_test.rb'
40
- Dir.glob(all_glob).each { |f| load f }
41
- else
42
- files.split(' ').each { |f| load f }
43
- end
44
- end
45
- _, status = Process.wait2(pid)
46
- if ENV['NOTIFY']
47
- msg = (status.exitstatus == 0) ? "Tests passed :)" : "Warning! Tests failed :("
48
- TerminalNotifier.notify(msg)
49
- end
50
- end
51
- ensure
52
- `rm #{SOCK}`
53
- end
33
+ opts.on("--notify-on-fail", "Send system notification when the test fails") do |notify|
34
+ options[:notify_on_fail] = notify
54
35
  end
55
- end
56
36
 
57
- queue = ARGV
58
- until queue.empty?
59
- case queue.shift
60
- when "--serve"
61
- TestServer.start!
62
- when "--test"
63
- TestServer.test(queue)
64
- queue = []
37
+ opts.on("--socket", "Socket file to use") do |sock|
38
+ options[:sock] = sock
65
39
  end
66
- end
40
+ end.parse!
67
41
 
42
+ options[:files] = ARGV
43
+ TestServer.run!(options)
@@ -2,57 +2,47 @@
2
2
 
3
3
  $: << 'test'
4
4
  require 'bundler/setup'
5
- require 'socket'
6
- require 'terminal-notifier' if ENV['NOTIFY']
7
-
8
- module TestServer
9
- class << self
10
- def client
11
- @client ||= TCPSocket.new(ENV['HOST'], ENV['PORT'])
12
- end
13
-
14
- def server
15
- @server ||= TCPServer.new(ENV['HOST'], ENV['PORT'])
16
- end
17
-
18
- def test(files)
19
- client.sendmsg files.join(' ')
20
- end
21
-
22
- def start!
23
- puts "Initializing TestServer with pid #{$$}..."
24
- require 'test_helper'
25
- puts "Ready!"
26
- loop do
27
- conn = server.accept
28
- files, _ = conn.recvmsg
29
- pid = fork do
30
- puts "> Testing files: #{files}"
31
- if files == ":all".freeze
32
- all_glob = ENV['ALL_GLOB'] || 'test/unit/*_test.rb'
33
- Dir.glob(all_glob).each { |f| load f }
34
- else
35
- files.split(' ').each { |f| load f }
36
- end
37
- end
38
- _, status = Process.wait2(pid)
39
- if ENV['NOTIFY']
40
- msg = (status.exitstatus == 0) ? "Tests passed :)" : "Warning! Tests failed :("
41
- TerminalNotifier.notify(msg)
42
- end
43
- end
44
- end
5
+ require 'test_server'
6
+ require 'optparse'
7
+
8
+ options = {
9
+ remote: true,
10
+ host: "localhost",
11
+ port: 4545
12
+ }
13
+
14
+ OptionParser.new do |opts|
15
+ opts.banner = "Usage: test_server_remote [OPTIONS] [TEST...]"
16
+
17
+ opts.on("--serve", "Boot the server") do |mode|
18
+ options[:mode] = :serve
19
+ end
20
+
21
+ opts.on("--test", "Push a test to the server") do |mode|
22
+ options[:mode] = :push
23
+ end
24
+
25
+ opts.on("--notify", "Send system notification based on test result") do |notify|
26
+ options[:notify_on_fail] = notify
27
+ options[:notify_on_pass] = notify
45
28
  end
46
- end
47
-
48
- queue = ARGV
49
- until queue.empty?
50
- case queue.shift
51
- when "--serve"
52
- TestServer.start!
53
- when "--test"
54
- TestServer.test(queue)
55
- queue = []
29
+
30
+ opts.on("--notify-on-pass", "Send system notification when the test passes") do |notify|
31
+ options[:notify_on_pass] = notify
32
+ end
33
+
34
+ opts.on("--notify-on-fail", "Send system notification when the test fails") do |notify|
35
+ options[:notify_on_fail] = notify
36
+ end
37
+
38
+ opts.on("--port", Integer, "Server's port (default: 4545)") do |port|
39
+ options[:port] = port
40
+ end
41
+
42
+ opts.on("--host", "Server's host (default: localhost)") do |host|
43
+ options[:host] = host
56
44
  end
57
- end
45
+ end.parse!
58
46
 
47
+ options[:files] = ARGV
48
+ TestServer.run!(options)
@@ -1,3 +1,3 @@
1
1
  module TestServer
2
- VERSION = "0.2.0"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/test_server.rb CHANGED
@@ -1,5 +1,75 @@
1
1
  require "test_server/version"
2
2
 
3
+ require 'socket'
4
+
3
5
  module TestServer
4
- # Your code goes here...
6
+ class << self
7
+ def run!(options)
8
+ case options[:mode]
9
+ when :serve
10
+ serve!(options)
11
+ when :push
12
+ test(options)
13
+ end
14
+ end
15
+
16
+ def test(options)
17
+ with_client(options) do |client|
18
+ client.sendmsg options[:files].join(' ')
19
+ end
20
+ end
21
+
22
+ def serve!(options)
23
+ with_server(options) do |server|
24
+ puts "Initializing TestServer with pid #{$$}..."
25
+ require 'test_helper'
26
+ puts "Ready!"
27
+ loop do
28
+ conn = server.accept
29
+ files, _ = conn.recvmsg
30
+ pid = fork do
31
+ puts "> Testing files: #{files}"
32
+ if files == ":all".freeze
33
+ all_glob = ENV['ALL_GLOB'] || 'test/unit/*_test.rb'
34
+ Dir.glob(all_glob).each { |f| load f }
35
+ else
36
+ files.split(' ').each { |f| load f }
37
+ end
38
+ end
39
+ _, status = Process.wait2(pid)
40
+ if status.exitstatus == 0
41
+ notify("Tests passed :)") if options[:notify_on_pass]
42
+ else
43
+ notify("Warning! Tests failed :(") if options[:notify_on_fail]
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ def with_client(options)
50
+ if options[:remote]
51
+ yield TCPSocket.new(options[:host], options[:port])
52
+ else
53
+ yield UNIXSocket.new(options[:sock])
54
+ end
55
+ end
56
+
57
+ def with_server(options)
58
+ if options[:remote]
59
+ yield TCPServer.new(options[:host], options[:port])
60
+ else
61
+ begin
62
+ `rm #{options[:sock]}` if File.exist?(options[:sock])
63
+ yield UNIXServer.new(options[:sock])
64
+ ensure
65
+ `rm #{options[:sock]}` if File.exist?(options[:sock])
66
+ end
67
+ end
68
+ end
69
+
70
+ def notify(msg)
71
+ require 'terminal-notifier'
72
+ TerminalNotifier.notify(msg)
73
+ end
74
+ end
5
75
  end
data/test_server.gemspec CHANGED
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.16"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
+
27
+ spec.add_dependency "terminal-notifier"
26
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_server_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Bodah
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-11 00:00:00.000000000 Z
11
+ date: 2019-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: terminal-notifier
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description:
42
56
  email:
43
57
  - joshuabodah@gmail.com
@@ -77,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
91
  version: '0'
78
92
  requirements: []
79
93
  rubyforge_project:
80
- rubygems_version: 2.5.2
94
+ rubygems_version: 2.5.2.3
81
95
  signing_key:
82
96
  specification_version: 4
83
97
  summary: dead simple fork based test server