public void TestSingleActionOfflineModeCustomLogger() { var dsConfig = new Microsoft.Research.MultiWorldTesting.ClientLibrary.SingleAction.DecisionServiceConfiguration<TestContext>( authorizationToken: "my token", explorer: new Microsoft.Research.MultiWorldTesting.ExploreLibrary.SingleAction.EpsilonGreedyExplorer<TestContext>(new TestSingleActionPolicy(), epsilon: 0.2f, numActions: Constants.NumberOfActions)); dsConfig.OfflineMode = true; dsConfig.Recorder = new TestLogger(); int numChooseAction = 100; var ds = new Microsoft.Research.MultiWorldTesting.ClientLibrary.SingleAction.DecisionService<TestContext>(dsConfig); for (int i = 0; i < numChooseAction; i++) { ds.ChooseAction(new UniqueEventID { Key = i.ToString() }, new TestContext()); } Assert.AreEqual(numChooseAction, ((TestLogger)dsConfig.Recorder).NumRecord); int numReward = 200; for (int i = 0; i < numReward; i++) { ds.ReportReward(i, new UniqueEventID { Key = i.ToString() }); } Assert.AreEqual(numReward, ((TestLogger)dsConfig.Recorder).NumReward); int numOutcome = 300; for (int i = 0; i < numOutcome; i++) { ds.ReportOutcome(i.ToString(), new UniqueEventID { Key = i.ToString() }); } Assert.AreEqual(numOutcome, ((TestLogger)dsConfig.Recorder).NumOutcome); ds.Flush(); Assert.AreEqual(0, ((TestLogger)dsConfig.Recorder).NumRecord); Assert.AreEqual(0, ((TestLogger)dsConfig.Recorder).NumReward); Assert.AreEqual(0, ((TestLogger)dsConfig.Recorder).NumOutcome); }
public void TestSingleActionDSUploadMultipleEvents() { joinServer.Reset(); string uniqueKey = "test interaction"; var dsConfig = new Microsoft.Research.MultiWorldTesting.ClientLibrary.SingleAction.DecisionServiceConfiguration<TestContext>( authorizationToken: MockCommandCenter.AuthorizationToken, explorer: new Microsoft.Research.MultiWorldTesting.ExploreLibrary.SingleAction.EpsilonGreedyExplorer<TestContext>(new TestSingleActionPolicy(), epsilon: 0.2f, numActions: Constants.NumberOfActions)); dsConfig.JoinServerType = JoinServerType.CustomSolution; dsConfig.LoggingServiceAddress = MockJoinServer.MockJoinServerAddress; var ds = new Microsoft.Research.MultiWorldTesting.ClientLibrary.SingleAction.DecisionService<TestContext>(dsConfig); uint chosenAction1 = ds.ChooseAction(new UniqueEventID { Key = uniqueKey }, new TestContext()); uint chosenAction2 = ds.ChooseAction(new UniqueEventID { Key = uniqueKey }, new TestContext()); ds.ReportReward(1.0f, new UniqueEventID { Key = uniqueKey }); ds.ReportOutcome(JsonConvert.SerializeObject(new { value = "test outcome" }), new UniqueEventID { Key = uniqueKey }); ds.Flush(); Assert.AreEqual(4, joinServer.EventBatchList.Sum(batch => batch.ExperimentalUnitFragments.Count)); }