diff options
author | azul <azul@riseup.net> | 2016-06-15 14:22:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-15 14:22:08 +0200 |
commit | 3c6dc3d7b902b46b82a3d8cd38bd3fa896024beb (patch) | |
tree | 559b3998465248138b6f24a76b6b3e55e60f3986 /test/integration/hkp_test.rb | |
parent | 5cad637a4a2a3de6b95ff1204fc29174e18b3124 (diff) | |
parent | 93258bd6fe6247e7af67f423243eba9808e920ee (diff) |
Merge pull request #3 from azul/refactor/transport-adapters
Refactor em specifics into http adapter
Diffstat (limited to 'test/integration/hkp_test.rb')
-rw-r--r-- | test/integration/hkp_test.rb | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/test/integration/hkp_test.rb b/test/integration/hkp_test.rb new file mode 100644 index 0000000..a824a3f --- /dev/null +++ b/test/integration/hkp_test.rb @@ -0,0 +1,142 @@ +require 'test_helper' +require 'nickserver/hkp/source' +require 'nickserver/adapters/em_http' + +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) + 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) + assert_response_status_for_uid uid, 404 + 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)) + + assert_response_for_uid(uid) do |response| + content = JSON.parse response.content + assert_equal file_content(:leap_public_key), content['openpgp'] + 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) + + assert_response_status_for_uid uid, 404 + end + + def test_fetch_key_too_short + uid = 'chiiph@leap.se' + + stub_sks_vindex_reponse(uid, body: file_content(:short_key_vindex_result)) + assert_response_status_for_uid uid, 500 + 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' + assert_key_info_for_uid 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' + assert_key_info_for_uid uid do |keys| + assert_equal 1, keys.size + assert keys.first.keyid =~ /00440025$/ + end + end + end + end + end + + protected + + 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 + Nickserver::Hkp::Source.new(adapter).query uid do |response| + yield response + EM.stop + end + end + end + + def assert_key_info_for_uid(uid, &block) + EM.run do + Nickserver::Hkp::Source.new(adapter).search uid do |status, keys| + assert_equal 200, status + yield keys + EM.stop + end + end + 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)) + assert_key_info_for_uid(uid, &block) + end + +end |