resty_test 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ spec/resty/
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,29 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ resty_test (0.1.0)
5
+ excon
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ excon (0.16.10)
12
+ rake (10.0.3)
13
+ rspec (2.12.0)
14
+ rspec-core (~> 2.12.0)
15
+ rspec-expectations (~> 2.12.0)
16
+ rspec-mocks (~> 2.12.0)
17
+ rspec-core (2.12.2)
18
+ rspec-expectations (2.12.1)
19
+ diff-lcs (~> 1.1.3)
20
+ rspec-mocks (2.12.1)
21
+
22
+ PLATFORMS
23
+ ruby
24
+
25
+ DEPENDENCIES
26
+ bundler
27
+ rake
28
+ resty_test!
29
+ rspec
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'rake'
2
+ include Rake::DSL
3
+
4
+ require 'rspec/mocks/version'
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ desc 'Default: run specs.'
9
+ task :default => :spec
@@ -0,0 +1,41 @@
1
+ class RestyTest::Config
2
+ include Singleton
3
+
4
+ attr_writer :source, :logger, :build_opts, :config_file
5
+ attr_accessor :root
6
+
7
+ def source
8
+ @source ||= "http://agentzh.org/misc/nginx/ngx_openresty-1.2.4.14.tar.gz"
9
+ end
10
+
11
+ def logger
12
+ @logger ||= Logger.new(STDOUT).tap do |l|
13
+ l.level = Logger::INFO
14
+ end
15
+ end
16
+
17
+ def config_file
18
+ @config_file ||= File.expand_path("../nginx.conf", RestyTest.paths.root)
19
+ end
20
+
21
+ def build_opts
22
+ @build_opts ||= ["--with-luajit", *platform_specific_build_options]
23
+ end
24
+
25
+ private
26
+
27
+ def platform_specific_build_options
28
+ case RUBY_PLATFORM
29
+ when /darwin/i
30
+ pcre = Dir["/usr/local/Cellar/pcre/*/include", "/usr/local/pcre/*/include"].sort[-1]
31
+ if pcre
32
+ ["--with-cc-opt='-I#{pcre}'", "--with-ld-opt='-L#{File.dirname(pcre)}/lib'"]
33
+ else
34
+ []
35
+ end
36
+ else
37
+ []
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1,58 @@
1
+ class RestyTest::Installer
2
+ include Singleton
3
+
4
+ def download!
5
+ return if File.file?(paths.tar)
6
+
7
+ log "Downloading #{File.basename(paths.tar)}", :info
8
+ FileUtils.mkdir_p(paths.root)
9
+ File.open(paths.tar, "wb") do |file|
10
+ Excon.get RestyTest.config.source, response_block: lambda {|c, _, _| file.write(c) }
11
+ end
12
+ end
13
+
14
+ def extract!
15
+ download!
16
+ return if File.file?(File.join(paths.src, "configure"))
17
+
18
+ log "Extracting source", :info
19
+ sh "cd #{paths.root} && mkdir -p src && /usr/bin/env tar xzf #{paths.tar} -C src --strip-components 1"
20
+ end
21
+
22
+ def configure!
23
+ extract!
24
+ return if File.file?(File.join(paths.src, "Makefile"))
25
+
26
+ log "Configuring", :info
27
+ sh "cd #{paths.src} && ./configure --prefix='#{paths.root}' #{opts}"
28
+ end
29
+
30
+ def install!
31
+ configure!
32
+ return if File.file?(paths.nginx_bin)
33
+
34
+ log "Building & installing", :info
35
+ sh "cd #{paths.src} && make && make install"
36
+ end
37
+
38
+ protected
39
+
40
+ def sh(cmd)
41
+ log cmd
42
+ log `#{cmd}`
43
+ raise "Abort!" unless $? == 0
44
+ end
45
+
46
+ def paths
47
+ RestyTest.paths
48
+ end
49
+
50
+ def opts
51
+ RestyTest.config.build_opts.join(" ")
52
+ end
53
+
54
+ def log(message, level = :debug)
55
+ RestyTest.logger.send(level, message)
56
+ end
57
+
58
+ end
@@ -0,0 +1,20 @@
1
+ class RestyTest::Paths
2
+ include Singleton
3
+
4
+ def root
5
+ RestyTest.config.root
6
+ end
7
+
8
+ def tar
9
+ File.join(root, File.basename(RestyTest.config.source))
10
+ end
11
+
12
+ def src
13
+ File.join(root, "src")
14
+ end
15
+
16
+ def nginx_bin
17
+ File.join(root, "nginx", "sbin", "nginx")
18
+ end
19
+
20
+ end
data/lib/resty_test.rb ADDED
@@ -0,0 +1,54 @@
1
+ require 'fileutils'
2
+ require 'excon'
3
+ require 'singleton'
4
+ require 'logger'
5
+
6
+ module RestyTest
7
+ require 'resty_test/config'
8
+ require 'resty_test/paths'
9
+ require 'resty_test/installer'
10
+
11
+ class << self
12
+ attr_reader :running
13
+
14
+ def configure
15
+ yield config
16
+ end
17
+
18
+ def config
19
+ self::Config.instance
20
+ end
21
+
22
+ def installer
23
+ self::Installer.instance
24
+ end
25
+
26
+ def paths
27
+ RestyTest::Paths.instance
28
+ end
29
+
30
+ def logger
31
+ config.logger
32
+ end
33
+
34
+ def start!
35
+ installer.install!
36
+ system "#{paths.nginx_bin} -c #{config.config_file}"
37
+ @running = true
38
+ end
39
+
40
+ def stop!
41
+ return unless File.file?(paths.nginx_bin) && running
42
+ system "#{paths.nginx_bin} -s stop"
43
+ @running = nil
44
+ end
45
+
46
+ end
47
+
48
+ root = caller.detect {|path| path =~ /^(.+?\/(?:test|spec|features))\// }
49
+ config.root = "#{$1}/resty" if root
50
+
51
+ at_exit do
52
+ stop!
53
+ end
54
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ Gem::Specification.new do |s|
3
+ s.platform = Gem::Platform::RUBY
4
+ s.required_ruby_version = '>= 1.9.1'
5
+ s.required_rubygems_version = ">= 1.8.0"
6
+
7
+ s.name = File.basename(__FILE__, '.gemspec')
8
+ s.summary = "RestyTest"
9
+ s.description = "Test OpenResty with your favourite test framework!"
10
+ s.version = "0.1.0"
11
+
12
+ s.authors = ["Dimitrij Denissenko"]
13
+ s.email = "dimitrij@blacksquaremedia.com"
14
+ s.homepage = "https://github.com/bsm/resty_test"
15
+
16
+ s.require_path = 'lib'
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- spec/*`.split("\n")
19
+
20
+ s.add_dependency "excon"
21
+ s.add_development_dependency "rake"
22
+ s.add_development_dependency "bundler"
23
+ s.add_development_dependency "rspec"
24
+ end
data/spec/nginx.conf ADDED
@@ -0,0 +1,14 @@
1
+ worker_processes 1;
2
+ events {
3
+ worker_connections 1024;
4
+ }
5
+
6
+ http {
7
+ server {
8
+ listen 1984;
9
+
10
+ location / {
11
+ content_by_lua 'ngx.say("Success!")';
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestyTest::Config do
4
+
5
+ subject { described_class.instance }
6
+ it { should be_a(Singleton) }
7
+
8
+ its(:root) { should be_instance_of(String) }
9
+ its(:logger) { should be_instance_of(Logger) }
10
+ its(:source) { should be_instance_of(String) }
11
+ its(:config_file) { should == File.expand_path("../../nginx.conf", __FILE__) }
12
+ its(:build_opts) { should be_instance_of(Array) }
13
+
14
+ [:root, :source, :logger, :build_opts, :config_file].each do |name|
15
+ it { should respond_to(name) }
16
+ it { should respond_to(:"#{name}=") }
17
+ end
18
+
19
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestyTest::Installer do
4
+
5
+ before do
6
+ @level = RestyTest.logger.level
7
+ RestyTest.logger.level = Logger::WARN
8
+ end
9
+
10
+ after do
11
+ RestyTest.logger.level = @level
12
+ end
13
+
14
+ subject { described_class.instance }
15
+ it { should be_a(Singleton) }
16
+
17
+ its(:opts) { should be_instance_of(String) }
18
+ its(:paths) { should be_instance_of(RestyTest::Paths) }
19
+
20
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe RestyTest do
4
+
5
+ subject { described_class }
6
+
7
+ its(:config) { should be_instance_of(described_class::Config) }
8
+ its(:logger) { should be_instance_of(Logger) }
9
+
10
+ it "should be configurable" do
11
+ subject.configure do |c|
12
+ c.root.should == File.expand_path("../resty", __FILE__)
13
+ end
14
+ end
15
+
16
+ it "should start and stop nginx" do
17
+ lambda { subject.start! }.should change {
18
+ subject.running
19
+ }.from(nil).to(true)
20
+
21
+ res = Excon.get("http://127.0.0.1:1984/")
22
+ res.status.should == 200
23
+ res.body.should == "Success!\n"
24
+
25
+ lambda { subject.stop! }.should change {
26
+ subject.running
27
+ }.from(true).to(nil)
28
+ end
29
+
30
+ end
@@ -0,0 +1,8 @@
1
+ require 'rspec'
2
+ require 'resty_test'
3
+
4
+ RSpec.configure do |c|
5
+ c.before :suite do
6
+ puts "NOTE: Running the test suite may take a long time. Please be patient."
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resty_test
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dimitrij Denissenko
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: excon
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: Test OpenResty with your favourite test framework!
79
+ email: dimitrij@blacksquaremedia.com
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files: []
83
+ files:
84
+ - .gitignore
85
+ - Gemfile
86
+ - Gemfile.lock
87
+ - Rakefile
88
+ - lib/resty_test.rb
89
+ - lib/resty_test/config.rb
90
+ - lib/resty_test/installer.rb
91
+ - lib/resty_test/paths.rb
92
+ - resty_test.gemspec
93
+ - spec/nginx.conf
94
+ - spec/resty_test/config_spec.rb
95
+ - spec/resty_test/installer_spec.rb
96
+ - spec/resty_test_spec.rb
97
+ - spec/spec_helper.rb
98
+ homepage: https://github.com/bsm/resty_test
99
+ licenses: []
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.9.1
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: 1.8.0
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 1.8.24
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: RestyTest
122
+ test_files:
123
+ - spec/nginx.conf
124
+ - spec/resty_test/config_spec.rb
125
+ - spec/resty_test/installer_spec.rb
126
+ - spec/resty_test_spec.rb
127
+ - spec/spec_helper.rb
128
+ has_rdoc: