public void Should_CallProgressCallback_When_NewProgessNotEqualsOldProgress() { int progressChangedCallbackCounter = 0; WuStateAsyncJob.ProgressChangedCallback progressCallback = (j, cu, ci, co, p) => { progressChangedCallbackCounter++; }; WuStateAsyncJob.TimeoutCallback timeoutCallback = (j, t) => { Assert.Fail("Should not be called."); }; UpdateFake update1 = new UpdateFake("update1"); UpdateFake update2 = new UpdateFake("update2"); Tuple <IUpdate, int, int, int>[] progessChanges = { new Tuple <IUpdate, int, int, int>(update1, 0, 1, 0), new Tuple <IUpdate, int, int, int>(update1, 0, 1, 100), new Tuple <IUpdate, int, int, int>(update1, 1, 1, 100), new Tuple <IUpdate, int, int, int>(update2, 1, 1, 100) }; using (var asyncJob = new WuStateAsyncJobProxy(WuStateId.Downloading, "name", 10000, timeoutCallback, progressCallback)) { foreach (var pc in progessChanges) { asyncJob.SimulateOnProgressNow(pc.Item1, pc.Item2, pc.Item3, pc.Item4); } } Assert.AreEqual(progessChanges.Length, progressChangedCallbackCounter); }
public void Should_AcceptEula_When_EulaIsNotAccepted() { UpdateSessionFake session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", true); var update2 = new UpdateFake("update2", true); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1, update2)); update1.EulaAccepted = false; update1.Identity = CommonMocks.GetUpdateIdentity("update1Id"); update2.EulaAccepted = false; update2.Identity = CommonMocks.GetUpdateIdentity("update2Id"); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = false; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); var updates = wu.GetAvailableUpdates(); Assert.IsNotNull(updates.Single(u => u.ID.Equals("update1Id"))); Assert.IsNotNull(updates.Single(u => u.ID.Equals("update2Id"))); wu.AcceptEula(updates.Single(u => u.ID.Equals("update1Id"))); Assert.IsTrue(wu.GetAvailableUpdates().Single(u => u.ID.Equals("update1Id")).EulaAccepted); wu.AcceptEula(updates.Single(u => u.ID.Equals("update2Id")).ID); Assert.IsTrue(wu.GetAvailableUpdates().Single(u => u.ID.Equals("update2Id")).EulaAccepted); } }
public void Should_AcceptEulas_When_BeginDownloadingAndAutoAcceptEnabled() { var session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", true); update1.EulaAccepted = false; var update2 = new UpdateFake("update2", true); update2.EulaAccepted = true; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1, update2)); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.BeginDownloadUpdates(); WaitForStateChange(wu, WuStateId.DownloadCompleted); Assert.IsTrue(update1.EulaAccepted); Assert.IsTrue(update2.EulaAccepted); Assert.AreEqual(wu.GetAvailableUpdates().Count, 2); Assert.IsTrue(wu.GetAvailableUpdates().All(u => u.IsDownloaded && u.EulaAccepted)); } }
public void Should_CallProgressCallback_When_OnProgressIsCalled() { ManualResetEvent callbackSignal = new ManualResetEvent(false); int timeoutSec = 1; IUpdate callbackUpdate = null, inputUpdate = new UpdateFake("id"); int callbackIndex = -1, callbackCount = -1, callbackPercent = -1, inputIndex = 0, inputCount = 1, inputPercent = 37; WuStateAsyncJob callbackJob = null; WuStateAsyncJob.ProgressChangedCallback callback = (sender, update, index, count, percent) => { callbackJob = sender; callbackUpdate = update; callbackIndex = index; callbackCount = count; callbackPercent = percent; callbackSignal.Set(); }; var job = (new WuStateAsyncJobProxy(WuStateId.Downloading, "name", timeoutSec, (x, y) => { }, callback)); job.EnterState(new WuStateReady()); job.SimulateOnProgressNow(inputUpdate, inputIndex, inputCount, inputPercent); if (!callbackSignal.WaitOne(timeoutSec * 2000)) { Assert.Fail($"progress callback was not called"); } Assert.AreEqual(callbackIndex, inputIndex); Assert.AreEqual(callbackCount, inputCount); Assert.AreSame(callbackUpdate, inputUpdate); Assert.AreSame(callbackJob, job); job.Dispose(); }
public void Should_NotDownloadInstalledUpdates_When_DownloadUpdates() { var session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", true); update1.IsInstalled = false; update1.IsDownloaded = false; var update2 = new UpdateFake("update2", true); update2.IsInstalled = false; update2.IsDownloaded = false; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1, update2)); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); update1.IsInstalled = true; wu.BeginDownloadUpdates(); WaitForStateChange(wu, WuStateId.DownloadCompleted); Assert.AreEqual(wu.GetAvailableUpdates().Count, 2); Assert.IsNotNull(wu.GetAvailableUpdates().SingleOrDefault(u => u.ID.Equals("update1") && !u.IsDownloaded && u.IsInstalled)); Assert.IsNotNull(wu.GetAvailableUpdates().SingleOrDefault(u => u.ID.Equals("update2") && u.IsDownloaded && !u.IsInstalled)); } }
public void Should_NotEnterDonwloadingState_When_NoUpdatesAvailable() { var session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", true); update1.IsInstalled = true; update1.IsDownloaded = false; var update2 = new UpdateFake("update2", true); update2.IsDownloaded = true; using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { try { wu.BeginDownloadUpdates(); // nerver searched for updates, no updates should be available Assert.Fail("exception expected"); } catch (InvalidStateTransitionException) { } session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1, update2)); wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); try { wu.BeginDownloadUpdates(); // available updates are already installed or downloaded Assert.Fail("exception expected"); } catch (InvalidStateTransitionException) { } } }
public void Should_NotAcceptEula_When_UpdateIsNotSelected() { UpdateSessionFake session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", false); var update2 = new UpdateFake("update2", false); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1, update2)); update1.EulaAccepted = false; update2.EulaAccepted = false; using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.AutoSelectUpdates = false; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.SelectUpdate(update2.Identity.UpdateID); wu.BeginDownloadUpdates(); WaitForStateChange(wu, WuStateId.DownloadCompleted); var updates = wu.GetAvailableUpdates(); Assert.IsFalse(updates.Single(u => u.ID.Equals("update1")).SelectedForInstallation); Assert.IsFalse(updates.Single(u => u.ID.Equals("update1")).EulaAccepted); Assert.IsTrue(updates.Single(u => u.ID.Equals("update2")).EulaAccepted); Assert.IsTrue(updates.Single(u => u.ID.Equals("update2")).SelectedForInstallation); } }
public void Should_EnterInstallFailedState_When_InstallationFailed() { var session = new UpdateSessionFake(true); var update = new UpdateFake("update1", true); update.IsDownloaded = true; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update)); List <IInstallationResult> results = new List <IInstallationResult>(); results.Add(CommonMocks.GetInstallationResult(OperationResultCode.orcFailed)); results.Add(CommonMocks.GetInstallationResult(OperationResultCode.orcAborted)); results.Add(CommonMocks.GetInstallationResult(OperationResultCode.orcNotStarted)); foreach (var result in results) { session.InstallerMock.FakeInstallResult = result; using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.BeginInstallUpdates(); WaitForStateChange(wu, WuStateId.InstallFailed); } } }
public void Should_ThrowException_When_UnselectUnkownUpdate() { UpdateFake update1 = new UpdateFake("update1"); var holder = new WuUpdateHolder(); holder.SetApplicableUpdates(ToUpdateCollection(update1)); holder.UnselectUpdate("update2"); }
public void Should_ReturnEmtpyEnum_When_NoUpdatesAreSelected() { UpdateFake update1 = new UpdateFake("update1"); var holder = new WuUpdateHolder(); Assert.IsFalse(holder.GetSelectedUpdates().Any()); holder.SetApplicableUpdates(ToUpdateCollection(update1)); Assert.IsFalse(holder.GetSelectedUpdates().Any()); }
public void Should_ReturnTrue_When_VerifySelectedUpdate() { UpdateFake update1 = new UpdateFake("update1"); var holder = new WuUpdateHolder(); holder.SetApplicableUpdates(ToUpdateCollection(update1)); Assert.IsFalse(holder.IsSelected("update1")); holder.SelectUpdate("update1"); Assert.IsTrue(holder.IsSelected("update1")); }
public void Should_BeImportant_When_UpdateIsMandatory() { UpdateFake update = new UpdateFake("update1"); update.IsMandatory = true; var holder = new WuUpdateHolder(); var ud = holder.ToUpdateDescription(update); Assert.IsTrue(ud.IsImportant); }
public void Should_BeImportant_When_UpdateIsAutoSelectOnWebSites() { UpdateFake update = new UpdateFake("update1", false); update.AutoSelectOnWebSites = true; var holder = new WuUpdateHolder(); var ud = holder.ToUpdateDescription(update); Assert.IsTrue(ud.IsImportant); }
public void Should_ApplyUpdateSelection_When_UseValidUpdateId() { UpdateFake update1 = new UpdateFake("update1"); UpdateFake update2 = new UpdateFake("update2"); UpdateFake update3 = new UpdateFake("update3"); var holder = new WuUpdateHolder(); holder.SetApplicableUpdates(ToUpdateCollection(update1, update2, update3)); holder.SelectUpdate("update2"); Assert.IsTrue(holder.GetSelectedUpdates().Single() == update2); holder.UnselectUpdate("update2"); Assert.IsFalse(holder.GetSelectedUpdates().Any()); }
public void Should_NotSelectUpdates_When_AutoSelectIsDisabled() { UpdateFake update1 = new UpdateFake("update1"); UpdateFake update2 = new UpdateFake("update2"); UpdateFake update3 = new UpdateFake("update3"); update2.IsMandatory = true; update3.IsMandatory = true; var holder = new WuUpdateHolder(); holder.AutoSelectUpdates = false; holder.SetApplicableUpdates(ToUpdateCollection(update1, update2, update3)); Assert.IsFalse(holder.GetSelectedUpdates().Any()); }
public void Should_ReplaceApplicableUpdates_When_AddNewSearchResult() { UpdateFake update1 = new UpdateFake("update1"); UpdateFake update2 = new UpdateFake("update2"); var searchresult1 = ToUpdateCollection(update1); var searchresult2 = ToUpdateCollection(update2); var holder = new WuUpdateHolder(); holder.SetApplicableUpdates(searchresult1); Assert.IsTrue(holder.ApplicableUpdates.OfType <IUpdate>().Single() == update1); holder.SetApplicableUpdates(searchresult2); Assert.IsTrue(holder.ApplicableUpdates.OfType <IUpdate>().Single() == update2); }
public void Should_ThrowException_When_SelectUnkownUpdate() { UpdateSessionFake session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", false); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1)); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.SelectUpdate("update2"); } }
public void Should_NotInstallAlreadyInstalledUpdates_When_BeginInstallUpdates() { var session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", true); update1.IsInstalled = true; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1)); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.BeginInstallUpdates(); } }
public void Should_MarkUpdateAsSelected_When_SelectUpdate() { UpdateSessionFake session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", false); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1)); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.SelectUpdate("update1"); Assert.IsTrue(wu.GetAvailableUpdates().Single().SelectedForInstallation); } }
public void Should_UpdateSetProgressDescription_When_BeginSearch() { UpdateSessionFake session = new UpdateSessionFake(true); UpdateFake update = new UpdateFake("update1", true); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update)); session.SearcherMock.FakeSearchTimeMs = 10000; using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.BeginSearchUpdates(); Assert.IsNotNull(wu.GetWuStatus().Progress); Assert.IsNull(wu.GetWuStatus().Progress.Count); wu.AbortSearchUpdates(); } }
public void Should_EnterInstallCompletedState_When_InstallCompleted() { var session = new UpdateSessionFake(true); var update = new UpdateFake("update1", true); update.IsDownloaded = true; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update)); using (WuApiController wuau = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wuau.AutoAcceptEulas = true; wuau.BeginSearchUpdates(); WaitForStateChange(wuau, WuStateId.SearchCompleted); wuau.BeginInstallUpdates(); WaitForStateChange(wuau, WuStateId.InstallCompleted); } }
public void Should_ThrowException_When_AcceptEulaOfUnkownUpdate() { UpdateSessionFake session = new UpdateSessionFake(true); var update1 = new UpdateFake("update1", true); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update1)); update1.EulaAccepted = true; update1.Identity = CommonMocks.GetUpdateIdentity("update1Id"); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = false; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.AcceptEula("update2Id"); } }
public void Should_SkipInstalledUpdates_When_SearchCompleted() { UpdateFake update = new UpdateFake("update1"); update.IsInstalled = true; IUpdateCollection updateCollection = ToUpdateCollection(update); var session = new UpdateSessionFake(true); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(updateCollection); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); Assert.IsTrue(wu.GetAvailableUpdates().Count == 0); } }
public void Should_NotEnterDownloadingState_When_NotEnoughFreeSpaceAvailable() { var system = MoqFactory.Create <ISystemInfo>(MockBehavior.Loose); int freespace = 100; system.Setup(s => s.GetFreeSpace()).Returns(freespace); system.Setup(s => s.GetFQDN()).Returns("fqdn"); system.Setup(s => s.GetOperatingSystemName()).Returns("osname"); system.Setup(s => s.GetWuServer()).Returns("update server"); system.Setup(s => s.GetTargetGroup()).Returns("target group"); UpdateFake update = new UpdateFake("update1"); update.IsMandatory = true; update.EulaAccepted = true; update.MaxDownloadSize = freespace; UpdateFake update2 = new UpdateFake("update2"); update2.IsMandatory = true; update2.EulaAccepted = true; update2.RecommendedHardDiskSpace = 10; IUpdateCollection updateCollection = ToUpdateCollection(update, update2); var session = new UpdateSessionFake(true); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(updateCollection); WuApiController wu = new WuApiController(session, UpdateCollectionFactory, system.Object); wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); try { wu.BeginDownloadUpdates(); Assert.Fail("exception expected"); } catch (InvalidStateTransitionException e) { Assert.IsTrue(e.Message.Contains("free space")); Assert.IsTrue(wu.GetWuStatus().Equals(WuStateId.SearchCompleted)); } }
public void Should_EnterRebootRequiredState_When_UpdateInstallationRequiresReboot() { var session = new UpdateSessionFake(true); var update = new UpdateFake("update1", true); update.IsDownloaded = true; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update)); session.InstallerMock.FakeInstallResult = CommonMocks.GetInstallationResult(OperationResultCode.orcSucceeded, 0, true); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.BeginInstallUpdates(); WaitForStateChange(wu, WuStateId.RebootRequired); } }
public void Should_EnterInstallFailedState_When_AbortInstall() { var session = new UpdateSessionFake(true); var update = new UpdateFake("update1", true); update.IsDownloaded = true; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update)); session.InstallerMock.FakeInstallTimeMs = 10000; using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.BeginInstallUpdates(); Assert.AreEqual(WuStateId.InstallFailed, wu.AbortInstallUpdates()); Assert.AreEqual(WuStateId.InstallFailed, wu.GetWuStatus().StateId); } }
public void Should_EnterDownloadFailedState_When_DownloadTimeRunsOut() { UpdateFake update = new UpdateFake("update1", true); IUpdateCollection updateCollection = ToUpdateCollection(update); var session = new UpdateSessionFake(true); session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(updateCollection); session.DownloaderMock.FakeDownloadTimeMs = 10000; using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.BeginDownloadUpdates(1); WaitForStateChange(wu, WuStateId.DownloadFailed, 2000); Assert.IsTrue(wu.GetWuStatus().Description.Contains("Timeout")); } }
public void Should_EnterUserInputRequiredState_When_NotInstalledUpdateCanRequestInput() { var session = new UpdateSessionFake(true); var behavMock = new Mock <IInstallationBehavior>(); behavMock.Setup(b => b.CanRequestUserInput).Returns(true); var update = new UpdateFake("update1", true); update.IsDownloaded = true; update.InstallationBehavior = behavMock.Object; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update)); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.BeginInstallUpdates(); WaitForStateChange(wu, WuStateId.UserInputRequired); } }
public void Should_FireProgressChangedEvent_When_ProgressHasChanged() { var session = new UpdateSessionFake(true); var u1 = new UpdateFake("1", true); var u2 = new UpdateFake("2", true); List <Action> asserts = new List <Action>(); // assert in others threads will not be caught session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(u1, u2)); session.DownloaderMock.FakeDownloadTimeMs = 101; using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoAcceptEulas = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); wu.BeginDownloadUpdates(); wu.OnProgressChanged += (sender, args) => { if (args.Progress.CurrentUpdate.ID == u1.Identity.UpdateID) { asserts.Add(() => { Assert.AreEqual(args.Progress.CurrentIndex, 0); }); asserts.Add(() => { Assert.AreEqual(args.Progress.Count, 2); }); } else if (args.Progress.CurrentUpdate.ID == u2.Identity.UpdateID) { asserts.Add(() => { Assert.AreEqual(args.Progress.CurrentIndex, 1); }); asserts.Add(() => { Assert.AreEqual(args.Progress.Count, 2); }); } else { asserts.Add(() => { Assert.Fail("unkown update"); }); } }; WaitForStateChange(wu, WuStateId.DownloadCompleted); asserts.ForEach(a => a()); // fire asserts } }
public void Should_UpdateApplicableUpdateList_When_SearchCompleted() { UpdateSessionFake session = new UpdateSessionFake(true); UpdateFake update = new UpdateFake("update1"); update.IsMandatory = true; UpdateFake update2 = new UpdateFake("update2"); update2.IsMandatory = false; session.SearcherMock.FakeSearchResult = CommonMocks.GetSearchResult(ToUpdateCollection(update, update2)); using (WuApiController wu = new WuApiController(session, UpdateCollectionFactory, SystemInfo)) { wu.AutoSelectUpdates = true; wu.BeginSearchUpdates(); WaitForStateChange(wu, WuStateId.SearchCompleted); Assert.IsTrue(wu.GetAvailableUpdates().Count == 2); Assert.IsTrue(wu.GetAvailableUpdates().First().ID == "update1"); Assert.IsTrue(wu.GetAvailableUpdates().Skip(1).First().ID == "update2"); } }