metasploit-credential 0.14.7 → 0.14.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +41 -9
  3. data/lib/metasploit/credential/exporter/core.rb +2 -2
  4. data/lib/metasploit/credential/exporter/pwdump.rb +2 -2
  5. data/lib/metasploit/credential/migrator.rb +1 -1
  6. data/lib/metasploit/credential/version.rb +12 -21
  7. data/spec/dummy/db/structure.sql +0 -1
  8. data/spec/lib/metasploit/credential/creation_spec.rb +8 -6
  9. data/spec/lib/metasploit/credential/exporter/core_spec.rb +85 -100
  10. data/spec/lib/metasploit/credential/exporter/pwdump_spec.rb +16 -14
  11. data/spec/lib/metasploit/credential/importer/core_spec.rb +12 -10
  12. data/spec/lib/metasploit/credential/importer/multi_spec.rb +6 -4
  13. data/spec/lib/metasploit/credential/importer/pwdump_spec.rb +13 -11
  14. data/spec/lib/metasploit/credential/importer/zip_spec.rb +7 -5
  15. data/spec/lib/metasploit/credential/migrator_spec.rb +13 -13
  16. data/spec/lib/metasploit/credential/version_spec.rb +141 -3
  17. data/spec/lib/metasploit/credential_spec.rb +15 -4
  18. data/spec/models/mdm/service_spec.rb +5 -3
  19. data/spec/models/mdm/session_spec.rb +4 -2
  20. data/spec/models/mdm/task_spec.rb +6 -4
  21. data/spec/models/mdm/user_spec.rb +4 -2
  22. data/spec/models/mdm/workspace_spec.rb +4 -2
  23. data/spec/models/metasploit/credential/blank_username_spec.rb +7 -5
  24. data/spec/models/metasploit/credential/core_spec.rb +45 -43
  25. data/spec/models/metasploit/credential/login/status_spec.rb +21 -19
  26. data/spec/models/metasploit/credential/login_spec.rb +38 -36
  27. data/spec/models/metasploit/credential/nonreplayable_hash_spec.rb +5 -3
  28. data/spec/models/metasploit/credential/ntlm_hash_spec.rb +15 -13
  29. data/spec/models/metasploit/credential/origin/cracked_password_spec.rb +7 -5
  30. data/spec/models/metasploit/credential/origin/import_spec.rb +10 -8
  31. data/spec/models/metasploit/credential/origin/manual_spec.rb +9 -7
  32. data/spec/models/metasploit/credential/origin/service_spec.rb +12 -10
  33. data/spec/models/metasploit/credential/origin/session_spec.rb +13 -11
  34. data/spec/models/metasploit/credential/password_hash_spec.rb +6 -4
  35. data/spec/models/metasploit/credential/password_spec.rb +5 -3
  36. data/spec/models/metasploit/credential/postgres_md5_spec.rb +6 -4
  37. data/spec/models/metasploit/credential/private_spec.rb +10 -8
  38. data/spec/models/metasploit/credential/public_spec.rb +7 -5
  39. data/spec/models/metasploit/credential/realm_spec.rb +16 -14
  40. data/spec/models/metasploit/credential/replayable_hash_spec.rb +5 -3
  41. data/spec/models/metasploit/credential/ssh_key_spec.rb +17 -15
  42. data/spec/models/metasploit/credential/username_spec.rb +8 -6
  43. data/spec/models/metasploit_data_models/search/visitor/relation_spec.rb +3 -1
  44. data/spec/spec_helper.rb +25 -95
  45. data/spec/support/shared/contexts/mdm/workspace.rb +1 -1
  46. data/spec/support/shared/examples/core_validations.rb +42 -117
  47. data/spec/support/shared/examples/single_table_inheritance_database_columns.rb +2 -2
  48. data/spec/support/shared/examples/timestamp_database_column.rb +2 -2
  49. metadata +8 -22
@@ -1,28 +1,30 @@
1
- RSpec.describe Metasploit::Credential::Username, type: :model do
1
+ require 'spec_helper'
2
+
3
+ describe Metasploit::Credential::Username do
2
4
  it_should_behave_like 'Metasploit::Concern.run'
3
5
 
4
6
  context 'database' do
5
7
  context 'columns' do
6
8
  it_should_behave_like 'timestamp database columns'
7
9
 
8
- it { is_expected.to have_db_column(:username).of_type(:string).with_options(null: false) }
10
+ it { should have_db_column(:username).of_type(:string).with_options(null: false) }
9
11
  end
10
12
 
11
13
  context 'indices' do
