metasploit_data_models 0.17.2 → 0.17.3.pre.metasploit.pre.concern

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 (112) hide show
  1. checksums.yaml +8 -8
  2. data/app/models/mdm/api_key.rb +1 -1
  3. data/app/models/mdm/client.rb +1 -1
  4. data/app/models/mdm/cred.rb +4 -2
  5. data/app/models/mdm/event.rb +1 -1
  6. data/app/models/mdm/exploit_attempt.rb +1 -1
  7. data/app/models/mdm/exploited_host.rb +1 -1
  8. data/app/models/mdm/host.rb +1 -1
  9. data/app/models/mdm/host_detail.rb +1 -1
  10. data/app/models/mdm/host_tag.rb +1 -1
  11. data/app/models/mdm/listener.rb +1 -2
  12. data/app/models/mdm/loot.rb +3 -1
  13. data/app/models/mdm/macro.rb +1 -1
  14. data/app/models/mdm/mod_ref.rb +1 -1
  15. data/app/models/mdm/module/action.rb +1 -1
  16. data/app/models/mdm/module/arch.rb +1 -1
  17. data/app/models/mdm/module/author.rb +1 -1
  18. data/app/models/mdm/module/detail.rb +1 -1
  19. data/app/models/mdm/module/mixin.rb +1 -1
  20. data/app/models/mdm/module/platform.rb +1 -1
  21. data/app/models/mdm/module/ref.rb +1 -1
  22. data/app/models/mdm/module/target.rb +1 -1
  23. data/app/models/mdm/nexpose_console.rb +1 -1
  24. data/app/models/mdm/note.rb +3 -1
  25. data/app/models/mdm/profile.rb +1 -1
  26. data/app/models/mdm/ref.rb +1 -1
  27. data/app/models/mdm/route.rb +1 -1
  28. data/app/models/mdm/service.rb +1 -1
  29. data/app/models/mdm/session.rb +3 -1
  30. data/app/models/mdm/session_event.rb +1 -1
  31. data/app/models/mdm/tag.rb +1 -1
  32. data/app/models/mdm/task.rb +3 -1
  33. data/app/models/mdm/task_cred.rb +2 -0
  34. data/app/models/mdm/task_host.rb +2 -0
  35. data/app/models/mdm/task_service.rb +2 -0
  36. data/app/models/mdm/task_session.rb +2 -0
  37. data/app/models/mdm/user.rb +1 -1
  38. data/app/models/mdm/vuln.rb +3 -1
  39. data/app/models/mdm/vuln_attempt.rb +1 -1
  40. data/app/models/mdm/vuln_detail.rb +1 -1
  41. data/app/models/mdm/vuln_ref.rb +1 -1
  42. data/app/models/mdm/web_form.rb +1 -1
  43. data/app/models/mdm/web_page.rb +1 -1
  44. data/app/models/mdm/web_site.rb +1 -1
  45. data/app/models/mdm/web_vuln.rb +1 -1
  46. data/app/models/mdm/wmap_request.rb +1 -1
  47. data/app/models/mdm/wmap_target.rb +1 -1
  48. data/app/models/mdm/workspace.rb +3 -1
  49. data/app/models/metasploit_data_models/search/visitor/attribute.rb +2 -0
  50. data/app/models/metasploit_data_models/search/visitor/includes.rb +2 -0
  51. data/app/models/metasploit_data_models/search/visitor/joins.rb +2 -0
  52. data/app/models/metasploit_data_models/search/visitor/method.rb +2 -0
  53. data/app/models/metasploit_data_models/search/visitor/relation.rb +4 -0
  54. data/app/models/metasploit_data_models/search/visitor/where.rb +2 -0
  55. data/lib/metasploit_data_models.rb +1 -0
  56. data/lib/metasploit_data_models/version.rb +1 -1
  57. data/metasploit_data_models.gemspec +1 -0
  58. data/spec/app/models/mdm/api_key_spec.rb +5 -0
  59. data/spec/app/models/mdm/client_spec.rb +2 -0
  60. data/spec/app/models/mdm/cred_spec.rb +1 -0
  61. data/spec/app/models/mdm/{events_spec.rb → event_spec.rb} +1 -0
  62. data/spec/app/models/mdm/exploit_attempt_spec.rb +1 -0
  63. data/spec/app/models/mdm/exploited_host_spec.rb +34 -32
  64. data/spec/app/models/mdm/host_detail_spec.rb +1 -0
  65. data/spec/app/models/mdm/host_spec.rb +2 -0
  66. data/spec/app/models/mdm/host_tag_spec.rb +1 -0
  67. data/spec/app/models/mdm/listener_spec.rb +1 -0
  68. data/spec/app/models/mdm/loot_spec.rb +66 -64
  69. data/spec/app/models/mdm/macro_spec.rb +5 -0
  70. data/spec/app/models/mdm/mod_ref_spec.rb +5 -0
  71. data/spec/app/models/mdm/module/action_spec.rb +3 -0
  72. data/spec/app/models/mdm/module/arch_spec.rb +3 -0
  73. data/spec/app/models/mdm/module/author_spec.rb +3 -0
  74. data/spec/app/models/mdm/module/detail_spec.rb +2 -0
  75. data/spec/app/models/mdm/module/mixin_spec.rb +3 -0
  76. data/spec/app/models/mdm/module/platform_spec.rb +3 -0
  77. data/spec/app/models/mdm/module/ref_spec.rb +3 -0
  78. data/spec/app/models/mdm/module/target_spec.rb +3 -0
  79. data/spec/app/models/mdm/nexpose_console_spec.rb +1 -0
  80. data/spec/app/models/mdm/note_spec.rb +1 -0
  81. data/spec/app/models/mdm/profile_spec.rb +5 -0
  82. data/spec/app/models/mdm/ref_spec.rb +2 -0
  83. data/spec/app/models/mdm/route_spec.rb +1 -0
  84. data/spec/app/models/mdm/service_spec.rb +1 -0
  85. data/spec/app/models/mdm/session_event_spec.rb +2 -0
  86. data/spec/app/models/mdm/session_spec.rb +1 -0
  87. data/spec/app/models/mdm/tag_spec.rb +1 -0
  88. data/spec/app/models/mdm/{task_creds_spec.rb → task_cred_spec.rb} +1 -0
  89. data/spec/app/models/mdm/task_host_spec.rb +1 -0
  90. data/spec/app/models/mdm/task_service_spec.rb +1 -0
  91. data/spec/app/models/mdm/{task_sessions_spec.rb → task_session_spec.rb} +1 -0
  92. data/spec/app/models/mdm/task_spec.rb +1 -0
  93. data/spec/app/models/mdm/user_spec.rb +1 -0
  94. data/spec/app/models/mdm/vuln_attempt_spec.rb +1 -0
  95. data/spec/app/models/mdm/{vuln_details_spec.rb → vuln_detail_spec.rb} +1 -0
  96. data/spec/app/models/mdm/vuln_ref_spec.rb +2 -0
  97. data/spec/app/models/mdm/vuln_spec.rb +2 -0
  98. data/spec/app/models/mdm/web_form_spec.rb +1 -0
  99. data/spec/app/models/mdm/web_page_spec.rb +1 -0
  100. data/spec/app/models/mdm/web_site_spec.rb +1 -0
  101. data/spec/app/models/mdm/web_vuln_spec.rb +2 -0
  102. data/spec/app/models/mdm/wmap_request_spec.rb +5 -0
  103. data/spec/app/models/mdm/wmap_target_spec.rb +5 -0
  104. data/spec/app/models/mdm/workspace_spec.rb +2 -0
  105. data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +2 -0
  106. data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +2 -0
  107. data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +2 -0
  108. data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +2 -0
  109. data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +2 -0
  110. data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +2 -0
  111. data/spec/spec_helper.rb +11 -3
  112. metadata +38 -12
