litmus_paper 0.0.3 → 0.1.0
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/config.ru +1 -1
- data/lib/litmus_paper/configuration.rb +3 -0
- data/lib/litmus_paper/dependency/http.rb +28 -3
- data/lib/litmus_paper/version.rb +1 -1
- data/lib/litmus_paper.rb +4 -0
- data/spec/litmus_paper/dependency/http_spec.rb +17 -0
- data/spec/script/https_test_server.rb +28 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/ssl/server.crt +14 -0
- data/spec/ssl/server.key +15 -0
- data/spec/support/stdout_logger.rb +8 -0
- metadata +11 -3
data/config.ru
CHANGED
@@ -6,6 +6,7 @@ module LitmusPaper
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def evaluate(file = @config_file_path)
|
9
|
+
LitmusPaper.logger.info "Loading file #{file}"
|
9
10
|
config_contents = File.read(file)
|
10
11
|
instance_eval(config_contents)
|
11
12
|
@services
|
@@ -13,6 +14,8 @@ module LitmusPaper
|
|
13
14
|
|
14
15
|
def include_files(glob_pattern)
|
15
16
|
full_glob_pattern = File.expand_path(glob_pattern, File.dirname(@config_file_path))
|
17
|
+
LitmusPaper.logger.info "Searching for files matching: #{full_glob_pattern}"
|
18
|
+
|
16
19
|
Dir.glob(full_glob_pattern).each do |file|
|
17
20
|
evaluate(file)
|
18
21
|
end
|
@@ -5,12 +5,20 @@ module LitmusPaper
|
|
5
5
|
@uri = uri
|
6
6
|
@expected_content = Regexp.new(options.fetch(:content, '.*'))
|
7
7
|
@method = options.fetch(:method, 'GET')
|
8
|
+
@ca_file = options[:ca_file]
|
8
9
|
end
|
9
10
|
|
10
11
|
def available?
|
11
12
|
response = _make_request
|
12
|
-
|
13
|
-
|
13
|
+
success = _successful_response?(response)
|
14
|
+
matches = _body_matches?(response)
|
15
|
+
|
16
|
+
LitmusPaper.logger.info("Available check to #{@uri} failed with status #{response.code}") unless success
|
17
|
+
LitmusPaper.logger.info("Available check to #{@uri} did not match #{@expected_content}") unless matches
|
18
|
+
|
19
|
+
success && matches
|
20
|
+
rescue Exception => e
|
21
|
+
LitmusPaper.logger.info("Available check to #{@uri} failed with #{e.message}")
|
14
22
|
false
|
15
23
|
end
|
16
24
|
|
@@ -19,7 +27,15 @@ module LitmusPaper
|
|
19
27
|
request = Net::HTTP.const_get(@method.capitalize).new(uri.normalize.path)
|
20
28
|
request.set_form_data({})
|
21
29
|
|
22
|
-
Net::HTTP.
|
30
|
+
connection = Net::HTTP.new(uri.host, uri.port)
|
31
|
+
if uri.scheme == "https"
|
32
|
+
connection.use_ssl = true
|
33
|
+
connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
34
|
+
connection.ca_file = @ca_file unless @ca_file.nil?
|
35
|
+
connection.verify_callback = proc { |preverify_ok, ssl_context| _verify_ssl_certificate(preverify_ok, ssl_context) }
|
36
|
+
end
|
37
|
+
|
38
|
+
connection.start do |http|
|
23
39
|
http.request(request)
|
24
40
|
end
|
25
41
|
end
|
@@ -32,6 +48,15 @@ module LitmusPaper
|
|
32
48
|
(response.body =~ @expected_content) ? true : false
|
33
49
|
end
|
34
50
|
|
51
|
+
def _verify_ssl_certificate(preverify_ok, ssl_context)
|
52
|
+
if preverify_ok != true || ssl_context.error != 0
|
53
|
+
err_msg = "SSL Verification failed -- Preverify: #{preverify_ok}, Error: #{ssl_context.error_string} (#{ssl_context.error})"
|
54
|
+
LitmusPaper.logger.info err_msg
|
55
|
+
false
|
56
|
+
end
|
57
|
+
true
|
58
|
+
end
|
59
|
+
|
35
60
|
def to_s
|
36
61
|
"Dependency::HTTP(#{@uri})"
|
37
62
|
end
|
data/lib/litmus_paper/version.rb
CHANGED
data/lib/litmus_paper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'net/http'
|
3
|
+
require 'net/https'
|
3
4
|
require 'uri'
|
4
5
|
require 'forwardable'
|
5
6
|
|
@@ -24,8 +25,11 @@ require 'litmus_paper/status_file'
|
|
24
25
|
module LitmusPaper
|
25
26
|
class << self
|
26
27
|
attr_reader :services, :config_dir
|
28
|
+
attr_accessor :logger
|
27
29
|
end
|
28
30
|
|
31
|
+
self.logger = Logger.new
|
32
|
+
|
29
33
|
def self.configure(filename)
|
30
34
|
@config_file = filename
|
31
35
|
|
@@ -22,6 +22,23 @@ describe LitmusPaper::Dependency::HTTP do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
context "https" do
|
26
|
+
it "can make https request" do
|
27
|
+
begin
|
28
|
+
`env SSL_TEST_PORT=9295 PID_FILE=/tmp/https-test-server.pid bundle exec spec/script/https_test_server.rb`
|
29
|
+
SpecHelper.wait_for_service :host => '127.0.0.1', :port => 9295
|
30
|
+
|
31
|
+
check = LitmusPaper::Dependency::HTTP.new(
|
32
|
+
"https://localhost:9295/",
|
33
|
+
:ca_file => TEST_CA_CERT
|
34
|
+
)
|
35
|
+
check.should be_available
|
36
|
+
ensure
|
37
|
+
system "kill -9 `cat /tmp/https-test-server.pid`"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
25
42
|
it "is true when response is 200" do
|
26
43
|
check = LitmusPaper::Dependency::HTTP.new("#{@url}/status/200")
|
27
44
|
check.should be_available
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'webrick'
|
3
|
+
require 'webrick/https'
|
4
|
+
require 'openssl'
|
5
|
+
|
6
|
+
private_key_file = File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "server.key"))
|
7
|
+
cert_file = File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "server.crt"))
|
8
|
+
|
9
|
+
pkey = OpenSSL::PKey::RSA.new(File.read(private_key_file))
|
10
|
+
cert = OpenSSL::X509::Certificate.new(File.read(cert_file))
|
11
|
+
|
12
|
+
pid_file = ENV["PID_FILE"]
|
13
|
+
|
14
|
+
s = WEBrick::HTTPServer.new(
|
15
|
+
:Port => (ENV['SSL_TEST_PORT'] || 8443),
|
16
|
+
:Logger => WEBrick::Log::new(nil, WEBrick::Log::ERROR),
|
17
|
+
:DocumentRoot => File.join(File.dirname(__FILE__)),
|
18
|
+
:ServerType => WEBrick::Daemon,
|
19
|
+
:SSLEnable => true,
|
20
|
+
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
|
21
|
+
:SSLCertificate => cert,
|
22
|
+
:SSLPrivateKey => pkey,
|
23
|
+
:SSLCertName => [ [ "CN",WEBrick::Utils::getservername ] ],
|
24
|
+
:StartCallback => proc { File.open(pid_file, "w") { |f| f.write $$.to_s }}
|
25
|
+
)
|
26
|
+
s.mount_proc("/") { |req,resp| resp.body = "hello world" }
|
27
|
+
trap("INT"){ s.shutdown }
|
28
|
+
s.start
|
data/spec/spec_helper.rb
CHANGED
@@ -44,3 +44,4 @@ LitmusPaper.config_dir = "/tmp/litmus_paper"
|
|
44
44
|
|
45
45
|
TEST_CONFIG = File.expand_path('support/test.config', File.dirname(__FILE__))
|
46
46
|
TEST_D_CONFIG = File.expand_path('support/test.d.config', File.dirname(__FILE__))
|
47
|
+
TEST_CA_CERT = File.expand_path('ssl/server.crt', File.dirname(__FILE__))
|
data/spec/ssl/server.crt
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICKTCCAZICCQCmNl8pjL8nPzANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJB
|
3
|
+
VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0
|
4
|
+
cyBQdHkgTHRkMRIwEAYDVQQDEwlsb2NhbGhvc3QwHhcNMTIwNjA0MjExOTU2WhcN
|
5
|
+
MTMwNjA0MjExOTU2WjBZMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0
|
6
|
+
ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRIwEAYDVQQDEwls
|
7
|
+
b2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK9fPamtXwFv341C
|
8
|
+
jHFvJ4QxkKqWDACimkksBorVBUdMqsYwR/b9Ig4EHjAir8pfP3fjl98z4qRoWotx
|
9
|
+
gCSj6OARoMsfS1+JGK8AsQyimq3uCErEyPAgHgfJ7+XORl0pgg3Z67pfzAqBs7aF
|
10
|
+
p8pbEAkMVBdA62qhFVWAZhsTUxdVAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAa98H
|
11
|
+
JPpxhaVFzAYkG+AyuCyskCSzXWvBAlJZXYejMZlSCGiZb3F94KeAlfRT9xCH2U6i
|
12
|
+
/AxXVwO3mdeTP9s4Q90ehPZ8yS+LUVh6kVUneADRx5f410sz/FYF5j2hbdom2Sca
|
13
|
+
42BOBxnbIKmkzJcm1uEU5fRag6GbWdzpoLNKHmA=
|
14
|
+
-----END CERTIFICATE-----
|
data/spec/ssl/server.key
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXQIBAAKBgQCvXz2prV8Bb9+NQoxxbyeEMZCqlgwAoppJLAaK1QVHTKrGMEf2
|
3
|
+
/SIOBB4wIq/KXz9345ffM+KkaFqLcYAko+jgEaDLH0tfiRivALEMopqt7ghKxMjw
|
4
|
+
IB4Hye/lzkZdKYIN2eu6X8wKgbO2hafKWxAJDFQXQOtqoRVVgGYbE1MXVQIDAQAB
|
5
|
+
AoGANyPdAYKvgoYoZgPsoKXwaNIkyF4RPAnkNOmQzQoZdMeYUmRP3ErO8FU/IKdn
|
6
|
+
WlwEWq/GyrlHo6XkAkAXqG2ZBITsQaWKRky8nuydsJTXyt3z09R17WpH6dYNSyw5
|
7
|
+
wc9UyGg+u5+hHiAOuMMVPEpePB4gBAo/XIBHe4ApqY5ZkakCQQDpI+DV2UmNLUG3
|
8
|
+
qKavyncY382Fctc/m2GbNn2+B+6tDDGFcs4XwwPGEHaP66U3Aa9AU2MS2dPSDRl1
|
9
|
+
IPvpQsTLAkEAwJFOvxKsxMwZT7vhCNkc8fKGI5wkjXRpCL5pEDUdDHExUbmaCGra
|
10
|
+
PfNMEBkIDL4wGVNLLDZtl3/AgiyGzTIwXwJBAOP/BVK841QgDSOp2BEUJDJ8M8Ys
|
11
|
+
z9nRf7vFp2Se50fuI8PIyUmtmlQpJ3mJzpGjoRp8Mehug9rompvUPOcaN88CQH9a
|
12
|
+
2niV0jtpPEg2WlLuvCzrl3lPmAERfzGwNG3qoqaK6fJBzLRKbsHP+XsgAuniko79
|
13
|
+
PlckPACZFelBp3ln+wMCQQCvuEg+qo97LutnrUWID67PHEp+2W7SButs6yMerSac
|
14
|
+
TYokvi2xz9auzRvxHofQiBIKsMji51uLmW8CfFaC8kS4
|
15
|
+
-----END RSA PRIVATE KEY-----
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: litmus_paper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.3
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Braintreeps
|
@@ -178,7 +178,10 @@ files:
|
|
178
178
|
- spec/litmus_paper/service_spec.rb
|
179
179
|
- spec/litmus_paper/status_file_spec.rb
|
180
180
|
- spec/litmus_paper_spec.rb
|
181
|
+
- spec/script/https_test_server.rb
|
181
182
|
- spec/spec_helper.rb
|
183
|
+
- spec/ssl/server.crt
|
184
|
+
- spec/ssl/server.key
|
182
185
|
- spec/support/always_available_dependency.rb
|
183
186
|
- spec/support/config.d/passing_test.config
|
184
187
|
- spec/support/config.d/test.config
|
@@ -186,6 +189,7 @@ files:
|
|
186
189
|
- spec/support/http_test_server.rb
|
187
190
|
- spec/support/http_test_server_config.ru
|
188
191
|
- spec/support/never_available_dependency.rb
|
192
|
+
- spec/support/stdout_logger.rb
|
189
193
|
- spec/support/stub_facter.rb
|
190
194
|
- spec/support/test.config
|
191
195
|
- spec/support/test.d.config
|
@@ -236,7 +240,10 @@ test_files:
|
|
236
240
|
- spec/litmus_paper/service_spec.rb
|
237
241
|
- spec/litmus_paper/status_file_spec.rb
|
238
242
|
- spec/litmus_paper_spec.rb
|
243
|
+
- spec/script/https_test_server.rb
|
239
244
|
- spec/spec_helper.rb
|
245
|
+
- spec/ssl/server.crt
|
246
|
+
- spec/ssl/server.key
|
240
247
|
- spec/support/always_available_dependency.rb
|
241
248
|
- spec/support/config.d/passing_test.config
|
242
249
|
- spec/support/config.d/test.config
|
@@ -244,6 +251,7 @@ test_files:
|
|
244
251
|
- spec/support/http_test_server.rb
|
245
252
|
- spec/support/http_test_server_config.ru
|
246
253
|
- spec/support/never_available_dependency.rb
|
254
|
+
- spec/support/stdout_logger.rb
|
247
255
|
- spec/support/stub_facter.rb
|
248
256
|
- spec/support/test.config
|
249
257
|
- spec/support/test.d.config
|