diff --git a/spec/factories/key_pair.rb b/spec/factories/key_pair.rb index 07adb4727..6aa2edb8f 100644 --- a/spec/factories/key_pair.rb +++ b/spec/factories/key_pair.rb @@ -3,8 +3,18 @@ FactoryGirl.define do factory :key_pair do association :repository association :user - public FactoryGirl.generate(:string) - secret FactoryGirl.generate(:string) + public { + file = File.open(Rails.root.join('spec', 'support', 'fixtures', 'pubring.gpg'), "rb") + contents = file.read + file.close + contents + } + secret { + file = File.open(Rails.root.join('spec', 'support', 'fixtures', 'secring.gpg'), "rb") + contents = file.read + file.close + contents + } end end diff --git a/spec/models/key_pair_spec.rb b/spec/models/key_pair_spec.rb index 1bf3b9c2b..2776d4754 100644 --- a/spec/models/key_pair_spec.rb +++ b/spec/models/key_pair_spec.rb @@ -13,6 +13,57 @@ describe KeyPair do it { should_not allow_mass_assignment_of(:user) } it { should_not allow_mass_assignment_of(:key_id) } + describe 'check_keys validation' do + subject { FactoryGirl.build(:key_pair) } + + it { subject.valid?.should be_true } + it 'checks error when wrong public key' do + subject.public = 'test' + subject.valid? + subject.errors[:public].should =~ [I18n.t('activerecord.errors.key_pair.wrong_key')] + end + + it 'checks error when wrong secret key' do + subject.secret = 'test' + subject.valid? + subject.errors[:secret].should =~ [I18n.t('activerecord.errors.key_pair.wrong_key')] + end + + it 'checks error when public key contains secret key' do + subject.public = subject.secret + subject.valid? + subject.errors[:public].should =~ [I18n.t('activerecord.errors.key_pair.contains_public_key')] + end + + it 'checks error when secret key contains public key' do + subject.secret = subject.public + subject.valid? + subject.errors[:secret].should =~ [I18n.t('activerecord.errors.key_pair.contains_secret_key')] + end + + it 'checks error when different fingerprint of keys' do + file = File.open(Rails.root.join('spec', 'support', 'fixtures', 'pubring.pass.gpg'), "rb") + subject.public = file.read + file.close + subject.valid? + subject.errors[:secret].should =~ [I18n.t('activerecord.errors.key_pair.wrong_keys')] + end + + it 'checks error when secret key contains passphrase' do + file = File.open(Rails.root.join('spec', 'support', 'fixtures', 'pubring.pass.gpg'), "rb") + subject.public = file.read + file.close + file = File.open(Rails.root.join('spec', 'support', 'fixtures', 'secring.pass.gpg'), "rb") + subject.secret = file.read + file.close + + subject.valid? + subject.errors[:secret].should =~ [I18n.t('activerecord.errors.key_pair.key_has_passphrase')] + end + + end + + after(:all) do Platform.delete_all User.delete_all diff --git a/spec/support/fixtures/pubring.gpg b/spec/support/fixtures/pubring.gpg new file mode 100644 index 000000000..0c3a2263d --- /dev/null +++ b/spec/support/fixtures/pubring.gpg @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.12 (Darwin) + +mQENBFDS81MBCADYXCU/PiiKKhufSW5OG2Fq3BYHpTxvzGHJjK1vHxx71iZZmxJb +jr1lB2Iac6TXGjZyZCJqXUyi6+d+AFvt1dE4SzCOYDXF30lGJ+sMgR85vA/dOsRm +dQuFeqmgtcCQDlD3ptDe4RXvLhbV7jTKSnhzL0OCOx7nw3NdVfUQ9lLWNxVj2/Wi +O4/AFwSA97V9zpqZoXY9xm+yN5WN0hHufjoTNLb5wCX4boaChJDrMcx041STtgec +HvJKBhLSS3rS4JwUPPPYWYZvlQ/QbCzo0ZVyPJFoP2QQ1hIADgfE2VL9qmbGb3hZ +CfQJqdYBqlJgaXXqU5tCVZygSn3JKrmtCbS/ABEBAAG0MFZva2htaW4gQWxleGV5 +IFYgKGF2b2tobWluKSA8YXZva2htaW5AZ21haWwuY29tPokBOAQTAQIAIgUCUNLz +UwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQasbV9duAtkco+gf+ObSa +PjGNybCtzo91AGQiyuHvckC4vsuakWV3wuPIvymLVBAwAK3NYpQt9HhV09YlgrTU +y2JYALAsAY9dFTVmn0u6AUjxzgcNJG3NJYoUGdxPJJF3Kb7PVMl4qKYvTFooPY/p +yo6fkLxqrLdjODNelqqPl3BOkryhEQAKgIiPkBfu3rkCuN0cHhxhbNu4nH7I3iyv +atsxi1DDRk2GKZkGiiVQWlAr09ZLP/PpVCzpUxMC3hdjA2yZ118fMfvHzFAM4jdL +BGbgFoads+6wbbhrrSXcD2JdW9knwqfX2GMKJQ55N/m0J56/lkD0zjMbEcCk7Tsv +yOjrYsNnRyWw7jGE8LkBDQRQ0vNTAQgAvdVpy2VgNNVAZ6BVPFDaAwrReksCnOBR +Bx5vtJHx4ZUudTpxYyxkkz8cxVap8pJKlBNrZiim2RS3RP/Ya9nTqNYrY597FHgc +KsS9wrdqw8SWse3Pt0QrCpTCcthXvFwho0WW6GP0b5NoEtblHLeCBXG6xBajs80M +7uX7RuOO8SPBCacHR70dmxHjlzQlPSUPrcwxDdlM5FeePSN/ANyrcHaHqNnk+3Dh +PBbmOxyEVf+CmSRlfuaKgCm2g6V7uhU6DBW/6rczOm8QD6cY3RLVfzFLi+gXK2ym +me99WaICe98qQI82HOaCmUk/JGEI8q3m7rMaL2HmYlHOH/6amYoxUQARAQABiQEf +BBgBAgAJBQJQ0vNTAhsMAAoJEGrG1fXbgLZHEB0H/0qmUSltASmyQhe7LAXQcqlJ +KxxSTCg5IfOAuL++4nn/b5SJFfMo1bkVtgo+r5ix33D8ZDFQsditGVf4red6ddSa +SfnNpZkUScOpeOz31N+ev6fspHnMieL9zoHre/FOqWk6h3Wjl4q1NWdRKwpP5zAn +ug17kWzTVxB7CeNbW5N403JoH4e2bWyGO7ZlcM9J26o0g05RU7h5i8y//iUkXt/d +PjBD6YChYl7jpSezAm3Xqv7z+oNtFNRp5kFDn8z7XeHKn4LbNlJq02dcCQkS3Asu +qNgHF0DPEd+lTyvx5ns4Rd5qt4tuwGJGj+VQSMfmLOX88tc/qqwza/0U3Bct+bI= +=ZCfP +-----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file diff --git a/spec/support/fixtures/pubring.pass.gpg b/spec/support/fixtures/pubring.pass.gpg new file mode 100644 index 000000000..7f15d5ac2 --- /dev/null +++ b/spec/support/fixtures/pubring.pass.gpg @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.12 (Darwin) + +mQENBFDS98ABCACaw+nwAvake7DUS8p1vQfLcPMGWPACXxW1x0rvnd6OXakFIb97 +lcFQFslLr581nYQIIFbNEJRXI3DO5hz21dEJ13uxNYsVjnwX79ToL7JxrEhi/mrH +mOyZqDhkVb4nwQQ231aF4gqmpMaxbylYhvUEwEDil2uxvnFCo1oB3lkD4xkhRkjg +n7LqNU15pbCKQsY/qYd502UMaYofacXpqaWY9nKMgPwIH1oMYrgbeJO7PrhZPHaX +CT0/9K8LELKvK7gVWcScfXShmYaITWS+udFUsEzy4D2zt9jQOie9lRCJHeeDWvoj +AvlWE4VVFnbNK3ShblXhhcr3pX6sKMarAPtRABEBAAG0IHF3ZXJ0eSAocXFxcXEp +IDxhcXdlckBqZmRzai5jb20+iQE4BBMBAgAiBQJQ0vfAAhsDBgsJCAcDAgYVCAIJ +CgsEFgIDAQIeAQIXgAAKCRC1dIaeWBn9lfgQB/9foCBWi/4BqjMfsFVVVEWhTCCo +GWMrY5BtQtgAoY7KX5NFNzCqECYua+HZaMAZgxZxElOq2N8Ig84msWnbuKibzZn9 ++6LJCxYYqyn+5xcqeRpTl5zA3fFV7K6rICZF9AzoBFuJgNZ0Do15XEQCJHIlztm8 +AtadgUGQDQkU5OuyGlApQ0KfVxlALyNbIb1b9p0wo+D7LEyTAbCXM6RxloDRBaMe +A4uoyzIHOzj3UxU+/38nizlcNAAGy5uyf0o29c9GpRN4ga1ZDspxPxTxrAg4y289 +i6l1GNXqLxko/Cg69269rl6ejZ4c9tDra/3l7LyTWC7fPcorD0PVgj816y+guQEN +BFDS98ABCADpObjrAmbkll/9lzJpuKeComRFu3ry6FBtmuhX22zjbwCm8Xb4EmbS +e9HioZVelN2k8FNI2bxEfM6eKk0VwY4VTXkEYlEH74gYrK+iiYwUracBVaT3q1au +TrFB+xir4I8rZdFI39iwsKsaUt5XoNPVDrVwOWQRUjxTKfA0y1tOOmByyfDRzXNn +bo5tHOx/YXz6nJBe4XpQ7uWcVhHe8wgsd/ti9HPgRDM1Q1bxz9xxWLAn6VF3tvey +Jz1i3L5SSHoFHd8OInktSgi3VzhoSaZaBcHcbzm3OrqUofuGbLTKJgpXpCvQlqle +2ow/wpAL+stluRuPhYWjMSzKarTJwM1DABEBAAGJAR8EGAECAAkFAlDS98ACGwwA +CgkQtXSGnlgZ/ZVC0gf6Av6xYN/O3i4zxQ2anql2TqD6WP3zJX46+T7k+9ayIl67 +5aH7vHFjmXBt4y8V2ESYIT8LYE3qak7XntNwzjqG4jS4kAw5mOTKaDbGjr+oCGFF +wfBUlK+JyuxbFL28i5bYa94S/rQJ/suKhjWIQu1O/NKLaNJuN5YlhcA53eA/ppPt +TJBNRG2NUD+rAYN5XGb4ctG5h26PpKfr4fxdd90JHf37S/yAcYPnfEfa/WqgnSPL +Bd6AHwmjHxeuRhQhOgIXRmTtWYp3LlPb2yNjL+Vk0ePmzaYp4QrIO1wF1XKTUPB2 +S1x2nlZd4zDbyBYG/2rSWRCB8LwD0H1XVQAMBjBVvQ== +=O0re +-----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file diff --git a/spec/support/fixtures/secring.gpg b/spec/support/fixtures/secring.gpg new file mode 100644 index 000000000..45142f90d --- /dev/null +++ b/spec/support/fixtures/secring.gpg @@ -0,0 +1,58 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1.4.12 (Darwin) + +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 +3Bct+bI= +=CNSZ +-----END PGP PRIVATE KEY BLOCK----- \ No newline at end of file diff --git a/spec/support/fixtures/secring.pass.gpg b/spec/support/fixtures/secring.pass.gpg new file mode 100644 index 000000000..bbfc57821 --- /dev/null +++ b/spec/support/fixtures/secring.pass.gpg @@ -0,0 +1,59 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1.4.12 (Darwin) + +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 +0lkQgfC8A9B9V1UADAYwVb0= +=hZ8N +-----END PGP PRIVATE KEY BLOCK----- \ No newline at end of file