@@ -44,4 +44,6 @@ class MetasploitDataModels::Search::Visitor::Joins
44
44
  visit 'Metasploit::Model::Search::Operator::Attribute' do |_|
45
45
  []
46
46
  end
47
+
48
+ Metasploit::Concern.run(self)
47
49
  end
@@ -10,4 +10,6 @@ class MetasploitDataModels::Search::Visitor::Method
10
10
  'Metasploit::Model::Search::Operation::Union' do
11
11
  :or
12
12
  end
13
+
14
+ Metasploit::Concern.run(self)
13
15
  end
@@ -84,4 +84,8 @@ class MetasploitDataModels::Search::Visitor::Relation < Metasploit::Model::Base
84
84
  errors.add(:query, :invalid)
85
85
  end
86
86
  end
87
+
88
+ private
89
+
90
+ Metasploit::Concern.run(self)
87
91
  end
@@ -62,4 +62,6 @@ class MetasploitDataModels::Search::Visitor::Where
62
62
  def method_visitor
63
63
  @method_visitor ||= MetasploitDataModels::Search::Visitor::Method.new
64
64
  end
65
+
66
+ Metasploit::Concern.run(self)
65
67
  end
@@ -10,6 +10,7 @@ require 'active_record'
10
10
  require 'active_support'
