Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Switched from echoe to jeweler.

  • Loading branch information...
commit 6a4d20da4205d61c71a72fc22cffaea27977bf0b 1 parent 1251bd4
@pwnall pwnall authored committed
View
25 .gitignore
@@ -0,0 +1,25 @@
+## MAC OS
+.DS_Store
+
+## TEXTMATE
+*.tmproj
+tmtags
+
+## ECLIPSE
+.loadpath
+.project
+
+## EMACS
+*~
+\#*
+.\#*
+
+## VIM
+*.swp
+
+## PROJECT::GENERAL
+coverage
+rdoc
+pkg
+
+## PROJECT::SPECIFIC
View
81 Rakefile
@@ -1,14 +1,61 @@
require 'rubygems'
-require 'echoe'
require 'rake'
-require 'spec/rake/spectask'
-$: << File.join(File.dirname(__FILE__), 'lib')
-require 'rtunnel'
+begin
+ require 'jeweler'
+ Jeweler::Tasks.new do |gem|
+ gem.name = 'rtunnel'
+ gem.rubyforge_project = 'rtunnel'
+ gem.summary = 'Reverse tunnel server and client.'
+ gem.description = "More robust than ssh's reverse tunnel mechanism.'"
+ gem.email = 'coderrr.contact@gmail.com'
+ gem.homepage = 'http://github.com/coderrr/rtunnel'
+ gem.author = 'coderrr'
+ gem.add_runtime_dependency "eventmachine", ">= 0.12.2"
+ gem.add_runtime_dependency "net-ssh", ">= 2.0.4"
+ gem.add_development_dependency "rspec", ">= 1.3.0"
+ gem.add_development_dependency "simple-daemon", ">= 0.1.2"
+ gem.add_development_dependency "thin", ">= 1.0.0"
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
+ end
+ Jeweler::GemcutterTasks.new
+rescue LoadError
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
+end
+
+require 'rake/testtask'
+Rake::TestTask.new(:test) do |test|
+ test.libs << 'lib' << 'test'
+ test.pattern = 'test/**/*_test.rb'
+ test.verbose = true
+end
+
+begin
+ require 'rcov/rcovtask'
+ Rcov::RcovTask.new do |test|
+ test.libs << 'test'
+ test.pattern = 'test/**/*_test.rb'
+ test.verbose = true
+ end
+rescue LoadError
+ task :rcov do
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
+ end
+end
-desc "Run all examples"
-Spec::Rake::SpecTask.new('spec') do |t|
- t.spec_files = FileList['spec/**/*.rb']
+task :test => :check_dependencies
+
+task :default => :test
+
+require 'rake/rdoctask'
+Rake::RDocTask.new do |rdoc|
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
+
+ rdoc.rdoc_dir = 'rdoc'
+ rdoc.title = "authpwn_rails #{version}"
+ rdoc.rdoc_files.include('README*')
+ rdoc.rdoc_files.include('app/**/*.rb')
+ rdoc.rdoc_files.include('lib/**/*.rb')
end
desc "Create packages"
@@ -23,23 +70,7 @@ end
desc "Print command codes"
task :codes do
+ $: << File.expand_path('../lib', __FILE__)
+ require 'rtunnel'
print RTunnel::Command.printable_codes
end
-
-Echoe.new('rtunnel') do |p|
- p.rubyforge_name = 'coderrr'
- p.author = 'coderrr'
- p.email = 'coderrr.contact@gmail.com'
- p.summary = 'Reverse tunnel server and client.'
- p.description = ''
- p.url = 'http://github.com/coderrr/rtunnel'
- # p.remote_rdoc_dir = '' # Release to root
- p.dependencies = ["eventmachine >=0.12.2",
- "net-ssh >=2.0.4"]
- p.development_dependencies = ["echoe >=3.0.1",
- "rspec >=1.1.11",
- "simple-daemon >=0.1.2",
- "thin >=1.0.0"]
- p.need_tar_gz = false
- p.need_zip = false
-end
View
1  VERSION
@@ -0,0 +1 @@
+0.0.0
View
175 rtunnel.gemspec
@@ -1,62 +1,117 @@
+# Generated by jeweler
+# DO NOT EDIT THIS FILE DIRECTLY
+# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
+# -*- encoding: utf-8 -*-
+
Gem::Specification.new do |s|
- s.name = 'rtunnel'
- s.version = '0.4.1'
- s.authors = ['coderrr', 'costan']
- s.email = 'coderrr.contact@gmail.com'
- s.summary = 'Reverse tunnel server and client.'
- s.description = ''
- s.homepage = 'http://github.com/coderrr/rtunnel'
- s.add_dependency('eventmachine', '>=0.12.2')
- s.add_dependency('net-ssh', '>=2.0.4')
- s.files = %w(
- CHANGELOG
- LICENSE
- Manifest
- README.markdown
- Rakefile
- bin/rtunnel_client
- bin/rtunnel_server
- lib/rtunnel.rb
- lib/rtunnel/client.rb
- lib/rtunnel/command_protocol.rb
- lib/rtunnel/commands.rb
- lib/rtunnel/core.rb
- lib/rtunnel/crypto.rb
- lib/rtunnel/frame_protocol.rb
- lib/rtunnel/io_extensions.rb
- lib/rtunnel/leak.rb
- lib/rtunnel/rtunnel_client_cmd.rb
- lib/rtunnel/rtunnel_server_cmd.rb
- lib/rtunnel/server.rb
- lib/rtunnel/socket_factory.rb
- lib/rtunnel/connection_id.rb
- lib/rtunnel/command_processor.rb
- spec/client_spec.rb
- spec/cmds_spec.rb
- spec/integration_spec.rb
- spec/server_spec.rb
- spec/spec_helper.rb
- test/command_stubs.rb
- test/protocol_mocks.rb
- test/scenario_connection.rb
- test/test_client.rb
- test/test_command_protocol.rb
- test/test_commands.rb
- test/test_crypto.rb
- test/test_frame_protocol.rb
- test/test_io_extensions.rb
- test/test_server.rb
- test/test_socket_factory.rb
- test/test_tunnel.rb
- test/test_connection_id.rb
- test_data/known_hosts
- test_data/ssh_host_rsa_key
- test_data/random_rsa_key
- test_data/ssh_host_dsa_key
- test_data/authorized_keys2
- tests/_ab_test.rb
- tests/_stress_test.rb
- tests/lo_http_server.rb
- )
- s.executables = ['rtunnel_client', 'rtunnel_server']
+ s.name = %q{rtunnel}
+ s.version = "0.0.0"
+
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
+ s.authors = ["coderrr"]
+ s.date = %q{2010-08-29}
+ s.description = %q{More robust than ssh's reverse tunnel mechanism.'}
+ s.email = %q{coderrr.contact@gmail.com}
+ s.executables = ["rtunnel_client", "rtunnel_server"]
+ s.extra_rdoc_files = [
+ "LICENSE",
+ "README.markdown"
+ ]
+ s.files = [
+ ".gitignore",
+ "CHANGELOG",
+ "LICENSE",
+ "Manifest",
+ "README.markdown",
+ "Rakefile",
+ "VERSION",
+ "bin/rtunnel_client",
+ "bin/rtunnel_server",
+ "lib/rtunnel.rb",
+ "lib/rtunnel/client.rb",
+ "lib/rtunnel/command_processor.rb",
+ "lib/rtunnel/command_protocol.rb",
+ "lib/rtunnel/commands.rb",
+ "lib/rtunnel/connection_id.rb",
+ "lib/rtunnel/core.rb",
+ "lib/rtunnel/crypto.rb",
+ "lib/rtunnel/frame_protocol.rb",
+ "lib/rtunnel/io_extensions.rb",
+ "lib/rtunnel/leak.rb",
+ "lib/rtunnel/rtunnel_client_cmd.rb",
+ "lib/rtunnel/rtunnel_server_cmd.rb",
+ "lib/rtunnel/server.rb",
+ "lib/rtunnel/socket_factory.rb",
+ "rtunnel.gemspec",
+ "test/client_test.rb",
+ "test/command_protocol_test.rb",
+ "test/commands_test.rb",
+ "test/connection_id_test.rb",
+ "test/crypto_test.rb",
+ "test/frame_protocol_test.rb",
+ "test/helpers/command_stubs.rb",
+ "test/helpers/protocol_mocks.rb",
+ "test/helpers/scenario_connection.rb",
+ "test/io_extensions_test.rb",
+ "test/server_test.rb",
+ "test/socket_factory_test.rb",
+ "test/test_helper.rb",
+ "test/tunnel_test.rb",
+ "test_data/authorized_keys2",
+ "test_data/known_hosts",
+ "test_data/random_rsa_key",
+ "test_data/ssh_host_dsa_key",
+ "test_data/ssh_host_rsa_key",
+ "tests/_ab_test.rb",
+ "tests/_stress_test.rb",
+ "tests/lo_http_server.rb"
+ ]
+ s.homepage = %q{http://github.com/coderrr/rtunnel}
+ s.rdoc_options = ["--charset=UTF-8"]
+ s.require_paths = ["lib"]
+ s.rubyforge_project = %q{rtunnel}
+ s.rubygems_version = %q{1.3.7}
+ s.summary = %q{Reverse tunnel server and client.}
+ s.test_files = [
+ "test/client_test.rb",
+ "test/command_protocol_test.rb",
+ "test/commands_test.rb",
+ "test/connection_id_test.rb",
+ "test/crypto_test.rb",
+ "test/frame_protocol_test.rb",
+ "test/helpers/command_stubs.rb",
+ "test/helpers/protocol_mocks.rb",
+ "test/helpers/scenario_connection.rb",
+ "test/io_extensions_test.rb",
+ "test/server_test.rb",
+ "test/socket_factory_test.rb",
+ "test/test_helper.rb",
+ "test/tunnel_test.rb"
+ ]
+
+ if s.respond_to? :specification_version then
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
+ s.specification_version = 3
+
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
+ s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.2"])
+ s.add_runtime_dependency(%q<net-ssh>, [">= 2.0.4"])
+ s.add_development_dependency(%q<rspec>, [">= 1.3.0"])
+ s.add_development_dependency(%q<simple-daemon>, [">= 0.1.2"])
+ s.add_development_dependency(%q<thin>, [">= 1.0.0"])
+ else
+ s.add_dependency(%q<eventmachine>, [">= 0.12.2"])
+ s.add_dependency(%q<net-ssh>, [">= 2.0.4"])
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
+ s.add_dependency(%q<simple-daemon>, [">= 0.1.2"])
+ s.add_dependency(%q<thin>, [">= 1.0.0"])
+ end
+ else
+ s.add_dependency(%q<eventmachine>, [">= 0.12.2"])
+ s.add_dependency(%q<net-ssh>, [">= 2.0.4"])
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
+ s.add_dependency(%q<simple-daemon>, [">= 0.1.2"])
+ s.add_dependency(%q<thin>, [">= 1.0.0"])
+ end
end
+
View
47 spec/client_spec.rb
@@ -1,47 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-require 'client'
-
-include RTunnel
-describe RTunnel::Client, "addresses" do
- def o(opts)
- {:control_address => 'x.com', :remote_listen_address => '5555', :tunnel_to_address => '6666'}.merge opts
- end
-
- before :all do
- String.class_eval do
- alias_method :orig_replace_with_ip!, :replace_with_ip!
- define_method :replace_with_ip! do
- self
- end
- end
- end
-
- after :all do
- String.class_eval do
- alias_method :replace_with_ip!, :orig_replace_with_ip!
- end
- end
-
- it "should use default control port if not specified" do
- Client.new(o :control_address => 'asdf.net').
- instance_eval { @control_address }.should == "asdf.net:#{DEFAULT_CONTROL_PORT}"
-
- Client.new(o :control_address => 'asdf.net:1234').
- instance_eval { @control_address }.should == "asdf.net:1234"
- end
-
- it "should use 0.0.0.0 for remote listen host if not specified" do
- Client.new(o :control_address => 'asdf.net:1234', :remote_listen_address => '8888').
- instance_eval { @remote_listen_address }.should == '0.0.0.0:8888'
-
- Client.new(o :control_address => 'asdf.net:1234', :remote_listen_address => 'ip2.asdf.net:8888').
- instance_eval { @remote_listen_address }.should == 'ip2.asdf.net:8888'
- end
-
- it "should use localhost for tunnel to address if not specified" do
- Client.new(o :tunnel_to_address => '5555').
- instance_eval { @tunnel_to_address }.should == 'localhost:5555'
- end
-
-end
View
127 spec/cmds_spec.rb
@@ -1,127 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-require 'cmds'
-
-include RTunnel
-
-describe RTunnel::CreateConnectionCommand do
- it "should be able to serialize and parse itself" do
- serialized = CreateConnectionCommand.new("id").to_s
-
- cmd = Command.parse(serialized)
- cmd.class.should == CreateConnectionCommand
- cmd.conn_id.should == "id"
- end
-
- it "should be able to match itself and remove itself from the stream" do
- serialized = CreateConnectionCommand.new("abcbdefg").to_s
-
- Command.match(serialized).should == true
- Command.parse(serialized)
- serialized.should be_empty
- end
-end
-
-describe RTunnel::SendDataCommand do
- it "should be able to serialzied and parse itself" do
- serialized = SendDataCommand.new("id", "here is some data").to_s
-
- cmd = Command.parse(serialized)
- cmd.class.should == SendDataCommand
- cmd.conn_id.should == "id"
- cmd.data.should == "here is some data"
- end
-
- it "should be able to match itself and remove itself from the stream" do
- serialized = SendDataCommand.new("abcbdefg", "and here is some data").to_s
-
- serialized << "WAY MORE CRAP DATA!!!"
-
- Command.match(serialized).should == true
- Command.parse(serialized)
- serialized.should == "WAY MORE CRAP DATA!!!"
- end
-end
-
-describe RTunnel::CloseConnectionCommand do
- it "should be able to serialize and parse itself" do
- serialized = CloseConnectionCommand.new("id").to_s
-
- cmd = Command.parse(serialized)
- cmd.class.should == CloseConnectionCommand
- cmd.conn_id.should == "id"
- end
-
- it "should be able to match itself and remove itself from the stream" do
- serialized = CloseConnectionCommand.new("abcbdefg").to_s
-
- Command.match(serialized).should == true
- Command.parse(serialized)
- serialized.should be_empty
- end
-end
-
-describe RTunnel::PingCommand do
- it "should be able to serialize and parse itself" do
- serialized = PingCommand.new.to_s
-
- cmd = Command.parse(serialized)
- cmd.class.should == PingCommand
- end
-
- it "should be able to match itself and remove itself from the stream" do
- serialized = PingCommand.new.to_s
-
- Command.match(serialized).should == true
- Command.parse(serialized)
- serialized.should be_empty
- end
-end
-
-
-describe RTunnel::RemoteListenCommand do
- it "should be able to serialize and parse itself" do
- serialized = RemoteListenCommand.new("0.0.0.0:1234").to_s
-
- cmd = Command.parse(serialized)
- cmd.class.should == RemoteListenCommand
- cmd.address.should == "0.0.0.0:1234"
- end
-
- it "should be able to match itself and remove itself from the stream" do
- serialized = RemoteListenCommand.new("0.0.0.0:1234").to_s
-
- Command.match(serialized).should == true
- Command.parse(serialized)
- serialized.should be_empty
- end
-end
-
-
-describe RTunnel::Command do
- it "should be able to match a command in a stream" do
- Command.match("C1234abc|").should == true
- Command.match("C1234abc").should == false
- Command.match("C1234abc|C|").should == true
-
- Command.match("Did|15|DATA").should == false
- Command.match("Did|1|DATA").should == true
- Command.match("Did|4|\0\0\0\0").should == true
-
- data = "C1234abc|D1234abc|15|here is my dataX1234abc|L0.0.0.0:1234|CASDF"
- cmd1 = Command.parse(data)
- cmd2 = Command.parse(data)
- cmd3 = Command.parse(data)
- cmd4 = Command.parse(data)
- cmd1.class.should == CreateConnectionCommand
- cmd1.conn_id.should == "1234abc"
- cmd2.class.should == SendDataCommand
- cmd2.conn_id.should == "1234abc"
- cmd3.class.should == CloseConnectionCommand
- cmd3.conn_id.should == "1234abc"
- cmd4.class.should == RemoteListenCommand
- cmd4.address.should == "0.0.0.0:1234"
-
- Command.match(data).should == false
- end
-end
View
105 spec/integration_spec.rb
@@ -1,105 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-require 'client'
-require 'server'
-
-describe "RTunnel" do
- class TextServer < GServer
- def initialize(port, text)
- @text = text
- super(port)
- end
-
- def serve(io)
- io.write(@text)
- end
- end
-
- def read_from_address(addr)
- timeout(2) { TCPSocket.open(*addr.split(/:/)) {|s| s.read } }
- end
-
- it "should work!" do
- begin
- server = RTunnel::Server.new(:control_address => 'localhost:9999')
- client = RTunnel::Client.new(:control_address => 'localhost:9999', :remote_listen_address => '30002', :tunnel_to_address => '30003')
-
- server.start
- client.start
-
- s = TextServer.new(30003, echo_text = "tunnel this txt plz!")
- s.start
-
- sleep 0.5
-
- # direct connect (sanity check)
- read_from_address('localhost:30003').should == echo_text
- # tunneled connect
- read_from_address('localhost:30002').should == echo_text
- ensure
- begin
- client.stop
- server.stop
- s.stop
- rescue
- end
- end
- end
-
- it "should ping all clients periodically" do
- begin
- server = RTunnel::Server.new(:control_address => 'localhost:9999', :ping_interval => 0.2)
- clients = []
- clients << RTunnel::Client.new(:control_address => 'localhost:9999', :remote_listen_address => '30002', :tunnel_to_address => '30003')
- clients << RTunnel::Client.new(:control_address => 'localhost:9999', :remote_listen_address => '30012', :tunnel_to_address => '30013')
- server.start
- clients.each{|c|c.start}
-
- pings = Hash.new {|h,k| h[k] = [] }
- t = Thread.new do
- loop do
- clients.each do |client|
- pings[client] << client.instance_eval { @last_ping }
- end
- sleep 0.05
- end
- end
-
- sleep 2
-
- clients.each do |client|
- # 2 seconds, 0.2 pings a sec = ~10 pings
- (9..11).should include(pings[client].uniq.size)
- end
- ensure
- t.kill
- begin
- clients.each{|c|c.stop}
- server.stop
- rescue
- p $!,$@
- end
- end
- end
-
- it "the client shouldnt fail even if there is no server running at the tunnel_to address" do
- begin
- server = RTunnel::Server.new(:control_address => 'localhost:9999')
- client = RTunnel::Client.new(:control_address => 'localhost:9999', :remote_listen_address => '30002', :tunnel_to_address => '30003')
-
- server.start
- client.start
-
- sleep 0.5
-
- # tunneled connect
- read_from_address('localhost:30002').should be_empty
- ensure
- begin
- client.stop
- server.stop
- rescue
- end
- end
- end
-end
View
21 spec/server_spec.rb
@@ -1,21 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-require 'server'
-
-include RTunnel
-describe RTunnel::Server, "addresses" do
- it "control address should listen on all interfaces and use default control port if not specified" do
- Server.new(:control_address => nil).
- instance_eval { @control_address }.should == "0.0.0.0:#{DEFAULT_CONTROL_PORT}"
-
- Server.new(:control_address => '5555').
- instance_eval { @control_address }.should == "0.0.0.0:5555"
-
- Server.new(:control_address => 'interface2').
- instance_eval { @control_address }.should == "interface2:#{DEFAULT_CONTROL_PORT}"
-
- Server.new(:control_address => 'interface2:2222').
- instance_eval { @control_address }.should == "interface2:2222"
- end
-
-end
View
3  spec/spec_helper.rb
@@ -1,3 +0,0 @@
-$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
-
-require 'spec'
View
6 test/test_client.rb → test/client_test.rb
@@ -1,8 +1,4 @@
-require 'rtunnel'
-
-require 'openssl'
-require 'resolv'
-require 'test/unit'
+require File.expand_path('../test_helper.rb', __FILE__)
class ClientTest < Test::Unit::TestCase
def setup
View
7 test/test_command_protocol.rb → test/command_protocol_test.rb
@@ -1,9 +1,4 @@
-require 'rtunnel'
-
-require 'test/unit'
-
-require 'test/command_stubs.rb'
-require 'test/protocol_mocks.rb'
+require File.expand_path('../test_helper.rb', __FILE__)
# Send mock for commands.
class EmSendCommandsMock < EmSendMock
View
7 test/test_commands.rb → test/commands_test.rb
@@ -1,9 +1,4 @@
-require 'rtunnel'
-
-require 'stringio'
-require 'test/unit'
-
-require 'test/command_stubs.rb'
+require File.expand_path('../test_helper.rb', __FILE__)
class CommandsTest < Test::Unit::TestCase
include CommandStubs
View
4 test/test_connection_id.rb → test/connection_id_test.rb
@@ -1,6 +1,4 @@
-require 'rtunnel'
-
-require 'test/unit'
+require File.expand_path('../test_helper.rb', __FILE__)
class ConnectionIdTest < Test::Unit::TestCase
class CidWrapper
View
5 test/test_crypto.rb → test/crypto_test.rb
@@ -1,7 +1,4 @@
-require 'rtunnel'
-
-require 'openssl'
-require 'test/unit'
+require File.expand_path('../test_helper.rb', __FILE__)
class CryptoTest < Test::Unit::TestCase
C = RTunnel::Crypto
View
6 test/test_frame_protocol.rb → test/frame_protocol_test.rb
@@ -1,8 +1,4 @@
-require 'rtunnel'
-
-require 'test/unit'
-
-require 'test/protocol_mocks.rb'
+require File.expand_path('../test_helper.rb', __FILE__)
# Send mock for frames.
class EmSendFramesMock < EmSendMock
View
0  test/command_stubs.rb → test/helpers/command_stubs.rb
File renamed without changes
View
0  test/protocol_mocks.rb → test/helpers/protocol_mocks.rb
File renamed without changes
View
0  test/scenario_connection.rb → test/helpers/scenario_connection.rb
File renamed without changes
View
5 test/test_io_extensions.rb → test/io_extensions_test.rb
@@ -1,7 +1,4 @@
-require 'rtunnel'
-
-require 'stringio'
-require 'test/unit'
+require File.expand_path('../test_helper.rb', __FILE__)
class IOExtensionsTest < Test::Unit::TestCase
def setup
View
6 test/test_server.rb → test/server_test.rb
@@ -1,8 +1,4 @@
-require 'rtunnel'
-
-require 'resolv'
-require 'test/unit'
-
+require File.expand_path('../test_helper.rb', __FILE__)
class ServerTest < Test::Unit::TestCase
def setup
View
4 test/test_socket_factory.rb → test/socket_factory_test.rb
@@ -1,6 +1,4 @@
-require 'rtunnel'
-
-require 'test/unit'
+require File.expand_path('../test_helper.rb', __FILE__)
class SocketFactoryTest < Test::Unit::TestCase
SF = RTunnel::SocketFactory
View
12 test/test_helper.rb
@@ -0,0 +1,12 @@
+require 'rtunnel'
+require 'test/unit'
+
+require 'openssl'
+require 'resolv'
+
+require 'rubygems'
+require 'eventmachine'
+
+require File.expand_path('../helpers/command_stubs.rb', __FILE__)
+require File.expand_path('../helpers/protocol_mocks.rb', __FILE__)
+require File.expand_path('../helpers/scenario_connection.rb', __FILE__)
View
9 test/test_tunnel.rb → test/tunnel_test.rb
@@ -1,11 +1,4 @@
-require 'rtunnel'
-
-require 'test/unit'
-
-require 'rubygems'
-require 'eventmachine'
-
-require 'test/scenario_connection.rb'
+require File.expand_path('../test_helper.rb', __FILE__)
# Integration tests ensuring that we can start a tunnel.
class TunnelTest < Test::Unit::TestCase
Please sign in to comment.
Something went wrong with that request. Please try again.