metasploit_data_models 1.0.0.pre.rails.pre.4.0b → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -2
  3. data/.travis.yml +6 -3
  4. data/CHANGELOG.md +6 -0
  5. data/CONTRIBUTING.md +10 -52
  6. data/Gemfile +4 -6
  7. data/RELEASING.md +88 -0
  8. data/Rakefile +23 -0
  9. data/UPGRADING.md +1 -0
  10. data/app/models/mdm/api_key.rb +41 -1
  11. data/app/models/mdm/client.rb +41 -1
  12. data/app/models/mdm/cred.rb +116 -28
  13. data/app/models/mdm/event.rb +47 -0
  14. data/app/models/mdm/exploit_attempt.rb +65 -16
  15. data/app/models/mdm/exploited_host.rb +27 -0
  16. data/app/models/mdm/host_detail.rb +44 -0
  17. data/app/models/mdm/host_tag.rb +6 -8
  18. data/app/models/mdm/listener.rb +52 -0
  19. data/app/models/mdm/macro.rb +42 -0
  20. data/app/models/mdm/mod_ref.rb +21 -1
  21. data/app/models/mdm/module/action.rb +15 -0
  22. data/app/models/mdm/module/arch.rb +10 -0
  23. data/app/models/mdm/module/author.rb +17 -1
  24. data/app/models/mdm/module/mixin.rb +13 -0
  25. data/app/models/mdm/module/platform.rb +11 -0
  26. data/app/models/mdm/module/target.rb +18 -0
  27. data/app/models/mdm/nexpose_console.rb +82 -4
  28. data/app/models/mdm/profile.rb +36 -0
  29. data/app/models/mdm/route.rb +16 -4
  30. data/app/models/mdm/session_event.rb +32 -0
  31. data/app/models/mdm/tag.rb +48 -9
  32. data/app/models/mdm/task.rb +85 -46
  33. data/app/models/mdm/task_cred.rb +29 -0
  34. data/app/models/mdm/task_host.rb +25 -0
  35. data/app/models/mdm/task_service.rb +25 -0
  36. data/app/models/mdm/task_session.rb +25 -0
  37. data/app/models/mdm/user.rb +192 -6
  38. data/app/models/mdm/vuln_attempt.rb +37 -12
  39. data/app/models/mdm/vuln_detail.rb +138 -5
  40. data/app/models/mdm/vuln_ref.rb +3 -0
  41. data/app/models/mdm/web_form.rb +34 -0
  42. data/app/models/mdm/web_page.rb +69 -0
  43. data/app/models/mdm/web_site.rb +50 -0
  44. data/app/models/mdm/wmap_request.rb +85 -0
  45. data/app/models/mdm/wmap_target.rb +40 -0
  46. data/app/models/mdm/workspace.rb +160 -17
  47. data/app/models/metasploit_data_models/automatic_exploitation/match.rb +13 -23
  48. data/app/models/metasploit_data_models/automatic_exploitation/match_result.rb +25 -4
  49. data/app/models/metasploit_data_models/automatic_exploitation/match_set.rb +15 -4
  50. data/app/models/metasploit_data_models/automatic_exploitation/run.rb +7 -3
  51. data/app/models/metasploit_data_models/ip_address/v4/segmented.rb +1 -1
  52. data/app/models/metasploit_data_models/module_run.rb +1 -1
  53. data/app/models/metasploit_data_models/search/visitor/where.rb +1 -1
  54. data/app/validators/ip_format_validator.rb +4 -0
  55. data/app/validators/parameters_validator.rb +12 -0
  56. data/app/validators/password_is_strong_validator.rb +10 -1
  57. data/lib/mdm/host/operating_system_normalization.rb +7 -10
  58. data/lib/metasploit_data_models.rb +4 -0
  59. data/lib/metasploit_data_models/automatic_exploitation.rb +25 -0
  60. data/lib/metasploit_data_models/engine.rb +2 -0
  61. data/lib/metasploit_data_models/serialized_prefs.rb +6 -0
  62. data/lib/metasploit_data_models/version.rb +30 -7
  63. data/metasploit_data_models.gemspec +9 -2
  64. data/spec/app/models/mdm/api_key_spec.rb +1 -3
  65. data/spec/app/models/mdm/client_spec.rb +9 -11
  66. data/spec/app/models/mdm/cred_spec.rb +42 -54
  67. data/spec/app/models/mdm/event_spec.rb +22 -24
  68. data/spec/app/models/mdm/exploit_attempt_spec.rb +19 -21
  69. data/spec/app/models/mdm/exploited_host_spec.rb +11 -13
  70. data/spec/app/models/mdm/host_detail_spec.rb +15 -17
  71. data/spec/app/models/mdm/host_spec.rb +262 -260
  72. data/spec/app/models/mdm/host_tag_spec.rb +6 -8
  73. data/spec/app/models/mdm/listener_spec.rb +30 -32
  74. data/spec/app/models/mdm/loot_spec.rb +21 -23
  75. data/spec/app/models/mdm/macro_spec.rb +1 -3
  76. data/spec/app/models/mdm/mod_ref_spec.rb +1 -3
  77. data/spec/app/models/mdm/module/action_spec.rb +8 -10
  78. data/spec/app/models/mdm/module/arch_spec.rb +8 -10
  79. data/spec/app/models/mdm/module/author_spec.rb +19 -14
  80. data/spec/app/models/mdm/module/detail_spec.rb +184 -75
  81. data/spec/app/models/mdm/module/mixin_spec.rb +8 -10
  82. data/spec/app/models/mdm/module/platform_spec.rb +8 -10
  83. data/spec/app/models/mdm/module/ref_spec.rb +8 -10
  84. data/spec/app/models/mdm/module/target_spec.rb +10 -12
  85. data/spec/app/models/mdm/nexpose_console_spec.rb +35 -37
  86. data/spec/app/models/mdm/note_spec.rb +23 -25
  87. data/spec/app/models/mdm/profile_spec.rb +1 -3
  88. data/spec/app/models/mdm/ref_spec.rb +9 -12
  89. data/spec/app/models/mdm/route_spec.rb +6 -8
  90. data/spec/app/models/mdm/service_spec.rb +38 -40
  91. data/spec/app/models/mdm/session_event_spec.rb +10 -12
  92. data/spec/app/models/mdm/session_spec.rb +13 -15
  93. data/spec/app/models/mdm/tag_spec.rb +29 -30
  94. data/spec/app/models/mdm/task_cred_spec.rb +9 -11
  95. data/spec/app/models/mdm/task_host_spec.rb +9 -11
  96. data/spec/app/models/mdm/task_service_spec.rb +9 -11
  97. data/spec/app/models/mdm/task_session_spec.rb +7 -9
  98. data/spec/app/models/mdm/task_spec.rb +27 -29
  99. data/spec/app/models/mdm/user_spec.rb +17 -19
  100. data/spec/app/models/mdm/vuln_attempt_spec.rb +14 -16
  101. data/spec/app/models/mdm/vuln_detail_spec.rb +26 -28
  102. data/spec/app/models/mdm/vuln_ref_spec.rb +8 -10
  103. data/spec/app/models/mdm/vuln_spec.rb +24 -26
  104. data/spec/app/models/mdm/web_form_spec.rb +11 -13
  105. data/spec/app/models/mdm/web_page_spec.rb +19 -21
  106. data/spec/app/models/mdm/web_site_spec.rb +21 -23
  107. data/spec/app/models/mdm/web_vuln_spec.rb +63 -65
  108. data/spec/app/models/mdm/wmap_request_spec.rb +1 -3
  109. data/spec/app/models/mdm/wmap_target_spec.rb +1 -3
  110. data/spec/app/models/mdm/workspace_spec.rb +97 -100
  111. data/spec/app/models/metasploit_data_models/automatic_exploitation/match_result_spec.rb +3 -5
  112. data/spec/app/models/metasploit_data_models/automatic_exploitation/match_set_spec.rb +13 -15
  113. data/spec/app/models/metasploit_data_models/automatic_exploitation/match_spec.rb +1 -3
  114. data/spec/app/models/metasploit_data_models/automatic_exploitation/run_spec.rb +1 -3
  115. data/spec/app/models/metasploit_data_models/ip_address/v4/cidr_spec.rb +10 -12
  116. data/spec/app/models/metasploit_data_models/ip_address/v4/nmap_spec.rb +4 -6
  117. data/spec/app/models/metasploit_data_models/ip_address/v4/range_spec.rb +21 -23
  118. data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/list_spec.rb +9 -11
  119. data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/range_spec.rb +21 -23
  120. data/spec/app/models/metasploit_data_models/ip_address/v4/segment/segmented_spec.rb +4 -6
  121. data/spec/app/models/metasploit_data_models/ip_address/v4/segment/single_spec.rb +22 -15
  122. data/spec/app/models/metasploit_data_models/ip_address/v4/single_spec.rb +4 -6
  123. data/spec/app/models/metasploit_data_models/module_run_spec.rb +1 -3
  124. data/spec/app/models/metasploit_data_models/search/operation/ip_address_spec.rb +18 -20
  125. data/spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb +6 -8
  126. data/spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb +8 -10
  127. data/spec/app/models/metasploit_data_models/search/operation/range_spec.rb +8 -10
  128. data/spec/app/models/metasploit_data_models/search/operator/ip_address_spec.rb +2 -4
  129. data/spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb +8 -10
  130. data/spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb +6 -8
  131. data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +9 -11
  132. data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +5 -7
  133. data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +17 -19
  134. data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +5 -7
  135. data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +61 -23
  136. data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +8 -10
  137. data/spec/app/validators/parameters_validator_spec.rb +29 -29
  138. data/spec/app/validators/password_is_strong_validator_spec.rb +54 -46
  139. data/spec/lib/base64_serializer_spec.rb +19 -21
  140. data/spec/lib/ipaddr_spec.rb +1 -3
  141. data/spec/lib/metasploit_data_models/ip_address/cidr_spec.rb +18 -12
  142. data/spec/lib/metasploit_data_models/ip_address/range_spec.rb +4 -6
  143. data/spec/lib/metasploit_data_models/match/child_spec.rb +2 -4
  144. data/spec/lib/metasploit_data_models/match/parent_spec.rb +4 -6
  145. data/spec/lib/metasploit_data_models/version_spec.rb +3 -139
  146. data/spec/lib/metasploit_data_models_spec.rb +4 -0
  147. data/spec/spec_helper.rb +86 -12
  148. data/spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb +2 -2
  149. data/spec/support/shared/examples/mdm/module/detail/supports_stance_with_mtype.rb +4 -4
  150. data/spec/support/shared/examples/metasploit_data_models/search/operation/ipaddress/match.rb +2 -2
  151. data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_children.rb +5 -5
  152. data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_metasploit_model_search_operation_base.rb +5 -5
  153. data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_equality.rb +3 -3
  154. data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_metasploit_model_search_group_base.rb +7 -6
  155. metadata +74 -14
  156. data/app/models/metasploit_data_models/automatic_exploitation.rb +0 -16
  157. data/lib/tasks/yard.rake +0 -33
