summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/file_content.rb11
-rw-r--r--test/helpers/test_adapter.rb10
-rw-r--r--test/integration/couch_db/source_test.rb19
-rw-r--r--test/integration/hkp_test.rb (renamed from test/unit/hkp_test.rb)83
-rw-r--r--test/integration/nickserver_test.rb (renamed from test/unit/nickserver_test.rb)2
-rw-r--r--test/test_helper.rb11
-rw-r--r--test/unit/adapters/couch_db.rb15
-rw-r--r--test/unit/adapters/em_http_test.rb25
-rw-r--r--test/unit/adapters/local_test.rb5
-rw-r--r--test/unit/couch_db/response_test.rb30
-rw-r--r--test/unit/couch_db/source_unit_test.rb17
-rw-r--r--test/unit/hkp/v_index_response_test.rb17
-rw-r--r--test/unit/invalid_source_test.rb16
-rw-r--r--test/unit/lookup_test.rb23
-rw-r--r--test/unit/nickname_test.rb28
-rw-r--r--test/unit/response_test.rb11
16 files changed, 267 insertions, 56 deletions
diff --git a/test/file_content.rb b/test/file_content.rb
new file mode 100644
index 0000000..0d0ac21
--- /dev/null
+++ b/test/file_content.rb
@@ -0,0 +1,11 @@
+module FileContent
+
+ def file_content(filename)
+ (@file_contents ||= {})[filename] ||= File.read(file_path(filename))
+ end
+
+ def file_path(filename)
+ "%s/files/%s" % [File.dirname(__FILE__), filename]
+ end
+
+end
diff --git a/test/helpers/test_adapter.rb b/test/helpers/test_adapter.rb
new file mode 100644
index 0000000..46d4713
--- /dev/null
+++ b/test/helpers/test_adapter.rb
@@ -0,0 +1,10 @@
+class TestAdapter
+ def initialize(status, content)
+ @status = status
+ @content = content
+ end
+
+ def get(url, opts)
+ yield @status, @content
+ end
+end
diff --git a/test/integration/couch_db/source_test.rb b/test/integration/couch_db/source_test.rb
new file mode 100644
index 0000000..21e3642
--- /dev/null
+++ b/test/integration/couch_db/source_test.rb
@@ -0,0 +1,19 @@
+require 'test_helper'
+require 'file_content'
+require 'helpers/test_adapter'
+require 'nickserver/couch_db/source'
+
+module Nickserver::CouchDB
+ class SourceTest < Minitest::Test
+ include FileContent
+
+ def test_couch_query_and_response
+ adapter = TestAdapter.new 200, file_content(:blue_couchdb_result)
+ source = Source.new adapter
+ source.query 'blue@example.org' do |response|
+ assert_equal 200, response.status
+ assert_equal file_content(:blue_nickserver_result), response.content
+ end
+ end
+ end
+end
diff --git a/test/unit/hkp_test.rb b/test/integration/hkp_test.rb
index 0ecde2d..a824a3f 100644
--- a/test/unit/hkp_test.rb
+++ b/test/integration/hkp_test.rb
@@ -1,4 +1,6 @@
-require File.expand_path('test_helper', File.dirname(__FILE__))
+require 'test_helper'
+require 'nickserver/hkp/source'
+require 'nickserver/adapters/em_http'
class HkpTest < Minitest::Test
@@ -29,17 +31,13 @@ class HkpTest < Minitest::Test
def test_key_info_not_found
uid = 'leaping_lemur@leap.se'
stub_sks_vindex_reponse(uid, status: 404)
- test_em_errback "Nickserver::HKP::FetchKeyInfo.new.search '#{uid}'" do |error|
- assert_equal 404, error
- end
+ assert_response_status_for_uid uid, 404
end
def test_no_matching_key_found
uid = 'leaping_lemur@leap.se'
stub_sks_vindex_reponse(uid, status: 200)
- test_em_errback "Nickserver::HKP::FetchKeyInfo.new.search '#{uid}'" do |error|
- assert_equal 404, error
- end
+ assert_response_status_for_uid uid, 404
end
def test_fetch_key
@@ -48,8 +46,9 @@ class HkpTest < Minitest::Test
stub_sks_vindex_reponse(uid, body: file_content(:leap_vindex_result))
stub_sks_get_reponse(key_id, body: file_content(:leap_public_key))
- test_em_callback "Nickserver::HKP::FetchKey.new.get '#{uid}'" do |key_text|
- assert_equal file_content(:leap_public_key), key_text
+ assert_response_for_uid(uid) do |response|
+ content = JSON.parse response.content
+ assert_equal file_content(:leap_public_key), content['openpgp']
end
end
@@ -60,19 +59,14 @@ class HkpTest < Minitest::Test
stub_sks_vindex_reponse(uid, body: file_content(:leap_vindex_result))
stub_sks_get_reponse(key_id, status: 404)
- test_em_errback "Nickserver::HKP::FetchKey.new.get '#{uid}'" do |error|
- assert_equal 404, error
- end
+ assert_response_status_for_uid uid, 404
end
def test_fetch_key_too_short
uid = 'chiiph@leap.se'
- key_id = '9A753A6B'
stub_sks_vindex_reponse(uid, body: file_content(:short_key_vindex_result))
- test_em_errback "Nickserver::HKP::FetchKey.new.get '#{uid}'" do |error|
- assert_equal 500, error
- end
+ assert_response_status_for_uid uid, 500
end
#
@@ -83,7 +77,7 @@ class HkpTest < Minitest::Test
def test_key_info_real_network
real_network do
uid = 'elijah@riseup.net'
- test_em_callback "Nickserver::HKP::FetchKeyInfo.new.search '#{uid}'" do |keys|
+ assert_key_info_for_uid uid do |keys|
assert_equal 1, keys.size
assert keys.first.keyid =~ /00440025$/
end
@@ -100,7 +94,7 @@ class HkpTest < Minitest::Test
#stub_config(:hkp_ca_file, file_path('autistici-ca.pem')) do
assert File.exist?(Nickserver::Config.hkp_ca_file)
uid = 'elijah@riseup.net'
- test_em_callback "Nickserver::HKP::FetchKeyInfo.new.search '#{uid}'" do |keys|
+ assert_key_info_for_uid uid do |keys|
assert_equal 1, keys.size
assert keys.first.keyid =~ /00440025$/
end
@@ -111,53 +105,38 @@ class HkpTest < Minitest::Test
protected
- #
- # Takes a code snippet that returns a Deferrable, and yields the callback result.
- # Assertion fails if errback is called instead of callback.
- #
- # This method takes care of the calls to EM.run and EM.stop. It works kind of like EM.run_block,
- # except I couldn't get run_block to work with multiple nested HTTP requests.
- #
- def test_em_callback(code, &block)
+ def assert_response_status_for_uid(uid, status)
+ assert_response_for_uid(uid) do |response|
+ assert_equal status, response.status
+ end
+ end
+
+ def assert_response_for_uid(uid, &block)
EM.run do
- deferrable = instance_eval(code)
- deferrable.callback {|response|
- EM.stop
+ Nickserver::Hkp::Source.new(adapter).query uid do |response|
yield response
- return
- }
- deferrable.errback {|response, msg|
EM.stop
- puts caller.join("\n")
- flunk "Expecting callback, but errback invoked with response: #{response} #{msg}\n\n#{caller.join("\n")}"
- }
+ end
end
- assert false, 'should not get here'
end
- #
- # like test_em_callback, except value yielded is the result of errback, and
- # we raise an exception if errback was not called.
- #
- def test_em_errback(code, &block)
+ def assert_key_info_for_uid(uid, &block)
EM.run do
- deferrable = instance_eval(code)
- deferrable.callback {|response|
- EM.stop
- flunk "Expecting errback, but callback invoked with response: #{response}"
- }
- deferrable.errback {|response|
+ Nickserver::Hkp::Source.new(adapter).search uid do |status, keys|
+ assert_equal 200, status
+ yield keys
EM.stop
- yield response
- return
- }
+ end
end
- assert false, 'should not get here'
+ end
+
+ def adapter
+ Nickserver::Adapters::EmHttp.new
end
def fetch_key_info(body_source, uid, &block)
stub_sks_vindex_reponse(uid, body: file_content(body_source))
- test_em_callback "Nickserver::HKP::FetchKeyInfo.new.search '#{uid}'", &block
+ assert_key_info_for_uid(uid, &block)
end
end
diff --git a/test/unit/nickserver_test.rb b/test/integration/nickserver_test.rb
index 65ade8c..b4ff4da 100644
--- a/test/unit/nickserver_test.rb
+++ b/test/integration/nickserver_test.rb
@@ -1,4 +1,4 @@
-require File.expand_path('test_helper', File.dirname(__FILE__))
+require 'test_helper'
require 'json'
#
diff --git a/test/test_helper.rb b/test/test_helper.rb
index d4765bc..afdd3f9 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -1,10 +1,15 @@
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
require 'rubygems'
+require 'kernel_ext'
require 'bundler/setup'
require 'minitest/autorun'
-require 'webmock/minitest'
+silence_warnings do
+ require 'webmock/minitest'
+end
require 'nickserver'
+require 'minitest/pride'
+require 'minitest/hell'
TESTING = true
@@ -27,7 +32,7 @@ class Minitest::Test
end
def real_network
- if ENV['REAL_NET'] == 'true'
+ unless ENV['ONLY_LOCAL'] == 'true'
WebMock.allow_net_connect!
yield
WebMock.disable_net_connect!
@@ -53,7 +58,7 @@ class Minitest::Test
Nickserver::Config.stub :couch_host, 'notlocalhost' do
options = {status: 200, body: ""}.merge(opts)
query = "\?key=#{"%22#{uid}%22"}&reduce=false"
- stub_http_request(:get, /#{Regexp.escape(Nickserver::Couch::FetchKey.couch_url)}.*#{query}/).to_return(options)
+ stub_http_request(:get, /#{Regexp.escape(Nickserver::Config.couch_url)}.*#{query}/).to_return(options)
yield
end
end
diff --git a/test/unit/adapters/couch_db.rb b/test/unit/adapters/couch_db.rb
new file mode 100644
index 0000000..339e4f4
--- /dev/null
+++ b/test/unit/adapters/couch_db.rb
@@ -0,0 +1,15 @@
+require 'testhelper'
+require 'nickserver/adapters/couch_db'
+
+class Nickserver::Adapters::CouchDBTest < Minitest::Test
+
+ def test_query_404
+ adapter.query(nil) do |status, content|
+ assert_equal 404, status
+ end
+ end
+
+ def adapter
+ @adapter ||= Nickserver::Adapters::CouchDB.new
+ end
+end
diff --git a/test/unit/adapters/em_http_test.rb b/test/unit/adapters/em_http_test.rb
new file mode 100644
index 0000000..659ff1b
--- /dev/null
+++ b/test/unit/adapters/em_http_test.rb
@@ -0,0 +1,25 @@
+require 'test_helper'
+require 'nickserver/adapters/em_http'
+
+class Nickserver::Adapters::EmHttpTest < Minitest::Test
+
+ def test_successful_request
+ url = 'http://url.to'
+ stub_http_request(:get, url)
+ .with(query: {key: :value})
+ .to_return status: 200, body: 'body'
+ EM.run do
+ adapter.get(url, query: {key: :value}) do |status, body|
+ assert_equal 200, status
+ assert_equal 'body', body
+ EM.stop
+ end
+ end
+ end
+
+ protected
+
+ def adapter
+ Nickserver::Adapters::EmHttp.new
+ end
+end
diff --git a/test/unit/adapters/local_test.rb b/test/unit/adapters/local_test.rb
new file mode 100644
index 0000000..97d394f
--- /dev/null
+++ b/test/unit/adapters/local_test.rb
@@ -0,0 +1,5 @@
+require 'test_helper'
+require 'nickserver/adapters/local'
+
+class Nickserver::Adapters::LocalTest < Minitest::Test
+end
diff --git a/test/unit/couch_db/response_test.rb b/test/unit/couch_db/response_test.rb
new file mode 100644
index 0000000..d44760d
--- /dev/null
+++ b/test/unit/couch_db/response_test.rb
@@ -0,0 +1,30 @@
+require 'test_helper'
+require 'file_content'
+require 'nickserver/couch_db/response'
+
+class Nickserver::CouchDB::ResponseTest < Minitest::Test
+ include FileContent
+
+ def test_404
+ response = response_for "bananas@example.org",
+ status: 404, body: "{}"
+ assert_equal 404, response.status
+ end
+
+ def test_200_with_empty_response
+ response = response_for "stompy@example.org",
+ status: 200, body: file_content(:empty_couchdb_result)
+ assert_equal 404, response.status
+ end
+
+ def test_200_with_success
+ response = response_for "blue@example.org",
+ status: 200, body: file_content(:blue_couchdb_result)
+ assert_equal 200, response.status
+ assert_equal file_content(:blue_nickserver_result), response.content
+ end
+
+ def response_for(uid, couch_response = {})
+ Nickserver::CouchDB::Response.new uid, couch_response
+ end
+end
diff --git a/test/unit/couch_db/source_unit_test.rb b/test/unit/couch_db/source_unit_test.rb
new file mode 100644
index 0000000..19ea9bc
--- /dev/null
+++ b/test/unit/couch_db/source_unit_test.rb
@@ -0,0 +1,17 @@
+require 'test_helper'
+require 'nickserver/couch_db/source'
+
+module Nickserver::CouchDB
+ class SourceUnitTest < Minitest::Test
+
+ def test_query
+ address = "nick@domain.tl"
+ adapter = Minitest::Mock.new
+ adapter.expect :get, nil,
+ [String, {query: { reduce: "false", key: "\"#{address}\"" }}]
+ query = Source.new(adapter)
+ query.query address
+ adapter.verify
+ end
+ end
+end
diff --git a/test/unit/hkp/v_index_response_test.rb b/test/unit/hkp/v_index_response_test.rb
new file mode 100644
index 0000000..d909520
--- /dev/null
+++ b/test/unit/hkp/v_index_response_test.rb
@@ -0,0 +1,17 @@
+require 'test_helper'
+require 'file_content'
+require 'nickserver/hkp/v_index_response'
+
+class Nickserver::Hkp::VIndexResponseTest < Minitest::Test
+ include FileContent
+
+ def test_leap_public_key
+ response = response_for 'cloudadmin@leap.se',
+ body: file_content(:leap_vindex_result)
+ assert_equal 'E818C478D3141282F7590D29D041EB11B1647490', response.keys.first.keyid
+ end
+
+ def response_for(uid, hkp_response = {})
+ Nickserver::Hkp::VIndexResponse.new uid, hkp_response
+ end
+end
diff --git a/test/unit/invalid_source_test.rb b/test/unit/invalid_source_test.rb
new file mode 100644
index 0000000..37a38fc
--- /dev/null
+++ b/test/unit/invalid_source_test.rb
@@ -0,0 +1,16 @@
+require 'test_helper'
+require 'nickserver/invalid_source'
+
+class Nickserver::InvalidSourceTest < Minitest::Test
+
+ def test_query
+ adapter.query(nil) do |status, content|
+ assert_equal 500, status
+ assert_equal "Not a valid address", content
+ end
+ end
+
+ def adapter
+ Nickserver::InvalidSource.new
+ end
+end
diff --git a/test/unit/lookup_test.rb b/test/unit/lookup_test.rb
new file mode 100644
index 0000000..ac827e0
--- /dev/null
+++ b/test/unit/lookup_test.rb
@@ -0,0 +1,23 @@
+require 'test_helper'
+require 'minitest/mock'
+require 'nickserver/lookup'
+
+class TestLookup < Nickserver::Lookup
+
+ def query
+ yield 200, 'yeah'
+ end
+
+end
+
+class LookupTest < Minitest::Test
+
+ def test_responding
+ responder = Minitest::Mock.new
+ responder.expect :send_response, nil,
+ [{status: 200, content: 'yeah'}]
+ lookup = TestLookup.new nil
+ lookup.respond_with responder
+ responder.verify
+ end
+end
diff --git a/test/unit/nickname_test.rb b/test/unit/nickname_test.rb
new file mode 100644
index 0000000..8681545
--- /dev/null
+++ b/test/unit/nickname_test.rb
@@ -0,0 +1,28 @@
+require 'test_helper'
+require 'nickserver/nickname'
+
+class NicknameTest < Minitest::Test
+
+ def test_local
+ nick = Nickserver::Nickname.new 'nick@test.me'
+ assert nick.local?
+ assert !nick.remote?
+ end
+
+ def test_remote
+ nick = Nickserver::Nickname.new 'nick@remote.domain'
+ assert !nick.local?
+ assert nick.remote?
+ end
+
+ def test_valid
+ nick = Nickserver::Nickname.new 'nick@remote.domain'
+ assert nick.valid?
+ end
+
+ def test_invalid
+ nick = Nickserver::Nickname.new 'asdf'
+ assert nick.invalid?
+ end
+
+end
diff --git a/test/unit/response_test.rb b/test/unit/response_test.rb
new file mode 100644
index 0000000..8a53066
--- /dev/null
+++ b/test/unit/response_test.rb
@@ -0,0 +1,11 @@
+require 'test_helper'
+require 'nickserver/response'
+
+class ResponseTest < Minitest::Test
+
+ def test_content
+ response = Nickserver::Response.new 500, "Not a valid address"
+ assert_equal "500 Not a valid address", response.content
+ end
+
+end