spec/ssh_key_spec.rb in gitolite-0.0.3.alpha vs spec/ssh_key_spec.rb in gitolite-1.0.0
- old
+ new
@@ -2,11 +2,71 @@
require 'gitolite/ssh_key'
include Gitolite
describe Gitolite::SSHKey do
key_dir = File.join(File.dirname(__FILE__),'keys')
-
+
+ describe "#from_string" do
+ it 'should construct an SSH key from a string' do
+ key = File.join(key_dir, 'bob.pub')
+ key_string = File.read(key)
+ s = SSHKey.from_string(key_string, "bob")
+
+ s.owner.should == 'bob'
+ s.location.should == ""
+ s.blob.should == key_string.split[1]
+ end
+
+ it 'should raise an ArgumentError when an owner isnt specified' do
+ key_string = "not_a_real_key"
+ lambda { SSHKey.from_string(key_string) }.should raise_error
+ end
+
+ it 'should have a location when one is specified' do
+ key = File.join(key_dir, 'bob.pub')
+ key_string = File.read(key)
+ s = SSHKey.from_string(key_string, "bob", "kansas")
+
+ s.owner.should == 'bob'
+ s.location.should == "kansas"
+ s.blob.should == key_string.split[1]
+ end
+
+ it 'should raise an ArgumentError when owner is nil' do
+ lambda { SSHKey.from_string("bad_string", nil) }.should raise_error
+ end
+
+ it 'should raise an ArgumentError when we get an invalid SSHKey string' do
+ lambda { SSHKey.from_string("bad_string", "bob") }.should raise_error
+ end
+ end
+
+ describe "#from_file" do
+ it 'should load a key from a file' do
+ key = File.join(key_dir, 'bob.pub')
+ s = SSHKey.from_file(key)
+ key_string = File.read(key).split
+
+ s.owner.should == "bob"
+ s.blob.should == key_string[1]
+ end
+
+ it 'should load a key with a location from a file' do
+ key = File.join(key_dir, 'bob@desktop.pub')
+ s = SSHKey.from_file(key)
+ s.owner.should == 'bob'
+ s.location.should == 'desktop'
+ end
+
+ it 'should load a key with owner and location from a file' do
+ key = File.join(key_dir, 'joe-bob@god-zilla.com@desktop.pub')
+ s = SSHKey.from_file(key)
+ s.owner.should == 'joe-bob@god-zilla.com'
+ s.location.should == 'desktop'
+ end
+ end
+
describe '#owner' do
it 'owner should be bob for bob.pub' do
key = File.join(key_dir, 'bob.pub')
s = SSHKey.from_file(key)
s.owner.should == 'bob'
@@ -134,136 +194,136 @@
key = File.join(key_dir, 'jakub123@foo.net.pub')
s = SSHKey.from_file(key)
s.owner.should == s.email
end
end
-
+
describe '#new' do
it 'should create a valid ssh key' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
-
+
s = SSHKey.new(type, blob, email)
-
+
s.to_s.should == [type, blob, email].join(' ')
s.owner.should == email
end
-
+
it 'should create a valid ssh key while specifying an owner' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
owner = Forgery::Name.first_name
-
+
s = SSHKey.new(type, blob, email, owner)
-
+
s.to_s.should == [type, blob, email].join(' ')
s.owner.should == owner
end
-
+
it 'should create a valid ssh key while specifying an owner and location' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
owner = Forgery::Name.first_name
location = Forgery::Name.location
-
+
s = SSHKey.new(type, blob, email, owner, location)
-
+
s.to_s.should == [type, blob, email].join(' ')
s.owner.should == owner
s.location.should == location
end
end
-
+
describe '#filename' do
it 'should create a filename that is the <email>.pub' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
-
+
s = SSHKey.new(type, blob, email)
-
+
s.filename.should == "#{email}.pub"
end
-
+
it 'should create a filename that is the <owner>.pub' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
owner = Forgery::Name.first_name
-
+
s = SSHKey.new(type, blob, email, owner)
-
+
s.filename.should == "#{owner}.pub"
end
-
+
it 'should create a filename that is the <email>@<location>.pub' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
location = Forgery::Basic.text(:at_least => 8, :at_most => 15)
-
+
s = SSHKey.new(type, blob, email, nil, location)
-
+
s.filename.should == "#{email}@#{location}.pub"
end
-
+
it 'should create a filename that is the <owner>@<location>.pub' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
owner = Forgery::Name.first_name
location = Forgery::Basic.text(:at_least => 8, :at_most => 15)
-
+
s = SSHKey.new(type, blob, email, owner, location)
-
+
s.filename.should == "#{owner}@#{location}.pub"
end
end
-
+
describe '#to_file' do
it 'should write a "valid" SSH public key to the file system' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
owner = Forgery::Name.first_name
location = Forgery::Basic.text(:at_least => 8, :at_most => 15)
-
+
s = SSHKey.new(type, blob, email, owner, location)
-
+
tmpdir = Dir.tmpdir
s.to_file(tmpdir)
-
+
s.to_s.should == File.read(File.join(tmpdir, s.filename))
end
-
+
it 'should return the filename written' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
owner = Forgery::Name.first_name
location = Forgery::Basic.text(:at_least => 8, :at_most => 15)
-
+
s = SSHKey.new(type, blob, email, owner, location)
-
+
tmpdir = Dir.tmpdir
-
-
+
+
s.to_file(tmpdir).should == File.join(tmpdir, s.filename)
end
end
-
+
describe '==' do
it 'should have two keys equalling one another' do
type = "ssh-rsa"
blob = Forgery::Basic.text(:at_least => 372, :at_most => 372)
email = Forgery::Internet.email_address
-
+
s1 = SSHKey.new(type, blob, email)
s2 = SSHKey.new(type, blob, email)
-
+
s1.should == s2
end
end
end