@@ -1,6 +1,4 @@
1
- require "spec_helper"
2
-
3
- describe MetasploitDataModels::Base64Serializer do
1
+ RSpec.describe MetasploitDataModels::Base64Serializer do
4
2
  let(:base64_marshaled) do
5
3
  marshaled = Marshal.dump(unserialized)
6
4
 
@@ -30,7 +28,7 @@ describe MetasploitDataModels::Base64Serializer do
30
28
 
31
29
  context 'CONSTANTS' do
32
30
  it 'should define DEFAULT' do
33
- described_class::DEFAULT.should == default
31
+ expect(described_class::DEFAULT).to eq(default)
34
32
  end
35
33
 
36
34
  context 'LOADERS' do
@@ -38,36 +36,36 @@ describe MetasploitDataModels::Base64Serializer do
38
36
  first = described_class::LOADERS[0]
39
37
  deserialized = first.call(base64_marshaled)
40
38
 
41
- deserialized.should == unserialized
39
+ expect(deserialized).to eq(unserialized)
42
40
  end
43
41
 
44
42
  it 'should fallback to the old YAML format second' do
45
43
  second = described_class::LOADERS[1]
46
44
  deserialized = second.call(yaml)
47
45
 
48
- deserialized.should == unserialized
46
+ expect(deserialized).to eq(unserialized)
49
47
  end
