Skip to content

Commit

Permalink
Restructure modules - phase 3 (#276)
Browse files Browse the repository at this point in the history
* move startup instrumentation to module

* move activity to own module

* move anr to own module

* move crash to own module

* move fragment to own module

* move network to own module

* move lifecycle to own module

* move slowrendering to own module

* fix package and imports

* spotless

* move perm to network

* static imports
  • Loading branch information
breedx-splk authored Mar 17, 2024
1 parent 783ef1b commit 5192b0c
Show file tree
Hide file tree
Showing 90 changed files with 334 additions and 88 deletions.
5 changes: 5 additions & 0 deletions android-agent/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,12 @@ android {

dependencies {
implementation(project(":common"))
implementation(project(":instrumentation:activity"))
implementation(project(":instrumentation:anr"))
implementation(project(":instrumentation:common-api"))
implementation(project(":instrumentation:crash"))
implementation(project(":instrumentation:network"))
implementation(project(":instrumentation:slowrendering"))
implementation(libs.androidx.appcompat)
implementation(libs.androidx.core)
implementation(libs.androidx.navigation.fragment)
Expand Down
1 change: 0 additions & 1 deletion android-agent/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.app.Activity;
import androidx.annotation.NonNull;
import io.opentelemetry.android.instrumentation.common.ApplicationStateListener;
import io.opentelemetry.android.instrumentation.common.DefaultingActivityLifecycleCallbacks;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@
import io.opentelemetry.sdk.trace.export.SpanExporter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
Expand Down Expand Up @@ -370,7 +372,9 @@ private void applyConfiguration() {
if (initializationEvents == InitializationEvents.NO_OP) {
initializationEvents = new SdkInitializationEvents();
}
initializationEvents.recordConfiguration(config);
Map<String, String> configMap = new HashMap<>();
// TODO: Convert config to map
initializationEvents.recordConfiguration(configMap);
}
initializationEvents.sdkInitializationStarted();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

package io.opentelemetry.android.internal.features.persistence;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
Expand All @@ -20,7 +22,6 @@
import java.io.File;
import java.io.IOException;
import java.util.Objects;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand Down Expand Up @@ -52,40 +53,40 @@ void provideSignalBufferDir() throws IOException {
doReturn(cacheDir).when(cacheStorageService).getCacheDir();
File expected = new File(cacheDir, "opentelemetry/signals");

Assertions.assertEquals(expected, diskManager.getSignalsBufferDir());
Assertions.assertTrue(expected.exists());
assertEquals(expected, diskManager.getSignalsBufferDir());
assertTrue(expected.exists());
}

@Test
void provideTemporaryDir() throws IOException {
doReturn(cacheDir).when(cacheStorageService).getCacheDir();
File expected = new File(cacheDir, "opentelemetry/temp");

Assertions.assertEquals(expected, diskManager.getTemporaryDir());
Assertions.assertTrue(expected.exists());
assertEquals(expected, diskManager.getTemporaryDir());
assertTrue(expected.exists());
}

@Test
void cleanupTemporaryDirBeforeProvidingIt() throws IOException {
File dir = new File(cacheDir, "opentelemetry/temp");
Assertions.assertTrue(dir.mkdirs());
Assertions.assertTrue(new File(dir, "somefile.tmp").createNewFile());
Assertions.assertTrue(new File(dir, "some_other_file.tmp").createNewFile());
Assertions.assertTrue(new File(dir, "somedir").mkdirs());
Assertions.assertTrue(new File(dir, "somedir/some_other_file.tmp").createNewFile());
assertTrue(dir.mkdirs());
assertTrue(new File(dir, "somefile.tmp").createNewFile());
assertTrue(new File(dir, "some_other_file.tmp").createNewFile());
assertTrue(new File(dir, "somedir").mkdirs());
assertTrue(new File(dir, "somedir/some_other_file.tmp").createNewFile());

File temporaryDir = diskManager.getTemporaryDir();

Assertions.assertTrue(temporaryDir.exists());
Assertions.assertEquals(0, Objects.requireNonNull(temporaryDir.listFiles()).length);
assertTrue(temporaryDir.exists());
assertEquals(0, Objects.requireNonNull(temporaryDir.listFiles()).length);
}

@Test
void getMaxCacheFileSize() {
int persistenceSize = 1024 * 1024 * 2;
doReturn(persistenceSize).when(diskBufferingConfiguration).getMaxCacheFileSize();

Assertions.assertEquals(persistenceSize, diskManager.getMaxCacheFileSize());
assertEquals(persistenceSize, diskManager.getMaxCacheFileSize());

verify(diskBufferingConfiguration).getMaxCacheFileSize();
}
Expand All @@ -102,13 +103,13 @@ void getMaxSignalFolderSize() {
// Expects the size of a single signal type folder minus the size of a cache file, to use as
// temporary space for reading.
int expected = 2_446_677;
Assertions.assertEquals(expected, diskManager.getMaxFolderSize());
assertEquals(expected, diskManager.getMaxFolderSize());
verify(preferencesService).store(MAX_FOLDER_SIZE_KEY, expected);

// On a second call, should get the value from the preferences.
clearInvocations(cacheStorageService, diskBufferingConfiguration, preferencesService);
doReturn(expected).when(preferencesService).retrieveInt(MAX_FOLDER_SIZE_KEY, -1);
Assertions.assertEquals(expected, diskManager.getMaxFolderSize());
assertEquals(expected, diskManager.getMaxFolderSize());
verify(preferencesService).retrieveInt(MAX_FOLDER_SIZE_KEY, -1);
verifyNoMoreInteractions(preferencesService);
verifyNoInteractions(cacheStorageService, diskBufferingConfiguration);
Expand All @@ -126,7 +127,7 @@ void getMaxSignalFolderSize_whenCalculatedSizeIsNotValid() {
// Expects the size of a single signal type folder minus the size of a cache file, to use as
// temporary space for reading.
int expected = 0;
Assertions.assertEquals(expected, diskManager.getMaxFolderSize());
assertEquals(expected, diskManager.getMaxFolderSize());
verify(preferencesService, never()).store(MAX_FOLDER_SIZE_KEY, expected);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package io.opentelemetry.android.internal.services;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
Expand All @@ -15,7 +16,6 @@
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
Expand All @@ -38,8 +38,8 @@ public void addingServices() {
serviceManager.addService(firstService);
serviceManager.addService(secondService);

Assertions.assertEquals(firstService, serviceManager.getService(FirstService.class));
Assertions.assertEquals(secondService, serviceManager.getService(SecondService.class));
assertEquals(firstService, serviceManager.getService(FirstService.class));
assertEquals(secondService, serviceManager.getService(SecondService.class));
}

@Test
Expand Down
24 changes: 24 additions & 0 deletions instrumentation/activity/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
plugins {
id("otel.android-library-conventions")
id("otel.publish-conventions")
}

description = "OpenTelemetry Android activity instrumentation"

android {
namespace = "io.opentelemetry.android.instrumentation.activity"

defaultConfig {
consumerProguardFiles("consumer-rules.pro")
}
}

dependencies {
api(platform(libs.opentelemetry.platform))
api(libs.opentelemetry.api)
api(project(":instrumentation:common-api"))
api(project(":instrumentation:startup")) // TODO: This is a coupling smell between instrumentations
implementation(libs.androidx.core)
implementation(libs.androidx.navigation.fragment)
implementation(libs.opentelemetry.instrumentation.api)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.opentelemetry.android.DefaultingActivityLifecycleCallbacks;
import io.opentelemetry.android.instrumentation.common.DefaultingActivityLifecycleCallbacks;

public class ActivityCallbacks implements DefaultingActivityLifecycleCallbacks {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.opentelemetry.android.DefaultingActivityLifecycleCallbacks;
import io.opentelemetry.android.instrumentation.common.DefaultingActivityLifecycleCallbacks;

public class Pre29ActivityCallbacks implements DefaultingActivityLifecycleCallbacks {
private final ActivityTracerCache tracers;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import android.app.Activity;
import androidx.annotation.NonNull;
import io.opentelemetry.android.DefaultingActivityLifecycleCallbacks;
import io.opentelemetry.android.instrumentation.common.DefaultingActivityLifecycleCallbacks;

/**
* An ActivityLifecycleCallbacks that is responsible for telling the VisibleScreenTracker when an
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import io.opentelemetry.android.DefaultingActivityLifecycleCallbacks;
import io.opentelemetry.android.instrumentation.common.DefaultingActivityLifecycleCallbacks;

/**
* Registers the RumFragmentLifecycleCallbacks when an activity is created. There are just 2 factory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import android.app.Activity;
import androidx.annotation.NonNull;
import io.opentelemetry.android.DefaultingActivityLifecycleCallbacks;
import io.opentelemetry.android.instrumentation.common.DefaultingActivityLifecycleCallbacks;

/**
* An ActivityLifecycleCallbacks that is responsible for telling the VisibleScreenTracker when an
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.mockito.Mockito;

class ActivityCallbacksTest {
@RegisterExtension final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create();
Expand All @@ -38,7 +39,7 @@ class ActivityCallbacksTest {
public void setup() {
Tracer tracer = otelTesting.getOpenTelemetry().getTracer("testTracer");
AppStartupTimer startupTimer = new AppStartupTimer();
visibleScreenTracker = mock(VisibleScreenTracker.class);
visibleScreenTracker = Mockito.mock(VisibleScreenTracker.class);
ScreenNameExtractor extractor = mock(ScreenNameExtractor.class);
when(extractor.extract(isA(Activity.class))).thenReturn("Activity");
tracers = new ActivityTracerCache(tracer, visibleScreenTracker, startupTimer, extractor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import static org.junit.jupiter.api.Assertions.assertSame;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
Expand All @@ -19,6 +18,7 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
Expand Down Expand Up @@ -97,7 +97,7 @@ void initiateRestartSpanIfNecessary_multiActivity() {
Activity activity2 = new Activity() {
// to get a new class name used in the cache
};
ActivityTracer activityTracer2 = mock(ActivityTracer.class);
ActivityTracer activityTracer2 = Mockito.mock(ActivityTracer.class);

when(tracerCreator.apply(activity)).thenReturn(activityTracer);
when(tracerCreator.apply(activity2)).thenReturn(activityTracer2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.mockito.Mockito;

public class ActivityTracerTest {
@RegisterExtension final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create();

private Tracer tracer;
private final VisibleScreenTracker visibleScreenTracker = mock(VisibleScreenTracker.class);
private final VisibleScreenTracker visibleScreenTracker =
Mockito.mock(VisibleScreenTracker.class);
private final AppStartupTimer appStartupTimer = new AppStartupTimer();
private ActiveSpan activeSpan;

Expand Down Expand Up @@ -162,7 +164,7 @@ public void addPreviousScreen_noPrevious() {

@Test
public void addPreviousScreen_currentSameAsPrevious() {
VisibleScreenTracker visibleScreenTracker = mock(VisibleScreenTracker.class);
VisibleScreenTracker visibleScreenTracker = Mockito.mock(VisibleScreenTracker.class);
when(visibleScreenTracker.getPreviouslyVisibleScreen()).thenReturn("Activity");

ActivityTracer trackableTracer =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.mockito.Mockito;

class Pre29ActivityLifecycleCallbacksTest {
@RegisterExtension final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create();
Expand All @@ -38,7 +39,7 @@ class Pre29ActivityLifecycleCallbacksTest {
void setup() {
AppStartupTimer appStartupTimer = new AppStartupTimer();
Tracer tracer = otelTesting.getOpenTelemetry().getTracer("testTracer");
visibleScreenTracker = mock(VisibleScreenTracker.class);
visibleScreenTracker = Mockito.mock(VisibleScreenTracker.class);
ScreenNameExtractor extractor = mock(ScreenNameExtractor.class);
when(extractor.extract(isA(Activity.class))).thenReturn("Activity");
tracers = new ActivityTracerCache(tracer, visibleScreenTracker, appStartupTimer, extractor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
package io.opentelemetry.android.instrumentation.activity;

import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;

import android.app.Activity;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
Expand All @@ -25,7 +25,7 @@ void postResumed() {
new Pre29VisibleScreenLifecycleBinding(tracker);
underTest.onActivityResumed(activity);
verify(tracker).activityResumed(activity);
verifyNoMoreInteractions(tracker);
Mockito.verifyNoMoreInteractions(tracker);
}

@Test
Expand All @@ -34,6 +34,6 @@ void prePaused() {
new Pre29VisibleScreenLifecycleBinding(tracker);
underTest.onActivityPaused(activity);
verify(tracker).activityPaused(activity);
verifyNoMoreInteractions(tracker);
Mockito.verifyNoMoreInteractions(tracker);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
package io.opentelemetry.android.instrumentation.activity;

import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;

import android.app.Activity;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
Expand All @@ -25,7 +25,7 @@ void postResumed() {
VisibleScreenLifecycleBinding underTest = new VisibleScreenLifecycleBinding(tracker);
underTest.onActivityPostResumed(activity);
verify(tracker).activityResumed(activity);
verifyNoMoreInteractions(tracker);
Mockito.verifyNoMoreInteractions(tracker);
}

@Test
Expand Down
Loading

0 comments on commit 5192b0c

Please sign in to comment.