ztk 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,7 +30,7 @@ module ZTK
30
30
 
31
31
  ################################################################################
32
32
 
33
- class TCPSocketCheck < Base
33
+ class TCPSocketCheck < ZTK::Base
34
34
 
35
35
  ################################################################################
36
36
 
@@ -49,28 +49,28 @@ module ZTK
49
49
  def ready?
50
50
  if @config.host.nil?
51
51
  message = "You must supply a host!"
52
- @config.logger and @config.logger.fatal { message }
52
+ log(:fatal) { message }
53
53
  raise TCPSocketCheckError, message
54
54
  end
55
55
 
56
56
  if @config.port.nil?
57
57
  message = "You must supply a port!"
58
- @config.logger and @config.logger.fatal { message }
58
+ log(:fatal) { message }
59
59
  raise TCPSocketCheckError, message
60
60
  end
61
61
 
62
- socket = ::TCPSocket.new(@config.host, @config.port)
62
+ socket = TCPSocket.new(@config.host, @config.port)
63
63
 
64
64
  if @config.data.nil?
65
- @config.logger and @config.logger.debug { "read(#{@config.host}:#{@config.port})" }
66
- ((::IO.select([socket], nil, nil, @config.timeout) && socket.gets) ? true : false)
65
+ log(:debug) { "read(#{@config.host}:#{@config.port})" }
66
+ ((IO.select([socket], nil, nil, @config.timeout) && socket.gets) ? true : false)
67
67
  else
68
- @config.logger and @config.logger.debug { "write(#{@config.host}:#{@config.port}, '#{@config.data}')" }
69
- ((::IO.select(nil, [socket], nil, @config.timeout) && socket.write(@config.data)) ? true : false)
68
+ log(:debug) { "write(#{@config.host}:#{@config.port}, '#{@config.data}')" }
69
+ ((IO.select(nil, [socket], nil, @config.timeout) && socket.write(@config.data)) ? true : false)
70
70
  end
71
71
 
72
72
  rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
73
- @config.logger and @config.logger.debug { "#{@config.host}:#{@config.port} - #{e.message}" }
73
+ log(:debug) { "#{@config.host}:#{@config.port} - #{e.message}" }
74
74
  false
75
75
  ensure
76
76
  (socket && socket.close)
@@ -79,16 +79,16 @@ module ZTK
79
79
  ################################################################################
80
80
 
81
81
  def wait
82
- @config.logger and @config.logger.debug{ "waiting for socket to become available; timeout after #{@config.wait} seconds" }
82
+ log(:debug) { "waiting for socket to become available; timeout after #{@config.wait} seconds" }
83
83
  Timeout.timeout(@config.wait) do
84
84
  until ready?
85
- @config.logger and @config.logger.debug{ "sleeping 1 second" }
85
+ log(:debug) { "sleeping 1 second" }
86
86
  sleep(1)
87
87
  end
88
88
  end
89
89
  true
90
90
  rescue Timeout::Error => e
91
- @config.logger and @config.logger.warn{ "socket(#{@config.host}:#{@config.port}) timeout!" }
91
+ log(:warn) { "socket(#{@config.host}:#{@config.port}) timeout!" }
92
92
  false
93
93
  end
94
94
 
@@ -47,13 +47,13 @@ module ZTK
47
47
  ################################################################################
48
48
 
49
49
  def load_template(template)
50
- ::IO.read(template).chomp
50
+ IO.read(template).chomp
51
51
  end
52
52
 
53
53
  ################################################################################
54
54
 
55
55
  def render_template(template, context={})
56
- ::Erubis::Eruby.new(template).evaluate(context)
56
+ Erubis::Eruby.new(template).evaluate(context)
57
57
  end
58
58
 
59
59
  ################################################################################
@@ -19,5 +19,5 @@
19
19
  ################################################################################
20
20
 
21
21
  module ZTK
22
- VERSION = "0.0.5" unless const_defined?(:VERSION)
22
+ VERSION = "0.0.6" unless const_defined?(:VERSION)
23
23
  end
