Skip to content

Commit 4582dfd

Browse files
committed
Added unit tests for plugins
1 parent d82a1ac commit 4582dfd

39 files changed

+1219
-184
lines changed

pom.xml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,41 @@
2424
<artifactId>jackson-databind</artifactId>
2525
<version>2.9.5</version>
2626
</dependency>
27+
<dependency>
28+
<groupId>ch.qos.logback</groupId>
29+
<artifactId>logback-core</artifactId>
30+
<version>1.2.3</version>
31+
</dependency>
32+
<dependency>
33+
<groupId>org.slf4j</groupId>
34+
<artifactId>slf4j-api</artifactId>
35+
<version>1.7.30</version>
36+
</dependency>
37+
<!--Test Dependencies-->
38+
<dependency>
39+
<groupId>org.junit.jupiter</groupId>
40+
<artifactId>junit-jupiter-engine</artifactId>
41+
<version>5.3.1</version>
42+
<scope>test</scope>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.mockito</groupId>
46+
<artifactId>mockito-core</artifactId>
47+
<version>2.21.0</version>
48+
<scope>test</scope>
49+
</dependency>
50+
<dependency>
51+
<groupId>org.mockito</groupId>
52+
<artifactId>mockito-junit-jupiter</artifactId>
53+
<version>2.23.0</version>
54+
<scope>test</scope>
55+
</dependency>
56+
<dependency>
57+
<groupId>org.assertj</groupId>
58+
<artifactId>assertj-core</artifactId>
59+
<version>3.4.1</version>
60+
<scope>test</scope>
61+
</dependency>
2762
</dependencies>
2863

2964
<build>

samples/example-app/src/main/java/com/exceptionless/sample/app/Main.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public static void main(String[] args) {
99
System.getenv("EXCEPTIONLESS_SAMPLE_APP_API_KEY"),
1010
System.getenv("EXCEPTIONLESS_SAMPLE_APP_SERVER_URL"));
1111

12+
client.getConfigurationManager().useSessions();
13+
1214
client.submitSessionStart();
1315

1416
client.submitException(new RuntimeException("Test exception"));

src/main/java/com/exceptionless/exceptionlessclient/ExceptionlessClient.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@
1212
import com.exceptionless.exceptionlessclient.plugins.EventPluginRunner;
1313
import lombok.Builder;
1414
import lombok.Getter;
15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
1517

1618
import java.time.LocalDate;
1719
import java.util.Timer;
1820
import java.util.TimerTask;
1921

2022
public class ExceptionlessClient {
23+
private static final Logger LOG = LoggerFactory.getLogger(ExceptionlessClient.class);
2124
private static final String UPDATE_SETTINGS_TIMER_NAME = "update-settings-timer";
2225
private static final int UPDATE_SETTINGS_TIMER_INITIAL_DELAY = 5000;
2326

@@ -42,7 +45,7 @@ public void run() {
4245
try {
4346
configurationManager.getSettingsManager().updateSettingsThreadSafe();
4447
} catch (Exception e) {
45-
configurationManager.getLog().error("Error in updating settings", e);
48+
LOG.error("Error in updating settings", e);
4649
}
4750
}
4851
},
@@ -155,9 +158,7 @@ public void submitEvent(EventPluginContext eventPluginContext) {
155158
}
156159

157160
public void submitSessionEnd(String sessionOrUserId) {
158-
configurationManager
159-
.getLog()
160-
.info(String.format("Submitting session end: %s", sessionOrUserId));
161+
LOG.info(String.format("Submitting session end: %s", sessionOrUserId));
161162
configurationManager.getSubmissionClient().sendHeartBeat(sessionOrUserId, true);
162163
}
163164

