private async Task SendHitAsync(HitBuilder hit) { #if RUN_SYNCHRONOUS lock (syncObject) { #endif HitSentEventArgs args = null; var serviceManager = new AnalyticsManager(MockConfig.Current.PlatformInfoProvider) { IsDebug = true }; serviceManager.HitSent += (s, e) => { args = e; Assert.IsFalse(args == null); }; serviceManager.HitMalformed += (s, e) => { Assert.Fail("Malformed: " + e.Hit.Parse()); }; serviceManager.HitFailed += (s, e) => { Assert.Fail("Failed:" + e.Error); }; #if !NATIVESDK_TEST var tracker = new SimpleTracker(MockConfig.Current.PropertyId, serviceManager) { AppName = MockConfig.Current.AppName, ClientId = MockConfig.Current.ClientId, ScreenName = MockConfig.Current.ScreenName }; #else var tracker = new Tracker(MockConfig.Current.PropertyId, MockConfig.Current.PlatformInfoProvider, serviceManager); serviceManager.IsDebug = true; #endif tracker.Send(hit.Build()); #if RUN_SYNCHRONOUS serviceManager.DispatchAsync().AsTask().Wait(); #else await serviceManager.DispatchAsync(); await Task.Delay(200); //HitSent processing is async.. since we need args, let it replicate #endif Assert.IsTrue(args != null, "args != null (" + hit.BuildToString() + ")"); using (var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(args.Response))) { if (serviceManager.IsDebug) { var serializer = new DataContractJsonSerializer(typeof(DebugResponse)); var debugResponse = (DebugResponse)serializer.ReadObject(stream); Assert.IsTrue(debugResponse.HitParsingResult.All(r => r.Valid), "Invalid Request: (" + args.Response + ")"); } } #if RUN_SYNCHRONOUS } // lock #endif }
public async Task SendEventWithDispatcherPeriod() { var delay = 4; var ts = TimeSpan.FromSeconds(delay); HitSentEventArgs args = null; var hit = HitBuilder.CreateCustomEvent("category", "action", "label", 2); var serviceManager = new AnalyticsManager(MockConfig.Current.PlatformInfoProvider); serviceManager.HitSent += (s, e) => { args = e; }; serviceManager.DispatchPeriod = ts; var tracker = new Tracker(MockConfig.Current.PropertyId, MockConfig.Current.PlatformInfoProvider, serviceManager) { AppName = MockConfig.Current.AppName, ClientId = MockConfig.Current.ClientId, ScreenName = MockConfig.Current.ScreenName }; tracker.Send(hit.Build()); serviceManager.IsDebug = true; //Wait half our dispatch time, so should have no response yet await Task.Delay(TimeSpan.FromSeconds(delay / 2)); Assert.IsTrue(args == null); //Wait for Dispatch await Task.Delay(TimeSpan.FromSeconds(delay)); Assert.IsTrue(args != null); System.Diagnostics.Debug.WriteLine(args.Hit.Parse()); using (var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(args.Response))) { if (serviceManager.IsDebug) { var serializer = new DataContractJsonSerializer(typeof(DebugResponse)); var debugResponse = (DebugResponse)serializer.ReadObject(stream); Assert.IsTrue(debugResponse.HitParsingResult.All(r => r.Valid)); var queueTimeParam = debugResponse.HitParsingResult[0].Hit.FindParamInQueryString(ParameterNames.QueueTime); Assert.IsTrue(queueTimeParam != null); } } }
private void AnalyticsManager_HitSent(object sender, HitSentEventArgs e) { Log(e.Hit, e.Response); }