metasploit_data_models 0.17.1-java → 0.17.2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -0
  3. data/Gemfile +2 -0
  4. data/app/models/mdm/host.rb +24 -0
  5. data/app/models/mdm/service.rb +9 -0
  6. data/app/models/metasploit_data_models/search/visitor/attribute.rb +13 -0
  7. data/app/models/metasploit_data_models/search/visitor/includes.rb +28 -0
  8. data/app/models/metasploit_data_models/search/visitor/joins.rb +47 -0
  9. data/app/models/metasploit_data_models/search/visitor/method.rb +13 -0
  10. data/app/models/metasploit_data_models/search/visitor/relation.rb +87 -0
  11. data/app/models/metasploit_data_models/search/visitor/where.rb +65 -0
  12. data/config/locales/en.yml +7 -0
  13. data/lib/metasploit_data_models.rb +1 -0
  14. data/lib/metasploit_data_models/search.rb +6 -0
  15. data/lib/metasploit_data_models/search/visitor.rb +8 -0
  16. data/lib/metasploit_data_models/version.rb +1 -1
  17. data/metasploit_data_models.gemspec +1 -0
  18. data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +74 -0
  19. data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +124 -0
  20. data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +292 -0
  21. data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +33 -0
  22. data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +253 -0
  23. data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +147 -0
  24. data/spec/dummy/config/initializers/active_record_migrations.rb +4 -0
  25. data/spec/factories/mdm/services.rb +5 -0
  26. data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_children.rb +38 -0
  27. data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_metasploit_model_search_operation_base.rb +26 -0
  28. data/spec/support/shared/examples/metasploit_data_models/search/visitor/relation/visit/matching_record.rb +37 -0
  29. data/spec/support/shared/examples/metasploit_data_models/search/visitor/relation/visit/matching_record/with_metasploit_model_search_opeator_deprecated_platform.rb +31 -0
  30. data/spec/support/shared/examples/metasploit_data_models/search/visitor/relation/visit/matching_record/with_metasploit_model_search_operator_deprecated_authority.rb +78 -0
  31. data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_equality.rb +34 -0
  32. data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_metasploit_model_search_group_base.rb +50 -0
  33. metadata +59 -2