12
- it { is_expected.to have_db_index(:username).unique(true) }
14
+ it { should have_db_index(:username).unique(true) }
13
15
  end
14
16
  end
15
17
 
16
18
  context 'mass assignment security' do
17
19
  it { should_not allow_mass_assignment_of(:created_at) }
18
20
  it { should_not allow_mass_assignment_of(:updated_at) }
19
- it { is_expected.to allow_mass_assignment_of(:username) }
21
+ it { should allow_mass_assignment_of(:username) }
20
22
  end
21
23
 
22
24
  context 'validations' do
23
25
  context 'username' do
24
- it { is_expected.to validate_presence_of :username }
25
- it { is_expected.to validate_uniqueness_of :username }
26
+ it { should validate_presence_of :username }
27
+ it { should validate_uniqueness_of :username }
26
28
  end
27
29
  end
28
30
 
@@ -1,4 +1,6 @@
1
- RSpec.describe MetasploitDataModels::Search::Visitor::Relation, type: :model do
1
+ require 'spec_helper'
2
+
3
+ describe MetasploitDataModels::Search::Visitor::Relation do
2
4
  subject(:visitor) {
3
5
  described_class.new(
4
6
  query: query
@@ -26,114 +26,44 @@ require 'rspec/rails'
26
26
  # in spec/support/ and its subdirectories from this gem and metasploit-concern
27
27
  #
28
28
 
29
-
30
- # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
31
- gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
32
-
33
- roots = [
34
- gem_specification.gem_dir,
35
- Metasploit::Concern.root,
36
- Metasploit::Credential::Engine.root,
37
- Metasploit::Model::Engine.root,
38
- MetasploitDataModels::Engine.root
29
+ rooteds = [
30
+ Metasploit::Concern,
31
+ Metasploit::Credential::Engine,
32
+ Metasploit::Model::Engine,
33
+ MetasploitDataModels::Engine
39
34
  ]
40
35
 
41
- roots.each do |root|
42
- Dir[File.join(root, 'spec', 'support', '**', '*.rb')].each do |f|
36
+ rooteds.each do |rooted|
37
+ Dir[rooted.root.join('spec', 'support', '**', '*.rb')].each do |f|
43
38
  require f
44
39
  end
45
40
  end
46
41
 
47
-
48
- # This file was generated by the `rspec --init` command. Conventionally, all
49
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
50
- # The generated `.rspec` file contains `--require spec_helper` which will cause
51
- # this file to always be loaded, without a need to explicitly require it in any
52
- # files.
53
- #
54
- # Given that it is always loaded, you are encouraged to keep this file as
55
- # light-weight as possible. Requiring heavyweight dependencies from this file
56
- # will add to the boot time of your test suite on EVERY test run, even for an
57
- # individual file that may not need all of that loaded. Instead, consider making
58
- # a separate helper file that requires the additional dependencies and performs
59
- # the additional setup, and require it from the spec files that actually need
60
- # it.
61
- #
62
- # The `.rspec` file also contains a few flags that are not defaults but that
63
- # users commonly want.
64
- #
65
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
66
42
  RSpec.configure do |config|
67
- # rspec-expectations config goes here. You can use an alternate
68
- # assertion/expectation library such as wrong or the stdlib/minitest
69
- # assertions if you prefer.
70
- config.expect_with :rspec do |expectations|
71
- # This option will default to `true` in RSpec 4. It makes the `description`
72
- # and `failure_message` of custom matchers include text for helper methods
73
- # defined using `chain`, e.g.:
74
- # be_bigger_than(2).and_smaller_than(4).description
75
- # # => "be bigger than 2 and smaller than 4"
76
- # ...rather than:
77
- # # => "be bigger than 2"
78
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
79
- end
80
-
81
- # rspec-mocks config goes here. You can use an alternate test double
82
- # library (such as bogus or mocha) by changing the `mock_with` option here.
83
- config.mock_with :rspec do |mocks|
84
- # Prevents you from mocking or stubbing a method that does not exist on
85
- # a real object. This is generally recommended, and will default to
86
- # `true` in RSpec 4.
87
- mocks.verify_partial_doubles = true
88
- end
89
-
90
- # These two settings work together to allow you to limit a spec run
91
- # to individual examples or groups you care about by tagging them with
92
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
93
- # get run.
94
- config.filter_run :focus
95
- config.run_all_when_everything_filtered = true
96
-
97
- # Limits the available syntax to the non-monkey patched syntax that is
98
- # recommended. For more details, see:
99
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
100
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
101
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
102
- config.disable_monkey_patching!
43
+ # ## Mock Framework
44
+ #
45
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
46
+ #
47
+ # config.mock_with :mocha
48
+ # config.mock_with :flexmock
49
+ # config.mock_with :rr
103
50
 
104
- # This setting enables warnings. It's recommended, but in some cases may
105
- # be too noisy due to issues in dependencies.
106
- config.warnings = true
51
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
52
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
107
53
 
108
- # Many RSpec users commonly either run the entire suite or an individual
109
- # file, and it's useful to allow more verbose output when running an
110
- # individual spec file.
111
- if config.files_to_run.one?
112
- # Use the documentation formatter for detailed output,
113
- # unless a formatter has already been configured
114
- # (e.g. via a command-line flag).
115
- config.default_formatter = 'doc'
116
- end
54
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
55
+ # examples within a transaction, remove the following line or assign false
56
+ # instead of true.
57
+ config.use_transactional_fixtures = true
117
58
 
118
- # Print the 10 slowest examples and example groups at the
119
- # end of the spec run, to help surface which specs are running
120
- # particularly slow.
121
- config.profile_examples = 10
59
+ # If true, the base class of anonymous controllers will be inferred
60
+ # automatically. This will be the default behavior in future versions of
61
+ # rspec-rails.
62
+ config.infer_base_class_for_anonymous_controllers = false
122
63
 
123
64
  # Run specs in random order to surface order dependencies. If you find an
124
65
  # order dependency and want to debug it, you can fix the order by providing
125
66
  # the seed, which is printed after each run.
126
67
  # --seed 1234
127
- config.order = :random
128
-
129
- # Seed global randomization in this process using the `--seed` CLI option.
130
- # Setting this allows you to use `--seed` to deterministically reproduce
131
- # test failures related to randomization by passing the same `--seed` value
132
- # as the one that triggered the failure.
133
- Kernel.srand config.seed
134
-
135
- # If you're not using ActiveRecord, or you'd prefer not to run each of your
136
- # examples within a transaction, remove the following line or assign false
137
- # instead of true.
138
- config.use_transactional_fixtures = true
68
+ config.order = "random"
139
69
  end
@@ -1,6 +1,6 @@
1
1
  shared_context 'Mdm::Workspace' do
2
2
  before(:each) do
3
3
  # TODO remove Rex usage from Mdm as it is not a declared dependency
4
- allow_any_instance_of(Mdm::Workspace).to receive(:valid_ip_or_range?).and_return(true)
4
+ Mdm::Workspace.any_instance.stub(:valid_ip_or_range?).and_return(true)
5
5
  end
6
6
  end
@@ -51,6 +51,18 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
51
51
  # lets
52
52
  #
53
53
 
54
+ let(:first_private) {
55
+ FactoryGirl.create(:metasploit_credential_private)
56
+ }
57
+
58
+ let(:first_public) {
59
+ FactoryGirl.create(:metasploit_credential_username)
60
+ }
61
+
62
+ let(:first_realm) {
63
+ FactoryGirl.create(:metasploit_credential_realm)
64
+ }
65
+
54
66
  let(:first_workspace) {
55
67
  FactoryGirl.create(:mdm_workspace)
56
68
  }
@@ -84,10 +96,27 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
84
96
  }
85
97
  }
86
98
 
99
+
87
100
  let(:second_metasploit_credential_core) {
88
101
  FactoryGirl.build( factory_name, second_factory_options)
89
102
  }
90
103
 
104
+ let(:second_private) {
105
+ FactoryGirl.create(:metasploit_credential_private)
106
+ }
107
+
108
+ let(:second_public) {
109
+ FactoryGirl.create(:metasploit_credential_username)
110
+ }
111
+
112
+ let(:second_realm) {
113
+ FactoryGirl.create(:metasploit_credential_realm)
114
+ }
115
+
116
+ let(:second_workspace) {
117
+ FactoryGirl.create(:mdm_workspace)
118
+ }
119
+
91
120
  #
92
121
  # let!s
93
122
  #
@@ -100,26 +129,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
100
129
  context 'database' do
101
130
  context 'indices' do
102
131
  context 'foreign keys' do
103
- let(:first_private) {
104
- FactoryGirl.create(:metasploit_credential_private)
105
- }
106
-
107
- let(:second_public) {
108
- FactoryGirl.create(:metasploit_credential_username)
109
- }
110
-
111
- let(:second_private) {
112
- FactoryGirl.create(:metasploit_credential_private)
113
- }
114
-
115
- let(:second_realm) {
116
- FactoryGirl.create(:metasploit_credential_realm)
117
- }
118
-
119
- let(:second_workspace) {
120
- FactoryGirl.create(:mdm_workspace)
121
- }
122
-
123
132
  shared_examples_for 'potential collision' do |options={}|
124
133
  options.assert_valid_keys(:collision, :index)
125
134
 
@@ -189,10 +198,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
189
198
  nil
190
199
  }