11
11
  require 'active_support/all'
12
12
  require 'active_support/dependencies'
13
+ require 'metasploit/concern'
13
14
  require 'metasploit/model'
14
15
 
15
16
  #
@@ -4,5 +4,5 @@ module MetasploitDataModels
4
4
  # metasploit-framework/data/sql/migrate to db/migrate in this project, not all models have specs that verify the
5
5
  # migrations (with have_db_column and have_db_index) and certain models may not be shared between metasploit-framework
6
6
  # and pro, so models may be removed in the future. Because of the unstable API the version should remain below 1.0.0
7
- VERSION = '0.17.2'
7
+ VERSION = '0.17.3-metasploit-concern'
8
8
  end
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
38
38
  # @see MSP-2971
39
39
  s.add_runtime_dependency 'activerecord', '>= 3.2.13', '< 4.0.0'
40
40
  s.add_runtime_dependency 'activesupport'
41
+ s.add_runtime_dependency 'metasploit-concern', '~> 0.1.0'
41
42
  s.add_runtime_dependency 'metasploit-model', '>= 0.24.1.pre.semantic.pre.versioning.pre.2.pre.0', '< 0.25'
42
43
 
43
44
  if RUBY_PLATFORM =~ /java/
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mdm::ApiKey do
4
+ it_should_behave_like 'Metasploit::Concern.run'
5
+ end
@@ -2,6 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe Mdm::Client do
4
4
 
5
+ it_should_behave_like 'Metasploit::Concern.run'
6
+
5
7
  context 'associations' do
6
8
  it { should belong_to(:host).class_name('Mdm::Host') }
7
9
  end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Cred do
4
+ it_should_behave_like 'Metasploit::Concern.run'
4
5
 
5
6
  context "Associations" do
6
7
  it { should have_many(:task_creds).class_name('Mdm::TaskCred').dependent(:destroy) }
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Event do
4
+ it_should_behave_like 'Metasploit::Concern.run'
4
5
 
5
6
  context 'associations' do
6
7
  it { should belong_to(:host).class_name('Mdm::Host') }
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::ExploitAttempt do
4
+ it_should_behave_like 'Metasploit::Concern.run'
4
5
 
5
6
  context 'associations' do
6
7
  it { should belong_to(:host).class_name('Mdm::Host') }
@@ -1,38 +1,40 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::ExploitedHost do
4
- context 'associations' do
5
- it { should belong_to(:host).class_name('Mdm::Host') }
6
- it { should belong_to(:service).class_name('Mdm::Service') }
7
- end
8
-
9
- context 'database' do
10
-
11
- context 'timestamps'do
12
- it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
13
- it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
14
- end
15
-
16
- context 'columns' do
17
- it { should have_db_column(:host_id).of_type(:integer).with_options(:null => false) }
18
- it { should have_db_column(:service_id).of_type(:integer) }
19
- it { should have_db_column(:name).of_type(:string) }
20
- it { should have_db_column(:session_uuid).of_type(:string) }
21
- it { should have_db_column(:payload).of_type(:string) }
22
- end
23
- end
24
-
25
- context '#destroy' do
26
- it 'should successfully destroy the object and all dependent objects' do
27
- exploited_host = FactoryGirl.create(:mdm_exploited_host)
28
- expect {
29
- exploited_host.destroy
30
- }.to_not raise_error
31
- expect {
32
- exploited_host.reload
33
- }.to raise_error(ActiveRecord::RecordNotFound)
34
- end
35
- end
4
+ it_should_behave_like 'Metasploit::Concern.run'
5
+
6
+ context 'associations' do
7
+ it { should belong_to(:host).class_name('Mdm::Host') }
8
+ it { should belong_to(:service).class_name('Mdm::Service') }
9
+ end
10
+
11
+ context 'database' do
12
+
13
+ context 'timestamps'do
14
+ it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
15
+ it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
16
+ end
17
+
18
+ context 'columns' do
19
+ it { should have_db_column(:host_id).of_type(:integer).with_options(:null => false) }
20
+ it { should have_db_column(:service_id).of_type(:integer) }
21
+ it { should have_db_column(:name).of_type(:string) }
22
+ it { should have_db_column(:session_uuid).of_type(:string) }
23
+ it { should have_db_column(:payload).of_type(:string) }
24
+ end
25
+ end
26
+
27
+ context '#destroy' do
28
+ it 'should successfully destroy the object and all dependent objects' do
29
+ exploited_host = FactoryGirl.create(:mdm_exploited_host)
30
+ expect {
31
+ exploited_host.destroy
32
+ }.to_not raise_error
33
+ expect {
34
+ exploited_host.reload
35
+ }.to raise_error(ActiveRecord::RecordNotFound)
36
+ end
37
+ end
36
38
 