50
48
 
51
49
  it 'should finally give up and just return the value' do
52
50
  last = described_class::LOADERS.last
53
51
  deserialized = last.call(unserialized)
54
52
 
55
- deserialized.should == unserialized
53
+ expect(deserialized).to eq(unserialized)
56
54
  end
57
55
  end
58
56
  end
59
57
 
60
58
  context '#default' do
61
59
  it 'should default to {}' do
62
- base64_serializer.default.should == {}
60
+ expect(base64_serializer.default).to eq({})
63
61
  end
64
62
 
65
63
  it 'should return a duplicate' do
66
64
  duplicate = base64_serializer.default
67
- value = mock('Value')
65
+ value = double('Value')
68
66
  duplicate[:key] = value
69
67
 
70
- duplicate.should_not == base64_serializer.default
68
+ expect(duplicate).not_to eq(base64_serializer.default)
71
69
  end
72
70
  end
73
71
 
@@ -75,7 +73,7 @@ describe MetasploitDataModels::Base64Serializer do
75
73
  it 'should output Base64 encoded marshaled data' do
76
74
  dumped = base64_serializer.dump(unserialized)
77
75
 
78
- dumped.should == base64_marshaled
76
+ expect(dumped).to eq(base64_marshaled)
79
77
  end
80
78
  end