@@ -22,14 +22,6 @@ require "ztk"
22
22
 
23
23
  ################################################################################
24
24
 
25
- $logger = ZTK::Logger.new("/dev/null")
26
-
27
- dev_null = File.open("/dev/null", "w")
28
- $stdout = dev_null
29
- $stderr = dev_null
30
-
31
- ################################################################################
32
-
33
25
  require 'simplecov'
34
26
  SimpleCov.start do
35
27
  add_filter '/spec/'
@@ -0,0 +1,78 @@
1
+ ################################################################################
2
+ #
3
+ # Author: Zachary Patten <zachary@jovelabs.com>
4
+ # Copyright: Copyright (c) Jove Labs
5
+ # License: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ ################################################################################
20
+
21
+ require "spec_helper"
22
+
23
+ describe ZTK::Command do
24
+
25
+ subject { ZTK::Command.new }
26
+
27
+ before(:all) do
28
+ $logger = ZTK::Logger.new("/dev/null")
29
+ $stdout = File.open("/dev/null", "w")
30
+ $stderr = File.open("/dev/null", "w")
31
+ $stdin = File.open("/dev/null", "r")
32
+ end
33
+
34
+ describe "class" do
35
+
36
+ it "should be an instance of ZTK::Command" do
37
+ subject.should be_an_instance_of ZTK::Command
38
+ end
39
+
40
+ describe "default config" do
41
+
42
+ it "should use $stdout as the default" do
43
+ subject.config.stdout.should be_a_kind_of $stdout.class
44
+ subject.config.stdout.should == $stdout
45
+ end
46
+
47
+ it "should use $stderr as the default" do
48
+ subject.config.stderr.should be_a_kind_of $stderr.class
49
+ subject.config.stderr.should == $stderr
50
+ end
51
+
52
+ it "should use $stdin as the default" do
53
+ subject.config.stdin.should be_a_kind_of $stdin.class
54
+ subject.config.stdin.should == $stdin
55
+ end
56
+
57
+ it "should use $logger as the default" do
58
+ subject.config.logger.should be_a_kind_of ZTK::Logger
59
+ subject.config.logger.should == $logger
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+
66
+ it "should be able to execute the command \"hostname -f\"" do
67
+ stdout = StringIO.new
68
+ subject.config do |config|
69
+ config.stdout = stdout
70
+ end
71
+ hostname = %x( hostname -f ).chomp
72
+ status = subject.exec("hostname -f")
73
+ status.exitstatus.should == 0
74
+ stdout.rewind
75
+ stdout.read.chomp.should == hostname
76
+ end
77
+
78
+ end
@@ -24,6 +24,13 @@ describe ZTK::Parallel do
24
24
 
25
25
  subject { ZTK::Parallel.new }
26
26
 
27
+ before(:all) do
28
+ $logger = ZTK::Logger.new("/dev/null")
29
+ $stdout = File.open("/dev/null", "w")
30
+ $stderr = File.open("/dev/null", "w")
31
+ $stdin = File.open("/dev/null", "r")
32
+ end
33
+
27
34
  describe "class" do
28
35
 
29
36
  it "should be an instance of ZTK::Parallel" do
@@ -32,22 +39,22 @@ describe ZTK::Parallel do
32
39
 
33
40
  describe "default config" do
34
41
 
35
- it "should use $stdout as the default STDOUT" do
42
+ it "should use $stdout as the default" do
36
43
  subject.config.stdout.should be_a_kind_of $stdout.class
37
44
  subject.config.stdout.should == $stdout
38
45
  end
39
46
 
40
- it "should use $stderr as the default STDERR" do
47
+ it "should use $stderr as the default" do
41
48
  subject.config.stderr.should be_a_kind_of $stderr.class
42
49
  subject.config.stderr.should == $stderr
43
50
  end
44
51
 
45
- it "should use $stdin as the default STDIN" do
52
+ it "should use $stdin as the default" do
46
53
  subject.config.stdin.should be_a_kind_of $stdin.class
47
54
  subject.config.stdin.should == $stdin