191
200
 
192
- let(:first_public) {
193
- FactoryGirl.create(:metasploit_credential_username)
194
- }
195
-
196
201
  let(:first_realm) {
197
202
  nil
198
203
  }
@@ -219,10 +224,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
219
224
 
220
225
  options.assert_valid_keys(:collision, :private, :public, :workspace)
221
226
 
222
- let(:first_public) {
223
- FactoryGirl.create(:metasploit_credential_username)
224
- }
225
-
226
227
  let(:first_realm) {
227
228
  nil
228
229
  }
@@ -251,10 +252,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
251
252
  nil
252
253
  }
253
254
 
254
- let(:first_realm) {
255
- FactoryGirl.create(:metasploit_credential_realm)
256
- }
257
-
258
255
  let(:second_public) {
259
256
  nil
260
257
  }
@@ -279,14 +276,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
279
276
  nil
280
277
  }
281
278
 
282
- let(:first_public) {
283
- FactoryGirl.create(:metasploit_credential_username)
284
- }
285
-
286
- let(:first_realm) {
287
- FactoryGirl.create(:metasploit_credential_realm)
288
- }
289
-
290
279
  let(:second_private) {
291
280
  nil
292
281
  }
@@ -307,14 +296,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
307
296
 
308
297
  options.assert_valid_keys(:collision, :private, :public, :realm, :workspace)