@@ -170,11 +171,8 @@ public SubmissionResponse updateEmailAndDescription(
170171
referenceId,
171172
UserDescription.builder().description(description).emailAddress(email).build());
172173
if (!response.isSuccess()) {
173-
configurationManager
174-
.getLog()
175-
.error(
176-
String.format(
177-
"Failed to submit user email and description for event: %s", referenceId));
174+
LOG.error(
175+
String.format("Failed to submit user email and description for event: %s", referenceId));
178176
}
179177

180178
return response;

src/main/java/com/exceptionless/exceptionlessclient/configuration/ConfigurationManager.java

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import com.exceptionless.exceptionlessclient.exceptions.ClientException;
44
import com.exceptionless.exceptionlessclient.lastreferenceidmanager.DefaultLastReferenceIdManager;
55
import com.exceptionless.exceptionlessclient.lastreferenceidmanager.LastReferenceIdManagerIF;
6-
import com.exceptionless.exceptionlessclient.logging.LogIF;
7-
import com.exceptionless.exceptionlessclient.logging.ConsoleLog;
6+
import com.exceptionless.exceptionlessclient.logging.LogCapturerAppender;
7+
import com.exceptionless.exceptionlessclient.logging.LogCapturerIF;
8+
import com.exceptionless.exceptionlessclient.logging.NullLogCapturer;
89
import com.exceptionless.exceptionlessclient.models.EventPluginContext;
910
import com.exceptionless.exceptionlessclient.models.UserInfo;
1011
import com.exceptionless.exceptionlessclient.models.enums.EventPropertyKey;
@@ -22,16 +23,19 @@
2223
import com.exceptionless.exceptionlessclient.submission.SubmissionClientIF;
2324
import lombok.Builder;
2425
import lombok.Getter;
26+
import org.slf4j.Logger;
27+
import org.slf4j.LoggerFactory;
2528

2629
import java.util.*;
2730
import java.util.function.BiConsumer;
2831
import java.util.function.Consumer;
2932

