summaryrefslogtreecommitdiff
path: root/test/unit
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit')
-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/hkp_test.rb163
-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/nickserver_test.rb155
-rw-r--r--test/unit/response_test.rb11
12 files changed, 187 insertions, 318 deletions
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/hkp_test.rb b/test/unit/hkp_test.rb
deleted file mode 100644
index 0ecde2d..0000000
--- a/test/unit/hkp_test.rb
+++ /dev/null
@@ -1,163 +0,0 @@
-require File.expand_path('test_helper', File.dirname(__FILE__))
-
-class HkpTest < Minitest::Test
-
- def test_key_info_expired
- fetch_key_info(:hkp_vindex_result, 'lemur@leap.se') do |keys|
- assert_equal 1, keys.length, 'should find a single key'
- assert_equal ['lemur@example.org', 'lemur@leap.se'].sort, keys.first.uids.sort, 'should find both uids'
- assert_equal '0EE5BE979282D80B9F7540F1CCD2ED94D21739E9', keys.first.keyid
- end
- end
-
- def test_key_info_multiple_valid_results
- fetch_key_info :hkp_vindex_result, 'gazelle@leap.se' do |keys|
- assert_equal 2, keys.length, 'should find two keys'
- assert_equal ['gazelle@leap.se'], keys.first.uids
- assert_equal '3790027A', keys.first.keyid
- assert keys.last.uids.include? 'gazelle@leap.se'
- end
- end
-
- def test_key_info_reject_keysize
- fetch_key_info :hkp_vindex_result, 'frog@leap.se' do |keys|
- assert_equal 1, keys.length, 'should find one key' # because short key gets ignored
- assert_equal '00440025', keys.first.keyid
- end
- end
-
- 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
- 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
- end
-
- def test_fetch_key
- uid = 'cloudadmin@leap.se'
- key_id = 'E818C478D3141282F7590D29D041EB11B1647490'
- 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
- end
- end
-
- def test_fetch_key_not_found
- uid = 'cloudadmin@leap.se'
- key_id = 'E818C478D3141282F7590D29D041EB11B1647490'
-
- 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
- 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
- end
-
- #
- # real network tests
- # remember: must be run with REAL_NET=true
- #
-
- 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_equal 1, keys.size
- assert keys.first.keyid =~ /00440025$/
- end
- end
- end
-
- def test_tls_validation_with_real_network
- hkp_url = 'https://keys.mayfirst.org/pks/lookup'
- ca_file = file_path('mayfirst-ca.pem')
-
- real_network do
- stub_config(:hkp_url, hkp_url) do
- stub_config(:hkp_ca_file, ca_file) do
- #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_equal 1, keys.size
- assert keys.first.keyid =~ /00440025$/
- end
- end
- end
- end
- end
-
- 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)
- EM.run do
- deferrable = instance_eval(code)
- deferrable.callback {|response|
- EM.stop
- 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
- 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)
- EM.run do
- deferrable = instance_eval(code)
- deferrable.callback {|response|
- EM.stop
- flunk "Expecting errback, but callback invoked with response: #{response}"
- }
- deferrable.errback {|response|
- EM.stop
- yield response
- return
- }
- end
- assert false, 'should not get here'
- 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
- 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/nickserver_test.rb b/test/unit/nickserver_test.rb
deleted file mode 100644
index 65ade8c..0000000
--- a/test/unit/nickserver_test.rb
+++ /dev/null
@@ -1,155 +0,0 @@
-require File.expand_path('test_helper', File.dirname(__FILE__))
-require 'json'
-
-#
-# Some important notes to understanding these tests:
-#
-# (1) Requests to localhost always bypass HTTP stub.
-#
-# (2) All requests to nickserver are to localhost.
-#
-# (3) the "Host" header for requests to nickserver must be set (or Config.domain set)
-#
-# (4) When stubbing requests to couchdb, the couchdb host is changed from the
-# default (localhost) to a dummy value (notlocalhost).
-#
-
-class NickserverTest < Minitest::Test
-
- def test_GET_served_via_SKS
- uid = 'cloudadmin@leap.se'
- key_id = 'E818C478D3141282F7590D29D041EB11B1647490'
- stub_sks_vindex_reponse(uid, body: file_content(:leap_vindex_result))
- stub_sks_get_reponse(key_id, body: file_content(:leap_public_key))
-
- start do
- params = {query: {"address" => uid}}
- get(params) do |http|
- assert_equal file_content(:leap_public_key), JSON.parse(http.response)["openpgp"]
- stop
- end
- end
- end
-
- def test_POST_served_via_SKS
- uid = 'cloudadmin@leap.se'
- key_id = 'E818C478D3141282F7590D29D041EB11B1647490'
- stub_sks_vindex_reponse(uid, body: file_content(:leap_vindex_result))
- stub_sks_get_reponse(key_id, body: file_content(:leap_public_key))
-
- start do
- params = {body: {"address" => uid}}
- post(params) do |http|
- assert_equal file_content(:leap_public_key), JSON.parse(http.response)["openpgp"]
- stop
- end
- end
- end
-
- def test_GET_served_via_couch_not_found
- domain = "example.org"
- uid = "bananas@" + domain
- stub_couch_response(uid, status: 404) do
- start do
- params = {query: {"address" => uid}, head: {host: domain}}
- get(params) do |http|
- assert_equal 404, http.response_header.status
- stop
- end
- end
- end
- end
-
- def test_GET_served_via_couch_empty_results
- domain = "example.org"
- uid = "stompy@" + domain
- stub_couch_response(uid, body: file_content(:empty_couchdb_result)) do
- start do
- params = {query: {"address" => uid}, head: {host: domain}}
- get(params) do |http|
- assert_equal 404, http.response_header.status
- stop
- end
- end
- end
- end
-
- def test_GET_served_via_couch_success
- domain = "example.org"
- uid = "blue@" + domain
- stub_couch_response(uid, body: file_content(:blue_couchdb_result)) do
- start do
- params = {query: {"address" => uid}, head: {host: domain}}
- get(params) do |http|
- assert_equal file_content(:blue_nickserver_result), http.response
- stop
- end
- end
- end
- end
-
- def test_GET_empty
- start do
- get({}) do |http|
- assert_equal "404 Not Found\n", http.response
- stop
- end
- end
- end
-
- protected
-
- #
- # start nickserver
- #
- def start(timeout = 1)
- Timeout::timeout(timeout) do
- EM.run do
- Nickserver::Server.start
- EM.epoll
- yield
- end
- end
- rescue Timeout::Error
- flunk 'EventMachine was not stopped before the timeout expired'
- end
-
- #
- # http GET requests to nickserver
- #
- def get(params, &block)
- request(:get, params, &block)
- end
-
- #
- # http POST requests to nickserver
- #
- def post(params, &block)
- request(:post, params, &block)
- end
-
- #
- # http request to nickserver
- #
- # this works because http requests to localhost are not stubbed, but requests to other domains are.
- #
- def request(method, params)
- EventMachine::HttpRequest.new("http://localhost:#{Nickserver::Config.port}/").send(method,params).callback {|http|
- # p http.response_header.status
- # p http.response_header
- # p http.response
- yield http
- }.errback {|http|
- flunk(http.error) if http.error
- EM.stop
- }
- end
-
- #
- # stop nickserver
- #
- def stop
- EM.stop
- 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