Skip to content

Commit acd3feb

Browse files
authored
Merge pull request #3563 from DataDog/vpellan/sca-enablement
2 parents d673469 + af5570b commit acd3feb

File tree

6 files changed

+107
-12
lines changed

6 files changed

+107
-12
lines changed

.github/workflows/system-tests.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ on:
1111
env:
1212
REGISTRY: ghcr.io
1313
REPO: ghcr.io/datadog/dd-trace-rb
14+
ST_REF: main
15+
FORCE_TESTS:
1416

1517
jobs:
1618
build-harness:
@@ -31,6 +33,7 @@ jobs:
3133
uses: actions/checkout@v4
3234
with:
3335
repository: 'DataDog/system-tests'
36+
ref: ${{ env.ST_REF }}
3437
- name: Pull released image
3538
run: |
3639
if docker pull ${{ env.REPO }}/system-tests/${{ matrix.image.name }}:latest; then
@@ -100,6 +103,7 @@ jobs:
100103
uses: actions/checkout@v4
101104
with:
102105
repository: 'DataDog/system-tests'
106+
ref: ${{ env.ST_REF }}
103107
- name: Checkout ${{ matrix.library.repository }}
104108
uses: actions/checkout@v4
105109
with:
@@ -242,6 +246,7 @@ jobs:
242246
uses: actions/checkout@v4
243247
with:
244248
repository: 'DataDog/system-tests'
249+
ref: ${{ env.ST_REF }}
245250
- name: Pull runner image
246251
run: |
247252
docker pull ${{ env.REPO }}/system-tests/runner:gha${{ github.run_id }}-g${{ github.sha }}
@@ -262,7 +267,8 @@ jobs:
262267
run: |
263268
docker image list
264269
- name: Run scenario
265-
run: ./run.sh ++docker ${{ matrix.scenario }}
270+
run: |
271+
./run.sh ++docker ${{ matrix.scenario }} ${{ env.FORCE_TESTS }}
266272
env:
267273
DD_API_KEY: ${{ secrets.DD_APPSEC_SYSTEM_TESTS_API_KEY }}
268274
- name: Archive logs
@@ -304,6 +310,7 @@ jobs:
304310
uses: actions/checkout@v4
305311
with:
306312
repository: 'DataDog/system-tests'
313+
ref: ${{ env.ST_REF }}
307314
- name: Retrieve logs
308315
uses: actions/download-artifact@v4
309316
with:

lib/datadog/appsec/configuration/settings.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,11 @@ def self.add_settings!(base)
192192
end
193193
end
194194
end
195+
196+
option :sca_enabled do |o|
197+
o.type :bool, nilable: true
198+
o.env 'DD_APPSEC_SCA_ENABLED'
199+
end
195200
end
196201
end
197202
end

lib/datadog/appsec/contrib/rack/request_middleware.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ module Datadog
1515
module AppSec
1616
module Contrib
1717
module Rack
18-
# Create an array of lowercased headers
1918
WAF_VENDOR_HEADERS_TAGS = %w[
2019
X-Amzn-Trace-Id
2120
Cloudfront-Viewer-Ja3-Fingerprint

lib/datadog/core/telemetry/event.rb

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,10 @@ def configuration
113113
conf_value('tracing.opentelemetry.enabled', !defined?(Datadog::OpenTelemetry::LOADED).nil?),
114114
)
115115
list << conf_value('logger.instance', config.logger.instance.class.to_s) if config.logger.instance
116-
list << conf_value('appsec.enabled', config.dig('appsec', 'enabled')) if config.respond_to?('appsec')
116+
if config.respond_to?('appsec')
117+
list << conf_value('appsec.enabled', config.dig('appsec', 'enabled'))
118+
list << conf_value('appsec.sca_enabled', config.dig('appsec', 'sca_enabled'))
119+
end
117120
list << conf_value('ci.enabled', config.dig('ci', 'enabled')) if config.respond_to?('ci')
118121

