spec/ssh_key_spec.rb in gitolite-0.0.1.alpha vs spec/ssh_key_spec.rb in gitolite-0.0.2.alpha
- old
+ new
@@ -1,124 +1,257 @@
+require 'spec_helper'
require 'gitolite/ssh_key'
include Gitolite
describe Gitolite::SSHKey do
+ key_dir = File.join(File.dirname(__FILE__),'keys')
+
describe '#owner' do
it 'owner should be bob for bob.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob.pub')
+ s = SSHKey.from_file(key)
s.owner.should == 'bob'
end
it 'owner should be bob for bob@desktop.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob@desktop.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob@desktop.pub')
+ s = SSHKey.from_file(key)
s.owner.should == 'bob'
end
it 'owner should be bob@zilla.com for bob@zilla.com.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob@zilla.com.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob@zilla.com.pub')
+ s = SSHKey.from_file(key)
s.owner.should == 'bob@zilla.com'
end
it 'owner should be bob@zilla.com for bob@zilla.com@desktop.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob@zilla.com@desktop.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob@zilla.com@desktop.pub')
+ s = SSHKey.from_file(key)
s.owner.should == 'bob@zilla.com'
end
it 'owner should be jakub123 for jakub123.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'jakub123.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'jakub123.pub')
+ s = SSHKey.from_file(key)
s.owner.should == 'jakub123'
end
it 'owner should be jakub123@foo.net for jakub123@foo.net.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'jakub123@foo.net.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'jakub123@foo.net.pub')
+ s = SSHKey.from_file(key)
s.owner.should == 'jakub123@foo.net'
end
it 'owner should be joe@sch.ool.edu for joe@sch.ool.edu' do
- key = File.join(File.dirname(__FILE__),'keys', 'joe@sch.ool.edu.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'joe@sch.ool.edu.pub')
+ s = SSHKey.from_file(key)
s.owner.should == 'joe@sch.ool.edu'
end
it 'owner should be joe@sch.ool.edu for joe@sch.ool.edu@desktop.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'joe@sch.ool.edu@desktop.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'joe@sch.ool.edu@desktop.pub')
+ s = SSHKey.from_file(key)
s.owner.should == 'joe@sch.ool.edu'
end
end
describe '#location' do
it 'location should be "" for bob.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob.pub')
+ s = SSHKey.from_file(key)
s.location.should == ''
end
it 'location should be "desktop" for bob@desktop.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob@desktop.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob@desktop.pub')
+ s = SSHKey.from_file(key)
s.location.should == 'desktop'
end
it 'location should be "" for bob@zilla.com.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob@zilla.com.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob@zilla.com.pub')
+ s = SSHKey.from_file(key)
s.location.should == ''
end
it 'location should be "desktop" for bob@zilla.com@desktop.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob@zilla.com@desktop.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob@zilla.com@desktop.pub')
+ s = SSHKey.from_file(key)
s.location.should == 'desktop'
end
it 'location should be "" for jakub123.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'jakub123.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'jakub123.pub')
+ s = SSHKey.from_file(key)
s.location.should == ''
end
it 'location should be "" for jakub123@foo.net.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'jakub123@foo.net.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'jakub123@foo.net.pub')
+ s = SSHKey.from_file(key)
s.location.should == ''
end
it 'location should be "" for joe@sch.ool.edu' do
- key = File.join(File.dirname(__FILE__),'keys', 'joe@sch.ool.edu.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'joe@sch.ool.edu.pub')
+ s = SSHKey.from_file(key)
s.location.should == ''
end
it 'location should be "desktop" for joe@sch.ool.edu@desktop.pub' do
- key = File.join(File.dirname(__FILE__),'keys', 'joe@sch.ool.edu@desktop.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'joe@sch.ool.edu@desktop.pub')
+ s = SSHKey.from_file(key)
s.location.should == 'desktop'
end
end
describe '#keys' do
it 'should load ssh key properly' do
- key = File.join(File.dirname(__FILE__),'keys', 'bob.pub')
- s = SSHKey.new(key)
+ key = File.join(key_dir, 'bob.pub')
+ s = SSHKey.from_file(key)
parts = File.read(key).split #should get type, blob, email
s.type.should == parts[0]
s.blob.should == parts[1]
s.email.should == parts[2]
end
end
describe '#email' do
it 'should use owner if email is missing' do
- key = File.join(File.dirname(__FILE__),'keys', 'jakub123@foo.net.pub')
- s = SSHKey.new(key)
+ 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
\ No newline at end of file