Skip to content

Commit 70f8996

Browse files
author
Daniel Mikusa
authored
Ensures compatibility with older and newer DataDog buildpacks. (#898)
Checks for the DataDog to be installed into either `$HOME/.datadog` (new) or `$HOME/datadog` (old) locations.
1 parent 5254a19 commit 70f8996

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

lib/java_buildpack/framework/datadog_javaagent.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,22 @@ class DatadogJavaagent < JavaBuildpack::Component::VersionedDependencyComponent
2727

2828
def initialize(context)
2929
super(context)
30-
@datadog_buildpack = File.exist? File.join(@droplet.root, '.datadog')
3130
@logger = JavaBuildpack::Logging::LoggerFactory.instance.get_logger DatadogJavaagent
3231
end
3332

3433
# (see JavaBuildpack::Component::BaseComponent#compile)
3534
def compile
36-
@logger.error 'Datadog Buildpack is required, but not found' unless @datadog_buildpack
35+
@logger.error 'Datadog Buildpack is required, but not found' unless datadog_buildpack?
3736

38-
return unless @datadog_buildpack
37+
return unless datadog_buildpack?
3938

4039
download_jar
4140
fix_class_count
4241
end
4342

4443
# (see JavaBuildpack::Component::BaseComponent#release)
4544
def release
46-
return unless @datadog_buildpack
45+
return unless datadog_buildpack?
4746

4847
java_opts = @droplet.java_opts
4948
java_opts.add_javaagent(@droplet.sandbox + jar_name)
@@ -67,6 +66,11 @@ def supports?
6766
(api_key_defined && !apm_disabled)
6867
end
6968

69+
# determins if the datadog buildpack is present
70+
def datadog_buildpack?
71+
File.exist?(File.join(@droplet.root, '.datadog')) || File.exist?(File.join(@droplet.root, 'datadog'))
72+
end
73+
7074
# fixes issue where some classes are not counted by adding shadow class files
7175
def fix_class_count
7276
cnt = classdata_count(@droplet.sandbox + jar_name)

spec/java_buildpack/framework/datadog_javaagent_spec.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,41 @@
100100
end
101101
end
102102

103+
context 'when datadog buildpack 4.22.0 (or older) is present' do
104+
before do
105+
FileUtils.mkdir_p File.join(context[:droplet].root, 'datadog')
106+
end
107+
108+
after do
109+
FileUtils.rmdir File.join(context[:droplet].root, 'datadog')
110+
end
111+
112+
it 'compile downloads datadog-javaagent JAR', cache_fixture: 'stub-datadog-javaagent.jar' do
113+
component.compile
114+
expect(sandbox + "datadog_javaagent-#{version}.jar").to exist
115+
end
116+
117+
it 'makes a jar with fake class files', cache_fixture: 'stub-datadog-javaagent.jar' do
118+
component.compile
119+
expect(sandbox + "datadog_javaagent-#{version}.jar").to exist
120+
expect(sandbox + 'datadog_fakeclasses.jar').to exist
121+
expect(sandbox + 'datadog_fakeclasses').not_to exist
122+
123+
cnt = `unzip -l #{sandbox}/datadog_fakeclasses.jar | grep '\\(\\.class\\)$' | wc -l`.to_i
124+
expect(cnt).to equal(34)
125+
end
126+
127+
it 'release updates JAVA_OPTS' do
128+
component.release
129+
130+
expect(java_opts).to include(
131+
"-javaagent:$PWD/.java-buildpack/datadog_javaagent/datadog_javaagent-#{version}.jar"
132+
)
133+
expect(java_opts).to include('-Ddd.service=\"test-application-name\"')
134+
expect(java_opts).to include('-Ddd.version=test-application-version')
135+
end
136+
end
137+
103138
context 'when datadog buildpack is not present' do
104139
it 'compile downloads datadog-javaagent JAR', cache_fixture: 'stub-datadog-javaagent.jar' do
105140
component.compile

0 commit comments

Comments
 (0)