public void TestConstructor() { TestSubscriberProvider provider = new TestSubscriberProvider(); using (ScGimp gimp = new ScGimp(provider, provider, provider)) { Assert.IsNotNull(gimp); } }
public async Task TestProcessSpectrum() { TestSubscriberProvider provider = new TestSubscriberProvider(); ScGimpCoreConfig config = new ScGimpCoreConfig(); config.Options.ProcessType = ScGimpProcessType.SpectrumFeed; using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options)) { await gimp.Process(); Assert.IsNotNull(gimp.SpectrumFeed); Assert.IsTrue(gimp.SpectrumFeed.Count() > 0); } }
public async Task TestStartAndStop() { TestSubscriberProvider provider = new TestSubscriberProvider(); ScGimpCoreConfig config = new ScGimpCoreConfig(); config.Options.ProcessType = ScGimpProcessType.RssFeed; using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options)) { await gimp.Start(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1d)); await gimp.Stop(); } }
public async Task TestSpectrumFeedNotifications() { TestSubscriberProvider provider = new TestSubscriberProvider(); ScGimpCoreConfig config = new ScGimpCoreConfig(); config.Options.ProcessType = ScGimpProcessType.SpectrumFeed; using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options)) { await gimp.Notify ( new SpectrumThread[] { SpectrumThread.FromThread ( new SpectrumThread.Thread() { id = "1", subject = "Test announcement Publish to LIVE!", slug = "test-announcement-publish-to-live", channel_id = "1", time_created = (int)DateTimeOffset.Now.AddDays(-1).ToUnixTimeMilliseconds() } ), SpectrumThread.FromThread ( new SpectrumThread.Thread() { id = "2", subject = "Test announcement Release notes", slug = "test-announcement-release-notes", channel_id = "1", time_created = (int)DateTimeOffset.Now.AddDays(-2).ToUnixTimeMilliseconds() } ) } ); await Task.Delay(TimeSpan.FromSeconds(60)); Assert.IsTrue(gimp.Errors.Count() == 0); } }
public async Task TestAntiSpam() { TestSubscriberProvider provider = new TestSubscriberProvider(); ScGimpCoreConfig config = new ScGimpCoreConfig(); FeedItem[] items = new FeedItem[] { new FeedItem() { Content = "Test around the verse content.", Element = null, Link = "https://www.robertsspaceindustries.com/", PublishDate = DateTimeOffset.Now.AddDays(1d), Title = "Test around the verse", Type = FeedItemType.Sale }, new FeedItem() { Content = "Test bugsmashers content.", Element = null, Link = "https://www.robertsspaceindustries.com/", PublishDate = DateTimeOffset.Now.AddDays(1d), Title = "Test bugsmashers", Type = FeedItemType.Bugsmashers } }; config.Options.ProcessType = ScGimpProcessType.RssFeed; using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options)) { await gimp.Notify(items); await Task.Delay(TimeSpan.FromSeconds(5)); await gimp.Notify(items); Assert.IsTrue(gimp.Errors.Where(e => !e.Message.Contains("Spam")).Count() == 0); } }
public async Task TestRssFeedNotifications() { TestSubscriberProvider provider = new TestSubscriberProvider(); ScGimpCoreConfig config = new ScGimpCoreConfig(); config.Options.ProcessType = ScGimpProcessType.RssFeed; using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options)) { await gimp.Notify ( new FeedItem[] { new FeedItem() { Content = "Test around the verse content.", Element = null, Link = "https://www.robertsspaceindustries.com/", PublishDate = DateTimeOffset.Now.AddDays(1d), Title = "Test around the verse", Type = FeedItemType.Sale }, new FeedItem() { Content = "Test bugsmashers content.", Element = null, Link = "https://www.robertsspaceindustries.com/", PublishDate = DateTimeOffset.Now.AddDays(1d), Title = "Test bugsmashers", Type = FeedItemType.Bugsmashers } } ); Assert.IsTrue(gimp.Errors.Count() == 0); } }
public async Task TestStoreFeedNotifications() { TestSubscriberProvider provider = new TestSubscriberProvider(); ScGimpCoreConfig config = new ScGimpCoreConfig(); config.Options.ProcessType = ScGimpProcessType.StoreFeed; using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options)) { await gimp.Notify ( new StoreItem[] { new StoreItem() { Element = null, Cost = 200.50m, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store warbond dingy LTI", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown }, new StoreItem() { Element = null, Cost = 45, Url = "https://www.robertsspaceindustries.com/", Currency = "USD", Title = "Test store float package", Type = StoreItemType.Unknown } } ); Assert.IsTrue(gimp.Errors.Count() == 0); } }
public static async Task Worker(TextWriter log, CancellationToken token) { try { _log = log; ScGimpWebJobConfig config = new ScGimpWebJobConfig(); _debug = config.Debug; object provider = null; if (config.Debug) { provider = new DummySubscriberProvider(); await log.WriteLineAsync($"WARNING: Debug mode is enabled."); } else { provider = new DbProvider(); } await log.WriteLineAsync($"Gimp subscriber provider: {provider.GetType().FullName}"); await log.WriteLineAsync($"Gimp discord webhook provider: {provider.GetType().FullName}"); await log.WriteLineAsync($"Gimp notification log provider: {provider.GetType().FullName}"); using ( ScGimp gimp = new ScGimp ( (ISubscriberProvider)provider, (IDiscordWebhookProvider)provider, (INotificationLogProvider)provider, config.Options ) ) { gimp.Error += OnError; gimp.Processing += OnProcessing; gimp.Processed += OnProcessed; gimp.RssFeedUpdate += OnRssFeedUpdate; gimp.SpectrumFeedUpdate += OnSpectrumFeedUpdate; gimp.StoreFeedUpdate += OnStoreFeedUpdate; await log.WriteLineAsync($"Gimp process type: {Enum.GetName(typeof(ScGimpProcessType), gimp.GetScGimpProcessType())}"); await log.WriteLineAsync($"Gimp default sleep: {gimp.Options.Sleep.ToString()}"); await log.WriteLineAsync($"Gimp after hours sleep multiplier: {gimp.Options.AfterHoursSleepMultiplier.ToString()}"); await log.WriteLineAsync($"Gimp outside comm link sleep multiplier: {gimp.Options.OutsideCommLinkSleepMultiplier.ToString()}"); await log.WriteLineAsync($"CIG comm link end: {gimp.Options.CigCommLinkEnd.ToString()}"); await log.WriteLineAsync($"CIG comm link start: {gimp.Options.CigCommLinkStart.ToString()}"); await log.WriteLineAsync($"CIG working hours end: {gimp.Options.CigWorkingHoursEnd.ToString()}"); await log.WriteLineAsync($"CIG working hours start: {gimp.Options.CigWorkingHoursStart.ToString()}"); await log.WriteLineAsync($"Starting the gimp."); await gimp.Start(); await log.WriteLineAsync($"The gimp has started."); while (!token.IsCancellationRequested) { try { // auto restart if not running. if ( gimp.Status == null || gimp.Status.Value == TaskStatus.Faulted || gimp.Status.Value == TaskStatus.Canceled || gimp.Status.Value == TaskStatus.RanToCompletion || ( gimp.LastUpdated.HasValue && gimp.LastUpdated.Value.ToUniversalTime() < DateTimeOffset.UtcNow.AddHours(-1d) ) ) { await log.WriteLineAsync($"Restarting the gimp."); await gimp.Start(); await log.WriteLineAsync($"The gimp has restarted."); } await Task.Delay(TimeSpan.FromMinutes(5), token); } catch (TaskCanceledException) { } catch (Exception ex) { LogException(ex); } } gimp.Processing -= OnProcessing; gimp.Processed -= OnProcessed; gimp.RssFeedUpdate -= OnRssFeedUpdate; gimp.SpectrumFeedUpdate -= OnSpectrumFeedUpdate; gimp.StoreFeedUpdate -= OnStoreFeedUpdate; gimp.Error -= OnError; await log.WriteLineAsync($"Stopping the gimp."); await gimp.Stop(); await log.WriteLineAsync($"The gimp has stopped."); } } catch (TaskCanceledException) { } catch (Exception exception) { LogException(exception); } }