119122
list.reject! { |entry| entry[:value].nil? }
@@ -242,15 +245,30 @@ def initialize(changes, origin)
242245
end
243246

244247
def payload(seq_id)
245-
{
246-
configuration: @changes.map do |name, value|
247-
{
248-
name: name,
249-
value: value,
250-
origin: @origin,
251-
}
252-
end
253-
}
248+
{ configuration: configuration(seq_id) }
249+
end
250+
251+
def configuration(seq_id)
252+
config = Datadog.configuration
253+
254+
res = @changes.map do |name, value|
255+
{
256+
name: name,
257+
value: value,
258+
origin: @origin,
259+
}
260+
end
261+
262+
unless config.dig('appsec', 'sca_enabled').nil?
263+
res << {
264+
name: 'appsec.sca_enabled',
265+
value: config.appsec.sca_enabled,
266+
origin: 'code',
267+
seq_id: seq_id,
268+
}
269+
end
270+
271+
res
254272
end
255273
end
256274

spec/datadog/appsec/configuration/settings_spec.rb

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,5 +711,51 @@ def patcher
711711
end
712712
end
713713
end
714+
715+
describe 'sca' do
716+
describe '#enabled' do
717+
subject(:sca_enabled) { settings.appsec.sca_enabled }
718+
719+
context 'when DD_APPSEC_SCA_ENABLED' do
720+
around do |example|
721+
ClimateControl.modify('DD_APPSEC_SCA_ENABLED' => sca_enabled_value) do
722+
example.run
723+
end
724+
end
725+
726+
context 'is not defined' do
727+
let(:sca_enabled_value) { nil }
728+
729+
it { is_expected.to eq nil }
730+
end
731+
732+
context 'is defined as true' do
733+
let(:sca_enabled_value) { 'true' }
734+
735+
it { is_expected.to eq true }
736+
end
737+
738+
context 'is defined as false' do
739+
let(:sca_enabled_value) { 'false' }
740+
741+
it { is_expected.to eq false }
742+
end
743+
end
744+
end
745+
746+
describe '#enabled=' do
747+
subject(:set_sca_enabled) { settings.appsec.sca_enabled = sca_enabled }
748+
749+
[true, false, nil].each do |value|
750+
context "when given #{value}" do
751+
let(:sca_enabled) { value }
752+
753+
before { set_sca_enabled }
754+
755+
it { expect(settings.appsec.sca_enabled).to eq(value) }
756+
end
757+
end
758+
end
759+
end
714760
end
715761
end

spec/datadog/core/telemetry/event_spec.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
c.telemetry.install_id = 'id'
2525
c.telemetry.install_type = 'type'
2626
c.telemetry.install_time = 'time'
27+
c.appsec.sca_enabled = false
2728
end
2829
end
2930

@@ -69,6 +70,7 @@ def contain_configuration(*array)
6970
['tracing.opentelemetry.enabled', false],
7071
['logger.instance', 'MyLogger'],
7172
['appsec.enabled', false],
73+
['appsec.sca_enabled', false]
7274
),
7375
install_signature: { install_id: 'id', install_time: 'time', install_type: 'type' },
7476
)
@@ -170,6 +172,24 @@ def contain_configuration(*array)
170172
}]
171173
)
172174
end
175+
176+
context 'with env_var state configuration' do
177+
before do
178+
Datadog.configure do |c|
179+
c.appsec.sca_enabled = false
180+
end
181+
end
182+
183+
it 'includes sca enablement configuration' do
184+
is_expected.to eq(
185+
configuration:
186+
[
187+
{ name: name, value: value, origin: origin },
188+
{ name: 'appsec.sca_enabled', value: false, origin: 'code', seq_id: id }
189+
]
190+
)
191+
end
192+
end
173193
end
174194

175195
context 'AppHeartbeat' do

0 commit comments

Comments
 (0)