309
298
 
310
- let(:first_public) {
311
- FactoryGirl.create(:metasploit_credential_username)
312
- }
313
-
314
- let(:first_realm) {
315
- FactoryGirl.create(:metasploit_credential_realm)
316
- }
317
-
318
299
  context_with_correlation(options, :workspace) do
319
300
  context_with_correlation(options, :realm) do
320
301
  context_with_correlation(options, :public) do
@@ -585,29 +566,9 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
585
566
  end
586
567
 
587
568
  context 'validations' do
588
- it { is_expected.to validate_presence_of :workspace }
569
+ it { should validate_presence_of :workspace }
589
570
 
590
571
  context 'of uniqueness' do
591
- let(:first_private) {
592
- FactoryGirl.create(:metasploit_credential_private)
593
- }
594
-
595
- let(:second_public) {
596
- FactoryGirl.create(:metasploit_credential_username)
597
- }
598
-
599
- let(:second_private) {
600
- FactoryGirl.create(:metasploit_credential_private)
601
- }
602
-
603
- let(:second_realm) {
604
- FactoryGirl.create(:metasploit_credential_realm)
605
- }
606
-
607
- let(:second_workspace) {
608
- FactoryGirl.create(:mdm_workspace)
609
- }
610
-
611
572
  shared_examples_for 'potential collision' do |options={}|
612
573
  options.assert_valid_keys(:attribute, :collision, :message)
613
574
 
@@ -629,7 +590,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
629
590
  ).to include options.fetch(:message)
630
591
  end
631
592
  else
632
- it { is_expected.to be_valid }
593
+ it { should be_valid }
633
594
  end
634
595
  end
635
596
 
@@ -681,10 +642,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
681
642
  nil
682
643
  }
683
644
 
684
- let(:first_public) {
685
- FactoryGirl.create(:metasploit_credential_username)
686
- }
687
-
688
645
  let(:first_realm) {
689
646
  nil
690
647
  }
@@ -716,10 +673,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
716
673
  nil
717
674
  }
718
675
 
719
- let(:first_public) {
720
- FactoryGirl.create(:metasploit_credential_username)
721
- }
722
-
723
676
  let(:second_realm) {
724
677
  nil
725
678
  }
@@ -745,10 +698,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
745
698
  nil
746
699
  }
747
700
 
748
- let(:first_realm) {
749
- FactoryGirl.create(:metasploit_credential_realm)
750
- }
751
-
752
701
  let(:second_public) {
753
702
  nil
754
703
  }
@@ -774,14 +723,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
774
723
  nil
775
724
  }
776
725
 
777
- let(:first_public) {
778
- FactoryGirl.create(:metasploit_credential_username)
779
- }
780
-
781
- let(:first_realm) {
782
- FactoryGirl.create(:metasploit_credential_realm)
783
- }
784
-
785
726
  let(:second_private) {
786
727
  nil
787
728
  }