37
39
  context 'factory' do
38
40
  it 'should be valid' do
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::HostDetail do
4
+ it_should_behave_like 'Metasploit::Concern.run'
4
5
 
5
6
  context 'associations' do
6
7
  it { should belong_to(:host).class_name('Mdm::Host') }
@@ -37,6 +37,8 @@ describe Mdm::Host do
37
37
  ]
38
38
  end
39
39
 
40
+ it_should_behave_like 'Metasploit::Concern.run'
41
+
40
42
  context 'factory' do
41
43
  it 'should be valid' do
42
44
  host = FactoryGirl.build(:mdm_host)
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::HostTag do
4
+ it_should_behave_like 'Metasploit::Concern.run'
4
5
 
5
6
  context 'associations' do
6
7
  it { should belong_to(:host).class_name('Mdm::Host') }
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Listener do
4
+ it_should_behave_like 'Metasploit::Concern.run'
4
5
 
5
6
  context 'associations' do
6
7
  it { should belong_to(:workspace).class_name('Mdm::Workspace') }
@@ -1,77 +1,79 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Loot do
4
- context 'associations' do
5
- it { should belong_to(:workspace).class_name('Mdm::Workspace') }
6
- it { should belong_to(:service).class_name('Mdm::Service') }
7
- it { should belong_to(:host).class_name('Mdm::Host') }
8
- end
4
+ it_should_behave_like 'Metasploit::Concern.run'
9
5
 
10
- context 'database' do
6
+ context 'associations' do
7
+ it { should belong_to(:workspace).class_name('Mdm::Workspace') }
8
+ it { should belong_to(:service).class_name('Mdm::Service') }
9
+ it { should belong_to(:host).class_name('Mdm::Host') }
10
+ end
11
11
 
12
- context 'timestamps'do
13
- it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
14
- it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
15
- end
12
+ context 'database' do
16
13
 
17
- context 'columns' do
18
- it { should have_db_column(:workspace_id).of_type(:integer).with_options(:null => false, :default =>1) }
19
- it { should have_db_column(:host_id).of_type(:integer) }
20
- it { should have_db_column(:service_id).of_type(:integer) }
21
- it { should have_db_column(:ltype).of_type(:string) }
22
- it { should have_db_column(:path).of_type(:string) }
23
- it { should have_db_column(:data).of_type(:text) }
24
- it { should have_db_column(:content_type).of_type(:string) }
25
- it { should have_db_column(:name).of_type(:text) }
26
- it { should have_db_column(:info).of_type(:text) }
27
- end
28
- end
14
+ context 'timestamps'do
15
+ it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
16
+ it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
17
+ end
29
18
 
30
- context 'factory' do
31
- it 'should be valid' do
32
- loot = FactoryGirl.build(:mdm_loot)
33
- loot.should be_valid
34
- end
35
- end
19
+ context 'columns' do
20
+ it { should have_db_column(:workspace_id).of_type(:integer).with_options(:null => false, :default =>1) }
21
+ it { should have_db_column(:host_id).of_type(:integer) }
22
+ it { should have_db_column(:service_id).of_type(:integer) }
23
+ it { should have_db_column(:ltype).of_type(:string) }
24
+ it { should have_db_column(:path).of_type(:string) }
25
+ it { should have_db_column(:data).of_type(:text) }
26
+ it { should have_db_column(:content_type).of_type(:string) }
27
+ it { should have_db_column(:name).of_type(:text) }
28
+ it { should have_db_column(:info).of_type(:text) }
29
+ end
30
+ end
36
31
 
37
- context '#destroy' do
38
- it 'should successfully destroy the object' do
39
- loot = FactoryGirl.create(:mdm_loot)
40
- expect {
41
- loot.destroy
42
- }.to_not raise_error
43
- expect {
44
- loot.reload
45
- }.to raise_error(ActiveRecord::RecordNotFound)
46
- end
47
- end
32
+ context 'factory' do
33
+ it 'should be valid' do
34
+ loot = FactoryGirl.build(:mdm_loot)
35
+ loot.should be_valid
36
+ end
37
+ end
48
38
 
