Esempio n. 1
0
		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);
			}
		}
Esempio n. 2
0
		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);
			}
		}
Esempio n. 3
0
		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);
			}
		}
Esempio n. 4
0
		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()));
		}