81
79
 
@@ -105,21 +103,21 @@ describe MetasploitDataModels::Base64Serializer do
105
103
  end
106
104
 
107
105
  it 'should have :default in attributes' do
108
- attributes.should have_key(:default)
106
+ expect(attributes).to have_key(:default)
109
107
  end
110
108
 
111
109
  it 'should set default to :default value' do
112
- base64_serializer.default.should == attributes[:default]
110
+ expect(base64_serializer.default).to eq(attributes[:default])
113
111
  end
114
112
  end
115
113
 
116
114
  context 'without :default' do
117
115
  it 'should not have :default in attributes' do
118
- attributes.should_not have_key(:default)
116
+ expect(attributes).not_to have_key(:default)
119
117
  end
120
118
 
121
119
  it 'should default #default to DEFAULT' do
122
- base64_serializer.default.should == default
120
+ expect(base64_serializer.default).to eq(default)
123
121
  end
124
122
  end
125
123
  end
@@ -131,11 +129,11 @@ describe MetasploitDataModels::Base64Serializer do
131
129
  end
132
130
 
133
131
  it 'should return #default' do
134
- default = mock('Default')
135
- base64_serializer.stub(:default => default)
132
+ default = double('Default')
133
+ allow(base64_serializer).to receive(:default).and_return(default)
136
134
  deserialized = base64_serializer.load(serialized)
137
135
 
138
- deserialized.should == default
136
+ expect(deserialized).to eq(default)
139
137
  end
140
138
  end
141
139
 
@@ -143,7 +141,7 @@ describe MetasploitDataModels::Base64Serializer do
143
141
  it 'should return unserialized' do
