credential_spec.rb 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. require 'spec_helper'
  2. require 'metasploit/framework/credential'
  3. RSpec.describe Metasploit::Framework::Credential do
  4. subject(:cred_detail) {
  5. described_class.new
  6. }
  7. let(:public) { "public" }
  8. let(:private) { "private" }
  9. let(:realm) { "realm" }
  10. let(:realm_type) { Metasploit::Model::Realm::Key::ACTIVE_DIRECTORY_DOMAIN }
  11. let(:private_type) { :password }
  12. it { is_expected.to respond_to :paired }
  13. it { is_expected.to respond_to :private }
  14. it { is_expected.to respond_to :private_type }
  15. it { is_expected.to respond_to :public }
  16. it { is_expected.to respond_to :realm }
  17. it { is_expected.to respond_to :realm_key }
  18. describe "#paired" do
  19. it "defaults to true" do
  20. expect(cred_detail.paired).to be_truthy
  21. end
  22. end
  23. context 'validations' do
  24. it 'is not valid without paired being set' do
  25. expect(cred_detail).to_not be_valid
  26. end
  27. context 'when not paired' do
  28. before(:example) do
  29. cred_detail.paired = false
  30. end
  31. it 'is invalid without at least a public or a private' do
  32. expect(cred_detail).to_not be_valid
  33. end
  34. it 'is valid with just a public' do
  35. cred_detail.public = 'root'
  36. expect(cred_detail).to be_valid
  37. end
  38. it 'is valid with just a private' do
  39. cred_detail.private = 'toor'
  40. expect(cred_detail).to be_valid
  41. end
  42. end
  43. context 'when paired' do
  44. before(:example) do
  45. cred_detail.paired = true
  46. end
  47. it 'is invalid with only a public' do
  48. cred_detail.public = 'root'
  49. expect(cred_detail).to_not be_valid
  50. end
  51. it 'is invalid with only a private' do
  52. cred_detail.private = 'toor'
  53. expect(cred_detail).to_not be_valid
  54. end
  55. it 'is invalid with empty string for public' do
  56. cred_detail.public = ''
  57. cred_detail.private = 'toor'
  58. expect(cred_detail).to_not be_valid
  59. end
  60. it 'is valid with empty string for private' do
  61. cred_detail.public = 'root'
  62. cred_detail.private = ''
  63. expect(cred_detail).to be_valid
  64. end
  65. end
  66. end
  67. describe "#to_credential" do
  68. subject(:cred_detail) do
  69. described_class.new(public: public, private: private, realm: realm)
  70. end
  71. it { is_expected.to respond_to :to_credential }
  72. it "should return self" do
  73. expect(cred_detail.to_credential).to eq(cred_detail)
  74. end
  75. end
  76. describe "#==" do
  77. let(:public) { "public" }
  78. let(:private) { "private" }
  79. let(:realm) { "realm" }
  80. subject(:cred_detail) do
  81. described_class.new(public: public, private: private, realm: realm)
  82. end
  83. context "when all attributes match" do
  84. let(:other) do
  85. described_class.new(public: public, private: private, realm: realm)
  86. end
  87. specify do
  88. expect(other).to eq(cred_detail)
  89. end
  90. end
  91. context "when realm does not match" do
  92. let(:other) do
  93. described_class.new(public: public, private: private, realm: "")
  94. end
  95. specify do
  96. expect(other).not_to eq(cred_detail)
  97. end
  98. end
  99. context "when private does not match" do
  100. let(:other) do
  101. described_class.new(public: public, private: "", realm: realm)
  102. end
  103. specify do
  104. expect(other).not_to eq(cred_detail)
  105. end
  106. end
  107. context "when public does not match" do
  108. let(:other) do
  109. described_class.new(public: "", private: private, realm: realm)
  110. end
  111. specify do
  112. expect(other).not_to eq(cred_detail)
  113. end
  114. end
  115. context "when comparing to a different object" do
  116. let(:other) {'a string'}
  117. specify do
  118. expect(other).not_to eq(cred_detail)
  119. end
  120. end
  121. end
  122. describe '#to_h' do
  123. subject(:cred_detail) do
  124. described_class.new(public: public, private: private, realm: realm, realm_key: realm_type, private_type: private_type)
  125. end
  126. it 'returns a hash in the format expect for create_credential' do
  127. cred_hash = {
  128. private_data: private,
  129. private_type: private_type,
  130. username: public,
  131. realm_key: realm_type,
  132. realm_value: realm
  133. }
  134. expect(cred_detail.to_h).to eq cred_hash
  135. end
  136. end
  137. end