@@ -5,95 +5,151 @@ require('../../setup/tap')
55describe ( 'docker' , ( ) => {
66 let docker
77 let fs
8+ let carrier
9+ let externalEnv
810
911 beforeEach ( ( ) => {
1012 fs = {
11- readFileSync : sinon . stub ( )
13+ readFileSync : sinon . stub ( ) ,
14+ statSync : sinon . stub ( )
1215 }
16+ carrier = { }
17+ externalEnv = process . env . DD_EXTERNAL_ENV
1318 } )
1419
15- it ( 'should return an empty ID when the cgroup cannot be read' , ( ) => {
20+ afterEach ( ( ) => {
21+ process . env . DD_EXTERNAL_ENV = externalEnv
22+ } )
23+
24+ it ( 'should not inject IDs when the cgroup cannot be read' , ( ) => {
1625 docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
26+ docker . inject ( carrier )
1727
18- expect ( docker . id ( ) ) . to . be . undefined
28+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . be . undefined
29+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . be . undefined
1930 } )
2031
2132 it ( 'should support IDs with long format' , ( ) => {
33+ const id = '34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376'
2234 const cgroup = [
23- ' 1:name=systemd:/docker/34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376'
35+ ` 1:name=systemd:/docker/${ id } `
2436 ] . join ( '\n' )
2537
2638 fs . readFileSync . withArgs ( '/proc/self/cgroup' ) . returns ( Buffer . from ( cgroup ) )
2739 docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
40+ docker . inject ( carrier )
2841
29- expect ( docker . id ( ) ) . to . equal ( '34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376' )
42+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . equal ( id )
43+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . equal ( `ci-${ id } ` )
3044 } )
3145
3246 it ( 'should support IDs with UUID format' , ( ) => {
47+ const id = '34dc0b5e-626f-2c5c-4c51-70e34b10e765'
3348 const cgroup = [
34- ' 1:name=systemd:/uuid/34dc0b5e-626f-2c5c-4c51-70e34b10e765'
49+ ` 1:name=systemd:/uuid/${ id } `
3550 ] . join ( '\n' )
3651
3752 fs . readFileSync . withArgs ( '/proc/self/cgroup' ) . returns ( Buffer . from ( cgroup ) )
3853 docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
54+ docker . inject ( carrier )
3955
40- expect ( docker . id ( ) ) . to . equal ( '34dc0b5e-626f-2c5c-4c51-70e34b10e765' )
56+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . equal ( id )
57+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . equal ( `ci-${ id } ` )
4158 } )
4259
4360 it ( 'should support IDs with ECS task format' , ( ) => {
61+ const id = '34dc0b5e626f2c5c4c5170e34b10e765-1234567890'
4462 const cgroup = [
45- ' 1:name=systemd:/ecs/34dc0b5e626f2c5c4c5170e34b10e765-1234567890'
63+ ` 1:name=systemd:/ecs/${ id } `
4664 ] . join ( '\n' )
4765
4866 fs . readFileSync . withArgs ( '/proc/self/cgroup' ) . returns ( Buffer . from ( cgroup ) )
4967 docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
68+ docker . inject ( carrier )
5069
51- expect ( docker . id ( ) ) . to . equal ( '34dc0b5e626f2c5c4c5170e34b10e765-1234567890' )
70+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . equal ( id )
71+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . equal ( `ci-${ id } ` )
5272 } )
5373
5474 it ( 'should support IDs with Kubernetes format' , ( ) => {
75+ const id = '7b8952daecf4c0e44bbcefe1b5c5ebc7b4839d4eefeccefe694709d3809b6199'
5576 const cgroup = [
56- ' 1:name=systemd:/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod2d3da189_6407_48e3_9ab6_78188d75e609.slice/docker-7b8952daecf4c0e44bbcefe1b5c5ebc7b4839d4eefeccefe694709d3809b6199 .scope' // eslint-disable-line @stylistic/js/max-len
77+ ` 1:name=systemd:/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod2d3da189_6407_48e3_9ab6_78188d75e609.slice/docker-${ id } .scope` // eslint-disable-line @stylistic/js/max-len
5778 ] . join ( '\n' )
5879
5980 fs . readFileSync . withArgs ( '/proc/self/cgroup' ) . returns ( Buffer . from ( cgroup ) )
6081 docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
82+ docker . inject ( carrier )
6183
62- expect ( docker . id ( ) ) . to . equal ( '7b8952daecf4c0e44bbcefe1b5c5ebc7b4839d4eefeccefe694709d3809b6199' )
84+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . equal ( id )
85+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . equal ( `ci-${ id } ` )
6386 } )
6487
6588 it ( 'should support finding IDs on any line of the cgroup' , ( ) => {
89+ const id = '34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376'
6690 const cgroup = [
6791 '1:name=systemd:/nope' ,
68- ' 2:pids:/docker/34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376' ,
92+ ` 2:pids:/docker/${ id } ` ,
6993 '3:cpu:/invalid'
7094 ] . join ( '\n' )
7195
7296 fs . readFileSync . withArgs ( '/proc/self/cgroup' ) . returns ( Buffer . from ( cgroup ) )
7397 docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
98+ docker . inject ( carrier )
7499
75- expect ( docker . id ( ) ) . to . equal ( '34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376' )
100+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . equal ( id )
101+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . equal ( `ci-${ id } ` )
76102 } )
77103
78104 it ( 'should support Control Group v2' , ( ) => {
105+ const id = '34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376'
79106 const cgroup = [
80- ' 0::/docker/34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376'
107+ ` 0::/docker/${ id } `
81108 ] . join ( '\n' )
82109
83110 fs . readFileSync . withArgs ( '/proc/self/cgroup' ) . returns ( Buffer . from ( cgroup ) )
84111 docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
112+ docker . inject ( carrier )
85113
86- expect ( docker . id ( ) ) . to . equal ( '34dc0b5e626f2c5c4c5170e34b10e7654ce36f0fcd532739f4445baabea03376' )
114+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . equal ( id )
115+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . equal ( `ci-${ id } ` )
87116 } )
88117
89118 it ( 'should support Cloud Foundry' , ( ) => {
119+ const id = '6f265890-5165-7fab-6b52-18d1'
90120 const cgroup = [
91- ' 1:name=systemd:/system.slice/garden.service/garden/6f265890-5165-7fab-6b52-18d1'
121+ ` 1:name=systemd:/system.slice/garden.service/garden/${ id } `
92122 ] . join ( '\n' )
93123
94124 fs . readFileSync . withArgs ( '/proc/self/cgroup' ) . returns ( Buffer . from ( cgroup ) )
95125 docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
126+ docker . inject ( carrier )
127+
128+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . equal ( id )
129+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . equal ( `ci-${ id } ` )
130+ } )
131+
132+ it ( 'should support inode when the ID is not available' , ( ) => {
133+ const ino = 1234
134+ const cgroup = [
135+ '1:name=systemd:/system.slice/garden.service/garden/'
136+ ] . join ( '\n' )
137+
138+ fs . readFileSync . withArgs ( '/proc/self/cgroup' ) . returns ( Buffer . from ( cgroup ) )
139+ fs . statSync . withArgs ( '/sys/fs/cgroup/system.slice/garden.service/garden' ) . returns ( { ino } )
140+ docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
141+ docker . inject ( carrier )
142+
143+ expect ( carrier [ 'Datadog-Container-Id' ] ) . to . be . undefined
144+ expect ( carrier [ 'Datadog-Entity-ID' ] ) . to . equal ( `in-${ ino } ` )
145+ } )
146+
147+ it ( 'should support external env' , ( ) => {
148+ process . env . DD_EXTERNAL_ENV = 'test'
149+
150+ docker = proxyquire ( '../src/exporters/common/docker' , { fs } )
151+ docker . inject ( carrier )
96152
97- expect ( docker . id ( ) ) . to . equal ( '6f265890-5165-7fab-6b52-18d1 ' )
153+ expect ( carrier [ 'Datadog-External-Env' ] ) . to . equal ( 'test ' )
98154 } )
99155} )
0 commit comments