metasploit-model 0.25.7-java → 0.26.1-java
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/app/models/metasploit/model/search/operation/association.rb +57 -0
- data/app/models/metasploit/model/search/operator/association.rb +24 -14
- data/app/models/metasploit/model/search/operator/base.rb +19 -3
- data/app/models/metasploit/model/search/operator/single.rb +21 -1
- data/app/models/metasploit/model/search/query.rb +20 -1
- data/lib/metasploit/model/association/tree.rb +130 -0
- data/lib/metasploit/model/search.rb +61 -27
- data/lib/metasploit/model/search/association.rb +152 -8
- data/lib/metasploit/model/search/attribute.rb +112 -22
- data/lib/metasploit/model/search/operator.rb +53 -1
- data/lib/metasploit/model/search/operator/help.rb +39 -1
- data/lib/metasploit/model/search/with.rb +44 -1
- data/lib/metasploit/model/version.rb +2 -2
- data/spec/app/models/metasploit/model/search/operation/association_spec.rb +67 -0
- data/spec/app/models/metasploit/model/search/operator/association_spec.rb +76 -76
- data/spec/app/models/metasploit/model/search/operator/deprecated/author_spec.rb +54 -18
- data/spec/app/models/metasploit/model/search/operator/deprecated/authority_spec.rb +20 -8
- data/spec/app/models/metasploit/model/search/operator/deprecated/platform_spec.rb +20 -8
- data/spec/app/models/metasploit/model/search/operator/deprecated/ref_spec.rb +86 -26
- data/spec/app/models/metasploit/model/search/operator/deprecated/text_spec.rb +63 -21
- data/spec/lib/metasploit/model/search/association/tree_spec.rb +385 -0
- data/spec/lib/metasploit/model/search/association_spec.rb +99 -10
- data/spec/lib/metasploit/model/search_spec.rb +48 -107
- data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/authority.rb +19 -7
- metadata +8 -2
@@ -10,24 +10,113 @@ describe Metasploit::Model::Search::Association do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
context 'search_association' do
|
13
|
-
|
14
|
-
|
13
|
+
subject(:search_association) {
|
14
|
+
base_class.search_association association
|
15
|
+
}
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
let(:association) {
|
18
|
+
:root_association
|
19
|
+
}
|
20
|
+
|
21
|
+
context 'with previous call to search_association with same association' do
|
22
|
+
before(:each) do
|
23
|
+
base_class.search_association association
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'does not change search_association_tree' do
|
27
|
+
expect {
|
28
|
+
search_association
|
29
|
+
}.not_to change(base_class, :search_association_tree)
|
18
30
|
end
|
31
|
+
end
|
19
32
|
|
20
|
-
|
33
|
+
context 'with association tree rooted on association' do
|
34
|
+
before(:each) do
|
35
|
+
base_class.search_associations association => :child_association
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'leaves the original association tree in place' do
|
39
|
+
expect {
|
40
|
+
search_association
|
41
|
+
}.not_to change(base_class, :search_association_tree)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'without association in search_association_tree' do
|
46
|
+
it 'adds association to search_association_tree with nil children' do
|
47
|
+
search_association
|
48
|
+
|
49
|
+
search_association_tree = base_class.search_association_tree
|
50
|
+
|
51
|
+
expect(search_association_tree).to have_key(association)
|
52
|
+
expect(search_association_tree[association]).to be_nil
|
53
|
+
end
|
21
54
|
end
|
22
55
|
end
|
23
56
|
|
24
|
-
context '
|
25
|
-
|
26
|
-
base_class.
|
57
|
+
context 'search_associations' do
|
58
|
+
subject(:search_associations) {
|
59
|
+
base_class.search_associations *associations
|
60
|
+
}
|
61
|
+
|
62
|
+
let(:associations) {
|
63
|
+
[
|
64
|
+
:association
|
65
|
+
]
|
66
|
+
}
|
67
|
+
|
68
|
+
let(:expanded_associations) {
|
69
|
+
{
|
70
|
+
association: nil
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
it 'expands associations' do
|
75
|
+
expect(Metasploit::Model::Association::Tree).to receive(:expand).with(associations).and_return(
|
76
|
+
expanded_associations
|
77
|
+
)
|
78
|
+
|
79
|
+
search_associations
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'merges the expanded associations with the current search_association_tree' do
|
83
|
+
expect(Metasploit::Model::Association::Tree).to receive(:expand).and_return(expanded_associations)
|
84
|
+
|
85
|
+
search_association_tree = {preexisting: nil}
|
86
|
+
expect(base_class).to receive(:search_association_tree).and_return(search_association_tree)
|
87
|
+
|
88
|
+
expect(Metasploit::Model::Association::Tree).to receive(:merge).with(
|
89
|
+
search_association_tree,
|
90
|
+
expanded_associations
|
91
|
+
)
|
92
|
+
|
93
|
+
search_associations
|
27
94
|
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'search_association_operators' do
|
98
|
+
subject(:search_association_operators) {
|
99
|
+
base_class.search_association_operators
|
100
|
+
}
|
101
|
+
|
102
|
+
let(:search_association_tree) {
|
103
|
+
{
|
104
|
+
parent: {
|
105
|
+
child: nil
|
106
|
+
}
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
it 'converts search_association_tree to operators' do
|
111
|
+
expect(base_class).to receive(:search_association_tree).and_return(search_association_tree)
|
112
|
+
expect(Metasploit::Model::Association::Tree).to receive(:operators).with(
|
113
|
+
search_association_tree,
|
114
|
+
hash_including(
|
115
|
+
class: base_class
|
116
|
+
)
|
117
|
+
)
|
28
118
|
|
29
|
-
|
30
|
-
search_association_set.should == Set.new
|
119
|
+
search_association_operators
|
31
120
|
end
|
32
121
|
end
|
33
122
|
end
|
@@ -52,139 +52,80 @@ describe Metasploit::Model::Search do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
context 'with search association' do
|
55
|
+
let(:associated_attribute) do
|
56
|
+
:association_name
|
57
|
+
end
|
58
|
+
|
55
59
|
let(:association) do
|
56
60
|
:associated_things
|
57
61
|
end
|
58
62
|
|
63
|
+
let(:association_class) do
|
64
|
+
Class.new
|
65
|
+
end
|
66
|
+
|
67
|
+
let(:class_name) do
|
68
|
+
'AssociatedThing'
|
69
|
+
end
|
70
|
+
|
59
71
|
before(:each) do
|
60
72
|
base_class.search_association association
|
73
|
+
base_class.send(:include, Metasploit::Model::Association)
|
74
|
+
|
75
|
+
stub_const(class_name, association_class)
|
76
|
+
|
77
|
+
# Include after stub so search_i18n_scope can use Class#name without error
|
78
|
+
association_class.send(:include, Metasploit::Model::Search)
|
79
|
+
association_class.search_attribute associated_attribute, :type => :string
|
80
|
+
|
81
|
+
base_class.association association, :class_name => class_name
|
61
82
|
end
|
62
83
|
|
63
|
-
context '
|
64
|
-
|
65
|
-
|
84
|
+
context 'operator' do
|
85
|
+
subject(:operator) do
|
86
|
+
search_operator_by_name[expected_name]
|
87
|
+
end
|
88
|
+
|
89
|
+
let(:expected_name) do
|
90
|
+
"#{association}.#{associated_attribute}".to_sym
|
66
91
|
end
|
67
92
|
|
68
|
-
|
69
|
-
let(:associated_attribute) do
|
70
|
-
:association_name
|
71
|
-
end
|
93
|
+
it { should be_a Metasploit::Model::Search::Operator::Association }
|
72
94
|
|
73
|
-
|
74
|
-
|
95
|
+
context 'association' do
|
96
|
+
subject(:operator_association) do
|
97
|
+
operator.association
|
75
98
|
end
|
76
99
|
|
77
|
-
|
78
|
-
|
100
|
+
it 'should be the registered association' do
|
101
|
+
operator_association.should == association
|
79
102
|
end
|
103
|
+
end
|
80
104
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
association_class.send(:include, Metasploit::Model::Search)
|
86
|
-
association_class.search_attribute associated_attribute, :type => :string
|
105
|
+
context 'source_operator' do
|
106
|
+
subject(:source_operator) do
|
107
|
+
operator.source_operator
|
108
|
+
end
|
87
109
|
|
88
|
-
|
110
|
+
let(:direct_attribute_operator) do
|
111
|
+
association_class.search_operator_by_name.values.first
|
89
112
|
end
|
90
113
|
|
91
|
-
|
92
|
-
|
93
|
-
search_operator_by_name[expected_name]
|
94
|
-
end
|
95
|
-
|
96
|
-
let(:expected_name) do
|
97
|
-
"#{association}.#{associated_attribute}".to_sym
|
98
|
-
end
|
99
|
-
|
100
|
-
it { should be_a Metasploit::Model::Search::Operator::Association }
|
101
|
-
|
102
|
-
context 'association' do
|
103
|
-
subject(:operator_association) do
|
104
|
-
operator.association
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'should be the registered association' do
|
108
|
-
operator_association.should == association
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
context 'attribute_operator' do
|
113
|
-
subject(:indirect_attribute_operator) do
|
114
|
-
operator.attribute_operator
|
115
|
-
end
|
116
|
-
|
117
|
-
let(:direct_attribute_operator) do
|
118
|
-
association_class.search_operator_by_name.values.first
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'should be operator from associated class' do
|
122
|
-
indirect_attribute_operator.should == direct_attribute_operator
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
context 'klass' do
|
127
|
-
subject(:klass) do
|
128
|
-
operator.klass
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'should be class that called search_operator_by_name' do
|
132
|
-
klass.should == base_class
|
133
|
-
end
|
134
|
-
end
|
114
|
+
it 'should be operator from associated class' do
|
115
|
+
source_operator.should == direct_attribute_operator
|
135
116
|
end
|
136
117
|
end
|
137
118
|
|
138
|
-
context '
|
139
|
-
|
140
|
-
|
141
|
-
search_operator_by_name
|
142
|
-
}.to raise_error(Metasploit::Model::Association::Error)
|
119
|
+
context 'klass' do
|
120
|
+
subject(:klass) do
|
121
|
+
operator.klass
|
143
122
|
end
|
144
123
|
|
145
|
-
|
146
|
-
|
147
|
-
begin
|
148
|
-
search_operator_by_name
|
149
|
-
rescue Metasploit::Model::Association::Error => error
|
150
|
-
error
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
context 'model' do
|
155
|
-
subject(:model) do
|
156
|
-
error.model
|
157
|
-
end
|
158
|
-
|
159
|
-
it 'should be class on which search_operator_by_name was called' do
|
160
|
-
model.should == base_class
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
context 'name' do
|
165
|
-
subject(:name) do
|
166
|
-
error.name
|
167
|
-
end
|
168
|
-
|
169
|
-
it 'should be association name' do
|
170
|
-
name.should == association
|
171
|
-
end
|
172
|
-
end
|
124
|
+
it 'should be class that called search_operator_by_name' do
|
125
|
+
klass.should == base_class
|
173
126
|
end
|
174
127
|
end
|
175
128
|
end
|
176
|
-
|
177
|
-
context 'without reflect_on_association' do
|
178
|
-
it 'should raise ArgumentError' do
|
179
|
-
expect {
|
180
|
-
search_operator_by_name
|
181
|
-
}.to raise_error(
|
182
|
-
NameError,
|
183
|
-
"#{base_class} does not respond to reflect_on_association. " \
|
184
|
-
"It can be added to ActiveModels by including Metasploit::Model::Association into the class."
|
185
|
-
)
|
186
|
-
end
|
187
|
-
end
|
188
129
|
end
|
189
130
|
|
190
131
|
context 'with search with' do
|
@@ -37,7 +37,19 @@ shared_examples_for 'search query with Metasploit::Model::Search::Operator::Depr
|
|
37
37
|
operation_with_formatted_operator('authorities.abbreviation')
|
38
38
|
end
|
39
39
|
|
40
|
-
|
40
|
+
context 'Metasploit::Model::Search::Operation::Association#source_operation' do
|
41
|
+
subject(:source_operation) {
|
42
|
+
operation.source_operation
|
43
|
+
}
|
44
|
+
|
45
|
+
context 'Metasploit::Model::Search::Operation::Base#value' do
|
46
|
+
subject(:value) {
|
47
|
+
source_operation.value
|
48
|
+
}
|
49
|
+
|
50
|
+
it { should == formatted_operator }
|
51
|
+
end
|
52
|
+
end
|
41
53
|
end
|
42
54
|
|
43
55
|
context 'references.designation' do
|
@@ -45,13 +57,13 @@ shared_examples_for 'search query with Metasploit::Model::Search::Operator::Depr
|
|
45
57
|
operation_with_formatted_operator('references.designation')
|
46
58
|
end
|
47
59
|
|
48
|
-
context '
|
49
|
-
subject(:
|
50
|
-
operation.
|
51
|
-
|
60
|
+
context 'Metasploit::Model::Search::Operation::Association#source_operation' do
|
61
|
+
subject(:source_operation) {
|
62
|
+
operation.source_operation
|
63
|
+
}
|
52
64
|
|
53
|
-
it '
|
54
|
-
value.
|
65
|
+
it 'uses formatted value for value' do
|
66
|
+
expect(source_operation.value).to eq(formatted_value)
|
55
67
|
end
|
56
68
|
end
|
57
69
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metasploit-model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.26.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Luke Imhoff
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- app/models/metasploit/model/search/group/base.rb
|
106
106
|
- app/models/metasploit/model/search/group/intersection.rb
|
107
107
|
- app/models/metasploit/model/search/group/union.rb
|
108
|
+
- app/models/metasploit/model/search/operation/association.rb
|
108
109
|
- app/models/metasploit/model/search/operation/base.rb
|
109
110
|
- app/models/metasploit/model/search/operation/boolean.rb
|
110
111
|
- app/models/metasploit/model/search/operation/date.rb
|
@@ -146,6 +147,7 @@ files:
|
|
146
147
|
- lib/metasploit/model/architecture.rb
|
147
148
|
- lib/metasploit/model/association.rb
|
148
149
|
- lib/metasploit/model/association/error.rb
|
150
|
+
- lib/metasploit/model/association/tree.rb
|
149
151
|
- lib/metasploit/model/author.rb
|
150
152
|
- lib/metasploit/model/authority.rb
|
151
153
|
- lib/metasploit/model/authority/bid.rb
|
@@ -224,6 +226,7 @@ files:
|
|
224
226
|
- spec/app/models/metasploit/model/search/group/base_spec.rb
|
225
227
|
- spec/app/models/metasploit/model/search/group/intersection_spec.rb
|
226
228
|
- spec/app/models/metasploit/model/search/group/union_spec.rb
|
229
|
+
- spec/app/models/metasploit/model/search/operation/association_spec.rb
|
227
230
|
- spec/app/models/metasploit/model/search/operation/base_spec.rb
|
228
231
|
- spec/app/models/metasploit/model/search/operation/boolean_spec.rb
|
229
232
|
- spec/app/models/metasploit/model/search/operation/date_spec.rb
|
@@ -398,6 +401,7 @@ files:
|
|
398
401
|
- spec/lib/metasploit/model/platform_spec.rb
|
399
402
|
- spec/lib/metasploit/model/realm/key_spec.rb
|
400
403
|
- spec/lib/metasploit/model/reference_spec.rb
|
404
|
+
- spec/lib/metasploit/model/search/association/tree_spec.rb
|
401
405
|
- spec/lib/metasploit/model/search/association_spec.rb
|
402
406
|
- spec/lib/metasploit/model/search/attribute_spec.rb
|
403
407
|
- spec/lib/metasploit/model/search/operation/integer/value_spec.rb
|
@@ -496,7 +500,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
496
500
|
version: '0'
|
497
501
|
requirements: []
|
498
502
|
rubyforge_project:
|
499
|
-
rubygems_version: 2.
|
503
|
+
rubygems_version: 2.2.2
|
500
504
|
signing_key:
|
501
505
|
specification_version: 4
|
502
506
|
summary: Metasploit Model Mixins and Validators
|
@@ -508,6 +512,7 @@ test_files:
|
|
508
512
|
- spec/app/models/metasploit/model/search/group/base_spec.rb
|
509
513
|
- spec/app/models/metasploit/model/search/group/intersection_spec.rb
|
510
514
|
- spec/app/models/metasploit/model/search/group/union_spec.rb
|
515
|
+
- spec/app/models/metasploit/model/search/operation/association_spec.rb
|
511
516
|
- spec/app/models/metasploit/model/search/operation/base_spec.rb
|
512
517
|
- spec/app/models/metasploit/model/search/operation/boolean_spec.rb
|
513
518
|
- spec/app/models/metasploit/model/search/operation/date_spec.rb
|
@@ -682,6 +687,7 @@ test_files:
|
|
682
687
|
- spec/lib/metasploit/model/platform_spec.rb
|
683
688
|
- spec/lib/metasploit/model/realm/key_spec.rb
|
684
689
|
- spec/lib/metasploit/model/reference_spec.rb
|
690
|
+
- spec/lib/metasploit/model/search/association/tree_spec.rb
|
685
691
|
- spec/lib/metasploit/model/search/association_spec.rb
|
686
692
|
- spec/lib/metasploit/model/search/attribute_spec.rb
|
687
693
|
- spec/lib/metasploit/model/search/operation/integer/value_spec.rb
|