48
55
  end
49
56
 
50
- it "should use $logger as the default logger" do
57
+ it "should use $logger as the default" do
51
58
  subject.config.logger.should be_a_kind_of ZTK::Logger
52
59
  subject.config.logger.should == $logger
53
60
  end
@@ -56,18 +63,26 @@ describe ZTK::Parallel do
56
63
 
57
64
  end
58
65
 
59
- it "should spawn multiple processes to handle each iteration" do
60
- 3.times do |x|
61
- subject.process do
62
- Process.pid
66
+ describe "behaviour" do
67
+
68
+ it "should throw an exception if the process method is called without a block" do
69
+ lambda{ subject.process }.should raise_error ZTK::ParallelError, "You must supply a block to the process method!"
70
+ end
71
+
72
+ it "should spawn multiple processes to handle each iteration" do
73
+ 3.times do |x|
74
+ subject.process do
75
+ Process.pid
76
+ end
63
77
  end
78
+ subject.waitall
79
+ puts subject.results.inspect
80
+ subject.results.all?{ |r| r.should be_kind_of Integer }
81
+ subject.results.all?{ |r| r.should > 0 }
82
+ subject.results.uniq.count.should == 3
83
+ subject.results.include?(Process.pid).should be false
64
84
  end
65
- subject.waitall
66
- puts subject.results.inspect
67
- subject.results.all?{ |r| r.should be_kind_of Integer }
68
- subject.results.all?{ |r| r.should > 0 }
69
- subject.results.uniq.count.should == 3
70
- subject.results.include?(Process.pid).should be false
85
+
71
86
  end
72
87
 
73
88
  end
@@ -24,6 +24,13 @@ describe ZTK::SSH do
24
24
 
25
25
  subject { ZTK::SSH.new }
26
26
 
27
+ before(:all) do
28
+ $logger = ZTK::Logger.new("test.log")
29
+ $stdout = File.open("/dev/null", "w")
30
+ $stderr = File.open("/dev/null", "w")
31
+ $stdin = File.open("/dev/null", "r")
32
+ end
33
+
27
34
  describe "class" do
28
35
 
29
36
  it "should be an instance of ZTK::SSH" do
@@ -32,22 +39,22 @@ describe ZTK::SSH do
32
39
 
33
40
  describe "default config" do
34
41
 
35
- it "should use $stdout as the default STDOUT" do
42
+ it "should use $stdout as the default" do
36
43
  subject.config.stdout.should be_a_kind_of $stdout.class
37
44
  subject.config.stdout.should == $stdout
38
45
  end
39
46
 
40
- it "should use $stderr as the default STDERR" do
47
+ it "should use $stderr as the default" do
41
48
  subject.config.stderr.should be_a_kind_of $stderr.class
42
49
  subject.config.stderr.should == $stderr
43
50
  end
44
51
 
45
- it "should use $stdin as the default STDIN" do
52
+ it "should use $stdin as the default" do
46
53
  subject.config.stdin.should be_a_kind_of $stdin.class
47
54
  subject.config.stdin.should == $stdin
48
55
  end
49
56
 
50
- it "should use $logger as the default logger" do
57
+ it "should use $logger as the default" do
51
58
  subject.config.logger.should be_a_kind_of ZTK::Logger
52
59
  subject.config.logger.should == $logger
53
60
  end
@@ -60,23 +67,33 @@ describe ZTK::SSH do
60
67
  if !ENV['CI'] && !ENV['TRAVIS']
61
68
 
62
69
  it "should be able to connect to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
70
+ stdout = StringIO.new
63
71
  subject.config do |config|
64
- config.ssh.user = ENV["USER"]
65
- config.ssh.host = "127.0.0.1"
72
+ config.stdout = stdout
73
+ config.user = ENV["USER"]
74
+ config.host_name = "127.0.0.1"
66
75
  end
67
76
  hostname = %x( hostname -f ).chomp
