metasploit_data_models 0.24.0 → 0.24.1.pre.rspec.pre.3.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +3 -3
- data/Gemfile +1 -3
- data/app/models/metasploit_data_models/ip_address/v4/segmented.rb +1 -1
- data/app/models/metasploit_data_models/search/visitor/where.rb +1 -1
- data/app/validators/password_is_strong_validator.rb +1 -1
- data/lib/mdm/host/operating_system_normalization.rb +0 -10
- data/lib/metasploit_data_models/version.rb +2 -2
- data/metasploit_data_models.gemspec +1 -1
- data/spec/app/models/mdm/api_key_spec.rb +1 -3
- data/spec/app/models/mdm/client_spec.rb +9 -11
- data/spec/app/models/mdm/cred_spec.rb +42 -54
- data/spec/app/models/mdm/event_spec.rb +21 -23
- data/spec/app/models/mdm/exploit_attempt_spec.rb +19 -21
- data/spec/app/models/mdm/exploited_host_spec.rb +11 -13
- data/spec/app/models/mdm/host_detail_spec.rb +15 -17
- data/spec/app/models/mdm/host_spec.rb +261 -260
- data/spec/app/models/mdm/host_tag_spec.rb +6 -8
- data/spec/app/models/mdm/listener_spec.rb +30 -32
- data/spec/app/models/mdm/loot_spec.rb +21 -23
- data/spec/app/models/mdm/macro_spec.rb +1 -3
- data/spec/app/models/mdm/mod_ref_spec.rb +1 -3
- data/spec/app/models/mdm/module/action_spec.rb +10 -12
- data/spec/app/models/mdm/module/arch_spec.rb +10 -12
- data/spec/app/models/mdm/module/author_spec.rb +22 -17
- data/spec/app/models/mdm/module/detail_spec.rb +184 -75
- data/spec/app/models/mdm/module/mixin_spec.rb +10 -12
- data/spec/app/models/mdm/module/platform_spec.rb +10 -12
- data/spec/app/models/mdm/module/ref_spec.rb +10 -12
- data/spec/app/models/mdm/module/target_spec.rb +13 -15
- data/spec/app/models/mdm/nexpose_console_spec.rb +35 -37
- data/spec/app/models/mdm/note_spec.rb +23 -25
- data/spec/app/models/mdm/profile_spec.rb +1 -3
- data/spec/app/models/mdm/ref_spec.rb +10 -12
- data/spec/app/models/mdm/route_spec.rb +6 -8
- data/spec/app/models/mdm/service_spec.rb +38 -40
- data/spec/app/models/mdm/session_event_spec.rb +10 -12
- data/spec/app/models/mdm/session_spec.rb +13 -15
- data/spec/app/models/mdm/tag_spec.rb +29 -29
- data/spec/app/models/mdm/task_cred_spec.rb +9 -11
- data/spec/app/models/mdm/task_host_spec.rb +9 -11
- data/spec/app/models/mdm/task_service_spec.rb +9 -11
- data/spec/app/models/mdm/task_session_spec.rb +7 -9
- data/spec/app/models/mdm/task_spec.rb +27 -29
- data/spec/app/models/mdm/user_spec.rb +17 -19
- data/spec/app/models/mdm/vuln_attempt_spec.rb +14 -16
- data/spec/app/models/mdm/vuln_detail_spec.rb +26 -28
- data/spec/app/models/mdm/vuln_ref_spec.rb +8 -10
- data/spec/app/models/mdm/vuln_spec.rb +24 -26
- data/spec/app/models/mdm/web_form_spec.rb +11 -13
- data/spec/app/models/mdm/web_page_spec.rb +19 -21
- data/spec/app/models/mdm/web_site_spec.rb +21 -23
- data/spec/app/models/mdm/web_vuln_spec.rb +63 -65
- data/spec/app/models/mdm/wmap_request_spec.rb +1 -3
- data/spec/app/models/mdm/wmap_target_spec.rb +1 -3
- data/spec/app/models/mdm/workspace_spec.rb +97 -100
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_result_spec.rb +3 -5
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_set_spec.rb +13 -15
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_spec.rb +1 -3
- data/spec/app/models/metasploit_data_models/automatic_exploitation/run_spec.rb +1 -3
- data/spec/app/models/metasploit_data_models/ip_address/v4/cidr_spec.rb +10 -12
- data/spec/app/models/metasploit_data_models/ip_address/v4/nmap_spec.rb +4 -6
- data/spec/app/models/metasploit_data_models/ip_address/v4/range_spec.rb +21 -23
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/list_spec.rb +9 -11
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/range_spec.rb +21 -23
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/segmented_spec.rb +4 -6
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/single_spec.rb +22 -15
- data/spec/app/models/metasploit_data_models/ip_address/v4/single_spec.rb +4 -6
- data/spec/app/models/metasploit_data_models/module_run_spec.rb +1 -3
- data/spec/app/models/metasploit_data_models/search/operation/ip_address_spec.rb +18 -20
- data/spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb +6 -8
- data/spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb +8 -10
- data/spec/app/models/metasploit_data_models/search/operation/range_spec.rb +8 -10
- data/spec/app/models/metasploit_data_models/search/operator/ip_address_spec.rb +2 -4
- data/spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb +8 -10
- data/spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb +6 -8
- data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +9 -11
- data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +5 -7
- data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +17 -19
- data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +5 -7
- data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +61 -23
- data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +8 -10
- data/spec/app/validators/parameters_validator_spec.rb +29 -29
- data/spec/app/validators/password_is_strong_validator_spec.rb +54 -46
- data/spec/dummy/db/structure.sql +1 -0
- data/spec/lib/base64_serializer_spec.rb +19 -19
- data/spec/lib/metasploit_data_models/ip_address/cidr_spec.rb +18 -12
- data/spec/lib/metasploit_data_models/ip_address/range_spec.rb +4 -6
- data/spec/lib/metasploit_data_models/match/child_spec.rb +2 -4
- data/spec/lib/metasploit_data_models/match/parent_spec.rb +4 -6
- data/spec/lib/metasploit_data_models/version_spec.rb +3 -5
- data/spec/spec_helper.rb +72 -6
- data/spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb +2 -2
- data/spec/support/shared/examples/mdm/module/detail/supports_stance_with_mtype.rb +4 -4
- data/spec/support/shared/examples/metasploit_data_models/search/operation/ipaddress/match.rb +2 -2
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_children.rb +5 -5
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_metasploit_model_search_operation_base.rb +5 -5
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_equality.rb +3 -3
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_metasploit_model_search_group_base.rb +7 -6
- metadata +6 -6
@@ -1,25 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe Mdm::TaskCred do
|
1
|
+
RSpec.describe Mdm::TaskCred, type: :model do
|
4
2
|
it_should_behave_like 'Metasploit::Concern.run'
|
5
3
|
|
6
4
|
context 'factory' do
|
7
5
|
it 'should be valid' do
|
8
6
|
task_cred = FactoryGirl.build(:mdm_task_cred)
|
9
|
-
task_cred.
|
7
|
+
expect(task_cred).to be_valid
|
10
8
|
end
|
11
9
|
end
|
12
10
|
|
13
11
|
context 'database' do
|
14
12
|
|
15
13
|
context 'timestamps'do
|
16
|
-
it {
|
17
|
-
it {
|
14
|
+
it { is_expected.to have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
15
|
+
it { is_expected.to have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
18
16
|
end
|
19
17
|
|
20
18
|
context 'columns' do
|
21
|
-
it {
|
22
|
-
it {
|
19
|
+
it { is_expected.to have_db_column(:task_id).of_type(:integer).with_options(:null => false) }
|
20
|
+
it { is_expected.to have_db_column(:cred_id).of_type(:integer).with_options(:null => false) }
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
@@ -36,8 +34,8 @@ describe Mdm::TaskCred do
|
|
36
34
|
end
|
37
35
|
|
38
36
|
context "Associations" do
|
39
|
-
it {
|
40
|
-
it {
|
37
|
+
it { is_expected.to belong_to(:task).class_name('Mdm::Task') }
|
38
|
+
it { is_expected.to belong_to(:cred).class_name('Mdm::Cred') }
|
41
39
|
end
|
42
40
|
|
43
41
|
context "validations" do
|
@@ -46,7 +44,7 @@ describe Mdm::TaskCred do
|
|
46
44
|
cred = FactoryGirl.build(:mdm_cred)
|
47
45
|
FactoryGirl.create(:mdm_task_cred, :task => task, :cred => cred)
|
48
46
|
task_cred2 = FactoryGirl.build(:mdm_task_cred, :task => task, :cred => cred)
|
49
|
-
task_cred2.
|
47
|
+
expect(task_cred2).not_to be_valid
|
50
48
|
end
|
51
49
|
end
|
52
50
|
|
@@ -1,25 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe Mdm::TaskHost do
|
1
|
+
RSpec.describe Mdm::TaskHost, type: :model do
|
4
2
|
it_should_behave_like 'Metasploit::Concern.run'
|
5
3
|
|
6
4
|
context 'factory' do
|
7
5
|
it 'should be valid' do
|
8
6
|
task_host = FactoryGirl.build(:mdm_task_host)
|
9
|
-
task_host.
|
7
|
+
expect(task_host).to be_valid
|
10
8
|
end
|
11
9
|
end
|
12
10
|
|
13
11
|
context 'database' do
|
14
12
|
|
15
13
|
context 'timestamps'do
|
16
|
-
it {
|
17
|
-
it {
|
14
|
+
it { is_expected.to have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
15
|
+
it { is_expected.to have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
18
16
|
end
|
19
17
|
|
20
18
|
context 'columns' do
|
21
|
-
it {
|
22
|
-
it {
|
19
|
+
it { is_expected.to have_db_column(:task_id).of_type(:integer).with_options(:null => false) }
|
20
|
+
it { is_expected.to have_db_column(:host_id).of_type(:integer).with_options(:null => false) }
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
@@ -36,8 +34,8 @@ describe Mdm::TaskHost do
|
|
36
34
|
end
|
37
35
|
|
38
36
|
context "Associations" do
|
39
|
-
it {
|
40
|
-
it {
|
37
|
+
it { is_expected.to belong_to(:task).class_name('Mdm::Task') }
|
38
|
+
it { is_expected.to belong_to(:host).class_name('Mdm::Host') }
|
41
39
|
end
|
42
40
|
|
43
41
|
context "validations" do
|
@@ -46,7 +44,7 @@ describe Mdm::TaskHost do
|
|
46
44
|
host = FactoryGirl.build(:mdm_host)
|
47
45
|
FactoryGirl.create(:mdm_task_host, :task => task, :host => host)
|
48
46
|
task_host2 = FactoryGirl.build(:mdm_task_host, :task => task, :host => host)
|
49
|
-
task_host2.
|
47
|
+
expect(task_host2).not_to be_valid
|
50
48
|
end
|
51
49
|
end
|
52
50
|
end
|
@@ -1,25 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe Mdm::TaskService do
|
1
|
+
RSpec.describe Mdm::TaskService, type: :model do
|
4
2
|
it_should_behave_like 'Metasploit::Concern.run'
|
5
3
|
|
6
4
|
context 'factory' do
|
7
5
|
it 'should be valid' do
|
8
6
|
task_service = FactoryGirl.build(:mdm_task_service)
|
9
|
-
task_service.
|
7
|
+
expect(task_service).to be_valid
|
10
8
|
end
|
11
9
|
end
|
12
10
|
|
13
11
|
context 'database' do
|
14
12
|
|
15
13
|
context 'timestamps'do
|
16
|
-
it {
|
17
|
-
it {
|
14
|
+
it { is_expected.to have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
15
|
+
it { is_expected.to have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
18
16
|
end
|
19
17
|
|
20
18
|
context 'columns' do
|
21
|
-
it {
|
22
|
-
it {
|
19
|
+
it { is_expected.to have_db_column(:task_id).of_type(:integer).with_options(:null => false) }
|
20
|
+
it { is_expected.to have_db_column(:service_id).of_type(:integer).with_options(:null => false) }
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
@@ -36,8 +34,8 @@ describe Mdm::TaskService do
|
|
36
34
|
end
|
37
35
|
|
38
36
|
context "Associations" do
|
39
|
-
it {
|
40
|
-
it {
|
37
|
+
it { is_expected.to belong_to(:task).class_name('Mdm::Task') }
|
38
|
+
it { is_expected.to belong_to(:service).class_name('Mdm::Service') }
|
41
39
|
end
|
42
40
|
|
43
41
|
context "validations" do
|
@@ -46,7 +44,7 @@ describe Mdm::TaskService do
|
|
46
44
|
service = FactoryGirl.build(:mdm_service)
|
47
45
|
FactoryGirl.create(:mdm_task_service, :task => task, :service => service)
|
48
46
|
task_service2 = FactoryGirl.build(:mdm_task_service, :task => task, :service => service)
|
49
|
-
task_service2.
|
47
|
+
expect(task_service2).not_to be_valid
|
50
48
|
end
|
51
49
|
end
|
52
50
|
end
|
@@ -1,25 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe Mdm::TaskSession do
|
1
|
+
RSpec.describe Mdm::TaskSession, type: :model do
|
4
2
|
it_should_behave_like 'Metasploit::Concern.run'
|
5
3
|
|
6
4
|
context 'factory' do
|
7
5
|
it 'should be valid' do
|
8
6
|
task_session = FactoryGirl.build(:mdm_task_session)
|
9
|
-
task_session.
|
7
|
+
expect(task_session).to be_valid
|
10
8
|
end
|
11
9
|
end
|
12
10
|
|
13
11
|
context 'database' do
|
14
12
|
|
15
13
|
context 'timestamps'do
|
16
|
-
it {
|
17
|
-
it {
|
14
|
+
it { is_expected.to have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
15
|
+
it { is_expected.to have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
18
16
|
end
|
19
17
|
|
20
18
|
context 'columns' do
|
21
|
-
it {
|
22
|
-
it {
|
19
|
+
it { is_expected.to have_db_column(:task_id).of_type(:integer).with_options(:null => false) }
|
20
|
+
it { is_expected.to have_db_column(:session_id).of_type(:integer).with_options(:null => false) }
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
@@ -41,7 +39,7 @@ describe Mdm::TaskSession do
|
|
41
39
|
session = FactoryGirl.build(:mdm_session)
|
42
40
|
FactoryGirl.create(:mdm_task_session, :task => task, :session => session)
|
43
41
|
task_session2 = FactoryGirl.build(:mdm_task_session, :task => task, :session => session)
|
44
|
-
task_session2.
|
42
|
+
expect(task_session2).not_to be_valid
|
45
43
|
end
|
46
44
|
end
|
47
45
|
|
@@ -1,36 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe Mdm::Task do
|
1
|
+
RSpec.describe Mdm::Task, type: :model do
|
4
2
|
it_should_behave_like 'Metasploit::Concern.run'
|
5
3
|
|
6
4
|
context 'factory' do
|
7
5
|
it 'should be valid' do
|
8
6
|
task = FactoryGirl.build(:mdm_task)
|
9
|
-
task.
|
7
|
+
expect(task).to be_valid
|
10
8
|
end
|
11
9
|
end
|
12
10
|
|
13
11
|
context 'database' do
|
14
12
|
|
15
13
|
context 'timestamps'do
|
16
|
-
it {
|
17
|
-
it {
|
18
|
-
it {
|
14
|
+
it { is_expected.to have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
15
|
+
it { is_expected.to have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
16
|
+
it { is_expected.to have_db_column(:completed_at).of_type(:datetime) }
|
19
17
|
end
|
20
18
|
|
21
19
|
context 'columns' do
|
22
|
-
it {
|
23
|
-
it {
|
24
|
-
it {
|
25
|
-
it {
|
26
|
-
it {
|
27
|
-
it {
|
28
|
-
it {
|
29
|
-
it {
|
30
|
-
it {
|
31
|
-
it {
|
32
|
-
it {
|
33
|
-
it {
|
20
|
+
it { is_expected.to have_db_column(:workspace_id).of_type(:integer).with_options(:null => false, :default =>1) }
|
21
|
+
it { is_expected.to have_db_column(:created_by).of_type(:string) }
|
22
|
+
it { is_expected.to have_db_column(:module).of_type(:string) }
|
23
|
+
it { is_expected.to have_db_column(:path).of_type(:string) }
|
24
|
+
it { is_expected.to have_db_column(:info).of_type(:string) }
|
25
|
+
it { is_expected.to have_db_column(:description).of_type(:string) }
|
26
|
+
it { is_expected.to have_db_column(:progress).of_type(:integer) }
|
27
|
+
it { is_expected.to have_db_column(:options).of_type(:text) }
|
28
|
+
it { is_expected.to have_db_column(:error).of_type(:text) }
|
29
|
+
it { is_expected.to have_db_column(:result).of_type(:text) }
|
30
|
+
it { is_expected.to have_db_column(:module_uuid).of_type(:string) }
|
31
|
+
it { is_expected.to have_db_column(:settings).of_type(:binary) }
|
34
32
|
end
|
35
33
|
end
|
36
34
|
|
@@ -47,15 +45,15 @@ describe Mdm::Task do
|
|
47
45
|
end
|
48
46
|
|
49
47
|
context "Associations" do
|
50
|
-
it {
|
51
|
-
it {
|
52
|
-
it {
|
53
|
-
it {
|
54
|
-
it {
|
55
|
-
it {
|
56
|
-
it {
|
57
|
-
it {
|
58
|
-
it {
|
48
|
+
it { is_expected.to have_many(:task_creds).class_name('Mdm::TaskCred').dependent(:destroy) }
|
49
|
+
it { is_expected.to have_many(:creds).class_name('Mdm::Cred').through(:task_creds) }
|
50
|
+
it { is_expected.to have_many(:task_sessions).class_name('Mdm::TaskSession').dependent(:destroy) }
|
51
|
+
it { is_expected.to have_many(:sessions).class_name('Mdm::Session').through(:task_sessions) }
|
52
|
+
it { is_expected.to have_many(:task_hosts).class_name('Mdm::TaskHost').dependent(:destroy) }
|
53
|
+
it { is_expected.to have_many(:hosts).class_name('Mdm::Host').through(:task_hosts) }
|
54
|
+
it { is_expected.to have_many(:task_services).class_name('Mdm::TaskService').dependent(:destroy) }
|
55
|
+
it { is_expected.to have_many(:services).class_name('Mdm::Service').through(:task_services) }
|
56
|
+
it { is_expected.to belong_to(:workspace).class_name('Mdm::Workspace') }
|
59
57
|
|
60
58
|
end
|
61
59
|
|
@@ -63,7 +61,7 @@ describe Mdm::Task do
|
|
63
61
|
context 'before_destroy' do
|
64
62
|
it 'should call #delete_file' do
|
65
63
|
task = FactoryGirl.create(:mdm_task)
|
66
|
-
task.
|
64
|
+
expect(task).to receive(:delete_file)
|
67
65
|
task.destroy
|
68
66
|
end
|
69
67
|
end
|
@@ -1,39 +1,37 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe Mdm::User do
|
1
|
+
RSpec.describe Mdm::User, type: :model do
|
4
2
|
it_should_behave_like 'Metasploit::Concern.run'
|
5
3
|
|
6
4
|
context 'associations' do
|
7
|
-
it {
|
8
|
-
it {
|
9
|
-
it {
|
5
|
+
it { is_expected.to have_many(:owned_workspaces).class_name('Mdm::Workspace') }
|
6
|
+
it { is_expected.to have_many(:tags).class_name('Mdm::Tag') }
|
7
|
+
it { is_expected.to have_and_belong_to_many(:workspaces).class_name('Mdm::Workspace') }
|
10
8
|
end
|
11
9
|
|
12
10
|
context 'database' do
|
13
11
|
|
14
12
|
context 'timestamps'do
|
15
|
-
it {
|
16
|
-
it {
|
13
|
+
it { is_expected.to have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
14
|
+
it { is_expected.to have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
17
15
|
end
|
18
16
|
|
19
17
|
context 'columns' do
|
20
|
-
it {
|
21
|
-
it {
|
22
|
-
it {
|
23
|
-
it {
|
24
|
-
it {
|
25
|
-
it {
|
26
|
-
it {
|
27
|
-
it {
|
28
|
-
it {
|
29
|
-
it {
|
18
|
+
it { is_expected.to have_db_column(:username).of_type(:string) }
|
19
|
+
it { is_expected.to have_db_column(:crypted_password).of_type(:string) }
|
20
|
+
it { is_expected.to have_db_column(:password_salt).of_type(:string) }
|
21
|
+
it { is_expected.to have_db_column(:persistence_token).of_type(:string) }
|
22
|
+
it { is_expected.to have_db_column(:fullname).of_type(:string) }
|
23
|
+
it { is_expected.to have_db_column(:email).of_type(:string) }
|
24
|
+
it { is_expected.to have_db_column(:phone).of_type(:string) }
|
25
|
+
it { is_expected.to have_db_column(:company).of_type(:string) }
|
26
|
+
it { is_expected.to have_db_column(:prefs).of_type(:string) }
|
27
|
+
it { is_expected.to have_db_column(:admin).of_type(:boolean).with_options(:null => false, :default =>true) }
|
30
28
|
end
|
31
29
|
end
|
32
30
|
|
33
31
|
context 'factory' do
|
34
32
|
it 'should be valid' do
|
35
33
|
user = FactoryGirl.build(:mdm_user)
|
36
|
-
user.
|
34
|
+
expect(user).to be_valid
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
@@ -1,42 +1,40 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe Mdm::VulnAttempt do
|
1
|
+
RSpec.describe Mdm::VulnAttempt, type: :model do
|
4
2
|
it_should_behave_like 'Metasploit::Concern.run'
|
5
3
|
|
6
4
|
context 'association' do
|
7
|
-
it {
|
5
|
+
it { is_expected.to belong_to(:vuln).class_name('Mdm::Vuln') }
|
8
6
|
end
|
9
7
|
|
10
8
|
context 'database' do
|
11
9
|
|
12
10
|
context 'timestamps'do
|
13
|
-
it {
|
11
|
+
it { is_expected.to have_db_column(:attempted_at).of_type(:datetime) }
|
14
12
|
end
|
15
13
|
|
16
14
|
context 'columns' do
|
17
|
-
it {
|
18
|
-
it {
|
19
|
-
it {
|
20
|
-
it {
|
21
|
-
it {
|
22
|
-
it {
|
23
|
-
it {
|
24
|
-
it {
|
15
|
+
it { is_expected.to have_db_column(:vuln_id).of_type(:integer) }
|
16
|
+
it { is_expected.to have_db_column(:exploited).of_type(:boolean) }
|
17
|
+
it { is_expected.to have_db_column(:fail_reason).of_type(:string) }
|
18
|
+
it { is_expected.to have_db_column(:username).of_type(:string) }
|
19
|
+
it { is_expected.to have_db_column(:module).of_type(:text) }
|
20
|
+
it { is_expected.to have_db_column(:session_id).of_type(:integer) }
|
21
|
+
it { is_expected.to have_db_column(:loot_id).of_type(:integer) }
|
22
|
+
it { is_expected.to have_db_column(:fail_detail).of_type(:text) }
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
26
|
context 'validations' do
|
29
27
|
it 'should require a vuln_id' do
|
30
28
|
orphan_detail = FactoryGirl.build(:mdm_vuln_detail, :vuln => nil)
|
31
|
-
orphan_detail.
|
32
|
-
orphan_detail.errors[:vuln_id].
|
29
|
+
expect(orphan_detail).not_to be_valid
|
30
|
+
expect(orphan_detail.errors[:vuln_id]).to include("can't be blank")
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
36
34
|
context 'factory' do
|
37
35
|
it 'should be valid' do
|
38
36
|
vuln_attempt = FactoryGirl.build(:mdm_vuln_attempt)
|
39
|
-
vuln_attempt.
|
37
|
+
expect(vuln_attempt).to be_valid
|
40
38
|
end
|
41
39
|
end
|
42
40
|
|
@@ -1,54 +1,52 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe Mdm::VulnDetail do
|
1
|
+
RSpec.describe Mdm::VulnDetail, type: :model do
|
4
2
|
it_should_behave_like 'Metasploit::Concern.run'
|
5
3
|
|
6
4
|
context 'association' do
|
7
|
-
it {
|
5
|
+
it { is_expected.to belong_to(:vuln).class_name('Mdm::Vuln') }
|
8
6
|
end
|
9
7
|
|
10
8
|
context 'database' do
|
11
9
|
|
12
10
|
context 'timestamps'do
|
13
|
-
it {
|
14
|
-
it {
|
15
|
-
it {
|
16
|
-
it {
|
11
|
+
it { is_expected.to have_db_column(:nx_published).of_type(:datetime) }
|
12
|
+
it { is_expected.to have_db_column(:nx_added).of_type(:datetime) }
|
13
|
+
it { is_expected.to have_db_column(:nx_modified).of_type(:datetime) }
|
14
|
+
it { is_expected.to have_db_column(:nx_vulnerable_since).of_type(:datetime) }
|
17
15
|
end
|
18
16
|
|
19
17
|
context 'columns' do
|
20
|
-
it {
|
21
|
-
it {
|
22
|
-
it {
|
23
|
-
it {
|
24
|
-
it {
|
25
|
-
it {
|
26
|
-
it {
|
27
|
-
it {
|
28
|
-
it {
|
29
|
-
it {
|
30
|
-
it {
|
31
|
-
it {
|
32
|
-
it {
|
33
|
-
it {
|
34
|
-
it {
|
35
|
-
it {
|
36
|
-
it {
|
18
|
+
it { is_expected.to have_db_column(:vuln_id).of_type(:integer)}
|
19
|
+
it { is_expected.to have_db_column(:cvss_score).of_type(:float) }
|
20
|
+
it { is_expected.to have_db_column(:cvss_vector).of_type(:string) }
|
21
|
+
it { is_expected.to have_db_column(:title).of_type(:string) }
|
22
|
+
it { is_expected.to have_db_column(:description).of_type(:text) }
|
23
|
+
it { is_expected.to have_db_column(:solution).of_type(:text) }
|
24
|
+
it { is_expected.to have_db_column(:proof).of_type(:binary) }
|
25
|
+
it { is_expected.to have_db_column(:nx_console_id).of_type(:integer) }
|
26
|
+
it { is_expected.to have_db_column(:nx_device_id).of_type(:integer) }
|
27
|
+
it { is_expected.to have_db_column(:nx_severity).of_type(:float) }
|
28
|
+
it { is_expected.to have_db_column(:nx_pci_severity).of_type(:float) }
|
29
|
+
it { is_expected.to have_db_column(:nx_tags).of_type(:text) }
|
30
|
+
it { is_expected.to have_db_column(:nx_vuln_status).of_type(:text) }
|
31
|
+
it { is_expected.to have_db_column(:nx_proof_key).of_type(:text) }
|
32
|
+
it { is_expected.to have_db_column(:src).of_type(:string) }
|
33
|
+
it { is_expected.to have_db_column(:nx_scan_id).of_type(:integer) }
|
34
|
+
it { is_expected.to have_db_column(:nx_pci_compliance_status).of_type(:string) }
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
40
38
|
context 'validations' do
|
41
39
|
it 'should require a vuln_id' do
|
42
40
|
orphan_detail = FactoryGirl.build(:mdm_vuln_detail, :vuln => nil)
|
43
|
-
orphan_detail.
|
44
|
-
orphan_detail.errors[:vuln_id].
|
41
|
+
expect(orphan_detail).not_to be_valid
|
42
|
+
expect(orphan_detail.errors[:vuln_id]).to include("can't be blank")
|
45
43
|
end
|
46
44
|
end
|
47
45
|
|
48
46
|
context 'factory' do
|
49
47
|
it 'should be valid' do
|
50
48
|
vuln_detail = FactoryGirl.build(:mdm_vuln_detail)
|
51
|
-
vuln_detail.
|
49
|
+
expect(vuln_detail).to be_valid
|
52
50
|
end
|
53
51
|
end
|
54
52
|
|