144
142
  deserialized = base64_serializer.load(base64_marshaled)
145
143
 
146
- deserialized.should == unserialized
144
+ expect(deserialized).to eq(unserialized)
147
145
  end
148
146
 
149
147
  end
@@ -152,7 +150,7 @@ describe MetasploitDataModels::Base64Serializer do
152
150
  it 'should return unserialized' do
153
151
  deserialized = base64_serializer.load(yaml)
154
152
 
155
- deserialized.should == unserialized
153
+ expect(deserialized).to eq(unserialized)
156
154
  end
157
155
  end
158
156
 
@@ -165,7 +163,7 @@ describe MetasploitDataModels::Base64Serializer do
165
163
  it 'should return raw value' do
166
164
  deserialized = base64_serializer.load(raw_value)
167
165
 
168
- deserialized.should == raw_value
166
+ expect(deserialized).to eq(raw_value)
169
167
  end
170
168
  end
171
169
  end
@@ -1,6 +1,4 @@
1
- require "spec_helper"
2
-
3
- describe IPAddr do
1
+ RSpec.describe IPAddr do
4
2
  subject(:ip_address) { IPAddr.new('10.0.0.1') }
5
3
 
6
4
  describe '#==' do
@@ -1,6 +1,4 @@
1
- require 'spec_helper'
2
-
3
- describe MetasploitDataModels::IPAddress::CIDR do
1
+ RSpec.describe MetasploitDataModels::IPAddress::CIDR do
4
2
  subject(:including_class_instance) {
5
3
  including_class.new(
6
4
  value: formatted_value
@@ -80,7 +78,7 @@ describe MetasploitDataModels::IPAddress::CIDR do
80
78
  described_class::SEPARATOR
81
79
  }
82
80
 
83
- it { should == '/' }
81
+ it { is_expected.to eq('/') }
84
82
  end
85
83
  end
86
84
 
@@ -110,7 +108,7 @@ describe MetasploitDataModels::IPAddress::CIDR do
110
108
  true
111
109
  }
112
110
 
113
- it { should_not include(invalid_error) }
111
+ it { is_expected.not_to include(invalid_error) }
114
112
  end
115
113
 
116
114
  context 'without valid' do
@@ -118,7 +116,7 @@ describe MetasploitDataModels::IPAddress::CIDR do
118
116
  false
119
117
  }
120
118
 
121
- it { should include(invalid_error) }
119
+ it { is_expected.to include(invalid_error) }
122
120
  end
123
121
  end
124
122
 
@@ -131,7 +129,7 @@ describe MetasploitDataModels::IPAddress::CIDR do
131
129
  I18n.translate!('errors.messages.blank')
132
130
  }
133
131
 
134
- it { should include(blank_error) }
132
+ it { is_expected.to include(blank_error) }
135
133
  end
136
134
  end
137
135
 
@@ -166,7 +164,7 @@ describe MetasploitDataModels::IPAddress::CIDR do
166
164
  end
167
165
  }
168
166
 
169
- it { should be_nil }
167
+ it { is_expected.to be_nil }
170
168
  end
171
169
  end
172
170
 
@@ -208,8 +206,8 @@ describe MetasploitDataModels::IPAddress::CIDR do
208
206
  regexp.names
209
207
  }
210
208
 
211
- it { should include 'address' }
212
- it { should include 'prefix_length' }
209
+ it { is_expected.to include 'address' }
210
+ it { is_expected.to include 'prefix_length' }
213
211
  end
214
212
  end
215
213
 
@@ -222,9 +220,17 @@ describe MetasploitDataModels::IPAddress::CIDR do
222
220
  Class.new(Metasploit::Model::Base) {
223
221
  attr_accessor :value
224
222
  }.tap { |address_class|
223
+ outer_segment_class = self.segment_class
224
+
225
+ address_class.define_singleton_method(:segment_class) do
226
+ outer_segment_class
227
+ end
225
228
 
226
- allow(address_class).to receive(:segment_class).and_return(segment_class)
227
- allow(address_class).to receive(:segment_count).and_return(segment_count)
229
+ outer_segment_count = self.segment_count
230
+
231
+ address_class.define_singleton_method(:segment_count) do
232
+ outer_segment_count
233
+ end
228
234
  }
