зеркало из https://github.com/github/ruby-gpgme.git
202 строки
5.7 KiB
Ruby
202 строки
5.7 KiB
Ruby
# -*- encoding: utf-8 -*-
|
|
require 'test_helper'
|
|
|
|
describe GPGME::Key do
|
|
|
|
it "has certain attributes" do
|
|
key = GPGME::Key.find(:secret).first
|
|
[:keylist_mode, :protocol, :owner_trust, :issuer_serial,
|
|
:issuer_name, :chain_id, :subkeys, :uids].each do |attrib|
|
|
assert key.respond_to?(attrib), "Key doesn't respond to #{attrib}"
|
|
end
|
|
end
|
|
|
|
it "won't allow the creation of GPGME::Key's without the C API" do
|
|
assert_raises NoMethodError do
|
|
GPGME::Key.new
|
|
end
|
|
end
|
|
|
|
it "can compare one with another even though if they're not the same object" do
|
|
key1 = GPGME::Key.find(:secret).first
|
|
key2 = GPGME::Key.find(:secret).first
|
|
refute_equal key1.object_id, key2.object_id
|
|
assert_equal key1, key2
|
|
end
|
|
|
|
describe :find do
|
|
it "should return all by default" do
|
|
keys = GPGME::Key.find :secret
|
|
assert_instance_of GPGME::Key, keys.first
|
|
assert 0 < keys.size
|
|
end
|
|
|
|
it "returns an array even if you pass only one descriptor" do
|
|
keys_one = GPGME::Key.find(:secret, KEYS.first[:sha]).map{|key| key.subkeys.map(&:keyid)}
|
|
keys_array = GPGME::Key.find(:secret, [KEYS.first[:sha]]).map{|key| key.subkeys.map(&:keyid)}
|
|
assert_equal keys_one, keys_array
|
|
end
|
|
|
|
it "returns only secret keys if told to do so" do
|
|
keys = GPGME::Key.find :secret
|
|
assert keys.all?(&:secret?)
|
|
end
|
|
|
|
it "returns only public keys if told to do so" do
|
|
keys = GPGME::Key.find :public
|
|
assert keys.none?(&:secret?)
|
|
end
|
|
|
|
it "filters by capabilities" do
|
|
GPGME::Key.any_instance.stubs(:usable_for?).returns(false)
|
|
keys = GPGME::Key.find :public, "", :wadusing
|
|
assert keys.empty?
|
|
end
|
|
end
|
|
|
|
describe :export do
|
|
# Testing the lazy way with expectations. I think tests in
|
|
# the Ctx class are enough.
|
|
it "exports any key that matches the pattern" do
|
|
GPGME::Ctx.any_instance.expects(:export_keys).with("", anything)
|
|
GPGME::Key.export("")
|
|
end
|
|
|
|
it "exports any key that matches the pattern, can specify output" do
|
|
data = GPGME::Data.new
|
|
GPGME::Ctx.any_instance.expects(:export_keys).with("wadus", data)
|
|
ret = GPGME::Key.export("wadus", :output => data)
|
|
assert_equal data, ret
|
|
end
|
|
|
|
it "can specify options for Ctx" do
|
|
GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:export_keys => true))
|
|
GPGME::Key.export("wadus", :armor => true)
|
|
end
|
|
end
|
|
|
|
describe "#export" do
|
|
it "can export from the key instance" do
|
|
key = GPGME::Key.find(:public).first
|
|
GPGME::Key.expects(:export).with(key.sha, {})
|
|
|
|
key.export
|
|
end
|
|
|
|
it "can export from the key instance passing variables" do
|
|
key = GPGME::Key.find(:public).first
|
|
GPGME::Key.expects(:export).with(key.sha, {:armor => true})
|
|
|
|
key.export :armor => true
|
|
end
|
|
end
|
|
|
|
describe :import do
|
|
it "can import keys" do
|
|
data = GPGME::Data.new
|
|
GPGME::Ctx.any_instance.expects(:import_keys).with(data)
|
|
GPGME::Ctx.any_instance.expects(:import_result).returns("wadus")
|
|
|
|
assert_equal "wadus", GPGME::Key.import(data)
|
|
end
|
|
|
|
it "can specify options for Ctx" do
|
|
GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:import_keys => true, :import_result => true))
|
|
GPGME::Key.import("wadus", :armor => true)
|
|
end
|
|
end
|
|
|
|
# describe :trust do
|
|
# it "returns :revoked if it is so"
|
|
# it "returns :expired if it is expired"
|
|
# it "returns :disabled if it is so"
|
|
# it "returns :invalid if it is so"
|
|
# it "returns nil otherwise"
|
|
# end
|
|
|
|
# describe :capability do
|
|
# it "returns an array of possible capabilities"
|
|
# end
|
|
|
|
# describe :secret? do
|
|
# "returns true/false depending on the instance variable"
|
|
# end
|
|
|
|
describe :usable_for? do
|
|
it "checks for the capabilities of the key and returns true if it matches all" do
|
|
key = GPGME::Key.find(:secret).first
|
|
|
|
key.stubs(:capability).returns([:encrypt, :sign])
|
|
assert key.usable_for?([])
|
|
|
|
key.stubs(:capability).returns([:encrypt, :sign])
|
|
assert key.usable_for?([:encrypt])
|
|
|
|
key.stubs(:capability).returns([:encrypt, :sign])
|
|
refute key.usable_for?([:certify])
|
|
end
|
|
|
|
it "returns false if the key is expired or revoked or disabled or disabled" do
|
|
key = GPGME::Key.find(:secret).first
|
|
key.stubs(:trust).returns(:revoked)
|
|
key.stubs(:capability).returns([:encrypt, :sign])
|
|
refute key.usable_for?([:encrypt])
|
|
end
|
|
end
|
|
|
|
describe :delete! do
|
|
it "deletes the key itself and its secret one if called with true" do
|
|
begin
|
|
key = KEYS.first
|
|
GPGME::Key.find(:public, key[:sha]).first.delete!(true)
|
|
|
|
assert_empty GPGME::Key.find(:public, key[:sha])
|
|
assert_empty GPGME::Key.find(:secret, key[:sha])
|
|
ensure
|
|
import_key key
|
|
end
|
|
end
|
|
|
|
it "raises GPGME::Error::Conflict if we're deleting a key that is secret" do
|
|
key = KEYS.first
|
|
assert_raises GPGME::Error::Conflict do
|
|
GPGME::Key.find(:secret, key[:sha]).first.delete!
|
|
end
|
|
refute_empty GPGME::Key.find(:secret, key[:sha])
|
|
end
|
|
end
|
|
|
|
it "knows if the key is expired" do
|
|
key = GPGME::Key.find(:secret).first
|
|
refute key.expired
|
|
|
|
with_key EXPIRED_KEY do
|
|
key = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first
|
|
assert key.expired
|
|
end
|
|
end
|
|
|
|
it "returns the expiry date of the first subkey" do
|
|
key = GPGME::Key.find(:secret).first
|
|
subkey = key.primary_subkey
|
|
subkey.expects(:expired).returns(true)
|
|
|
|
assert key.expired
|
|
end
|
|
|
|
describe :inspect do
|
|
it "can be inspected" do
|
|
key = GPGME::Key.find(:secret).first
|
|
key.inspect
|
|
end
|
|
end
|
|
|
|
describe :to_s do
|
|
it "can be coerced into a String" do
|
|
key = GPGME::Key.find(:secret).first
|
|
key.to_s
|
|
end
|
|
end
|
|
end
|
|
|