3033
public class ConfigurationManager {
34+
private static final Logger LOG = LoggerFactory.getLogger(ConfigurationManager.class);
35+
3136
@Getter private final EnvironmentInfoCollectorIF environmentInfoCollector;
3237
@Getter private final ErrorParserIF errorParser;
3338
@Getter private final LastReferenceIdManagerIF lastReferenceIdManager;
34-
@Getter private final LogIF log;
3539
@Getter private final ModuleCollectorIF moduleCollector;
3640
@Getter private final RequestInfoCollectorIF requestInfoCollector;
3741
@Getter private final SubmissionClientIF submissionClient;
@@ -44,15 +48,15 @@ public class ConfigurationManager {
4448
private final Set<String> userAgentBotPatterns;
4549
@Getter private final PrivateInformationInclusions privateInformationInclusions;
4650
private final Set<String> dataExclusions;
47-
private PluginManager pluginManager;
51+
private final PluginManager pluginManager;
4852
@Getter private final StorageProviderIF storageProvider;
4953

5054
@Builder
5155
public ConfigurationManager(
5256
EnvironmentInfoCollectorIF environmentInfoCollector,
5357
ErrorParserIF errorParser,
5458
LastReferenceIdManagerIF lastReferenceIdManager,
55-
LogIF log,
59+
LogCapturerIF logCatpurer,
5660
ModuleCollectorIF moduleCollector,
5761
RequestInfoCollectorIF requestInfoCollector,
5862
SubmissionClientIF submissionClient,
@@ -62,10 +66,9 @@ public ConfigurationManager(
6266
Configuration configuration,
6367
Integer maxQueueItems,
6468
Integer processingIntervalInSecs) {
65-
this.log = log == null ? ConsoleLog.builder().build() : log;
6669
this.environmentInfoCollector =
6770
environmentInfoCollector == null
68-
? DefaultEnvironmentInfoCollector.builder().log(this.log).build()
71+
? DefaultEnvironmentInfoCollector.builder().build()
6972
: environmentInfoCollector;
7073
this.errorParser = errorParser == null ? DefaultErrorParser.builder().build() : errorParser;
7174
this.lastReferenceIdManager =
@@ -76,21 +79,20 @@ public ConfigurationManager(
7679
moduleCollector == null ? DefaultModuleCollector.builder().build() : moduleCollector;
7780
this.requestInfoCollector =
7881
requestInfoCollector == null
79-
? DefaultRequestInfoCollector.builder().log(this.log).build()
82+
? DefaultRequestInfoCollector.builder().build()
8083
: requestInfoCollector;
8184
this.storageProvider =
8285
storageProvider == null
8386
? InMemoryStorageProvider.builder().maxQueueItems(maxQueueItems).build()
8487
: storageProvider;
8588
this.configuration =
86-
configuration == null ? Configuration.defaultConfiguration() : configuration;
89+
configuration == null ? Configuration.defaultConfiguration() : configuration;
8790
this.settingsManager =
8891
SettingsManager.builder()
8992
.settingsClient(
9093
settingsClient == null
9194
? DefaultSettingsClient.builder().configuration(this.configuration).build()
9295
: settingsClient)
93-
.log(this.log)
9496
.storageProvider(this.storageProvider)
9597
.build();
9698
this.userAgentBotPatterns = new HashSet<>();
@@ -99,28 +101,26 @@ public ConfigurationManager(
99101
? DefaultSubmissionClient.builder()
100102
.settingsManager(this.settingsManager)
101103
.configuration(this.configuration)
102-
.log(this.log)
103104
.build()
104105
: submissionClient;
105106
this.queue =
106107
queue == null
107108
? DefaultEventQueue.builder()
108109
.configuration(this.configuration)
109-
.log(this.log)
110110
.processingIntervalInSecs(processingIntervalInSecs)
111111
.storageProvider(this.storageProvider)
112112
.submissionClient(this.submissionClient)
113113
.build()
114114
: queue;
115-
this.pluginManager = PluginManager.builder().log(this.log).build();
115+
this.pluginManager = PluginManager.builder().build();
116116
this.defaultData = new HashMap<>();
117117
this.defaultTags = new HashSet<>();
118118
this.onChangedHandlers = new ArrayList<>();
119119
this.dataExclusions = new HashSet<>();
120120
this.privateInformationInclusions = PrivateInformationInclusions.builder().build();
121-
this.pluginManager = PluginManager.builder().log(this.log).build();
122121
checkApiKeyIsValid();
123122
addPropertyChangeListeners();
123+
addLogCapturer(logCatpurer);
124124
}
125125

126126
private void addPropertyChangeListeners() {
@@ -138,6 +138,18 @@ private void checkApiKeyIsValid() {
138138
String.format("Apikey is not valid: [%s]", this.configuration.getApiKey()));
139139
}
140140

141+
private void addLogCapturer(LogCapturerIF logCatpurer) {
142+
logCatpurer = logCatpurer == null ? NullLogCapturer.builder().build() : logCatpurer;
143+
144+
ch.qos.logback.classic.Logger logBackRootLogger =
145+
(ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
146+
logBackRootLogger.addAppender(LogCapturerAppender.builder().logCapturer(logCatpurer).build());
147+
}
148+
149+
public void addDefaultTags(String... tags) {
150+
defaultTags.addAll(Arrays.asList(tags));
151+
}
152+
141153
public void addDataExclusions(String... exclusions) {
142154
dataExclusions.addAll(Arrays.asList(exclusions));
143155
}
@@ -160,7 +172,7 @@ public Set<String> getUserAgentBotPatterns() {
160172
}
161173

162174
public void submitSessionHeartbeat(String sessionOrUserId) {
163-
log.info(String.format("Submitting session heartbeat: %s", sessionOrUserId));
175+
LOG.info(String.format("Submitting session heartbeat: %s", sessionOrUserId));
164176
submissionClient.sendHeartBeat(sessionOrUserId, false);
165177
}
166178

@@ -216,12 +228,12 @@ public void setUserIdentity(UserInfo userInfo) {
216228
this.defaultData.put(EventPropertyKey.USER.value(), userInfo);
217229
}
218230

219-
public void useSession() {
231+
public void useSessions() {
220232
useSessions(30000);
221233
}
222234

223-
public void useSessions(int heartbeatInterval) {
224-
addPlugin(HeartbeatPlugin.builder().heartbeatInterval(heartbeatInterval).build());
235+
public void useSessions(int heartbeatIntervalInSecs) {
236+
addPlugin(HeartbeatPlugin.builder().heartbeatIntervalInSecs(heartbeatIntervalInSecs).build());
225237
}
226238

227239
public void onChanged(Consumer<ConfigurationManager> onChangedHandler) {
@@ -233,7 +245,7 @@ private void changed() {
233245
try {
234246
onChangedHandler.accept(this);
235247
} catch (Exception e) {
236-
log.error(String.format("Error calling on changed handler: %s", e.getMessage()), e);
248+
LOG.error(String.format("Error calling on changed handler: %s", e.getMessage()), e);
237249
}
238250
}
239251
}

src/main/java/com/exceptionless/exceptionlessclient/configuration/PluginManager.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.exceptionless.exceptionlessclient.configuration;
22

3-
import com.exceptionless.exceptionlessclient.logging.LogIF;
43
import com.exceptionless.exceptionlessclient.models.EventPluginContext;
54
import com.exceptionless.exceptionlessclient.plugins.EventPluginIF;
65
import com.exceptionless.exceptionlessclient.plugins.preconfigured.*;
76
import lombok.Builder;
87
import lombok.Getter;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
910

1011
import java.util.ArrayList;
1112
import java.util.List;
@@ -14,12 +15,12 @@
1415
import java.util.stream.Collectors;
1516

1617
public class PluginManager {
17-
private final LogIF log;
18+
private static final Logger LOG = LoggerFactory.getLogger(PluginManager.class);
19+
1820
@Getter private List<EventPluginIF> plugins;
1921

2022
@Builder
21-
public PluginManager(LogIF log) {
22-
this.log = log;
23+
public PluginManager() {
2324
this.plugins = new ArrayList<>();
2425
configureDefaultPlugins();
2526
sortPlugins();
@@ -28,17 +29,17 @@ public PluginManager(LogIF log) {
2829
private void configureDefaultPlugins() {
2930
addPlugin(ConfigurationDefaultsPlugin.builder().build());
3031
addPlugin(ErrorPlugin.builder().build());
31-
addPlugin(DuplicateErrorCheckerPlugin.builder().log(this.log).build());
32-
addPlugin(EventExclusionPlugin.builder().log(this.log).build());
32+
addPlugin(DuplicateErrorCheckerPlugin.builder().build());
33+
addPlugin(EventExclusionPlugin.builder().build());
3334
addPlugin(ModuleInfoPlugin.builder().build());
34-
addPlugin(RequestInfoPlugin.builder().log(this.log).build());
35+
addPlugin(RequestInfoPlugin.builder().build());
3536
addPlugin(EnvironmentInfoPlugin.builder().build());
3637
addPlugin(SubmissionMethodPlugin.builder().build());
3738
}
3839

3940
public void addPlugin(EventPluginIF eventPlugin) {
4041
if (plugins.stream().anyMatch(plugin -> plugin.getName().equals(eventPlugin.getName()))) {
41-
log.info(
42+
LOG.info(
4243
String.format(
4344
"Can't add plugin, name: %s, priority: %s as a plugin with this name already configured",
4445
eventPlugin.getName(), eventPlugin.getPriority()));

src/main/java/com/exceptionless/exceptionlessclient/extensions/ExceptionlessConfiguration.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/main/java/com/exceptionless/exceptionlessclient/extensions/ExceptionlessModule.java

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/main/java/com/exceptionless/exceptionlessclient/logging/ConsoleLog.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)