esp_sdk 2.4.0 → 2.5.0
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/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/lib/esp.rb +0 -10
- data/lib/esp/resources/custom_signature.rb +6 -108
- data/lib/esp/resources/custom_signature/definition.rb +100 -0
- data/lib/esp/resources/custom_signature/result.rb +97 -0
- data/lib/esp/resources/custom_signature/result/alert.rb +53 -0
- data/lib/esp/resources/dashboard.rb +2 -2
- data/lib/esp/resources/report.rb +5 -1
- data/lib/esp/resources/suppression.rb +4 -0
- data/lib/esp/version.rb +1 -1
- data/test/esp/integration/custom_signature_definition_integration_test.rb +95 -0
- data/test/esp/integration/custom_signature_integration_test.rb +0 -33
- data/test/esp/integration/custom_signature_result_alert_integration_test.rb +59 -0
- data/test/esp/integration/custom_signature_result_integration_test.rb +83 -0
- data/test/esp/integration/external_account_integration_test.rb +0 -22
- data/test/esp/integration/report_export_integration_integration_test.rb +1 -1
- data/test/esp/resources/custom_signature/definition_test.rb +77 -0
- data/test/esp/resources/custom_signature/result/alert_test.rb +84 -0
- data/test/esp/resources/custom_signature/result_test.rb +91 -0
- data/test/esp/resources/custom_signature_test.rb +7 -122
- data/test/esp/resources/service_test.rb +8 -0
- data/test/factories/custom_signature/definitions.rb +30 -0
- data/test/factories/custom_signature/result_alerts.rb +94 -0
- data/test/factories/custom_signature/results.rb +49 -0
- data/test/factories/reports.rb +0 -10
- metadata +24 -3
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../../test_helper')
|
2
|
+
|
3
|
+
module ESP
|
4
|
+
class CustomSignature
|
5
|
+
class Result
|
6
|
+
class AlertTest < ActiveSupport::TestCase
|
7
|
+
context ESP::CustomSignature::Result::Alert do
|
8
|
+
context '#region' do
|
9
|
+
should 'call the api' do
|
10
|
+
alert = build(:result_alert, region_id: 4)
|
11
|
+
stubbed_region = stub_request(:get, %r{regions/#{alert.region_id}.json*}).to_return(body: json(:region))
|
12
|
+
|
13
|
+
alert.region
|
14
|
+
|
15
|
+
assert_requested(stubbed_region)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context '#external_account' do
|
20
|
+
should 'call the api' do
|
21
|
+
alert = build(:result_alert, external_account_id: 4)
|
22
|
+
stubbed_external_account = stub_request(:get, %r{external_accounts/#{alert.external_account_id}.json*}).to_return(body: json(:external_account))
|
23
|
+
|
24
|
+
alert.external_account
|
25
|
+
|
26
|
+
assert_requested(stubbed_external_account)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context '#custom_signature' do
|
31
|
+
should 'call the api' do
|
32
|
+
alert = build(:result_alert, custom_signature_id: 4)
|
33
|
+
stubbed_custom_signature = stub_request(:get, %r{custom_signatures/#{alert.custom_signature_id}.json*}).to_return(body: json(:custom_signature))
|
34
|
+
|
35
|
+
alert.custom_signature
|
36
|
+
|
37
|
+
assert_requested(stubbed_custom_signature)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context '.find' do
|
42
|
+
should 'raise ESP::NotImplementedError' do
|
43
|
+
assert_raises ESP::NotImplementedError do
|
44
|
+
ESP::CustomSignature::Result::Alert.find(1)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context '.where' do
|
50
|
+
should 'raise ESP::NotImplementedError' do
|
51
|
+
assert_raises ESP::NotImplementedError do
|
52
|
+
ESP::CustomSignature::Result::Alert.where(id_eq: 1)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context '#create' do
|
58
|
+
should 'raise ESP::NotImplementedError' do
|
59
|
+
assert_raises ESP::NotImplementedError do
|
60
|
+
ESP::CustomSignature::Result::Alert.new.create
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context '#update' do
|
66
|
+
should 'raise ESP::NotImplementedError' do
|
67
|
+
assert_raises ESP::NotImplementedError do
|
68
|
+
ESP::CustomSignature::Result::Alert.new.update
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context '#destroy' do
|
74
|
+
should 'raise ESP::NotImplementedError' do
|
75
|
+
assert_raises ESP::NotImplementedError do
|
76
|
+
ESP::CustomSignature::Result::Alert.new.destroy
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
|
2
|
+
|
3
|
+
module ESP
|
4
|
+
class CustomSignature
|
5
|
+
class ResultTest < ActiveSupport::TestCase
|
6
|
+
context ESP::CustomSignature::Result do
|
7
|
+
context '#definition' do
|
8
|
+
should 'call the api' do
|
9
|
+
result = build(:result, definition_id: 4)
|
10
|
+
stubbed_definition = stub_request(:get, %r{custom_signature_definitions/#{result.definition_id}.json*}).to_return(body: json(:definition))
|
11
|
+
|
12
|
+
result.definition
|
13
|
+
|
14
|
+
assert_requested(stubbed_definition)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context '#region' do
|
19
|
+
should 'call the api' do
|
20
|
+
result = build(:result, region_id: 4)
|
21
|
+
stubbed_region = stub_request(:get, %r{regions/#{result.region_id}.json*}).to_return(body: json(:region))
|
22
|
+
|
23
|
+
result.region
|
24
|
+
|
25
|
+
assert_requested(stubbed_region)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context '#external_account' do
|
30
|
+
should 'call the api' do
|
31
|
+
result = build(:result, external_account_id: 4)
|
32
|
+
stubbed_external_account = stub_request(:get, %r{external_accounts/#{result.external_account_id}.json*}).to_return(body: json(:external_account))
|
33
|
+
|
34
|
+
result.external_account
|
35
|
+
|
36
|
+
assert_requested(stubbed_external_account)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context '#alerts' do
|
41
|
+
should 'call the api' do
|
42
|
+
result = build(:result)
|
43
|
+
stub_request(:get, %r{custom_signature_results/#{result.id}/alerts.json}).to_return(body: json_list(:result_alert, 2))
|
44
|
+
|
45
|
+
result.alerts
|
46
|
+
|
47
|
+
assert_requested(:get, %r{custom_signature_results/#{result.id}/alerts.json})
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'activate' do
|
52
|
+
should 'call the api' do
|
53
|
+
definition = build(:definition)
|
54
|
+
stubbed_defintion = stub_request(:patch, %r{custom_signature_definitions/#{definition.id}/activate.json}).to_return(body: json(:definition))
|
55
|
+
|
56
|
+
definition.activate
|
57
|
+
|
58
|
+
assert_requested stubbed_defintion
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'archive' do
|
63
|
+
should 'call the api' do
|
64
|
+
definition = build(:definition)
|
65
|
+
stubbed_defintion = stub_request(:patch, %r{custom_signature_definitions/#{definition.id}/archive.json}).to_return(body: json(:definition))
|
66
|
+
|
67
|
+
definition.archive
|
68
|
+
|
69
|
+
assert_requested stubbed_defintion
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context '#update' do
|
74
|
+
should 'raise ESP::NotImplementedError' do
|
75
|
+
assert_raises ESP::NotImplementedError do
|
76
|
+
ESP::CustomSignature::Result::Alert.new.update
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context '#destroy' do
|
82
|
+
should 'raise ESP::NotImplementedError' do
|
83
|
+
assert_raises ESP::NotImplementedError do
|
84
|
+
ESP::CustomSignature::Result::Alert.new.destroy
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -28,130 +28,15 @@ module ESP
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
context '
|
32
|
-
should 'call the api
|
33
|
-
custom_signature = build(:custom_signature,
|
34
|
-
stub_request(:
|
35
|
-
|
36
|
-
alerts = ESP::CustomSignature.run!(external_account_id: 3, regions: 'param2', language: custom_signature.language, signature: custom_signature.signature)
|
37
|
-
|
38
|
-
assert_requested(:post, %r{custom_signatures/run.json*}) do |req|
|
39
|
-
body = JSON.parse req.body
|
40
|
-
assert_equal false, body['data'].key?('id')
|
41
|
-
assert_equal ['param2'], body['data']['attributes']['regions']
|
42
|
-
assert_equal custom_signature.language, body['data']['attributes']['language']
|
43
|
-
assert_equal custom_signature.signature, body['data']['attributes']['signature']
|
44
|
-
end
|
45
|
-
assert_equal ESP::Alert, alerts.resource_class
|
46
|
-
end
|
47
|
-
|
48
|
-
should 'throw an error if an error is returned' do
|
49
|
-
custom_signature = build(:custom_signature, external_account_id: 3)
|
50
|
-
error = ActiveResource::BadRequest.new('')
|
51
|
-
error_response = json(:error)
|
52
|
-
response = mock(body: error_response, code: '400')
|
53
|
-
error.stubs(:response).returns(response)
|
54
|
-
ActiveResource::Connection.any_instance.expects(:post).raises(error)
|
55
|
-
stub_request(:post, %r{custom_signatures/run.json*}).to_return(body: json_list(:alert, 2))
|
56
|
-
|
57
|
-
error = assert_raises ActiveResource::ResourceInvalid do
|
58
|
-
ESP::CustomSignature.run!(external_account_id: 3, regions: 'param2', language: custom_signature.language, signature: custom_signature.signature)
|
59
|
-
end
|
60
|
-
assert_equal "Failed. Response code = 400. Response message = #{JSON.parse(error_response)['errors'].first['title']}.", error.message
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context '.run_sanity_test' do
|
65
|
-
should 'call the api and pass params' do
|
66
|
-
custom_signature = build(:custom_signature, external_account_id: 3)
|
67
|
-
stub_request(:post, %r{custom_signatures/run.json*}).to_return(body: json_list(:alert, 2))
|
68
|
-
|
69
|
-
alerts = ESP::CustomSignature.run(external_account_id: 3, regions: 'param2', language: custom_signature.language, signature: custom_signature.signature)
|
70
|
-
|
71
|
-
assert_requested(:post, %r{custom_signatures/run.json*}) do |req|
|
72
|
-
body = JSON.parse req.body
|
73
|
-
assert_equal false, body['data'].key?('id')
|
74
|
-
assert_equal ['param2'], body['data']['attributes']['regions']
|
75
|
-
assert_equal custom_signature.language, body['data']['attributes']['language']
|
76
|
-
assert_equal custom_signature.signature, body['data']['attributes']['signature']
|
77
|
-
end
|
78
|
-
assert_equal ESP::Alert, alerts.resource_class
|
79
|
-
end
|
80
|
-
|
81
|
-
should 'not throw an error if an error is returned' do
|
82
|
-
custom_signature = build(:custom_signature, external_account_id: 3)
|
83
|
-
error = ActiveResource::BadRequest.new('')
|
84
|
-
error_response = json(:error)
|
85
|
-
response = mock(body: error_response, code: '400')
|
86
|
-
error.stubs(:response).returns(response)
|
87
|
-
ActiveResource::Connection.any_instance.expects(:post).raises(error)
|
88
|
-
stub_request(:post, %r{custom_signatures/run.json*}).to_return(body: json_list(:alert, 2))
|
89
|
-
|
90
|
-
assert_nothing_raised do
|
91
|
-
result = ESP::CustomSignature.run(external_account_id: 3, regions: 'param2', language: custom_signature.language, signature: custom_signature.signature)
|
92
|
-
assert_equal JSON.parse(error_response)['errors'].first['title'], result.errors.full_messages.first
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context '#run!' do
|
98
|
-
should 'call the api and pass params' do
|
99
|
-
custom_signature = build(:custom_signature, external_account_id: 3)
|
100
|
-
stub_request(:post, %r{custom_signatures/#{custom_signature.id}/run.json*}).to_return(body: json_list(:alert, 2))
|
101
|
-
|
102
|
-
alerts = custom_signature.run!(regions: 'param2')
|
103
|
-
|
104
|
-
assert_requested(:post, %r{custom_signatures/#{custom_signature.id}/run.json*}) do |req|
|
105
|
-
body = JSON.parse req.body
|
106
|
-
assert_equal custom_signature.id, body['data']['id']
|
107
|
-
assert_equal ['param2'], body['data']['attributes']['regions']
|
108
|
-
end
|
109
|
-
assert_equal ESP::Alert, alerts.resource_class
|
110
|
-
end
|
111
|
-
|
112
|
-
should 'throw an error if an error is returned' do
|
113
|
-
custom_signature = build(:custom_signature, external_account_id: 3)
|
114
|
-
error = ActiveResource::BadRequest.new('')
|
115
|
-
error_response = json(:error)
|
116
|
-
response = mock(body: error_response, code: '400')
|
117
|
-
error.stubs(:response).returns(response)
|
118
|
-
ActiveResource::Connection.any_instance.expects(:post).raises(error)
|
119
|
-
stub_request(:post, %r{custom_signatures/#{custom_signature.id}/run.json*}).to_return(body: json_list(:alert, 2))
|
120
|
-
|
121
|
-
error = assert_raises ActiveResource::ResourceInvalid do
|
122
|
-
custom_signature.run!(regions: 'param2')
|
123
|
-
end
|
124
|
-
assert_equal "Failed. Response code = 400. Response message = #{JSON.parse(error_response)['errors'].first['title']}.", error.message
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
context '#run' do
|
129
|
-
should 'call the api and pass params' do
|
130
|
-
custom_signature = build(:custom_signature, external_account_id: 3)
|
131
|
-
stub_request(:post, %r{custom_signatures/#{custom_signature.id}/run.json*}).to_return(body: json_list(:alert, 2))
|
132
|
-
|
133
|
-
alerts = custom_signature.run(regions: 'param2')
|
134
|
-
|
135
|
-
assert_requested(:post, %r{custom_signatures/#{custom_signature.id}/run.json*}) do |req|
|
136
|
-
body = JSON.parse req.body
|
137
|
-
assert_equal custom_signature.id, body['data']['id']
|
138
|
-
assert_equal ['param2'], body['data']['attributes']['regions']
|
139
|
-
end
|
140
|
-
assert_equal ESP::Alert, alerts.resource_class
|
141
|
-
end
|
31
|
+
context '#definitions' do
|
32
|
+
should 'call the api' do
|
33
|
+
custom_signature = build(:custom_signature, team_id: 1)
|
34
|
+
stub_request(:get, /custom_signature_definitions.json*/).to_return(body: json_list(:definition, 2))
|
142
35
|
|
143
|
-
|
144
|
-
custom_signature = build(:custom_signature, external_account_id: 3)
|
145
|
-
error = ActiveResource::BadRequest.new('')
|
146
|
-
error_response = json(:error)
|
147
|
-
response = mock(body: error_response, code: '400')
|
148
|
-
error.stubs(:response).returns(response)
|
149
|
-
ActiveResource::Connection.any_instance.expects(:post).raises(error)
|
150
|
-
stub_request(:post, %r{custom_signatures/#{custom_signature.id}/run.json*}).to_return(body: json_list(:alert, 2))
|
36
|
+
custom_signature.definitions
|
151
37
|
|
152
|
-
|
153
|
-
custom_signature.
|
154
|
-
assert_equal JSON.parse(error_response)['errors'].first['title'], custom_signature.errors.full_messages.first
|
38
|
+
assert_requested(:get, /custom_signature_definitions.json*/) do |req|
|
39
|
+
assert_equal "filter[custom_signature_id_eq]=#{custom_signature.id}", URI.unescape(req.uri.query)
|
155
40
|
end
|
156
41
|
end
|
157
42
|
end
|
@@ -24,6 +24,14 @@ module ESP
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
context '.where' do
|
28
|
+
should 'not be implemented' do
|
29
|
+
assert_raises ESP::NotImplementedError do
|
30
|
+
ESP::Service.where(id_eq: 1)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
27
35
|
context '#create' do
|
28
36
|
should 'not be implemented' do
|
29
37
|
assert_raises ESP::NotImplementedError do
|
@@ -0,0 +1,30 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :definition, class: 'ESP::CustomSignature::Definition' do
|
3
|
+
skip_create
|
4
|
+
|
5
|
+
sequence(:id) { |n| n }
|
6
|
+
code 'abc'
|
7
|
+
created_at { Time.current }
|
8
|
+
language 'javascript'
|
9
|
+
status "active"
|
10
|
+
updated_at { Time.current }
|
11
|
+
|
12
|
+
relationships do
|
13
|
+
{ custom_signature: {
|
14
|
+
data: {
|
15
|
+
type: "custom_signatures",
|
16
|
+
id: "1"
|
17
|
+
},
|
18
|
+
links: {
|
19
|
+
related: "http://localhost:3000/api/v2/custom_signatures/1.json"
|
20
|
+
}
|
21
|
+
},
|
22
|
+
results: {
|
23
|
+
links: {
|
24
|
+
related: "http://localhost:3000/api/v2/custom_signature_results.json?filter%5Bdefinition_id_eq%5D=#{id}"
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :result_alert, class: 'ESP::CustomSignature::Result::Alert' do
|
3
|
+
skip_create
|
4
|
+
|
5
|
+
sequence(:id) { |n| n }
|
6
|
+
type "alerts"
|
7
|
+
created_at { Time.current }
|
8
|
+
status "fail"
|
9
|
+
resource "resource-3"
|
10
|
+
updated_at nil
|
11
|
+
started_at { Time.current }
|
12
|
+
ended_at nil
|
13
|
+
metadata { { abc: '123' } }
|
14
|
+
tags { [{ key: 'Name', value: 'i-abc123' }] }
|
15
|
+
relationships do
|
16
|
+
{
|
17
|
+
external_account: {
|
18
|
+
data: {
|
19
|
+
type: "external_accounts",
|
20
|
+
id: "1015"
|
21
|
+
},
|
22
|
+
links: {
|
23
|
+
related: "http://test.host/api/v2/external_accounts/1015.json"
|
24
|
+
}
|
25
|
+
},
|
26
|
+
region: {
|
27
|
+
data: {
|
28
|
+
type: "regions",
|
29
|
+
id: "1014"
|
30
|
+
}
|
31
|
+
},
|
32
|
+
custom_signature: {
|
33
|
+
data: nil
|
34
|
+
}
|
35
|
+
}
|
36
|
+
end
|
37
|
+
included do
|
38
|
+
[
|
39
|
+
{
|
40
|
+
id: "1015",
|
41
|
+
type: "external_accounts",
|
42
|
+
attributes: {
|
43
|
+
account: "5",
|
44
|
+
arn: "arn:aws:iam::5:role/test_sts_role",
|
45
|
+
created_at: "2015-09-11T21:12:15.183Z",
|
46
|
+
external_id: "test_sts_external_id_1",
|
47
|
+
name: nil,
|
48
|
+
updated_at: nil,
|
49
|
+
user_attribution_role: nil
|
50
|
+
},
|
51
|
+
relationships: {
|
52
|
+
organization: {
|
53
|
+
data: {
|
54
|
+
type: "organizations",
|
55
|
+
id: "5"
|
56
|
+
},
|
57
|
+
links: {
|
58
|
+
related: "http://test.host/api/v2/organizations/5.json"
|
59
|
+
}
|
60
|
+
},
|
61
|
+
sub_organization: {
|
62
|
+
data: {
|
63
|
+
type: "sub_organizations",
|
64
|
+
id: "5"
|
65
|
+
},
|
66
|
+
links: {
|
67
|
+
related: "http://test.host/api/v2/sub_organizations/5.json"
|
68
|
+
}
|
69
|
+
},
|
70
|
+
team: {
|
71
|
+
data: {
|
72
|
+
type: "teams",
|
73
|
+
id: "5"
|
74
|
+
},
|
75
|
+
links: {
|
76
|
+
related: "http://test.host/api/v2/teams/5.json"
|
77
|
+
}
|
78
|
+
},
|
79
|
+
user_attribution_role: {
|
80
|
+
data: nil
|
81
|
+
}
|
82
|
+
}
|
83
|
+
},
|
84
|
+
{
|
85
|
+
id: "1014",
|
86
|
+
type: "regions",
|
87
|
+
attributes: {
|
88
|
+
code: "us_east_test_3"
|
89
|
+
}
|
90
|
+
}
|
91
|
+
]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|