public void MakeLoadsOfMakeBannerServerCalls() { Caching.Instances.Main.FlushAll(); int reps = 200000; TimeSpan delay = new TimeSpan(0,0,0,0, (int)Time.Minutes(4).TotalMilliseconds / 800); Identity id = new BrowserGuidIdentity(Guid.NewGuid()); List<int> placeKs = (new PlaceSet(new Query(new Q(Place.Columns.K, QueryOperator.LessThan, 100)))).ToList().ConvertAll(p => p.K); placeKs.ForEach(p => id.AddPlaceVisited(p)); List<int> musicTypeKs = (new MusicTypeSet(new Query())).ToList().ConvertAll(mt => mt.K); musicTypeKs.ForEach(p => id.AddFavouriteMusicType(p)); for (int i = 0; i < reps; i++) { MakeBannerServerCall(id, GetPosition(i)); System.Threading.Thread.Sleep(delay); } }
public void TestVariousPrioritiedBannersAreServedInOrderOfPriority() { Caching.Instances.Main.FlushAll(); Caching.Instances.LocalCache.FlushAll(); using (new Context<double>(() => Server.ServiceMultiplier, d => Server.ServiceMultiplier = d, 1.0)) using (new Context<Clock>(() => Time.Clock, (c) => Time.Clock = c, new ShiftedClock(Time.Today))) using (new Context<TrafficShape>(() => Static.TrafficShape, (t) => Static.TrafficShape = t, new ConstantTrafficShape())) { int numberOfHitsPerTimeslot = 1; UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "delete from banner"); Banner.Positions pos = Banner.Positions.None; 5.Times(i => AddValidBanner(numberOfHitsPerTimeslot, i)); 5.Times(i => { Banner b = AddValidBanner(numberOfHitsPerTimeslot, i); b.AlwaysShow = true; b.FrequencyCapPerIdentifierPerDay = 1; b.Update(); if (pos == Banner.Positions.None) pos = b.Position; }); BrowserGuidIdentity id = new BrowserGuidIdentity(Guid.NewGuid()); Server server = new Server(); int repetitons = 10; int previousPriorityScore = int.MaxValue; int previousK = int.MaxValue; for (int i = 0; i < repetitons; i++) { BannerDataHolder bdh = server.GetBanner(pos, false, id, new Bobs.BannerServer.Rules.RequestRules()); bdh.Banner.RegisterHit(id); int priorityScore = bdh.Priority * 2 + ((bdh.AlwaysShow) ? 1 : 0); Assert.IsTrue(previousPriorityScore > priorityScore || previousK == bdh.K); previousPriorityScore = priorityScore; previousK = bdh.K; } Assert.AreEqual(0, previousPriorityScore); } }
public void BannersAreServedAndCappedOnceTheyHaveReachedTheLimitForTheirTimeslot() { Caching.Instances.Main.FlushAll(); Caching.Instances.LocalCache.FlushAll(); using (new Context<Clock>(() => Time.Clock, (c) => Time.Clock = c, new ShiftedClock(Time.Today))) using (new Context<bool>(() => Common.Settings.SpreadBannerHits, (b) => Common.Settings.SpreadBannerHits = b, false)) using (new Context<TrafficShape>(() => Static.TrafficShape, (t) => Static.TrafficShape = t, new ConstantTrafficShape())) { int numberOfHitsPerTimeslot = 5; UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "DELETE FROM Banner"); Banner b = AddValidBanner(numberOfHitsPerTimeslot); Server server = new Server(); int counter = 0; BannerDataHolder bdh = null; while (true) { Identity id = new BrowserGuidIdentity(Guid.NewGuid()); bdh = server.GetBanner(b.Position, false, id, new Bobs.BannerServer.Rules.RequestRules()); if (bdh == null) { break; } Banner banner = new Banner(bdh.K); banner.RegisterHit(id); counter++; } Assert.AreEqual((int)Math.Ceiling(numberOfHitsPerTimeslot * Server.ServiceMultiplier), counter); } }
public void AlwaysShowWithFrequencyCap() { int numberOfHitsPerTimeslot = 5; UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "DELETE FROM Banner"); Banner b = AddValidBanner(numberOfHitsPerTimeslot); b.AlwaysShow = true; b.FrequencyCapPerIdentifierPerDay = 1; b.Update(); Server server = new Server(); BrowserGuidIdentity id = new BrowserGuidIdentity(Guid.NewGuid()); server.GetBanner(b.Position, false, id, new Bobs.BannerServer.Rules.RequestRules()).Banner.RegisterHit(id); Assert.IsNull(server.GetBanner(b.Position, false, id, new Bobs.BannerServer.Rules.RequestRules())); }