Example #1
1
		public void Test_DesiredBannerHitsForTimeslot_TheNumberOfHitsReturnedIsProportionalToTheTrafficShape()
		{
			using (new Context<Clock>(() => Common.Time.Clock, (c) => Common.Time.Clock = c, new ShiftedClock(DateTime.Today.AddMinutes(1))))
			using (new Context<TrafficShape>(() => Static.TrafficShape, (t) => Static.TrafficShape = t, new ConstantTrafficShape()))
			using (new Context<bool>(() => Common.Settings.SpreadBannerHits, (b) => Common.Settings.SpreadBannerHits = b, false))
			{
				int numberOfHitsPerTimeSlot = 100;

				Banner banner = new Banner()
								{
									Position = Banner.Positions.Leaderboard,
									FirstDay = Time.Today,
									LastDay = Time.Today,
									TotalRequiredImpressions = Convert.ToInt32(numberOfHitsPerTimeSlot / Timeslot.Duration.TotalDays),
								};
				banner.Update();
				Type t = banner.TotalHitsCounter.GetType();

				FieldInfo fi = t.GetField("value", BindingFlags.NonPublic | BindingFlags.Instance);
				fi.SetValue(banner.TotalHitsCounter, 0u);

				BannerDataHolder bdh = new BannerDataHolder(banner);
				BannerTimeslotInfoWithDesiredHits bannerTimeslotInfo = new BannerTimeslotInfoWithDesiredHits(bdh, Timeslots.GetCurrentTimeslot());
				Assert.AreEqual(numberOfHitsPerTimeSlot * Server.ServiceMultiplier, bannerTimeslotInfo.DesiredHits);
			}
		}
		void AddBannner(BannerDataHolder banner, Timeslot currentTimeslot, int i)
		{
			BannerTimeslotInfoWithDesiredHits info = new BannerTimeslotInfoWithDesiredHits(banner, currentTimeslot);
			info.Considerations.Increment();
			long actualHits = info.ActualHits.Value;
			long targetHits = (long)Math.Ceiling(getTargetHits(info) * Server.ServiceMultiplier);
			long remainingHits = (actualHits < targetHits) ? (targetHits - actualHits) : 0;
			if (remainingHits == 0)
			{
				if (Common.Settings.SpreadBannerHits)
				{
					info.NotifyAllHitsServed();
					#region REMOVED DUE TO BANNER SERVER BUG
					//IndicesOfBannersThatHaveReachedTheirLimits.Add(i);
					#endregion
				}
			}
			else
			{
				Banners.Add(banner);
				BannerTimeslotInfos.Add(info);
				TotalRemainingImpressionsForTheCurrentTimeSlot += remainingHits;
				ActualHitsList.Add(actualHits);
				RequiredHitsList.Add(targetHits);
			}
		}
		protected void AddBannner(BannerDataHolder banner)
		{
			Banners.Add(banner);
			TotalRemainingImpressionsForTheCurrentTimeSlot += 1;
			ActualHitsList.Add(0);
			RequiredHitsList.Add(1);
		}
Example #4
0
		bool BannerHasBeenShownToAParticularIdentityTooManyTimesToday(BannerDataHolder bdh, Identity id)
		{
			if (bdh.FrequencyCapPerIdentifierPerDay > -1)
			{
				long numberOfTimesBannerHasBeenShownToUser = Timeslots.Today.BannerHitsForIdentity(bdh.K, id.Guid).Value;
				if (numberOfTimesBannerHasBeenShownToUser >= bdh.FrequencyCapPerIdentifierPerDay)
				{
					return true;
				}
			}
			return false;
		}
Example #5
0
		private static void LogBannerHit(Identity id, BannerDataHolder bdh)
		{
			Banner b = new Banner(bdh.K);

			b.RegisterHit(id);
		}