diff --git a/dd-java-agent/instrumentation/jdbc/src/test/groovy/SQLCommenterTest.groovy b/dd-java-agent/instrumentation/jdbc/src/test/groovy/SQLCommenterTest.groovy deleted file mode 100644 index eb250f761f2..00000000000 --- a/dd-java-agent/instrumentation/jdbc/src/test/groovy/SQLCommenterTest.groovy +++ /dev/null @@ -1,175 +0,0 @@ -import datadog.trace.agent.test.InstrumentationSpecification -import datadog.trace.api.BaseHash -import datadog.trace.api.Config -import datadog.trace.api.ProcessTags -import datadog.trace.bootstrap.instrumentation.api.AgentSpan -import datadog.trace.bootstrap.instrumentation.api.AgentTracer -import datadog.trace.bootstrap.instrumentation.api.Tags -import datadog.trace.bootstrap.instrumentation.dbm.SharedDBCommenter -import datadog.trace.instrumentation.jdbc.SQLCommenter - -import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace - -class SQLCommenterTest extends InstrumentationSpecification { - - def "test find first word"() { - setup: - - when: - String word = SQLCommenter.getFirstWord(sql) - - then: - word == firstWord - - where: - sql | firstWord - "SELECT *" | "SELECT" - " { " | "{" - "{" | "{" - "{call" | "{call" - "{ call" | "{" - "CALL ( ? )" | "CALL" - "" | "" - " " | "" - } - - def "test encode Sql Comment"() { - setup: - injectSysConfig("dd.service", ddService) - injectSysConfig("dd.env", ddEnv) - injectSysConfig("dd.version", ddVersion) - SharedDBCommenter.resetStaticPrefixForTesting() - - when: - String sqlWithComment = SQLCommenter.inject(query, dbService, dbType, host, dbName, traceParent, append) - - then: - sqlWithComment == expected - - where: - query | ddService | ddEnv | dbService | dbType | host | dbName | ddVersion | append | traceParent | expected - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo;" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" - "SELECT * FROM foo; \t\n\r" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" - "SELECT * FROM foo; SELECT * FROM bar" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo; SELECT * FROM bar /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo; SELECT * FROM bar; " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo; SELECT * FROM bar /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "{call dogshelterProc(?, ?)}" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "{call dogshelterProc(?, ?)} /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "{call dogshelterProc(?, ?)}" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "{call dogshelterProc(?, ?)} /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "{call dogshelterProc(?, ?)}" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "{call dogshelterProc(?, ?)}" - "CALL dogshelterProc(?, ?)" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "CALL dogshelterProc(?, ?)" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "" | "Test" | "" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*dde='Test',ddpv='TestVersion',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "" | "" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "" | "Test" | "" | "" | "h" | "n" | "" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*dde='Test',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "" | "" | "" | "" | "h" | "n" | "" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "" | "" | "" | "" | "" | "" | "" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "SELECT * from FOO -- test query /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" - "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "SELECT /* customer-comment */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" - "SELECT * FROM DUAL" | "SqlCommenter" | "Test" | "my-service" | "oracle" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM DUAL /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" - "SELECT * FROM sys.tables" | "SqlCommenter" | "Test" | "my-service" | "sqlserver"| "h" | "n" | "TestVersion" | true | null | "SELECT * FROM sys.tables /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" - "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT /* customer-comment */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" - "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * from FOO -- test query /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" - "" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "" - " " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | " /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" - "" | "SqlCommenter" | "Test" | "postgres" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "" - " " | "SqlCommenter" | "Test" | "postgres" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | " /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='postgres',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" - "SELECT * FROM foo /*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" - "SELECT * FROM foo /*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" - "SELECT * FROM foo /*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" - "SELECT * FROM foo /*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" - "SELECT * FROM foo /*ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddps='SqlCommenter',ddpv='TestVersion'*/" - "SELECT * FROM foo /*ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddpv='TestVersion'*/" - "/*ddjk its a customer */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*ddjk its a customer */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" - "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" - "/*customer-comment*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*customer-comment*/ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" - "/*traceparent" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*traceparent /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * FROM foo" | "" | "Test" | "" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*dde='Test',ddpv='TestVersion',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * FROM foo" | "" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * FROM foo" | "" | "Test" | "" | "" | "h" | "n" | "" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*dde='Test',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * FROM foo" | "" | "" | "" | "" | "" | "" | "" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * from FOO -- test query" - "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT /* customer-comment */ * FROM foo" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT * FROM foo" - "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT /* customer-comment */ * FROM foo" - "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT * from FOO -- test query" - "" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "" - " " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ " - "/*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" - "/*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" - "/*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" - "/*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" - "/*ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" - "/*ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddpv='TestVersion'*/ SELECT * FROM foo" - "/*ddjk its a customer */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*ddjk its a customer */ SELECT * FROM foo" - "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * FROM foo" - "/*customer-comment*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*customer-comment*/ SELECT * FROM foo" - "/*traceparent" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*traceparent" - "SELECT /*+ SeqScan(foo) */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT /*+ SeqScan(foo) */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/" - "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/" - "CALL dogshelterProc(?, ?) /*ddps=''*/" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps=''*/" - "CALL dogshelterProc(?, ?) /*ddps=''*/" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps=''*/" - } - - def "inject base hash"() { - setup: - injectSysConfig("dd.service", srv) - injectSysConfig("dd.env", "") - injectSysConfig("dbm.inject.sql.basehash", Boolean.toString(injectHash)) - injectSysConfig("dd.experimental.propagate.process.tags.enabled", Boolean.toString(processTagsEnabled)) - ProcessTags.reset() - BaseHash.updateBaseHash(baseHash) - SharedDBCommenter.resetStaticPrefixForTesting() - - expect: - Config.get().isExperimentalPropagateProcessTagsEnabled() == processTagsEnabled - and: - SQLCommenter.inject(query, "", "", "", "", "", false) == result - - where: - query | injectHash | baseHash | processTagsEnabled | srv | result - "SELECT *" | true | 234563 | false | "" | "SELECT *" - "SELECT *" | true | 234563 | true | "" | "/*ddsh='234563'*/ SELECT *" - "SELECT *" | true | 345342 | false | "" | "SELECT *" - "SELECT *" | true | 345342 | true | "" | "/*ddsh='345342'*/ SELECT *" - "SELECT *" | true | 234563 | false | "srv" | "/*ddps='srv'*/ SELECT *" - "SELECT *" | true | 234563 | true | "srv" | "/*ddps='srv',ddsh='234563'*/ SELECT *" - "SELECT *" | true | 345342 | false | "srv" | "/*ddps='srv'*/ SELECT *" - "SELECT *" | true | 345342 | true | "srv" | "/*ddps='srv',ddsh='345342'*/ SELECT *" - "SELECT *" | false | 234563 | true | "" | "SELECT *" - "SELECT *" | false | 234563 | true | "srv" | "/*ddps='srv'*/ SELECT *" - "SELECT *" | false | 345342 | true | "srv" | "/*ddps='srv'*/ SELECT *" - "/*ddsh='-3750763034362895579'*/ SELECT *" | true | 234563 | true | "" | "/*ddsh='-3750763034362895579'*/ SELECT *" - } - - def "test encode Sql Comment with peer service"() { - setup: - injectSysConfig("dd.service", "SqlCommenter") - injectSysConfig("dd.env", "Test") - injectSysConfig("dd.version", "TestVersion") - SharedDBCommenter.resetStaticPrefixForTesting() - - when: - String sqlWithComment = runUnderTrace("testTrace") { - AgentSpan currSpan = AgentTracer.activeSpan() - currSpan.setTag(Tags.PEER_SERVICE, peerService) - return SQLCommenter.inject("SELECT * FROM foo", "my-service", dbType, "h", "n", "00-00000000000000007fffffffffffffff-000000024cb016ea-00", true) - } - - then: - sqlWithComment == expected - - where: - dbType | peerService | expected - "mysql" | null | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "postgres" | "" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "postgres" | "testPeer" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',ddprs='testPeer',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - } -} diff --git a/dd-java-agent/instrumentation/jdbc/src/test/java/datadog/trace/instrumentation/jdbc/SQLCommenterTest.java b/dd-java-agent/instrumentation/jdbc/src/test/java/datadog/trace/instrumentation/jdbc/SQLCommenterTest.java new file mode 100644 index 00000000000..5383bf03921 --- /dev/null +++ b/dd-java-agent/instrumentation/jdbc/src/test/java/datadog/trace/instrumentation/jdbc/SQLCommenterTest.java @@ -0,0 +1,1136 @@ +package datadog.trace.instrumentation.jdbc; + +import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace; +import static datadog.trace.junit.utils.config.WithConfigExtension.injectSysConfig; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.params.provider.Arguments.arguments; + +import datadog.trace.agent.test.AbstractInstrumentationTest; +import datadog.trace.api.BaseHash; +import datadog.trace.api.Config; +import datadog.trace.api.ProcessTags; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.Tags; +import datadog.trace.bootstrap.instrumentation.dbm.SharedDBCommenter; +import java.util.stream.Stream; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class SQLCommenterTest extends AbstractInstrumentationTest { + + private static final String TRACE_PARENT = + "00-00000000000000007fffffffffffffff-000000024cb016ea-00"; + private static final String TRACE_PARENT_SAMPLED = + "00-00000000000000007fffffffffffffff-000000024cb016ea-01"; + + @ParameterizedTest(name = "{0}") + @MethodSource("testFindFirstWordArguments") + void testFindFirstWord(String scenario, String sql, String firstWord) { + // when + String word = SQLCommenter.getFirstWord(sql); + + // then + assertEquals(firstWord, word); + } + + static Stream testFindFirstWordArguments() { + return Stream.of( + arguments("SELECT *", "SELECT *", "SELECT"), + arguments("leading spaces brace", " { ", "{"), + arguments("brace", "{", "{"), + arguments("brace call", "{call", "{call"), + arguments("brace space call", "{ call", "{"), + arguments("CALL with args", "CALL ( ? )", "CALL"), + arguments("empty", "", ""), + arguments("blank", " ", "")); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("testEncodeSqlCommentArguments") + void testEncodeSqlComment( + String scenario, + String query, + String ddService, + String ddEnv, + String dbService, + String dbType, + String host, + String dbName, + String ddVersion, + boolean append, + String traceParent, + String expected) { + // setup + injectSysConfig("service", ddService); + injectSysConfig("env", ddEnv); + injectSysConfig("version", ddVersion); + SharedDBCommenter.resetStaticPrefixForTesting(); + + // when + String sqlWithComment = + SQLCommenter.inject(query, dbService, dbType, host, dbName, traceParent, append); + + // then + assertEquals(expected, sqlWithComment); + } + + static Stream testEncodeSqlCommentArguments() { + return Stream.of( + arguments( + "append mysql simple", + "SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append mysql trailing semicolon", + "SELECT * FROM foo;", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;"), + arguments( + "append mysql trailing semicolon and whitespace", + "SELECT * FROM foo; \t\n\r", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;"), + arguments( + "append mysql two statements", + "SELECT * FROM foo; SELECT * FROM bar", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo; SELECT * FROM bar /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append mysql two statements trailing semicolon", + "SELECT * FROM foo; SELECT * FROM bar; ", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo; SELECT * FROM bar /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;"), + arguments( + "append postgres simple", + "SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append mysql stored proc braces", + "{call dogshelterProc(?, ?)}", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "{call dogshelterProc(?, ?)} /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "prepend mysql stored proc braces", + "{call dogshelterProc(?, ?)}", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "{call dogshelterProc(?, ?)} /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append postgres stored proc braces unchanged", + "{call dogshelterProc(?, ?)}", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "{call dogshelterProc(?, ?)}"), + arguments( + "prepend postgres CALL proc", + "CALL dogshelterProc(?, ?)", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "CALL dogshelterProc(?, ?) /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "prepend mysql CALL proc", + "CALL dogshelterProc(?, ?)", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "CALL dogshelterProc(?, ?) /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append empty service drops ddps and dddbs", + "SELECT * FROM foo", + "", + "Test", + "", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo /*dde='Test',ddpv='TestVersion',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append empty service keeps dddbs", + "SELECT * FROM foo", + "", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo /*dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append empty host and dbName drops ddh and dddb", + "SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "", + "", + "TestVersion", + true, + TRACE_PARENT, + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append only env host dbName", + "SELECT * FROM foo", + "", + "Test", + "", + "", + "h", + "n", + "", + true, + TRACE_PARENT, + "SELECT * FROM foo /*dde='Test',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append only host dbName", + "SELECT * FROM foo", + "", + "", + "", + "", + "h", + "n", + "", + true, + TRACE_PARENT, + "SELECT * FROM foo /*ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append only traceparent", + "SELECT * FROM foo", + "", + "", + "", + "", + "", + "", + "", + true, + TRACE_PARENT, + "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append with line comment sampled", + "SELECT * from FOO -- test query", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT_SAMPLED, + "SELECT * from FOO -- test query /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/"), + arguments( + "append with inline customer comment sampled", + "SELECT /* customer-comment */ * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT_SAMPLED, + "SELECT /* customer-comment */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/"), + arguments( + "append null traceparent omits traceparent", + "SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/"), + arguments( + "append oracle null traceparent", + "SELECT * FROM DUAL", + "SqlCommenter", + "Test", + "my-service", + "oracle", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM DUAL /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/"), + arguments( + "append sqlserver null traceparent", + "SELECT * FROM sys.tables", + "SqlCommenter", + "Test", + "my-service", + "sqlserver", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM sys.tables /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/"), + arguments( + "append inline customer comment null traceparent", + "SELECT /* customer-comment */ * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT /* customer-comment */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/"), + arguments( + "append line comment null traceparent", + "SELECT * from FOO -- test query", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * from FOO -- test query /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/"), + arguments( + "append empty query stays empty", + "", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + ""), + arguments( + "append blank query sampled", + " ", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT_SAMPLED, + " /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/"), + arguments( + "append empty query dbService postgres", + "", + "SqlCommenter", + "Test", + "postgres", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + ""), + arguments( + "append blank query dbService postgres sampled", + " ", + "SqlCommenter", + "Test", + "postgres", + "mysql", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT_SAMPLED, + " /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='postgres',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/"), + arguments( + "append idempotent full existing comment", + "SELECT * FROM foo /*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM foo /*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/"), + arguments( + "append idempotent existing comment no dddbs", + "SELECT * FROM foo /*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM foo /*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/"), + arguments( + "append idempotent existing comment no ddh", + "SELECT * FROM foo /*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM foo /*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/"), + arguments( + "append idempotent existing comment no dddb", + "SELECT * FROM foo /*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM foo /*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/"), + arguments( + "append idempotent existing comment no dde", + "SELECT * FROM foo /*ddps='SqlCommenter',ddpv='TestVersion'*/", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM foo /*ddps='SqlCommenter',ddpv='TestVersion'*/"), + arguments( + "append idempotent existing comment only ddpv", + "SELECT * FROM foo /*ddpv='TestVersion'*/", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM foo /*ddpv='TestVersion'*/"), + arguments( + "append leading customer comment null traceparent", + "/*ddjk its a customer */ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "/*ddjk its a customer */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/"), + arguments( + "append existing traceparent comment unchanged", + "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/"), + arguments( + "append leading customer block comment", + "/*customer-comment*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "/*customer-comment*/ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/"), + arguments( + "append unterminated traceparent comment", + "/*traceparent", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + true, + null, + "/*traceparent /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/"), + arguments( + "prepend mysql simple", + "SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo"), + arguments( + "prepend empty service drops ddps and dddbs", + "SELECT * FROM foo", + "", + "Test", + "", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "/*dde='Test',ddpv='TestVersion',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo"), + arguments( + "prepend empty service keeps dddbs", + "SELECT * FROM foo", + "", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "/*dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo"), + arguments( + "prepend only env host dbName", + "SELECT * FROM foo", + "", + "Test", + "", + "", + "h", + "n", + "", + false, + TRACE_PARENT, + "/*dde='Test',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo"), + arguments( + "prepend only traceparent", + "SELECT * FROM foo", + "", + "", + "", + "", + "", + "", + "", + false, + TRACE_PARENT, + "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo"), + arguments( + "prepend line comment sampled", + "SELECT * from FOO -- test query", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT_SAMPLED, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * from FOO -- test query"), + arguments( + "prepend inline customer comment sampled", + "SELECT /* customer-comment */ * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT_SAMPLED, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT /* customer-comment */ * FROM foo"), + arguments( + "prepend mysql null traceparent", + "SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT * FROM foo"), + arguments( + "prepend inline customer comment null traceparent", + "SELECT /* customer-comment */ * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT /* customer-comment */ * FROM foo"), + arguments( + "prepend line comment null traceparent", + "SELECT * from FOO -- test query", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT * from FOO -- test query"), + arguments( + "prepend empty query stays empty", + "", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + ""), + arguments( + "prepend blank query sampled", + " ", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT_SAMPLED, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ "), + arguments( + "prepend idempotent full existing comment", + "/*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo"), + arguments( + "prepend idempotent existing comment no dddbs", + "/*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo"), + arguments( + "prepend idempotent existing comment no ddh", + "/*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo"), + arguments( + "prepend idempotent existing comment no dddb", + "/*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo"), + arguments( + "prepend idempotent existing comment no dde", + "/*ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo"), + arguments( + "prepend idempotent existing comment only ddpv", + "/*ddpv='TestVersion'*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddpv='TestVersion'*/ SELECT * FROM foo"), + arguments( + "prepend leading customer comment null traceparent", + "/*ddjk its a customer */ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*ddjk its a customer */ SELECT * FROM foo"), + arguments( + "prepend existing traceparent comment unchanged", + "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * FROM foo"), + arguments( + "prepend leading customer block comment", + "/*customer-comment*/ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*customer-comment*/ SELECT * FROM foo"), + arguments( + "prepend unterminated traceparent comment", + "/*traceparent", + "SqlCommenter", + "Test", + "my-service", + "mysql", + "h", + "n", + "TestVersion", + false, + null, + "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*traceparent"), + arguments( + "append postgres optimizer hint inline", + "SELECT /*+ SeqScan(foo) */ * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "SELECT /*+ SeqScan(foo) */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "append postgres optimizer hint leading", + "/*+ SeqScan(foo) */ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "postgres optimizer hint leading -- re-injecting already-commented SQL is a no-op", + "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "prepend postgres optimizer hint leading", + "/*+ SeqScan(foo) */ SELECT * FROM foo", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "prepend postgres optimizer hint with empty ddps unchanged", + "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/"), + arguments( + "append postgres optimizer hint with empty ddps unchanged", + "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/"), + arguments( + "prepend postgres CALL proc with empty ddps unchanged", + "CALL dogshelterProc(?, ?) /*ddps=''*/", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + false, + TRACE_PARENT, + "CALL dogshelterProc(?, ?) /*ddps=''*/"), + arguments( + "append postgres CALL proc with empty ddps unchanged", + "CALL dogshelterProc(?, ?) /*ddps=''*/", + "SqlCommenter", + "Test", + "my-service", + "postgres", + "h", + "n", + "TestVersion", + true, + TRACE_PARENT, + "CALL dogshelterProc(?, ?) /*ddps=''*/")); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("injectBaseHashArguments") + void injectBaseHash( + String scenario, + String query, + boolean injectHash, + long baseHash, + boolean processTagsEnabled, + String srv, + String result) { + // setup + injectSysConfig("service", srv); + injectSysConfig("env", ""); + injectSysConfig("dbm.inject.sql.basehash", Boolean.toString(injectHash)); + injectSysConfig( + "experimental.propagate.process.tags.enabled", Boolean.toString(processTagsEnabled)); + ProcessTags.reset(Config.get()); + BaseHash.updateBaseHash(baseHash); + SharedDBCommenter.resetStaticPrefixForTesting(); + + // expect + assertEquals(processTagsEnabled, Config.get().isExperimentalPropagateProcessTagsEnabled()); + // and + assertEquals(result, SQLCommenter.inject(query, "", "", "", "", "", false)); + } + + static Stream injectBaseHashArguments() { + return Stream.of( + arguments( + "hash on, no process tags, no service", + "SELECT *", + true, + 234563L, + false, + "", + "SELECT *"), + arguments( + "hash on, process tags, no service", + "SELECT *", + true, + 234563L, + true, + "", + "/*ddsh='234563'*/ SELECT *"), + arguments( + "hash on alt base, no process tags, no service", + "SELECT *", + true, + 345342L, + false, + "", + "SELECT *"), + arguments( + "hash on alt base, process tags, no service", + "SELECT *", + true, + 345342L, + true, + "", + "/*ddsh='345342'*/ SELECT *"), + arguments( + "hash on, no process tags, with service", + "SELECT *", + true, + 234563L, + false, + "srv", + "/*ddps='srv'*/ SELECT *"), + arguments( + "hash on, process tags, with service", + "SELECT *", + true, + 234563L, + true, + "srv", + "/*ddps='srv',ddsh='234563'*/ SELECT *"), + arguments( + "hash on alt base, no process tags, with service", + "SELECT *", + true, + 345342L, + false, + "srv", + "/*ddps='srv'*/ SELECT *"), + arguments( + "hash on alt base, process tags, with service", + "SELECT *", + true, + 345342L, + true, + "srv", + "/*ddps='srv',ddsh='345342'*/ SELECT *"), + arguments( + "hash off, process tags, no service", "SELECT *", false, 234563L, true, "", "SELECT *"), + arguments( + "hash off, process tags, with service", + "SELECT *", + false, + 234563L, + true, + "srv", + "/*ddps='srv'*/ SELECT *"), + arguments( + "hash off alt base, process tags, with service", + "SELECT *", + false, + 345342L, + true, + "srv", + "/*ddps='srv'*/ SELECT *"), + arguments( + "hash on, process tags, existing ddsh unchanged", + "/*ddsh='-3750763034362895579'*/ SELECT *", + true, + 234563L, + true, + "", + "/*ddsh='-3750763034362895579'*/ SELECT *")); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("testEncodeSqlCommentWithPeerServiceArguments") + void testEncodeSqlCommentWithPeerService( + String scenario, String dbType, String peerService, String expected) throws Exception { + // setup + injectSysConfig("service", "SqlCommenter"); + injectSysConfig("env", "Test"); + injectSysConfig("version", "TestVersion"); + SharedDBCommenter.resetStaticPrefixForTesting(); + + // when + String sqlWithComment = + runUnderTrace( + "testTrace", + () -> { + AgentSpan currSpan = AgentTracer.activeSpan(); + currSpan.setTag(Tags.PEER_SERVICE, peerService); + return SQLCommenter.inject( + "SELECT * FROM foo", + "my-service", + dbType, + "h", + "n", + "00-00000000000000007fffffffffffffff-000000024cb016ea-00", + true); + }); + + // then + assertEquals(expected, sqlWithComment); + } + + static Stream testEncodeSqlCommentWithPeerServiceArguments() { + return Stream.of( + arguments( + "mysql null peer service", + "mysql", + null, + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "postgres empty peer service", + "postgres", + "", + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/"), + arguments( + "postgres with peer service", + "postgres", + "testPeer", + "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',ddprs='testPeer',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/")); + } +}