public void Test_EventManager() { // Prepare IEventManager manager = this.GetService <IEventManager>(); manager.Start(); ISignalService signals = this.GetService <ISignalService>(); signals.Truncate(); int countBefore = signals.Count(); // Pre-validate // Perform List <string> data = new List <string>(); for (int i = 0; i < 100; i++) { data.Add("{ guid: \"" + Guid.NewGuid().ToString() + "\"}"); } foreach (string signal in data) { manager.RegisterEvent(Signal.New("fooDevice", signal, DateTime.Now)); Thread.Sleep(5); } Thread.Sleep(10 * 1000); // Wait while manager save data to the end // Post-validate int countAfter = signals.Count(); Assert.Equal(0, countAfter); manager.Stop(); }
public void Test_Service_Truncate(int rowCount) { // Prepare ISignalService signals = this.GetService <ISignalService>(); int countBefore = signals.Count(); List <Signal> scope = new List <Signal>(); for (int i = 0; i < rowCount; i++) { scope.Add(Signal.New("fooDevice", "foo", DateTime.Now)); } signals.Add(scope); // Pre-validate Assert.Equal(rowCount + countBefore, signals.Count()); // Perform signals.Truncate(); // Post-validate Assert.Equal(0, signals.Count()); }
public void Start() { Task pushEventsToLocalStorageTask = Task.Factory.StartNew(() => { List <Signal> extract = new List <Signal>(); while (true) { if (_TokenSource.IsCancellationRequested) { break; } if (movingToLocal || movingToCloud) // Must wait when any data transfer { Thread.Sleep(20); continue; } movingToLocal = true; Signal signal; try { Thread.Sleep(20); extract.Clear(); while (_EventCache.TryTake(out signal)) { extract.Add(signal); } _Service.Add(extract); } catch (Exception ex) { _Logger.LogError(ex.Message); } finally { movingToLocal = false; } while (_EventCacheTemp.TryTake(out signal)) { _EventCache.Add(signal); } Thread.Sleep(IntervalMemToLocal * 1000); } }, _TokenSource.Token); Task transferEventsToCloudStorageTask = Task.Factory.StartNew(() => { while (true) { Thread.Sleep(IntervalLocalToCloud * 1000); int attempt = 0; while (movingToLocal || movingToCloud) { attempt++; if (attempt > 100) // Do task anyway { break; } Thread.Sleep(100); } movingToCloud = true; try { IEnumerable <Signal> events = _Service.GetAll(); foreach (var signal in events) { _CloudAdapter.Enqueue(signal.DeviceId, signal.Data); } _Service.Truncate(); } catch (Exception ex) { _Logger.LogError(ex.Message); } finally { movingToCloud = false; } } }, _TokenSource.Token); }