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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +41 -9
- data/lib/metasploit/credential/exporter/core.rb +2 -2
- data/lib/metasploit/credential/exporter/pwdump.rb +2 -2
- data/lib/metasploit/credential/migrator.rb +1 -1
- data/lib/metasploit/credential/version.rb +12 -21
- data/spec/dummy/db/structure.sql +0 -1
- data/spec/lib/metasploit/credential/creation_spec.rb +8 -6
- data/spec/lib/metasploit/credential/exporter/core_spec.rb +85 -100
- data/spec/lib/metasploit/credential/exporter/pwdump_spec.rb +16 -14
- data/spec/lib/metasploit/credential/importer/core_spec.rb +12 -10
- data/spec/lib/metasploit/credential/importer/multi_spec.rb +6 -4
- data/spec/lib/metasploit/credential/importer/pwdump_spec.rb +13 -11
- data/spec/lib/metasploit/credential/importer/zip_spec.rb +7 -5
- data/spec/lib/metasploit/credential/migrator_spec.rb +13 -13
- data/spec/lib/metasploit/credential/version_spec.rb +141 -3
- data/spec/lib/metasploit/credential_spec.rb +15 -4
- data/spec/models/mdm/service_spec.rb +5 -3
- data/spec/models/mdm/session_spec.rb +4 -2
- data/spec/models/mdm/task_spec.rb +6 -4
- data/spec/models/mdm/user_spec.rb +4 -2
- data/spec/models/mdm/workspace_spec.rb +4 -2
- data/spec/models/metasploit/credential/blank_username_spec.rb +7 -5
- data/spec/models/metasploit/credential/core_spec.rb +45 -43
- data/spec/models/metasploit/credential/login/status_spec.rb +21 -19
- data/spec/models/metasploit/credential/login_spec.rb +38 -36
- data/spec/models/metasploit/credential/nonreplayable_hash_spec.rb +5 -3
- data/spec/models/metasploit/credential/ntlm_hash_spec.rb +15 -13
- data/spec/models/metasploit/credential/origin/cracked_password_spec.rb +7 -5
- data/spec/models/metasploit/credential/origin/import_spec.rb +10 -8
- data/spec/models/metasploit/credential/origin/manual_spec.rb +9 -7
- data/spec/models/metasploit/credential/origin/service_spec.rb +12 -10
- data/spec/models/metasploit/credential/origin/session_spec.rb +13 -11
- data/spec/models/metasploit/credential/password_hash_spec.rb +6 -4
- data/spec/models/metasploit/credential/password_spec.rb +5 -3
- data/spec/models/metasploit/credential/postgres_md5_spec.rb +6 -4
- data/spec/models/metasploit/credential/private_spec.rb +10 -8
- data/spec/models/metasploit/credential/public_spec.rb +7 -5
- data/spec/models/metasploit/credential/realm_spec.rb +16 -14
- data/spec/models/metasploit/credential/replayable_hash_spec.rb +5 -3
- data/spec/models/metasploit/credential/ssh_key_spec.rb +17 -15
- data/spec/models/metasploit/credential/username_spec.rb +8 -6
- data/spec/models/metasploit_data_models/search/visitor/relation_spec.rb +3 -1
- data/spec/spec_helper.rb +25 -95
- data/spec/support/shared/contexts/mdm/workspace.rb +1 -1
- data/spec/support/shared/examples/core_validations.rb +42 -117
- data/spec/support/shared/examples/single_table_inheritance_database_columns.rb +2 -2
- data/spec/support/shared/examples/timestamp_database_column.rb +2 -2
- metadata +8 -22
@@ -1,28 +1,30 @@
|
|
1
|
-
|
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 {
|
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 {
|
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 {
|
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 {
|
25
|
-
it {
|
26
|
+
it { should validate_presence_of :username }
|
27
|
+
it { should validate_uniqueness_of :username }
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
data/spec/spec_helper.rb
CHANGED
@@ -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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
-
|
42
|
-
Dir[
|
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
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
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
|
-
#
|
105
|
-
|
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
|
-
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
|
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
|
-
#
|
119
|
-
#
|
120
|
-
#
|
121
|
-
config.
|
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 =
|
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
|
-
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
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 {
|
1192
|
+
it { should be_valid }
|
1268
1193
|
end
|
1269
1194
|
end
|
1270
1195
|
end
|