229
235
  }
230
236
 
@@ -1,6 +1,4 @@
1
- require 'spec_helper'
2
-
3
- describe MetasploitDataModels::IPAddress::Range do
1
+ RSpec.describe MetasploitDataModels::IPAddress::Range do
4
2
  subject(:range) {
5
3
  range_class.new
6
4
  }
@@ -35,7 +33,7 @@ describe MetasploitDataModels::IPAddress::Range do
35
33
  'invalid_value'
36
34
  }
37
35
 
38
- it { should be_nil }
36
+ it { is_expected.to be_nil }
39
37
  end
40
38
  end
41
39
 
@@ -44,7 +42,7 @@ describe MetasploitDataModels::IPAddress::Range do
44
42
  nil
45
43
  }
46
44
 
47
- it { should be_nil }
45
+ it { is_expected.to be_nil }
48
46
  end
49
47
  end
50
48
  end
@@ -67,7 +65,7 @@ describe MetasploitDataModels::IPAddress::Range do
67
65
  described_class::SEPARATOR
68
66
  }
69
67
 
70
- it { should == '-' }
68
+ it { is_expected.to eq('-') }
71
69
  end
72
70
  end
73
71
 
@@ -1,6 +1,4 @@
1
- require 'spec_helper'
2
-
3
- describe MetasploitDataModels::Match::Child do
1
+ RSpec.describe MetasploitDataModels::Match::Child do
4
2
  let(:extending_class) {
5
3
  # capture as local for Class.new block scope
6
4
  described_class = self.described_class
@@ -54,7 +52,7 @@ describe MetasploitDataModels::Match::Child do
54
52
  '1,2-3'
55
53
  end
56
54
 
57
- it { should be_nil }
55
+ it { is_expected.to be_nil }
58
56
  end
59
57
  end
60
58
  end
@@ -1,6 +1,4 @@
1
- require 'spec_helper'
2
-
3
- describe MetasploitDataModels::Match::Parent do
1
+ RSpec.describe MetasploitDataModels::Match::Parent do
4
2
  let(:including_class) {
5
3
  described_class = self.described_class
6
4
 
@@ -19,7 +17,7 @@ describe MetasploitDataModels::Match::Parent do
19
17
  }
20
18
 
21
19
  context 'default' do
22
- it { should == [] }
20
+ it { is_expected.to eq([]) }
23
21
  end
24
22
  end
25
23
 
@@ -86,7 +84,7 @@ describe MetasploitDataModels::Match::Parent do
86
84
  match_child
87
85
  end
88
86
 
89
- it { should be_nil }
87
+ it { is_expected.to be_nil }
90
88
  end
91
89
  end
92
90
 
@@ -96,7 +94,7 @@ describe MetasploitDataModels::Match::Parent do
96
94
  }
97
95
 
98
96
  context 'default' do
99
- it { should == [] }
97
+ it { is_expected.to eq([]) }
100
98
  end
101
99
 
102
100
  context 'with class names' do
