Skip to content

Commit 8def646

Browse files
Refactored simple component tests (#101)
* Fixed ResourceAttributes deprecated * Renamed appCodeArgs to appCodeRequestArgs * Initial change to ComponentTestCaseBase * Renamed appCodeArguments to appCodeRequestArgs * Renamed ResourcesClient to ResourcesCleanerClient * Renamed RESOURCES_CLIENT to RESOURCES_CLEANER_CLIENT * Refactored PackagesPhpRequirementTest * Refactored test classes that can use implTestForAppCodeSetsHowFinished * Fixed ProcessUtilTest * Fixed ComponentTestCaseBase::copyProdOptionsToAppCodeHostParams * Temporarily disabled ComponentTestsUtilComponentTest::test0WithoutEscalation * Fixed test clean-up timing out * Make sure to close spawned process handle to allow it to exit normally * Refactored MySqliAutoInstrumentationTest to use implTestForAppCodeSetsHowFinished * Refactored PgSqlAutoInstrumentationTest * Fixed test case when MySQLi/ PostgreSQL instrumentation is disabled
1 parent ea42038 commit 8def646

39 files changed

Lines changed: 831 additions & 682 deletions

tests/OTelDistroTests/BootstrapTests.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ private static function bootstrapShared(string $dbgProcessName): void
3939

4040
public static function bootstrapTool(string $dbgProcessName): void
4141
{
42-
ExceptionUtil::runCatchLogRethrow(
42+
ExceptionUtil::runCatchWriteToStdErrRethrow(
4343
function () use ($dbgProcessName): void {
4444
self::bootstrapShared($dbgProcessName);
4545
}
@@ -48,7 +48,7 @@ function () use ($dbgProcessName): void {
4848

4949
public static function bootstrapUnitTests(): void
5050
{
51-
ExceptionUtil::runCatchLogRethrow(
51+
ExceptionUtil::runCatchWriteToStdErrRethrow(
5252
function (): void {
5353
self::bootstrapShared(self::UNIT_TESTS_DBG_PROCESS_NAME);
5454
}
@@ -57,7 +57,7 @@ function (): void {
5757

5858
public static function bootstrapComponentTests(): void
5959
{
60-
ExceptionUtil::runCatchLogRethrow(
60+
ExceptionUtil::runCatchWriteToStdErrRethrow(
6161
function (): void {
6262
self::bootstrapShared(self::COMPONENT_TESTS_DBG_PROCESS_NAME);
6363
AmbientContextForTests::testConfig()->validateForComponentTests();

tests/OTelDistroTests/ComponentTests/CurlAutoInstrumentationTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public static function dataProviderForTestLocalClientServer(): iterable
163163
);
164164
}
165165

166-
public function implTestLocalClientServer(MixedMap $testArgs): void
166+
private function implTestLocalClientServer(MixedMap $testArgs): void
167167
{
168168
DebugContext::getCurrentScope(/* out */ $dbgCtx);
169169

@@ -172,21 +172,21 @@ public function implTestLocalClientServer(MixedMap $testArgs): void
172172
$enableCurlInstrumentationForServer = $testArgs->getBool(self::ENABLE_CURL_INSTRUMENTATION_FOR_SERVER_KEY);
173173
$serverAppCode = $testCaseHandle->ensureAdditionalHttpAppCodeHost(
174174
dbgInstanceName: 'server for cUrl request',
175-
setParamsFunc: function (AppCodeHostParams $appCodeParams) use ($enableCurlInstrumentationForServer): void {
176-
self::disableTimingDependentFeatures($appCodeParams);
175+
setParamsFunc: function (AppCodeHostParams $appCodeHostParams) use ($enableCurlInstrumentationForServer): void {
176+
self::disableTimingDependentFeatures($appCodeHostParams);
177177
if (!$enableCurlInstrumentationForServer) {
178-
$appCodeParams->setProdOptionIfNotNull(OptionForProdName::disabled_instrumentations, self::AUTO_INSTRUMENTATION_NAME);
178+
$appCodeHostParams->setProdOptionIfNotNull(OptionForProdName::disabled_instrumentations, self::AUTO_INSTRUMENTATION_NAME);
179179
}
180180
}
181181
);
182182
$appCodeRequestParamsForServer = $serverAppCode->buildRequestParams(AppCodeTarget::asRouted([__CLASS__, 'appCodeServer']));
183183

184184
$enableCurlInstrumentationForClient = $testArgs->getBool(self::ENABLE_CURL_INSTRUMENTATION_FOR_CLIENT_KEY);
185185
$clientAppCode = $testCaseHandle->ensureMainAppCodeHost(
186-
setParamsFunc: function (AppCodeHostParams $appCodeParams) use ($enableCurlInstrumentationForClient): void {
187-
self::disableTimingDependentFeatures($appCodeParams);
186+
setParamsFunc: function (AppCodeHostParams $appCodeHostParams) use ($enableCurlInstrumentationForClient): void {
187+
self::disableTimingDependentFeatures($appCodeHostParams);
188188
if (!$enableCurlInstrumentationForClient) {
189-
$appCodeParams->setProdOptionIfNotNull(OptionForProdName::disabled_instrumentations, self::AUTO_INSTRUMENTATION_NAME);
189+
$appCodeHostParams->setProdOptionIfNotNull(OptionForProdName::disabled_instrumentations, self::AUTO_INSTRUMENTATION_NAME);
190190
}
191191
},
192192
dbgInstanceName: 'client for cUrl request',

tests/OTelDistroTests/ComponentTests/InferredSpansComponentTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace OTelDistroTests\ComponentTests;
66

77
use OpenTelemetry\Distro\Util\ArrayUtil;
8-
use OTelDistroTests\ComponentTests\Util\AppCodeContextDataUtil;
8+
use OTelDistroTests\ComponentTests\Util\AppCodeAuxOutputUtil;
99
use OTelDistroTests\ComponentTests\Util\AppCodeHostParams;
1010
use OTelDistroTests\ComponentTests\Util\AppCodeRequestParams;
1111
use OTelDistroTests\ComponentTests\Util\AppCodeTarget;
@@ -117,7 +117,7 @@ public static function appCodeForTestInferredSpans(MixedMap $appCodeRequestArgs)
117117
// and properties from the stack frame converted to an inferred span go to CODE_FILE_PATH and CODE_LINE_NUMBER attributes.
118118
// This method is a special case since it's called by call_user_func, so there should not be CODE_FILE_PATH and CODE_LINE_NUMBER attributes.
119119
$expectedHelperData[__FUNCTION__] = [self::STACK_TRACE_KEY => array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), offset: 1)];
120-
AppCodeContextDataUtil::writeDataToTempFile([self::EXPECTED_HELPER_DATA_KEY => $expectedHelperData], $appCodeRequestArgs);
120+
AppCodeAuxOutputUtil::writeDataToTempFile([self::EXPECTED_HELPER_DATA_KEY => $expectedHelperData], $appCodeRequestArgs);
121121
}
122122

123123
private function implTestInferredSpans(MixedMap $testArgs): void
@@ -135,13 +135,13 @@ private function implTestInferredSpans(MixedMap $testArgs): void
135135

136136
/** @var array<string, mixed> $appCodeRequestArgs */
137137
$appCodeRequestArgs = [];
138-
AppCodeContextDataUtil::createTempFile($testCaseHandle, /* in,out */ $appCodeRequestArgs);
138+
AppCodeAuxOutputUtil::createTempFile(__CLASS__, $testCaseHandle, /* in,out */ $appCodeRequestArgs);
139139

140140
$appCodeHost = $testCaseHandle->ensureMainAppCodeHost(
141-
function (AppCodeHostParams $appCodeParams) use ($isInferredSpansEnabled, $shouldCaptureSleeps): void {
142-
$appCodeParams->setProdOption(OptionForProdName::inferred_spans_enabled, $isInferredSpansEnabled);
141+
function (AppCodeHostParams $appCodeHostParams) use ($isInferredSpansEnabled, $shouldCaptureSleeps): void {
142+
$appCodeHostParams->setProdOption(OptionForProdName::inferred_spans_enabled, $isInferredSpansEnabled);
143143
$inferredMinDuration = $shouldCaptureSleeps ? self::INFERRED_MIN_DURATION_SECONDS_TO_CAPTURE_SLEEPS : self::INFERRED_MIN_DURATION_SECONDS_TO_OMIT_SLEEPS;
144-
$appCodeParams->setProdOption(OptionForProdName::inferred_spans_min_duration, $inferredMinDuration . 's');
144+
$appCodeHostParams->setProdOption(OptionForProdName::inferred_spans_min_duration, $inferredMinDuration . 's');
145145
}
146146
);
147147
$appCodeHost->execAppCode(
@@ -160,7 +160,7 @@ function (AppCodeRequestParams $appCodeRequestParams) use ($appCodeRequestArgs):
160160
);
161161
$dbgCtx->add(compact('agentBackendComms'));
162162

163-
$expectedHelperData = AppCodeContextDataUtil::readDataAsMixedMapFromTempFile($appCodeRequestArgs)->getArray(self::EXPECTED_HELPER_DATA_KEY);
163+
$expectedHelperData = AppCodeAuxOutputUtil::readDataAsMixedMapFromTempFile($appCodeRequestArgs)->getArray(self::EXPECTED_HELPER_DATA_KEY);
164164
/** @var ExpectedHelperData $expectedHelperData */
165165
$dbgCtx->add(compact('expectedHelperData'));
166166

tests/OTelDistroTests/ComponentTests/MySqliAutoInstrumentationTest.php

Lines changed: 25 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
namespace OTelDistroTests\ComponentTests;
66

77
use OpenTelemetry\Distro\Util\TextUtil;
8+
use OTelDistroTests\ComponentTests\Util\AgentBackendComms;
89
use OTelDistroTests\ComponentTests\Util\AppCodeContextUtil;
9-
use OTelDistroTests\ComponentTests\Util\AppCodeHostParams;
10-
use OTelDistroTests\ComponentTests\Util\AppCodeRequestParams;
11-
use OTelDistroTests\ComponentTests\Util\AppCodeTarget;
1210
use OTelDistroTests\ComponentTests\Util\ComponentTestCaseBase;
1311
use OTelDistroTests\ComponentTests\Util\DbAutoInstrumentationUtilForTests;
1412
use OTelDistroTests\ComponentTests\Util\MySqli\MySqliApiFacade;
@@ -17,12 +15,12 @@
1715
use OTelDistroTests\ComponentTests\Util\MySqli\MySqliWrapped;
1816
use OTelDistroTests\ComponentTests\Util\SpanExpectations;
1917
use OTelDistroTests\ComponentTests\Util\SpanSequenceExpectations;
20-
use OTelDistroTests\ComponentTests\Util\WaitForOTelSignalCounts;
2118
use OTelDistroTests\Util\AmbientContextForTests;
2219
use OTelDistroTests\Util\AssertEx;
2320
use OTelDistroTests\Util\Config\OptionForProdName;
2421
use OTelDistroTests\Util\DataProviderForTestBuilder;
2522
use OTelDistroTests\Util\DebugContext;
23+
use OTelDistroTests\Util\DebugContextScopeRef;
2624
use OTelDistroTests\Util\IterableUtil;
2725
use OTelDistroTests\Util\Log\LoggableToString;
2826
use OTelDistroTests\Util\MixedMap;
@@ -349,18 +347,17 @@ private function implTestAutoInstrumentation(MixedMap $testArgs): void
349347
($loggerProxy = $logger->ifTraceLevelEnabled(__LINE__, __FUNCTION__))
350348
&& $loggerProxy->log('Entered', ['$testArgs' => $testArgs]);
351349

352-
$isAutoInstrumentationEnabled = $testArgs->getBool(self::IS_AUTO_INSTRUMENTATION_ENABLED_KEY);
353-
354350
$isOOPApi = $testArgs->getBool(self::IS_OOP_API_KEY);
355351
$connectDbName = $testArgs->getNullableString(self::CONNECT_DB_NAME_KEY);
356352
$workDbName = $testArgs->getString(self::WORK_DB_NAME_KEY);
357353
$queryKind = $testArgs->getString(self::QUERY_KIND_KEY);
358354
$wrapInTx = $testArgs->getBool(DbAutoInstrumentationUtilForTests::WRAP_IN_TX_KEY);
359355
$rollback = $testArgs->getBool(DbAutoInstrumentationUtilForTests::SHOULD_ROLLBACK_KEY);
360356

357+
$testArgsEx = $testArgs->clone();
361358
/** @var SpanExpectations[] $expectedDbSpans */
362359
$expectedDbSpans = [];
363-
if ($isAutoInstrumentationEnabled) {
360+
if ($testArgs->getBool(self::IS_AUTO_INSTRUMENTATION_ENABLED_KEY)) {
364361
$expectationsBuilder = (new MySqliDbSpanDataExpectationsBuilder($isOOPApi))
365362
->serverAddress(AssertEx::notNull(AmbientContextForTests::testConfig()->mysqlHost))
366363
->serverPort(AssertEx::notNull(AmbientContextForTests::testConfig()->mysqlPort));
@@ -392,42 +389,30 @@ private function implTestAutoInstrumentation(MixedMap $testArgs): void
392389
}
393390

394391
self::addExpectationsForResetDbState($expectationsBuilder, $queryKind, /* out */ $expectedDbSpans);
392+
} else {
393+
$testArgsEx[OptionForProdName::disabled_instrumentations->name] = self::AUTO_INSTRUMENTATION_NAME;
395394
}
396-
$dbgCtx->add(compact('expectedDbSpans'));
397-
398-
$appCodeRequestArgs = $testArgs->clone();
399-
$appCodeRequestArgs[DbAutoInstrumentationUtilForTests::HOST_KEY] = AmbientContextForTests::testConfig()->mysqlHost;
400-
$appCodeRequestArgs[DbAutoInstrumentationUtilForTests::PORT_KEY] = AmbientContextForTests::testConfig()->mysqlPort;
401-
$appCodeRequestArgs[DbAutoInstrumentationUtilForTests::USER_KEY] = AmbientContextForTests::testConfig()->mysqlUser;
402-
$appCodeRequestArgs[DbAutoInstrumentationUtilForTests::PASSWORD_KEY] = AmbientContextForTests::testConfig()->mysqlPassword;
403-
404-
$testCaseHandle = $this->getTestCaseHandle();
405-
$appCodeHost = $testCaseHandle->ensureMainAppCodeHost(
406-
function (AppCodeHostParams $appCodeParams) use ($isAutoInstrumentationEnabled): void {
407-
if (!$isAutoInstrumentationEnabled) {
408-
$appCodeParams->setProdOptionIfNotNull(OptionForProdName::disabled_instrumentations, self::AUTO_INSTRUMENTATION_NAME);
395+
$dbgCtx->add(compact('testArgsEx', 'expectedDbSpans'));
396+
397+
$testArgsEx[DbAutoInstrumentationUtilForTests::HOST_KEY] = AmbientContextForTests::testConfig()->mysqlHost;
398+
$testArgsEx[DbAutoInstrumentationUtilForTests::PORT_KEY] = AmbientContextForTests::testConfig()->mysqlPort;
399+
$testArgsEx[DbAutoInstrumentationUtilForTests::USER_KEY] = AmbientContextForTests::testConfig()->mysqlUser;
400+
$testArgsEx[DbAutoInstrumentationUtilForTests::PASSWORD_KEY] = AmbientContextForTests::testConfig()->mysqlPassword;
401+
402+
self::implTestForAppCodeSetsHowFinished(
403+
testArgs: $testArgsEx,
404+
subAppCode: [__CLASS__, 'appCodeForTestAutoInstrumentation'],
405+
expectedMinSpanCount: 1 + count($expectedDbSpans), // +1 for automatic local root span
406+
additionalAssertCode: function (DebugContextScopeRef $dbgCtx, AgentBackendComms $agentBackendComms) use ($expectedDbSpans): void {
407+
$actualDbSpans = [];
408+
foreach ($agentBackendComms->spans() as $span) {
409+
if ($span->attributes->keyExists(DbAttributes::DB_SYSTEM_NAME)) {
410+
$actualDbSpans[] = $span;
411+
}
409412
}
410-
self::disableTimingDependentFeatures($appCodeParams);
411-
}
412-
);
413-
$appCodeHost->execAppCode(
414-
AppCodeTarget::asRouted([__CLASS__, 'appCodeForTestAutoInstrumentation']),
415-
function (AppCodeRequestParams $appCodeRequestParams) use ($appCodeRequestArgs): void {
416-
$appCodeRequestParams->setAppCodeRequestArgs($appCodeRequestArgs);
417-
}
413+
(new SpanSequenceExpectations($expectedDbSpans))->assertMatches($actualDbSpans);
414+
},
418415
);
419-
420-
// +1 for automatic local root span
421-
$agentBackendComms = $testCaseHandle->waitForEnoughAgentBackendComms(WaitForOTelSignalCounts::spans(1 + count($expectedDbSpans)));
422-
$dbgCtx->add(compact('agentBackendComms'));
423-
424-
$actualDbSpans = [];
425-
foreach ($agentBackendComms->spans() as $span) {
426-
if ($span->attributes->keyExists(DbAttributes::DB_SYSTEM_NAME)) {
427-
$actualDbSpans[] = $span;
428-
}
429-
}
430-
(new SpanSequenceExpectations($expectedDbSpans))->assertMatches($actualDbSpans);
431416
}
432417

433418
/**

tests/OTelDistroTests/ComponentTests/PDOAutoInstrumentationTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,11 @@ private function implTestAutoInstrumentation(MixedMap $testArgs): void
225225
}
226226

227227
$appCodeHost = $testCaseHandle->ensureMainAppCodeHost(
228-
function (AppCodeHostParams $appCodeParams) use ($isAutoInstrumentationEnabled): void {
228+
function (AppCodeHostParams $appCodeHostParams) use ($isAutoInstrumentationEnabled): void {
229229
if (!$isAutoInstrumentationEnabled) {
230-
$appCodeParams->setProdOptionIfNotNull(OptionForProdName::disabled_instrumentations, self::AUTO_INSTRUMENTATION_NAME);
230+
$appCodeHostParams->setProdOptionIfNotNull(OptionForProdName::disabled_instrumentations, self::AUTO_INSTRUMENTATION_NAME);
231231
}
232-
self::disableTimingDependentFeatures($appCodeParams);
232+
self::disableTimingDependentFeatures($appCodeHostParams);
233233
}
234234
);
235235
$appCodeHost->execAppCode(

0 commit comments

Comments
 (0)