@@ -803,14 +744,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
803
744
 
804
745
  options.assert_valid_keys(:collision, :private, :public, :realm, :workspace)
805
746
 
806
- let(:first_public) {
807
- FactoryGirl.create(:metasploit_credential_username)
808
- }
809
-
810
- let(:first_realm) {
811
- FactoryGirl.create(:metasploit_credential_realm)
812
- }
813
-
814
747
  context_with_correlation(options, :workspace) do
815
748
  context_with_correlation(options, :realm) do
816
749
  context_with_correlation(options, :public) do
@@ -1094,14 +1027,6 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1094
1027
  second_metasploit_credential_core
1095
1028
  }
1096
1029
 
1097
- let(:first_public) {
1098
- FactoryGirl.create(:metasploit_credential_username)
1099
- }
1100
-
1101
- let(:first_realm) {
1102
- FactoryGirl.create(:metasploit_credential_realm)
1103
- }
1104
-
1105
1030
  let(:second_private) {
1106
1031
  first_private
1107
1032
  }
@@ -1128,7 +1053,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1128
1053
  nil
1129
1054
  }
1130
1055
 
1131
- it { is_expected.to be_valid }
1056
+ it { should be_valid }
1132
1057
  end
1133
1058
 
1134
1059
  context 'with same workspace without realm with same public without private' do
@@ -1140,7 +1065,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1140
1065
  nil
1141
1066
  }
1142
1067
 
1143
- it { is_expected.to be_valid }
1068
+ it { should be_valid }
1144
1069
  end
1145
1070
 
1146
1071
  context 'with same workspace with same realm without public with same private' do
@@ -1148,7 +1073,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1148
1073
  nil
1149
1074
  }
1150
1075
 
1151
- it { is_expected.to be_valid }
1076
+ it { should be_valid }
1152
1077
  end
1153
1078
 
1154
1079
  context 'with same workspace with same realm with same public without private' do
@@ -1160,7 +1085,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1160
1085
  nil
1161
1086
  }
1162
1087
 
1163
- it { is_expected.to be_valid }
1088
+ it { should be_valid }
1164
1089
  end
1165
1090
  end
1166
1091
 
@@ -1182,7 +1107,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1182
1107
  nil
1183
1108
  }
1184
1109
 
1185
- it { is_expected.to be_valid }
1110
+ it { should be_valid }
1186
1111
  end
1187
1112
 
1188
1113
  context 'with same workspace without realm with public with same private' do
@@ -1190,7 +1115,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1190
1115
  FactoryGirl.create(:metasploit_credential_public)
1191
1116
  }
1192
1117
 
1193
- it { is_expected.to be_valid }
1118
+ it { should be_valid }
1194
1119
  end
1195
1120
 
1196
1121
  context 'with same workspace with realm without public with same private' do
@@ -1198,7 +1123,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1198
1123
  FactoryGirl.create(:metasploit_credential_realm)
1199
1124
  }
1200
1125
 
1201
- it { is_expected.to be_valid }
1126
+ it { should be_valid }
1202
1127
  end
1203
1128
  end
1204
1129
 
@@ -1216,7 +1141,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1216
1141
  FactoryGirl.create(:metasploit_credential_private)
1217
1142
  }
1218
1143
 
1219
- it { is_expected.to be_valid }
1144
+ it { should be_valid }
1220
1145
  end
1221
1146
 
1222
1147
  context 'with workspace with realm without public with private' do
@@ -1228,7 +1153,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1228
1153
  FactoryGirl.create(:metasploit_credential_realm)
1229
1154
  }
1230
1155
 
1231
- it { is_expected.to be_valid}
1156
+ it { should be_valid}
1232
1157
  end
1233
1158
  end
1234
1159
 
@@ -1246,7 +1171,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1246
1171
  FactoryGirl.create(:metasploit_credential_realm)
1247
1172
  }
1248
1173
 
1249
- it { is_expected.to be_valid }
1174
+ it { should be_valid }
1250
1175
  end
1251
1176
  end
1252
1177
 
@@ -1264,7 +1189,7 @@ shared_examples_for 'Metasploit::Credential::CoreValidations' do
1264
1189
  FactoryGirl.create(:metasploit_credential_public)
1265
1190
  }
1266
1191
 
1267
- it { is_expected.to be_valid }
1192
+ it { should be_valid }
1268
1193
  end
1269
1194
  end
1270
1195
  end