@@ -1,139 +1,3 @@
1
- require 'spec_helper'
2
-
3
- describe MetasploitDataModels::Version do
4
- context 'CONSTANTS' do
5
- context 'MAJOR' do
6
- subject(:major) do
7
- described_class::MAJOR
8
- end
9
-
10
- it { should be_a Integer }
11
- end
12
-
13
- context 'MINOR' do
14
- subject(:minor) do
15
- described_class::MINOR
16
- end
17
-
18
- it { should be_a Integer }
19
- end
20
-
21
- context 'PATCH' do
22
- subject(:patch) do
23
- described_class::PATCH
24
- end
25
-
26
- it { should be_a Integer }
27
- end
28
-
29
- pull_request = ENV['TRAVIS_PULL_REQUEST']
30
-
31
- # a pull request cannot check PRERELEASE because it will be tested in the target branch, but the source itself
32
- # is from the source branch and so has the source branch PRERELEASE.
33
- #
34
- # PRERELEASE can only be set appropriately for a merge by merging to the target branch and then updating PRERELEASE
35
- # on the target branch before committing and/or pushing to github and travis-ci.
36
- if pull_request.nil? || pull_request == 'false'
37
- context 'PREPRELEASE' do
38
- subject(:prerelease) do
39
- described_class::PRERELEASE
40
- end
41
-
42
- branch = ENV['TRAVIS_BRANCH']
43
-
44
- if branch.blank?
45
- branch = `git rev-parse --abbrev-ref HEAD`.strip
46
- end
47
-
48
- if branch == 'master'
49
- it 'does not have a PRERELEASE' do
50
- expect(defined? described_class::PRERELEASE).to be_nil
51
- end
52
- else
53
- branch_regex = /\A(?<type>bug|chore|feature|staging)(\/(?<story>[^\/]+))?\/(?<prerelease>[^\/]+)\z/
54
- match = branch.match(branch_regex)
55
-
56
- if match
57
- it 'matches the branch relative name' do
58
- expect(prerelease).to eq(match[:prerelease])
59
- end
60
- else
61
- tag_regex = /\Av(?<major>\d+).(?<minor>\d+).(?<patch>\d+)(\.pre\.(?<prerelease>.*))?\z/
62
- # travis-ci sets TRAVIS_BRANCH to the tag name for tag builds
63
- match = branch.match(tag_regex)
64
-
65
- if match
66
- tag_prerelease = match[:prerelease]
67
-
68
- if tag_prerelease
69
- it 'matches the tag prerelease converted from a gem version to a VERSION' do
70
- expect(prerelease).to eq(tag_prerelease.gsub('.pre.', '-'))
71
- end
72
- else
73
- it 'does not have a PRERELEASE' do
74
- expect(defined? described_class::PRERELEASE).to be_nil
75
- end
76
- end
77
- else
78
- it 'has a abbreviated reference that can be parsed for prerelease' do
79
- fail "Do not know how to parse #{branch.inspect} for PRERELEASE"
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
86
- end
87
-
88
- context 'full' do
89
- subject(:full) do
90
- described_class.full
91
- end
92
-
93
- #
94
- # lets
95
- #
96
-
97
- let(:major) do
98
- 1
99
- end
100
-
101
- let(:minor) do
102
- 2
103
- end
104
-
105
- let(:patch) do
106
- 3
107
- end
108
-
109
- before(:each) do
110
- stub_const("#{described_class}::MAJOR", major)
111
- stub_const("#{described_class}::MINOR", minor)
112
- stub_const("#{described_class}::PATCH", patch)
113
- end
114
-
115
- context 'with PRERELEASE' do
116
- let(:prerelease) do
117
- 'prerelease'
118
- end
119
-
120
- before(:each) do
121
- stub_const("#{described_class}::PRERELEASE", prerelease)
122
- end
123
-
124
- it 'is <major>.<minor>.<patch>-<prerelease>' do
125
- expect(full).to eq("#{major}.#{minor}.#{patch}-#{prerelease}")
126
- end
127
- end
128
-
129
- context 'without PRERELEASE' do
130
- before(:each) do
131
- hide_const("#{described_class}::PRERELEASE")
132
- end
133
-
134
- it 'is <major>.<minor>.<patch>' do
135
- expect(full).to eq("#{major}.#{minor}.#{patch}")
136
- end
137
- end
138
- end
139
- end
1
+ RSpec.describe MetasploitDataModels::Version do
2
+ it_should_behave_like 'Metasploit::Version Version Module'
3
+ end