Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ public void applyConfig(AgentRemoteConfig remoteConfig, OpampClient opampClient)
}

try {
reportRemoteConfigStatus(
remoteConfig.config_hash,
RemoteConfigStatuses.RemoteConfigStatuses_APPLYING,
opampClient);

DeclarativeConfigProperties remoteConfigProperties =
toDeclarativeConfigProperties(configFile);
DeclarativeConfigProperties distributionRemoteConfigProperties =
Expand All @@ -89,18 +94,12 @@ public void applyConfig(AgentRemoteConfig remoteConfig, OpampClient opampClient)

// Confirm to the OpAMP Server that remote config has been applied.
reportRemoteConfigStatus(
remoteConfig.config_hash,
RemoteConfigStatuses.RemoteConfigStatuses_APPLIED,
"",
opampClient);
remoteConfig.config_hash, RemoteConfigStatuses.RemoteConfigStatuses_APPLIED, opampClient);

} catch (Exception e) {
logger.log(Level.WARNING, "Remote configuration not applied due to exception.", e);
reportRemoteConfigStatus(
remoteConfig.config_hash,
RemoteConfigStatuses.RemoteConfigStatuses_FAILED,
"Exception occurred: " + e.getMessage(),
opampClient);
reportRemoteConfigFailure(
remoteConfig.config_hash, "Exception occurred: " + e.getMessage(), opampClient);
}

// TODO: Maybe should be postponed after profiler is enabled/disabled?
Expand Down Expand Up @@ -151,15 +150,21 @@ static DeclarativeConfigProperties toDeclarativeConfigProperties(AgentConfigFile
}

private void reportRemoteConfigStatus(
ByteString configHash,
RemoteConfigStatuses status,
String errorMessage,
OpampClient opampClient) {
ByteString configHash, RemoteConfigStatuses status, OpampClient opampClient) {
opampClient.setRemoteConfigStatus(
new RemoteConfigStatus.Builder()
.last_remote_config_hash(configHash)
.error_message(errorMessage)
.status(status)
.build());
}