49
- context 'scopes' do
50
- context 'search' do
51
- it 'should match on ltype' do
52
- myloot = FactoryGirl.create(:mdm_loot, :ltype => 'find.this.ltype')
53
- Mdm::Loot.search('find.this.ltype').should include(myloot)
54
- end
39
+ context '#destroy' do
40
+ it 'should successfully destroy the object' do
41
+ loot = FactoryGirl.create(:mdm_loot)
42
+ expect {
43
+ loot.destroy
44
+ }.to_not raise_error
45
+ expect {
46
+ loot.reload
47
+ }.to raise_error(ActiveRecord::RecordNotFound)
48
+ end
49
+ end
55
50
 
56
- it 'should match on name' do
57
- myloot = FactoryGirl.create(:mdm_loot, :name => 'Find This')
58
- Mdm::Loot.search('Find This').should include(myloot)
59
- end
51
+ context 'scopes' do
52
+ context 'search' do
53
+ it 'should match on ltype' do
54
+ myloot = FactoryGirl.create(:mdm_loot, :ltype => 'find.this.ltype')
55
+ Mdm::Loot.search('find.this.ltype').should include(myloot)
56
+ end
60
57
 
61
- it 'should match on info' do
62
- myloot = FactoryGirl.create(:mdm_loot, :info => 'Find This')
63
- Mdm::Loot.search('Find This').should include(myloot)
64
- end
65
- end
66
- end
58
+ it 'should match on name' do
59
+ myloot = FactoryGirl.create(:mdm_loot, :name => 'Find This')
60
+ Mdm::Loot.search('Find This').should include(myloot)
61
+ end
67
62
 
68
- context 'callbacks' do
69
- context 'before_destroy' do
70
- it 'should call #delete_file' do
71
- myloot = FactoryGirl.create(:mdm_loot)
72
- myloot.should_receive(:delete_file)
73
- myloot.destroy
74
- end
75
- end
76
- end
63
+ it 'should match on info' do
64
+ myloot = FactoryGirl.create(:mdm_loot, :info => 'Find This')
65
+ Mdm::Loot.search('Find This').should include(myloot)
66
+ end
67
+ end
68
+ end
69
+
70
+ context 'callbacks' do
71
+ context 'before_destroy' do
72
+ it 'should call #delete_file' do
73
+ myloot = FactoryGirl.create(:mdm_loot)
74
+ myloot.should_receive(:delete_file)
75
+ myloot.destroy
76
+ end
77
+ end
78
+ end
77
79
  end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mdm::Macro do
4
+ it_should_behave_like 'Metasploit::Concern.run'
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mdm::ModRef do
4
+ it_should_behave_like 'Metasploit::Concern.run'
5
+ end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Module::Action do
4
+
5
+ it_should_behave_like 'Metasploit::Concern.run'
6
+
4
7
  context 'associations' do
5
8
  it { should belong_to(:detail).class_name('Mdm::Module::Detail') }
6
9
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Module::Arch do
4
+
5
+ it_should_behave_like 'Metasploit::Concern.run'
6
+
4
7
  context 'associations' do
5
8
  it { should belong_to(:detail).class_name('Mdm::Module::Detail') }
6
9
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Module::Author do
4
+
5
+ it_should_behave_like 'Metasploit::Concern.run'
6
+
4
7
  context 'associations' do
5
8
  it { should belong_to(:detail).class_name('Mdm::Module::Detail') }
6
9
  end
@@ -47,6 +47,8 @@ describe Mdm::Module::Detail do
47
47
  ]
48
48
  end
49
49
 
50
+ it_should_behave_like 'Metasploit::Concern.run'
51
+
50
52
  context 'associations' do
51
53
  it { should have_many(:actions).class_name('Mdm::Module::Action').dependent(:destroy) }
52
54
  it { should have_many(:archs).class_name('Mdm::Module::Arch').dependent(:destroy) }
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Module::Mixin do
4
+
5
+ it_should_behave_like 'Metasploit::Concern.run'
6
+
4
7
  context 'associations' do
5
8
  it { should belong_to(:detail).class_name('Mdm::Module::Detail') }
6
9
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Module::Platform do
4
+
5
+ it_should_behave_like 'Metasploit::Concern.run'
6
+
4
7
  context 'associations' do
5
8
  it { should belong_to(:detail).class_name('Mdm::Module::Detail') }
6
9
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Module::Ref do
4
+
5
+ it_should_behave_like 'Metasploit::Concern.run'
6
+
4
7
  context 'associations' do
5
8
  it { should belong_to(:detail).class_name('Mdm::Module::Detail') }
6
9
 
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mdm::Module::Target do
4
+
5
+ it_should_behave_like 'Metasploit::Concern.run'
6
+
4
7
  context 'associations' do
5
8
  it { should belong_to(:detail).class_name('Mdm::Module::Detail') }
6
9
  end