123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- require 'spec_helper'
- require 'metasploit/framework/credential'
- RSpec.describe Metasploit::Framework::Credential do
- subject(:cred_detail) {
- described_class.new
- }
- let(:public) { "public" }
- let(:private) { "private" }
- let(:realm) { "realm" }
- let(:realm_type) { Metasploit::Model::Realm::Key::ACTIVE_DIRECTORY_DOMAIN }
- let(:private_type) { :password }
- it { is_expected.to respond_to :paired }
- it { is_expected.to respond_to :private }
- it { is_expected.to respond_to :private_type }
- it { is_expected.to respond_to :public }
- it { is_expected.to respond_to :realm }
- it { is_expected.to respond_to :realm_key }
- describe "#paired" do
- it "defaults to true" do
- expect(cred_detail.paired).to be_truthy
- end
- end
- context 'validations' do
- it 'is not valid without paired being set' do
- expect(cred_detail).to_not be_valid
- end
- context 'when not paired' do
- before(:example) do
- cred_detail.paired = false
- end
- it 'is invalid without at least a public or a private' do
- expect(cred_detail).to_not be_valid
- end
- it 'is valid with just a public' do
- cred_detail.public = 'root'
- expect(cred_detail).to be_valid
- end
- it 'is valid with just a private' do
- cred_detail.private = 'toor'
- expect(cred_detail).to be_valid
- end
- end
- context 'when paired' do
- before(:example) do
- cred_detail.paired = true
- end
- it 'is invalid with only a public' do
- cred_detail.public = 'root'
- expect(cred_detail).to_not be_valid
- end
- it 'is invalid with only a private' do
- cred_detail.private = 'toor'
- expect(cred_detail).to_not be_valid
- end
- it 'is invalid with empty string for public' do
- cred_detail.public = ''
- cred_detail.private = 'toor'
- expect(cred_detail).to_not be_valid
- end
- it 'is valid with empty string for private' do
- cred_detail.public = 'root'
- cred_detail.private = ''
- expect(cred_detail).to be_valid
- end
- end
- end
- describe "#to_credential" do
- subject(:cred_detail) do
- described_class.new(public: public, private: private, realm: realm)
- end
- it { is_expected.to respond_to :to_credential }
- it "should return self" do
- expect(cred_detail.to_credential).to eq(cred_detail)
- end
- end
- describe "#==" do
- let(:public) { "public" }
- let(:private) { "private" }
- let(:realm) { "realm" }
- subject(:cred_detail) do
- described_class.new(public: public, private: private, realm: realm)
- end
- context "when all attributes match" do
- let(:other) do
- described_class.new(public: public, private: private, realm: realm)
- end
- specify do
- expect(other).to eq(cred_detail)
- end
- end
- context "when realm does not match" do
- let(:other) do
- described_class.new(public: public, private: private, realm: "")
- end
- specify do
- expect(other).not_to eq(cred_detail)
- end
- end
- context "when private does not match" do
- let(:other) do
- described_class.new(public: public, private: "", realm: realm)
- end
- specify do
- expect(other).not_to eq(cred_detail)
- end
- end
- context "when public does not match" do
- let(:other) do
- described_class.new(public: "", private: private, realm: realm)
- end
- specify do
- expect(other).not_to eq(cred_detail)
- end
- end
- context "when comparing to a different object" do
- let(:other) {'a string'}
- specify do
- expect(other).not_to eq(cred_detail)
- end
- end
- end
- describe '#to_h' do
- subject(:cred_detail) do
- described_class.new(public: public, private: private, realm: realm, realm_key: realm_type, private_type: private_type)
- end
- it 'returns a hash in the format expect for create_credential' do
- cred_hash = {
- private_data: private,
- private_type: private_type,
- username: public,
- realm_key: realm_type,
- realm_value: realm
- }
- expect(cred_detail.to_h).to eq cred_hash
- end
- end
- end
|