Skip to content

Commit 2340ab3

Browse files
fayyazarshadMichael Ng
authored andcommitted
Default Event Dispatcher In case of null (#196)
1 parent 03261a7 commit 2340ab3

File tree

4 files changed

+45
-12
lines changed

4 files changed

+45
-12
lines changed

OptimizelySDK.Tests/EventTests/BatchEventProcessorTest.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using NUnit.Framework;
33
using OptimizelySDK.Config;
44
using OptimizelySDK.Entity;
5+
using OptimizelySDK.ErrorHandler;
56
using OptimizelySDK.Event;
67
using OptimizelySDK.Event.Dispatcher;
78
using OptimizelySDK.Event.Entity;
@@ -23,7 +24,7 @@ class BatchEventProcessorTest
2324
public const int MAX_BATCH_SIZE = 10;
2425
public const int MAX_DURATION_MS = 1000;
2526
public const int TIMEOUT_INTERVAL_MS = 5000;
26-
27+
2728
private ProjectConfig Config;
2829
private Mock<ILogger> LoggerMock;
2930
private BlockingCollection<object> eventQueue;
@@ -136,6 +137,29 @@ public void TestFlush()
136137
Assert.AreEqual(0, EventProcessor.EventQueue.Count);
137138
}
138139

140+
[Test]
141+
public void TestDefaultEventDispatcherIfNotProvided()
142+
{
143+
SetEventProcessor(null);
144+
145+
Assert.True(EventProcessor.EventDispatcher is DefaultEventDispatcher);
146+
}
147+
148+
[Test]
149+
public void TestNoOpLoggerIfNotProvided()
150+
{
151+
EventProcessor = new BatchEventProcessor.Builder().Build();
152+
153+
Assert.True(EventProcessor.Logger is OptimizelySDK.Logger.NoOpLogger);
154+
}
155+
156+
[Test]
157+
public void TestNoOpErrorHandlerIfNotProvided()
158+
{
159+
EventProcessor = new BatchEventProcessor.Builder().Build();
160+
Assert.True(EventProcessor.ErrorHandler is NoOpErrorHandler);
161+
}
162+
139163
[Test]
140164
public void TestFlushOnMismatchRevision()
141165
{

OptimizelySDK.Tests/UtilsTests/PrivateObject.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ public void SetFieldOrProperty(string propertyName, object value)
4141
Type.DefaultBinder, createdInstance, new object[] { value });
4242
}
4343

44+
public Type GetFieldOrProperyType(string propertyName)
45+
{
46+
return instanceType.GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Instance).FieldType;
47+
}
48+
4449
public object Invoke(string name, params object[] args)
4550
{
4651
return instanceType.InvokeMember(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.NonPublic,

OptimizelySDK/Event/BatchEventProcessor.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ public class BatchEventProcessor: EventProcessor, IDisposable
5757
public bool IsStarted { get; private set; }
5858
private Thread Executer;
5959

60-
protected ILogger Logger { get; set; }
61-
protected IErrorHandler ErrorHandler { get; set; }
60+
public ILogger Logger { get; protected set; }
61+
public IErrorHandler ErrorHandler { get; protected set; }
6262
public NotificationCenter NotificationCenter { get; set; }
6363

6464
private readonly object mutex = new object();
6565

66-
private IEventDispatcher EventDispatcher;
66+
public IEventDispatcher EventDispatcher { get; private set; }
6767
public BlockingCollection<object> EventQueue { get; private set; }
6868
private List<UserEvent> CurrentBatch = new List<UserEvent>();
6969
private long FlushingIntervalDeadline;
@@ -345,12 +345,11 @@ public BatchEventProcessor Build()
345345
public BatchEventProcessor Build(bool start)
346346
{
347347
var batchEventProcessor = new BatchEventProcessor();
348-
batchEventProcessor.Logger = Logger;
349-
batchEventProcessor.ErrorHandler = ErrorHandler;
350-
batchEventProcessor.EventDispatcher = EventDispatcher;
348+
batchEventProcessor.Logger = Logger ?? new NoOpLogger();
349+
batchEventProcessor.ErrorHandler = ErrorHandler ?? new NoOpErrorHandler(Logger);
350+
batchEventProcessor.EventDispatcher = EventDispatcher ?? new DefaultEventDispatcher(Logger);
351351
batchEventProcessor.EventQueue = EventQueue;
352-
batchEventProcessor.NotificationCenter = NotificationCenter;
353-
352+
batchEventProcessor.NotificationCenter = NotificationCenter;
354353
batchEventProcessor.BatchSize = BatchSize < 1 ? BatchEventProcessor.DEFAULT_BATCH_SIZE : BatchSize;
355354
batchEventProcessor.FlushInterval = FlushInterval <= TimeSpan.FromSeconds(0) ? BatchEventProcessor.DEFAULT_FLUSH_INTERVAL : FlushInterval;
356355
batchEventProcessor.TimeoutInterval = TimeoutInterval <= TimeSpan.FromSeconds(0) ? BatchEventProcessor.DEFAULT_TIMEOUT_INTERVAL : TimeoutInterval;

OptimizelySDK/OptimizelyFactory.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public static class OptimizelyFactory
3131
{
3232
private static int MaxEventBatchSize;
3333
private static TimeSpan MaxEventFlushInterval;
34+
private static ILogger OptimizelyLogger;
3435

3536
#if !NETSTANDARD1_6 && !NET35
3637
public static void SetBatchSize(int batchSize)
@@ -42,17 +43,20 @@ public static void SetFlushInterval(TimeSpan flushInterval)
4243
{
4344
MaxEventFlushInterval = flushInterval;
4445
}
45-
#endif
46-
4746

47+
public static void SetLogger(ILogger logger)
48+
{
49+
OptimizelyLogger = logger;
50+
}
51+
#endif
4852
public static Optimizely NewDefaultInstance(string sdkKey)
4953
{
5054
return NewDefaultInstance(sdkKey, null);
5155
}
5256

5357
public static Optimizely NewDefaultInstance(string sdkKey, string fallback)
5458
{
55-
var logger = new DefaultLogger();
59+
var logger = OptimizelyLogger ?? new DefaultLogger();
5660
var errorHandler = new DefaultErrorHandler();
5761
var eventDispatcher = new DefaultEventDispatcher(logger);
5862
var builder = new HttpProjectConfigManager.Builder();
@@ -76,6 +80,7 @@ public static Optimizely NewDefaultInstance(ProjectConfigManager configManager,
7680

7781
#if !NETSTANDARD1_6 && !NET35
7882
eventProcessor = new BatchEventProcessor.Builder()
83+
.WithLogger(logger)
7984
.WithMaxBatchSize(MaxEventBatchSize)
8085
.WithFlushInterval(MaxEventFlushInterval)
8186
.WithEventDispatcher(eventDispatcher)

0 commit comments

Comments
 (0)