metasploit-credential 0.14.7 → 0.14.8

Sign up to get free protection for your applications and to get access to all the features.
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