151 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| ENV["RACK_ENV"] = "test"
 | |
| #require File.join(File.dirname(__FILE__), '..', '..', 'config.ru')
 | |
| 
 | |
| require "rubygems"
 | |
| require 'test/unit'
 | |
| require 'rack/test'
 | |
| require "json"
 | |
| 
 | |
| =begin
 | |
|   USERNAME = '<username>'
 | |
|   PASSWORD = '<password>'
 | |
|   HOST = '<host>'
 | |
|   PORT = 7070
 | |
| =end
 | |
| 
 | |
| class MyWorld
 | |
| 
 | |
|   include Rack::Test::Methods
 | |
|   @@app = nil
 | |
|   def app
 | |
|     @@app ||= eval("Rack::Builder.new {( " + File.read(File.dirname(__FILE__) + '/../../config.ru') + "\n )}")
 | |
|   end
 | |
| end
 | |
| 
 | |
| class RequestSender
 | |
|   require "httpclient"
 | |
|   require "yaml"
 | |
| 
 | |
|   include Test::Unit::Assertions
 | |
| 
 | |
|   @last_res = nil
 | |
|   $test_hash = Hash.new
 | |
| 
 | |
|   # config:
 | |
|   # host=<host>
 | |
|   # port=<port>
 | |
|   # username=<user>
 | |
|   # password=<psw>
 | |
|   def initialize
 | |
|     file = ENV["CONFIG"] || "./features/support/config.yml"
 | |
|     abort("File does not exist: #{File.absolute_path(file)}") unless File.exists?(file)
 | |
|     @config = config(file)
 | |
|   end
 | |
| 
 | |
|   def default_headers
 | |
|     {
 | |
|       "REMOTE_USER" => @config["username"]
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def host
 | |
|     "http://#{@config["host"]}:#{@config["port"]}"
 | |
|   end
 | |
| 
 | |
|   def create_url path
 | |
|     host + @config["path_prefix"] + path
 | |
|   end
 | |
| 
 | |
|   def last_response
 | |
|     @last_res
 | |
|   end
 | |
| 
 | |
|   def get path, query, headers={}
 | |
|     submit do |http|
 | |
|       http.get(create_url(path), query, default_headers.merge(headers))
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def get_without_privileges path, query={}, headers={}
 | |
|     user_without_privileges do
 | |
|       get(path, query, headers)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def post path, query, headers={}
 | |
|     post_body(path, JSON.pretty_generate(query), headers)
 | |
|   end
 | |
| 
 | |
|   def post_body path, body, headers={}
 | |
|     submit do |http|
 | |
|       http.receive_timeout = 0 #!!! bring out to appropriate server step
 | |
|       http.post(create_url(path), body, default_headers.merge(headers))
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def post_without_privileges path, query, headers={}
 | |
|     user_without_privileges do
 | |
|       post_body(path, query, headers)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def put path, query, headers={}
 | |
|     put_body(path, JSON.pretty_generate(query), headers)
 | |
|   end
 | |
| 
 | |
|   def put_body path, body, headers={}
 | |
|     submit do |http|
 | |
|       http.receive_timeout = 0 #!!! bring out to appropriate server step
 | |
|       http.put(create_url(path), body, default_headers.merge(headers))
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def put_without_privileges path, query="", headers={}
 | |
|     user_without_privileges do
 | |
|       put_body(path, query, headers)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def delete path, query, headers={}
 | |
|     delete_body(path, JSON.pretty_generate(query), headers)
 | |
|   end
 | |
| 
 | |
|   def delete_body path, body, headers={}
 | |
|     submit do |http|
 | |
|       http.delete(create_url(path), body, default_headers.merge(headers))
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def delete_without_privileges path, query={}, headers={}
 | |
|     user_without_privileges do
 | |
|       delete(path, query, headers)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def submit
 | |
|     http = HTTPClient.new
 | |
|     http.set_auth(nil, @config["username"], @config["password"])
 | |
|     res = yield http
 | |
|     @last_res = res
 | |
|   end
 | |
| 
 | |
|   def user_without_privileges
 | |
|     buf_u = @config["username"]
 | |
|     buf_p = @config["password"]
 | |
|     @config["username"] = @config["username_without_privileges"]
 | |
|     @config["password"] = @config["password_without_privileges"]
 | |
|     yield
 | |
|     @config["username"] = buf_u
 | |
|     @config["password"] = buf_p
 | |
|   end
 | |
| 
 | |
|   def config path
 | |
|     YAML.load_file(path)
 | |
|   end
 | |
| end
 | |
| 
 | |
| World do
 | |
|   #MyWorld.new
 | |
|   RequestSender.new
 | |
| end
 | 