private void reportRemoteConfigFailure(
ByteString configHash, String errorMessage, OpampClient opampClient) {
opampClient.setRemoteConfigStatus(
new RemoteConfigStatus.Builder()
.last_remote_config_hash(configHash)
.error_message(errorMessage)
.status(RemoteConfigStatuses.RemoteConfigStatuses_FAILED)
.build());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.verifyNoMoreInteractions;
Expand All @@ -28,6 +29,7 @@
import com.splunk.opentelemetry.profiler.snapshot.SnapshotProfilingConfiguration;
import com.splunk.opentelemetry.profiler.snapshot.SnapshotProfilingSupervisor;
import io.opentelemetry.opamp.client.OpampClient;
import java.util.List;
import java.util.Map;
import okio.ByteString;
import opamp.proto.AgentConfigFile;
Expand Down Expand Up @@ -68,6 +70,22 @@ void tearDown() {
SnapshotProfilingConfiguration.SUPPLIER.reset();
}

@Test
void shouldMarkRemoteConfigAsApplyingWhenProcessingStarts() {
// given
ByteString configHash = ByteString.encodeUtf8("test-config-hash");
AgentRemoteConfig remoteConfig = createRemoteConfig(configHash, "test-config:");

// when
handler.applyConfig(remoteConfig, opampClient);

// then
RemoteConfigStatus status = getInitialReportedRemoteConfigStatus();
assertThat(status.last_remote_config_hash).isEqualTo(configHash);
assertThat(status.status).isEqualTo(RemoteConfigStatuses.RemoteConfigStatuses_APPLYING);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏻

assertThat(status.error_message).isEmpty();
}

@Test
void shouldMarkRemoteConfigAsAppliedWhenProfilingConfigIsNotProvided() {
// given
Expand All @@ -86,7 +104,7 @@ void shouldMarkRemoteConfigAsAppliedWhenProfilingConfigIsNotProvided() {
handler.applyConfig(remoteConfig, opampClient);

// then
RemoteConfigStatus status = getReportedRemoteConfigStatus();
RemoteConfigStatus status = getFinalReportedRemoteConfigStatus();
assertThat(status.last_remote_config_hash).isEqualTo(configHash);
assertThat(status.status).isEqualTo(RemoteConfigStatuses.RemoteConfigStatuses_APPLIED);
assertThat(status.error_message).isEmpty();
Expand All @@ -112,7 +130,7 @@ void shouldReportErrorWhenRemoteConfigProcessingFailed() {
handler.applyConfig(remoteConfig, opampClient);

// then
RemoteConfigStatus status = getReportedRemoteConfigStatus();
RemoteConfigStatus status = getFinalReportedRemoteConfigStatus();
assertThat(status.last_remote_config_hash).isEqualTo(configHash);
assertThat(status.status).isEqualTo(RemoteConfigStatuses.RemoteConfigStatuses_FAILED);
assertThat(status.error_message).startsWith("Exception occurred:");
Expand Down Expand Up @@ -162,7 +180,7 @@ void shouldStartProfilingWhenRemoteConfigEnablesProfiler() {
handler.applyConfig(remoteConfig, opampClient);

// then
RemoteConfigStatus status = getReportedRemoteConfigStatus();
RemoteConfigStatus status = getFinalReportedRemoteConfigStatus();
assertThat(status.last_remote_config_hash).isEqualTo(configHash);
assertThat(status.status).isEqualTo(RemoteConfigStatuses.RemoteConfigStatuses_APPLIED);
assertThat(status.error_message).isEmpty();
Expand Down Expand Up @@ -224,7 +242,7 @@ void shouldStopProfilingWhenRemoteConfigDisablesProfiler() {
handler.applyConfig(remoteConfig, opampClient);

// then
RemoteConfigStatus status = getReportedRemoteConfigStatus();
RemoteConfigStatus status = getFinalReportedRemoteConfigStatus();
assertThat(status.last_remote_config_hash).isEqualTo(configHash);
assertThat(status.status).isEqualTo(RemoteConfigStatuses.RemoteConfigStatuses_APPLIED);
assertThat(status.error_message).isEmpty();
Expand Down Expand Up @@ -255,7 +273,7 @@ void shouldStartProfilingWhenRemoteConfigEnablesProfiler() {
handler.applyConfig(remoteConfig, opampClient);

// then
RemoteConfigStatus status = getReportedRemoteConfigStatus();
RemoteConfigStatus status = getFinalReportedRemoteConfigStatus();
assertThat(status.last_remote_config_hash).isEqualTo(configHash);
assertThat(status.status).isEqualTo(RemoteConfigStatuses.RemoteConfigStatuses_APPLIED);
assertThat(status.error_message).isEmpty();
Expand Down Expand Up @@ -308,7 +326,7 @@ void shouldStopProfilingWhenRemoteConfigDisablesProfiler() {
handler.applyConfig(remoteConfig, opampClient);

// then
RemoteConfigStatus status = getReportedRemoteConfigStatus();
RemoteConfigStatus status = getFinalReportedRemoteConfigStatus();
assertThat(status.last_remote_config_hash).isEqualTo(configHash);
assertThat(status.status).isEqualTo(RemoteConfigStatuses.RemoteConfigStatuses_APPLIED);
assertThat(status.error_message).isEmpty();
Expand All @@ -320,11 +338,19 @@ void shouldStopProfilingWhenRemoteConfigDisablesProfiler() {
}
}

private RemoteConfigStatus getReportedRemoteConfigStatus() {
private RemoteConfigStatus getInitialReportedRemoteConfigStatus() {
return getReportedRemoteConfigStatuses().get(0);
}

private RemoteConfigStatus getFinalReportedRemoteConfigStatus() {
return getReportedRemoteConfigStatuses().get(1);
}

private List<RemoteConfigStatus> getReportedRemoteConfigStatuses() {
ArgumentCaptor<RemoteConfigStatus> statusCaptor =
ArgumentCaptor.forClass(RemoteConfigStatus.class);
verify(opampClient).setRemoteConfigStatus(statusCaptor.capture());
return statusCaptor.getValue();
verify(opampClient, times(2)).setRemoteConfigStatus(statusCaptor.capture());
return statusCaptor.getAllValues();
}

private static AgentRemoteConfig createRemoteConfig(ByteString configHash, String config) {
Expand Down
Loading