Skip to content

Commit cbb06a6

Browse files
committed
Fixed tests for agent disabled by default case
1 parent 45a4350 commit cbb06a6

File tree

6 files changed

+61
-28
lines changed

6 files changed

+61
-28
lines changed

.ci/static-check-unit-test.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ composer run-script static_check
4444
# Run unit tests
4545
composerCommandToRunUnitTests=(composer run-script --)
4646
phpUnitConfigFile=$(php ./tests/ElasticApmTests/Util/runSelectPhpUnitConfigFile.php --tests-type=unit)
47-
composerCommandToRunUnitTests=("${composerCommand[@]}" run_unit_tests_custom_config -c "${phpUnitConfigFile})
47+
composerCommandToRunUnitTests=("${composerCommandToRunUnitTests[@]}" run_unit_tests_custom_config -c "${phpUnitConfigFile})
4848
if [ "${ELASTIC_APM_PHP_TESTS_AGENT_ENABLED_CONFIG_DEFAULT:?}" == "false" ]; then
49-
composerCommandToRunUnitTests=("${AgentEnabledConfigUnitTest[@]}" --filter "AgentEnabledConfigUnitTest")
49+
composerCommandToRunUnitTests=("${composerCommandToRunUnitTests[@]}" --filter "AgentEnabledConfigUnitTest")
5050
fi
5151
"${composerCommandToRunUnitTests[@]}"
5252
ls -l ./build/unit-tests-phpunit-junit.xml

tests/ElasticApmTests/ComponentTests/AgentEnabledConfigComponentTest.php

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
namespace ElasticApmTests\ComponentTests;
2525

2626
use Elastic\Apm\Impl\Config\OptionNames;
27+
use ElasticApmTests\ComponentTests\Util\AmbientContextForTests;
2728
use ElasticApmTests\ComponentTests\Util\AppCodeHostParams;
2829
use ElasticApmTests\ComponentTests\Util\AppCodeRequestParams;
2930
use ElasticApmTests\ComponentTests\Util\AppCodeTarget;
3031
use ElasticApmTests\ComponentTests\Util\ComponentTestCaseBase;
31-
use ElasticApmTests\ComponentTests\Util\ExpectedEventCounts;
3232
use ElasticApmTests\Util\AssertMessageStack;
3333
use ElasticApmTests\Util\DataProviderForTestBuilder;
3434
use ElasticApmTests\Util\MixedMap;
@@ -39,38 +39,36 @@
3939
*/
4040
final class AgentEnabledConfigComponentTest extends ComponentTestCaseBase
4141
{
42-
private const ENABLED_CONFIG_SEEN_BY_TEST = 'enabled_config_seen_by_test';
43-
44-
public static function appCodeForTestWhenAgentIsDisabledItShouldNotSendAnyData(MixedMap $appCodeArgs): void
42+
public static function appCodeForTestAgentEnabledConfig(MixedMap $appCodeArgs): void
4543
{
46-
$enabledConfigSeenByTest = $appCodeArgs->getBool(self::ENABLED_CONFIG_SEEN_BY_TEST);
44+
$agentEnabledExpected = $appCodeArgs->getBool(OptionNames::ENABLED);
4745

4846
/**
4947
* elastic_apm_* functions are provided by the elastic_apm extension
5048
*
5149
* @noinspection PhpFullyQualifiedNameUsageInspection, PhpUndefinedFunctionInspection
5250
* @phpstan-ignore-next-line
5351
*/
54-
$enabledConfigSeenByNativePart = \elastic_apm_is_enabled();
55-
self::assertSame($enabledConfigSeenByTest, $enabledConfigSeenByNativePart);
52+
$agentEnabledAsSeenByNativePart = \elastic_apm_is_enabled();
53+
self::assertSame($agentEnabledExpected, $agentEnabledAsSeenByNativePart);
5654
}
5755

5856
/**
5957
* @return iterable<string, array{MixedMap}>
6058
*/
61-
public static function dataProviderForTestWhenAgentIsDisabledItShouldNotSendAnyData(): iterable
59+
public static function dataProviderForTestAgentEnabledConfig(): iterable
6260
{
6361
$result = (new DataProviderForTestBuilder())
64-
->addKeyedDimensionOnlyFirstValueCombinable(OptionNames::ENABLED, [null, true . false])
62+
->addKeyedDimensionAllValuesCombinable(OptionNames::ENABLED, [null, true, false])
6563
->build();
6664

6765
return DataProviderForTestBuilder::convertEachDataSetToMixedMap($result);
6866
}
6967

7068
/**
71-
* @dataProvider dataProviderForTestWhenAgentIsDisabledItShouldNotSendAnyData
69+
* @dataProvider dataProviderForTestAgentEnabledConfig
7270
*/
73-
public function testWhenAgentIsDisabledItShouldNotSendAnyData(MixedMap $testArgs): void
71+
public function testAgentEnabledConfig(MixedMap $testArgs): void
7472
{
7573
AssertMessageStack::newScope(/* out */ $dbgCtx, AssertMessageStack::funcArgs());
7674

@@ -81,26 +79,32 @@ function (AppCodeHostParams $appCodeParams) use ($testArgs): void {
8179
}
8280
);
8381

84-
$enabledConfigSeenByTest = $appCodeHost->appCodeHostParams->getEffectiveAgentConfig()->enabled();
85-
$dbgCtx->add(compact('enabledConfigSeenByTest'));
86-
$logger = self::getLogger(__NAMESPACE__, __CLASS__, __FILE__);
87-
($loggerProxy = $logger->ifInfoLevelEnabled(__LINE__, __FUNCTION__)) && $loggerProxy->log('', ['enabledConfigSeenByTest' => $enabledConfigSeenByTest]);
82+
$agentEnabledTestArg = $testArgs->getNullableBool(OptionNames::ENABLED);
83+
$agentEnabledActual = $appCodeHost->appCodeHostParams->getEffectiveAgentConfig()->enabled();
84+
if (($agentEnabledExpected = $agentEnabledTestArg ?? AmbientContextForTests::testConfig()->agentEnabledConfigDefault) !== null) {
85+
self::assertSame($agentEnabledExpected, $agentEnabledActual);
86+
}
8887

8988
$appCodeHost->sendRequest(
90-
AppCodeTarget::asRouted([__CLASS__, 'appCodeForTestWhenAgentIsDisabledItShouldNotSendAnyData']),
91-
function (AppCodeRequestParams $appCodeRequestParams) use ($enabledConfigSeenByTest): void {
92-
$appCodeRequestParams->setAppCodeArgs([self::ENABLED_CONFIG_SEEN_BY_TEST => $enabledConfigSeenByTest]);
89+
AppCodeTarget::asRouted([__CLASS__, 'appCodeForTestAgentEnabledConfig']),
90+
function (AppCodeRequestParams $appCodeRequestParams) use ($agentEnabledActual): void {
91+
$appCodeRequestParams->setAppCodeArgs([OptionNames::ENABLED => $agentEnabledActual]);
9392
}
9493
);
9594

96-
if ($enabledConfigSeenByTest) {
95+
if ($agentEnabledActual) {
9796
$dataFromAgent = $this->waitForOneEmptyTransaction($testCaseHandle);
9897
self::assertCount(1, $dataFromAgent->idToTransaction);
9998
self::assertCount(1, $dataFromAgent->metadatas);
10099
} else {
101-
sleep(/* seconds */ 5);
102-
$dataFromAgent = $testCaseHandle->waitForDataFromAgent((new ExpectedEventCounts())->metadatas(0)->transactions(0), /* shouldValidate */ false);
100+
$logger = self::getLoggerStatic(__NAMESPACE__, __CLASS__, __FILE__);
101+
$waitTimeSeconds = 5;
102+
($loggerProxy = $logger->ifInfoLevelEnabled(__LINE__, __FUNCTION__))
103+
&& $loggerProxy->log('Sleeping ' . $waitTimeSeconds . ' seconds to give agent enough time to send data (which it should not since it is disabled)...');
104+
sleep($waitTimeSeconds);
105+
$dataFromAgent = $testCaseHandle->getDataFromAgentWithoutWaiting();
103106
self::assertCount(0, $dataFromAgent->idToTransaction);
107+
self::assertCount(0, $dataFromAgent->metadatas);
104108
}
105109
self::assertCount(0, $dataFromAgent->idToSpan);
106110
self::assertCount(0, $dataFromAgent->idToError);

tests/ElasticApmTests/ComponentTests/Util/ComponentTestCaseBase.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,8 +567,10 @@ protected static function disableTimingDependentFeatures(AppCodeHostParams $appC
567567

568568
protected static function setConfigIfNotNull(MixedMap $testArgs, string $optName, AppCodeHostParams $appCodeParams): void
569569
{
570-
$optVal = $testArgs->getNullableString($optName);
570+
$optVal = $testArgs->get($optName);
571571
if ($optVal !== null) {
572+
self::assertTrue(is_string($optVal) || is_int($optVal) || is_float($optVal) || is_bool($optVal));
573+
/** @var string|int|float|bool $optVal */
572574
$appCodeParams->setAgentOption($optName, $optVal);
573575
}
574576
}

tests/ElasticApmTests/ComponentTests/Util/TestCaseHandle.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,13 @@ function (HttpAppCodeHostParams $appCodeHostParams) use ($setParamsFunc): void {
156156
return $this->additionalHttpAppCodeHost;
157157
}
158158

159+
public function getDataFromAgentWithoutWaiting(): DataFromAgentPlusRaw
160+
{
161+
$dataFromAgentAccumulator = new DataFromAgentPlusRawAccumulator();
162+
$dataFromAgentAccumulator->addReceiverEvents($this->mockApmServer->fetchNewData(/* shouldWait */ false));
163+
return $dataFromAgentAccumulator->getAccumulatedData();
164+
}
165+
159166
public function waitForDataFromAgent(ExpectedEventCounts $expectedEventCounts, bool $shouldValidate = true): DataFromAgentPlusRaw
160167
{
161168
TestCaseBase::assertNotEmpty($this->appCodeInvocations);

tests/ElasticApmTests/UnitTests/AgentEnabledConfigUnitTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
final class AgentEnabledConfigUnitTest extends TestCaseBase
3535
{
36-
public function test(): void
36+
public function testDefaultAsSeenByPhpPart(): void
3737
{
3838
$configForTests = ConfigUtilForTests::read(/* additionalConfigSource */ null, NoopLoggerFactory::singletonInstance());
3939
if ($configForTests->agentEnabledConfigDefault === null) {

tests/ElasticApmTests/Util/MixedMap.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,33 @@ public function getIfKeyExistsElse(string $key, $fallbackValue)
101101
* @param string $key
102102
* @param array<mixed> $from
103103
*
104-
* @return bool
104+
* @return ?bool
105105
*/
106-
public static function getBoolFrom(string $key, array $from): bool
106+
public static function getNullableBoolFrom(string $key, array $from): ?bool
107107
{
108108
AssertMessageStack::newScope(/* out */ $dbgCtx, AssertMessageStack::funcArgs());
109109
$value = self::getFrom($key, $from);
110-
TestCaseBase::assertIsBool($value);
110+
if ($value !== null) {
111+
TestCaseBase::assertIsBool($value);
112+
}
113+
return $value;
114+
}
115+
116+
public function getNullableBool(string $key): ?bool
117+
{
118+
return self::getNullableBoolFrom($key, $this->map);
119+
}
120+
121+
/**
122+
* @param string $key
123+
* @param array<mixed> $from
124+
*
125+
* @return bool
126+
*/
127+
public static function getBoolFrom(string $key, array $from): bool
128+
{
129+
$value = self::getNullableBoolFrom($key, $from);
130+
TestCaseBase::assertNotNull($value);
111131
return $value;
112132
}
113133

0 commit comments

Comments
 (0)