68
- subject.exec("hostname -f").chomp.should == hostname
77
+ status = subject.exec("hostname -f")
78
+ status.exit.exitstatus.should == 0
79
+ stdout.rewind
80
+ stdout.read.chomp.should == hostname
69
81
  end
70
82
 
71
83
  it "should be able to proxy through 127.0.0.1, connecting to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
84
+ stdout = StringIO.new
72
85
  subject.config do |config|
73
- config.ssh.user = ENV["USER"]
74
- config.ssh.host = "127.0.0.1"
75
- config.ssh.proxy_user = ENV["USER"]
76
- config.ssh.proxy_host = "127.0.0.1"
86
+ config.stdout = stdout
87
+ config.user = ENV["USER"]
88
+ config.host_name = "127.0.0.1"
89
+ config.proxy_user = ENV["USER"]
90
+ config.proxy_host_name = "127.0.0.1"
77
91
  end
78
92
  hostname = %x( hostname -f ).chomp
79
- subject.exec("hostname -f").chomp.should == hostname
93
+ status = subject.exec("hostname -f")
94
+ status.exit.exitstatus.should == 0
95
+ stdout.rewind
96
+ stdout.read.chomp.should == hostname
80
97
  end
81
98
 
82
99
  end
@@ -22,22 +22,55 @@ require "spec_helper"
22
22
 
23
23
  describe ZTK::TCPSocketCheck do
24
24
 
25
- subject { ZTK::TCPSocketCheck }
25
+ subject { ZTK::TCPSocketCheck.new }
26
+
27
+ before(:all) do
28
+ $logger = ZTK::Logger.new("/dev/null")
29
+ $stdout = File.open("/dev/null", "w")
30
+ $stderr = File.open("/dev/null", "w")
31
+ $stdin = File.open("/dev/null", "r")
32
+ end
26
33
 
27
34
  describe "class" do
28
35
 
29
- it "should be ZTK::TCPSocketCheck" do
30
- subject.should be ZTK::TCPSocketCheck
36
+ it "should be an instance of ZTK::TCPSocketCheck" do
37
+ subject.should be_an_instance_of ZTK::TCPSocketCheck
38
+ end
39
+
40
+ describe "default config" do
41
+
42
+ it "should use $stdout as the default" do
43
+ subject.config.stdout.should be_a_kind_of $stdout.class
44
+ subject.config.stdout.should == $stdout
45
+ end
46
+
47
+ it "should use $stderr as the default" do
48
+ subject.config.stderr.should be_a_kind_of $stderr.class
49
+ subject.config.stderr.should == $stderr
50
+ end
51
+
52
+ it "should use $stdin as the default" do
53
+ subject.config.stdin.should be_a_kind_of $stdin.class
54
+ subject.config.stdin.should == $stdin
55
+ end
56
+
57
+ it "should use $logger as the default" do
58
+ subject.config.logger.should be_a_kind_of ZTK::Logger
59
+ subject.config.logger.should == $logger
60
+ end
61
+
31
62
  end
32
63
 
33
64
  describe "config" do
34
65
 
35
66
  it "should throw an exception if the host is not specified" do
36
- lambda{ subject.new(:port => 22).ready? }.should raise_error ZTK::TCPSocketCheckError, "You must supply a host!"
67
+ subject.config.port = 22
68
+ lambda{ subject.ready? }.should raise_error ZTK::TCPSocketCheckError, "You must supply a host!"
37
69
  end
38
70
 
39
71
  it "should throw an exception if the port is not specified" do
40
- lambda{ subject.new(:host => "127.0.0.1").ready? }.should raise_error ZTK::TCPSocketCheckError, "You must supply a port!"
72
+ subject.config.host = "127.0.0.1"
73
+ lambda{ subject.ready? }.should raise_error ZTK::TCPSocketCheckError, "You must supply a port!"
41
74
  end
42
75
 
43
76
  end
@@ -51,13 +84,19 @@ describe ZTK::TCPSocketCheck do
51
84
  describe "read check" do
52
85
 
53
86
  it "should return true on a remote read check to github.com:22" do