@@ -0,0 +1,124 @@
1
+ require 'spec_helper'
2
+
3
+ describe MetasploitDataModels::Search::Visitor::Includes do
4
+ subject(:visitor) do
5
+ described_class.new
6
+ end
7
+
8
+ context '#visit' do
9
+ subject(:visit) do
10
+ visitor.visit(node)
11
+ end
12
+
13
+ children_classes = [
14
+ Metasploit::Model::Search::Group::Intersection,
15
+ Metasploit::Model::Search::Group::Union,
16
+ Metasploit::Model::Search::Operation::Union
17
+ ]
18
+
19
+ children_classes.each do |children_class|
20
+ context "with #{children_class}" do
21
+ it_should_behave_like "MetasploitDataModels::Search::Visitor::Includes#visit with #children" do
22
+ let(:node_class) do
23
+ children_class
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ operation_classes = [
30
+ Metasploit::Model::Search::Operation::Boolean,
31
+ Metasploit::Model::Search::Operation::Date,
32
+ Metasploit::Model::Search::Operation::Integer,
33
+ Metasploit::Model::Search::Operation::Null,
34
+ Metasploit::Model::Search::Operation::Set::Integer,
35
+ Metasploit::Model::Search::Operation::Set::String,
36
+ Metasploit::Model::Search::Operation::String
37
+ ]
38
+
39
+ operation_classes.each do |operation_class|
40
+ context "with #{operation_class}" do
41
+ it_should_behave_like 'MetasploitDataModels::Search::Visitor::Includes#visit with Metasploit::Model::Search::Operation::Base' do
42
+ let(:node_class) do
43
+ operation_class
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ context 'with Metasploit::Model::Search::Operation::Union' do
50
+ let(:node) do
51
+
52
+ end
53
+ end
54
+
55
+ context 'with Metasploit::Model::Search::Operator::Association' do
56
+ let(:association) do
57
+ FactoryGirl.generate :metasploit_model_search_operator_association_association
58
+ end
59
+
60
+ let(:node) do
61
+ Metasploit::Model::Search::Operator::Association.new(
62
+ :association => association
63
+ )
64
+ end
65
+
66
+ it 'should include association' do
67
+ visit.should include(association)
68
+ end
69
+ end
70
+
71
+ context 'with Metasploit::Model::Search::Operator::Attribute' do
72
+ let(:node) do
73
+ Metasploit::Model::Search::Operator::Attribute.new
74
+ end
75
+
76
+ it { should == [] }
77
+ end
78
+
79
+ context 'with Metasploit::Model::Search::Query#tree' do
80
+ let(:node) do
81
+ query.tree
82
+ end
83
+
84
+ let(:query) do
85
+ Metasploit::Model::Search::Query.new(
86
+ :formatted => formatted,
87
+ :klass => klass
88
+ )
89
+ end
90
+
91
+ context 'Metasploit::Model::Search::Query#klass' do
92
+ context 'with Mdm::Host' do
93
+ let(:klass) {
94
+ Mdm::Host
95
+ }
96
+
97
+ context 'with name' do
98
+ let(:name) do
99
+ FactoryGirl.generate :mdm_host_name
100
+ end
101
+
102
+ let(:formatted) do
103
+ "name:\"#{name}\""
104
+ end
105
+
106
+ it { should be_empty }
107
+ end
108
+
109
+ context 'with services.name' do
110
+ let(:name) do
111
+ FactoryGirl.generate :mdm_service_name
112
+ end
113
+
114
+ let(:formatted) do
115
+ "services.name:\"#{name}\""
116
+ end
117
+
118
+ it { should include :services }
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,292 @@
1
+ require 'spec_helper'
2
+
3
+ describe MetasploitDataModels::Search::Visitor::Joins do
4
+ subject(:visitor) do
5
+ described_class.new
6
+ end
7
+
8
+ context '#visit' do
9
+ subject(:visit) do
10
+ visitor.visit(node)
11
+ end
12
+
13
+ context 'with Metasploit::Model::Search::Group::Intersection' do
14
+ let(:children) do
15
+ 2.times.collect { |n|
16
+ double("Child #{n}")
17
+ }
18
+ end
19
+
20
+ let(:node) do
21
+ Metasploit::Model::Search::Group::Intersection.new(
22
+ :children => children
23
+ )
24
+ end
25
+
26
+ it 'should visit each child' do
27
+ # needed for call to visit subject
28
+ visitor.should_receive(:visit).with(node).and_call_original
29
+
30
+ children.each do |child|
31
+ visitor.should_receive(:visit).with(child).and_return([])
32
+ end
33
+
34
+ visit
35
+ end
36
+
37
+ it 'should return Array of all child visits' do
38
+ child_visits = []
39
+
40
+ visitor.should_receive(:visit).with(node).and_call_original
41
+
42
+ children.each_with_index do |child, i|
43
+ child_visit = ["Visited Child #{i}"]
44
+ visitor.stub(:visit).with(child).and_return(child_visit)
45
+ child_visits.concat(child_visit)
46
+ end
47
+
48
+ visit.should == child_visits
49
+ end
50
+ end
51
+
52
+ union_classes = [
53
+ Metasploit::Model::Search::Group::Union,
54
+ Metasploit::Model::Search::Operation::Union
55
+ ]
56
+
57
+ union_classes.each do |union_class|
58
+ context "with #{union_class}" do
59
+ let(:node) do
60
+ union_class.new(
61
+ children: children
62
+ )
63
+ end
64
+
65
+ context 'with children' do
66
+ context 'without child joins' do
67
+ let(:children) do
68
+ Array.new(2) {
69
+ Metasploit::Model::Search::Operator::Attribute.new
70
+ }
71
+ end
72
+
73
+ it { should == [] }
74
+ end
75
+
76
+ context 'with association and attribute' do
77
+ let(:association) do
78
+ FactoryGirl.generate :metasploit_model_search_operator_association_association
79
+ end
80
+
81
+ let(:association_operator) do
82
+ Metasploit::Model::Search::Operator::Association.new(
83
+ association: association
84
+ )
85
+ end
86
+
87
+ let(:attribute_operator) do
88
+ Metasploit::Model::Search::Operator::Attribute.new
89
+ end
90
+
91
+ let(:children) do
92
+ [
93
+ association_operator,
94
+ attribute_operator
95
+ ]
96
+ end
97
+
98
+ it { should == [] }
99
+ end
100
+
101
+ context 'with the same child join for all' do
102
+ let(:association) do
103
+ FactoryGirl.generate :metasploit_model_search_operator_association_association
104
+ end
105
+
106
+ let(:association_operator) do
107
+ Metasploit::Model::Search::Operator::Association.new(
108
+ association: association
109
+ )
110
+ end
111
+
112
+ let(:children) do
113
+ Array.new(2) {
114
+ association_operator
115
+ }
116
+ end
117
+
118
+ it 'should include association' do
119
+ visit.should include association
120
+ end
121
+ end
122
+
123
+ context 'with union of intersections' do
124
+ let(:disjoint_associations) do
125
+ Array.new(2) {
126
+ FactoryGirl.generate :metasploit_model_search_operator_association_association
127
+ }
128
+ end
129
+
130
+ let(:first_associations) do
131
+ disjoint_associations[0, 1] + common_associations
132
+ end
133
+
134
+ let(:first_association_operators) do
135
+ first_associations.collect { |association|
136
+ Metasploit::Model::Search::Operator::Association.new(
137
+ association: association
138
+ )
139
+ }
140
+ end
141
+
142
+ let(:second_associations) do
143
+ disjoint_associations[1, 1] + common_associations
144
+ end
145
+
146
+ let(:second_association_operators) do
147
+ second_associations.collect { |association|
148
+ Metasploit::Model::Search::Operator::Association.new(
149
+ association: association
150
+ )
151
+ }
152
+ end
153
+
154
+ let(:children) do
155
+ [first_association_operators, second_association_operators].collect { |grandchildren|
156
+ Metasploit::Model::Search::Group::Intersection.new(
157
+ children: grandchildren
158
+ )
159
+ }
160
+ end
161
+
162
+ context 'with a common subset of child join' do
163
+ let(:common_associations) do
164
+ Array.new(2) {
165
+ FactoryGirl.generate :metasploit_model_search_operator_association_association
166
+ }
167
+ end
168
+
169
+ it 'should include common associations' do
170
+ common_associations.each do |association|
171
+ visit.should include(association)
172
+ end
173
+ end
174
+
175
+ it 'should not include disjoint associations' do
176
+ disjoint_associations.each do |association|
177
+ visit.should_not include(association)
178
+ end
179
+ end
180
+ end
181
+
182
+ context 'without a common subset of child joins' do
183
+ let(:common_associations) do
184
+ []
185
+ end
186
+
187
+ it { should == [] }
188
+ end
189
+ end
190
+ end
191
+
192
+ context 'without children' do
193
+ let(:children) do
194
+ []
195
+ end
196
+
197
+ it { should == [] }
198
+ end
199
+ end
200
+ end
201
+
202
+ operation_classes = [
203
+ Metasploit::Model::Search::Operation::Boolean,
204
+ Metasploit::Model::Search::Operation::Date,
205
+ Metasploit::Model::Search::Operation::Integer,
206
+ Metasploit::Model::Search::Operation::Null,
207
+ Metasploit::Model::Search::Operation::Set::Integer,
208
+ Metasploit::Model::Search::Operation::Set::String,
209
+ Metasploit::Model::Search::Operation::String
210
+ ]
211
+
212
+ operation_classes.each do |operation_class|
213
+ context "with #{operation_class}" do
214
+ it_should_behave_like 'MetasploitDataModels::Search::Visitor::Includes#visit with Metasploit::Model::Search::Operation::Base' do
215
+ let(:node_class) do
216
+ operation_class
217
+ end
218
+ end
219
+ end
220
+ end
221
+
222
+ context 'with Metasploit::Model::Search::Operator::Association' do
223
+ let(:association) do
224
+ FactoryGirl.generate :metasploit_model_search_operator_association_association
225
+ end
226
+
227
+ let(:node) do
228
+ Metasploit::Model::Search::Operator::Association.new(
229
+ :association => association
230
+ )
231
+ end
232
+
233
+ it 'should include association' do
234
+ visit.should include(association)
235
+ end
236
+ end
237
+
238
+ context "with Metasploit::Model::Search::Operator::Attribute" do
239
+ let(:node) do
240
+ Metasploit::Model::Search::Operator::Attribute.new
241
+ end
242
+
243
+ it { should == [] }
244
+ end
245
+
246
+ context 'with Metasploit::Model::Search::Query#tree' do
247
+ let(:node) do
248
+ query.tree
249
+ end
250
+
251
+ let(:query) do
252
+ Metasploit::Model::Search::Query.new(
253
+ :formatted => formatted,
254
+ :klass => klass
255
+ )
256
+ end
257
+
258
+ context 'Metasploit::Model::Search:Query#klass' do
259
+ context 'with Mdm::Host' do
260
+ let(:klass) {
261
+ Mdm::Host
262
+ }
263
+
264
+
265
+ context 'with name' do
266
+ let(:name) do
267
+ FactoryGirl.generate :mdm_host_name
268
+ end
269
+
270
+ let(:formatted) do
271
+ "name:\"#{name}\""
272
+ end
273
+
274
+ it { should be_empty }
275
+ end
276
+
277
+ context 'with services.name' do
278
+ let(:name) do
279
+ FactoryGirl.generate :mdm_service_name
280
+ end
281
+
282
+ let(:formatted) do
283
+ "services.name:\"#{name}\""
284
+ end
285
+
286
+ it { should include :services }
287
+ end
288
+ end
289
+ end
290
+ end
291
+ end
292
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe MetasploitDataModels::Search::Visitor::Method do
4
+ subject(:visitor) do
5
+ described_class.new
6
+ end
7
+
8
+ context '#visit' do
9
+ subject(:visit) do
10
+ visitor.visit(node)
11
+ end
12
+
13
+ let(:node) do
14
+ node_class.new
15
+ end
16
+
17
+ context 'with Metasploit::Model::Search::Group::Intersection' do
18
+ let(:node_class) do
19
+ Metasploit::Model::Search::Group::Intersection
20
+ end
21
+
22
+ it { should == :and }
23
+ end
24
+
25
+ context 'with Metasploit::Model::Search::Group::Union' do
26
+ let(:node_class) do
27
+ Metasploit::Model::Search::Group::Union
28
+ end
29
+
30
+ it { should == :or }
31
+ end
32
+ end
33
+ end