54
- tcp_check = subject.new(:host => "github.com", :port => 22)
55
- tcp_check.ready?.should == true
87
+ subject.config do |config|
88
+ config.host = "github.com"
89
+ config.port = 22
90
+ end
91
+ subject.ready?.should == true
56
92
  end
57
93
 
58
94
  it "should return false on a remote read check to 127.0.0.1:1" do
59
- tcp_check = subject.new(:host => "127.0.0.1", :port => 1, :timeout => 3)
60
- tcp_check.ready?.should == false
95
+ subject.config do |config|
96
+ config.host = "127.0.0.1"
97
+ config.port = 1
98
+ end
99
+ subject.ready?.should == false
61
100
  end
62
101
 
63
102
  end
@@ -65,13 +104,21 @@ describe ZTK::TCPSocketCheck do
65
104
  describe "write check" do
66
105
 
67
106
  it "should return true on a remote write check to www.google.com:80" do
68
- tcp_check = subject.new(:host => "www.google.com", :port => 80, :data => "GET")
69
- tcp_check.ready?.should == true
107
+ subject.config do |config|
108
+ config.host = "www.google.com"
109
+ config.port = 80
110
+ config.data = "GET"
111
+ end
112
+ subject.ready?.should == true
70
113
  end
71
114
 
72
115
  it "should return false on a remote write check to 127.0.0.1:1" do
73
- tcp_check = subject.new(:host => "127.0.0.1", :port => 1, :data => "GET", :timeout => 3)
74
- tcp_check.ready?.should == false
116
+ subject.config do |config|
117
+ config.host = "127.0.0.1"
118
+ config.port = 1
119
+ config.data = "GET"
120
+ end
121
+ subject.ready?.should == false
75
122
  end
76
123
 
77
124
  end
@@ -82,28 +129,46 @@ describe ZTK::TCPSocketCheck do
82
129
 
83
130
  describe "read check" do
84
131
 
85
- it "should timeout and should return false on a read check to 127.0.0.1:1" do
86
- tcp_check = subject.new(:host => "127.0.0.1", :port => 1, :wait => 3)
87
- tcp_check.wait.should == false
132
+ it "should return false on a read check to 127.0.0.1:1" do
133
+ subject.config do |config|
134
+ config.host = "127.0.0.1"
135
+ config.port = 1
136
+ config.wait = 5
137
+ end
138
+ subject.wait.should == false
88
139
  end
89
140
 
90
- it "should not timeout and should return true on a read check to github.com:22" do
91
- tcp_check = subject.new(:host => "github.com", :port => 22, :wait => 3)
92
- tcp_check.wait.should == true
141
+ it "should return true on a read check to github.com:22" do
142
+ subject.config do |config|
143
+ config.host = "github.com"
144
+ config.port = 22
145
+ config.wait = 5
146
+ end
147
+ subject.wait.should == true
93
148
  end
94
149
 
95
150
  end
96
151
 
97
152
  describe "write check" do
98
153
 
99
- it "should timeout and should return false on a write check to 127.0.0.1:1" do
100
- tcp_check = subject.new(:host => "127.0.0.1", :port => 1, :data => "GET", :wait => 3)
101
- tcp_check.wait.should == false
154
+ it "should return false on a write check to 127.0.0.1:1" do
155
+ subject.config do |config|
156
+ config.host = "127.0.0.1"
157
+ config.port = 1
158
+ config.data = "GET"
159
+ config.wait = 5
160
+ end
161
+ subject.wait.should == false
102
162
  end
103
163
 
104
- it "should not timeout and should return true on a write check to www.google.com:80" do
105
- tcp_check = subject.new(:host => "www.google.com", :port => 80, :data => "GET", :wait => 3)
106
- tcp_check.wait.should == true
164
+ it "should return true on a write check to www.google.com:80" do
165
+ subject.config do |config|
166
+ config.host = "www.google.com"
167
+ config.port = 80
168
+ config.data = "GET"
169
+ config.wait = 5
170
+ end
171
+ subject.wait.should == true
107
172
  end
108
173
 
109
174
  end