public void InvalidSqlInstanceProductMode() { string settingsFileName = string.Format("{0}\\Settings.xml", m_TempPath); SettingsManager settingsManager = new SettingsManager(settingsFileName); settingsManager.ServiceGuid = s_TestServiceGuid; StackHashContextSettings settings = settingsManager.CreateNewContextSettings(); settings.ErrorIndexSettings.Type = ErrorIndexType.SqlExpress; settings.ErrorIndexSettings.Name = "TestIndex"; settings.ErrorIndexSettings.Folder = m_TempPath; settings.SqlSettings.ConnectionString = "Data Source=(local)\\INVALIDEXPRESS;Integrated Security=True"; settings.IsActive = true; // Force an attempt to activate. string licenseFileName = string.Format("{0}\\License.bin", m_TempPath); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); ScriptManager scriptManager = new ScriptManager(m_ScriptPath); IDebugger debugger = new Windbg(); ControllerContext context = new ControllerContext(settings, scriptManager, debugger, settingsManager, false, StackHashTestData.Default, licenseManager); Assert.AreEqual(false, context.IsActive); Assert.AreEqual(StackHashServiceErrorCode.SqlConnectionError, context.Status.CurrentError); Assert.AreNotEqual(null, context.Status.LastContextException); context.Dispose(); }
private void buttonDelete_Click(object sender, RoutedEventArgs e) { StackHashContextSettings settings = listBoxProfiles.SelectedItem as StackHashContextSettings; if (settings != null) { if (StackHashMessageBox.Show(this, string.Format(CultureInfo.CurrentCulture, Properties.Resources.ProfileManager_DeleteProfileMBMessage, settings.WinQualSettings.CompanyName, settings.ErrorIndexSettings.Folder), Properties.Resources.ProfileManager_DeleteProfileMBTitle, StackHashMessageBoxType.YesNo, StackHashMessageBoxIcon.Question) == StackHashDialogResult.Yes) { // if the current context is deleted then go back to the invalid state if (UserSettings.Settings.CurrentContextId == settings.Id) { UserSettings.Settings.CurrentContextId = UserSettings.InvalidContextId; } // remove the context _clientLogic.AdminRemoveContext(settings.Id); } } }
/// <summary> /// Updates the settings portion of the display context /// </summary> /// <param name="stackHashContextSettings">Context settings</param> public void UpdateSettings(StackHashContextSettings stackHashContextSettings) { if (stackHashContextSettings == null) { throw new ArgumentNullException("stackHashContextSettings"); } if (stackHashContextSettings.WinQualSettings == null) { throw new ArgumentNullException("stackHashContextSettings", "stackHashContextSettings.WinQualSettings is null"); } if (_stackHashContextSettings.Id != stackHashContextSettings.Id) { throw new InvalidOperationException("Cannot update from a context with a different ID"); } // save the new settings StackHashContextSettings oldSettings = _stackHashContextSettings; _stackHashContextSettings = stackHashContextSettings; // check for updates if (oldSettings.IsActive != _stackHashContextSettings.IsActive) { RaisePropertyChanged("IsActive"); } if (oldSettings.WinQualSettings.CompanyName != _stackHashContextSettings.WinQualSettings.CompanyName) { RaisePropertyChanged("ProfileName"); } }
public void ActivateOk() { string settingsFileName = string.Format("{0}\\ServiceSettings.xml", m_TempPath); SettingsManager settingsManager = new SettingsManager(settingsFileName); settingsManager.ServiceGuid = s_TestServiceGuid; StackHashContextSettings settings = settingsManager.CreateNewContextSettings(); settings.ErrorIndexSettings.Folder = m_TempPath; settings.ErrorIndexSettings.Name = "TestIndex"; settings.ErrorIndexSettings.Type = ErrorIndexType.Xml; string licenseFileName = string.Format("{0}\\License.bin", m_TempPath); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); ScriptManager scriptManager = new ScriptManager(m_ScriptPath); IDebugger debugger = new Windbg(); ControllerContext context = new ControllerContext(settings, scriptManager, debugger, settingsManager, true, StackHashTestData.Default, licenseManager); Assert.AreEqual(false, context.IsActive); Assert.AreEqual(null, context.WinQualSyncTimerTask); // Hook up to receive admin events. context.AdminReports += new EventHandler <AdminReportEventArgs>(this.OnAdminReport); StackHashClientData clientData = new StackHashClientData(Guid.NewGuid(), "Mark", 24); context.Activate(clientData, false); // Wait for the activation event. m_ActivationAdminEvent.WaitOne(3000); Assert.AreEqual(1, m_AllReports.Count); Assert.AreEqual(clientData.ApplicationGuid, m_AllReports[0].Report.ClientData.ApplicationGuid); Assert.AreEqual(clientData.ClientId, m_AllReports[0].Report.ClientData.ClientId); Assert.AreEqual(clientData.ClientName, m_AllReports[0].Report.ClientData.ClientName); Assert.AreEqual(clientData.ClientRequestId, m_AllReports[0].Report.ClientData.ClientRequestId); Assert.AreEqual(0, m_AllReports[0].Report.ContextId); Assert.AreNotEqual(null, m_AllReports[0].Report.Description); Assert.AreNotEqual(null, m_AllReports[0].Report.Message); Assert.AreEqual(StackHashAdminOperation.ContextStateChanged, m_AllReports[0].Report.Operation); Assert.AreEqual(StackHashServiceErrorCode.NoError, m_AllReports[0].Report.ServiceErrorCode); Assert.AreEqual(null, m_AllReports[0].Report.LastException); Assert.AreEqual(null, m_AllReports[0].Report.LastException); Assert.AreEqual(StackHashAdminOperation.ContextStateChanged, m_AllReports[0].Report.Operation); StackHashContextStateAdminReport contextChanged = m_AllReports[0].Report as StackHashContextStateAdminReport; Assert.AreEqual(true, contextChanged.IsActivationAttempt); Assert.AreEqual(true, contextChanged.IsActive); Assert.AreEqual(true, context.IsActive); Assert.AreNotEqual(null, context.WinQualSyncTimerTask); context.Dispose(); }
public void ProductSyncListAddTwoEntriesRemoveFirst() { String settingsFileName = Path.GetTempFileName(); File.Delete(settingsFileName); try { SettingsManager settingsManager = new SettingsManager(settingsFileName); StackHashContextSettings contextSettings = settingsManager.CreateNewContextSettings(); Assert.AreNotEqual(null, contextSettings.WinQualSettings.ProductsToSynchronize); settingsManager.SetProductSynchronization(0, 10, true); settingsManager.SetProductSynchronization(0, 20, true); StackHashSettings currentSettings = settingsManager.CurrentSettings; Assert.AreEqual(2, currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.Count); StackHashProductSyncData productSyncData = currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.FindProduct(10); Assert.AreNotEqual(null, productSyncData); Assert.AreEqual(10, productSyncData.ProductId); productSyncData = currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.FindProduct(20); Assert.AreNotEqual(null, productSyncData); Assert.AreEqual(20, productSyncData.ProductId); // Check the settings are persisted. settingsManager = new SettingsManager(settingsFileName); currentSettings = settingsManager.CurrentSettings; Assert.AreEqual(2, currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.Count); productSyncData = currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.FindProduct(10); Assert.AreNotEqual(null, productSyncData); Assert.AreEqual(10, productSyncData.ProductId); productSyncData = currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.FindProduct(20); Assert.AreNotEqual(null, productSyncData); Assert.AreEqual(20, productSyncData.ProductId); settingsManager.SetProductSynchronization(0, 10, false); currentSettings = settingsManager.CurrentSettings; Assert.AreEqual(1, currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.Count); productSyncData = currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.FindProduct(20); Assert.AreNotEqual(null, productSyncData); Assert.AreEqual(20, productSyncData.ProductId); // Check the settings are persisted. settingsManager = new SettingsManager(settingsFileName); currentSettings = settingsManager.CurrentSettings; Assert.AreEqual(1, currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.Count); productSyncData = currentSettings.ContextCollection[0].WinQualSettings.ProductsToSynchronize.FindProduct(20); Assert.AreNotEqual(null, productSyncData); Assert.AreEqual(20, productSyncData.ProductId); } finally { if (File.Exists(settingsFileName)) { File.Delete(settingsFileName); } } }
public void WinQualSyncRunsOnTimer() { string settingsFileName = string.Format("{0}\\ServiceSettings.xml", m_TempPath); SettingsManager settingsManager = new SettingsManager(settingsFileName); settingsManager.ServiceGuid = s_TestServiceGuid; StackHashContextSettings settings = settingsManager.CreateNewContextSettings(); settings.ErrorIndexSettings.Folder = m_TempPath; settings.ErrorIndexSettings.Name = "TestIndex"; settings.ErrorIndexSettings.Type = ErrorIndexType.Xml; ScriptManager scriptManager = new ScriptManager(m_ScriptPath); IDebugger debugger = new Windbg(); string licenseFileName = string.Format("{0}\\License.bin", m_TempPath); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); // Make sure the correct winqual login details are used. settings.WinQualSettings.UserName = "******"; settings.WinQualSettings.Password = "******"; settings.WinQualSyncSchedule = new ScheduleCollection(); Schedule schedule = new Schedule(); schedule.DaysOfWeek = Schedule.EveryDay; schedule.Period = SchedulePeriod.Daily; DateTime now = DateTime.Now; // Must use local time. DateTime syncTime = now.AddSeconds(5); schedule.Time = new ScheduleTime(syncTime.Hour, syncTime.Minute, syncTime.Second); settings.WinQualSyncSchedule.Add(schedule); ControllerContext context = new ControllerContext(settings, scriptManager, debugger, settingsManager, true, StackHashTestData.Default, licenseManager); context.AdminReports += new EventHandler<AdminReportEventArgs>(this.OnAdminReport); try { context.Activate(); Assert.AreEqual(true, m_WinQualSyncEvent.WaitOne(8000)); Assert.AreEqual(true, m_AnalyzeEvent.WaitOne(5000)); Assert.AreEqual(1, m_SyncCount); Assert.AreEqual(1, m_AnalyzeCount); context.Deactivate(); Assert.AreEqual(false, context.IsActive); Assert.AreEqual(null, context.WinQualSyncTimerTask); } finally { context.AdminReports -= new EventHandler<AdminReportEventArgs>(this.OnAdminReport); context.Dispose(); } }
private void buttonTestData_Click(object sender, RoutedEventArgs e) { DisplayContext context = listViewProfiles.SelectedItem as DisplayContext; if (context != null) { StackHashContextSettings contextSettings = context.StackHashContextSettings; AddTestData addTestData = new AddTestData(_clientLogic, contextSettings); addTestData.Owner = this; addTestData.ShowDialog(); } }
/// <summary> /// Wrapper class for context settings and status /// </summary> /// <param name="stackHashContextSettings">Context settings</param> /// <param name="stackHashContextStatus">Context status (optional)</param> public DisplayContext(StackHashContextSettings stackHashContextSettings, StackHashContextStatus stackHashContextStatus) { if (stackHashContextSettings == null) { throw new ArgumentNullException("stackHashContextSettings"); } if (stackHashContextSettings.WinQualSettings == null) { throw new ArgumentNullException("stackHashContextSettings", "stackHashContextSettings.WinQualSettings is null"); } // ok for stackHashContextStatus to be null _stackHashContextSettings = stackHashContextSettings; _stackHashContextStatus = stackHashContextStatus; }
public ControllerUnitTests() { StackHashContextSettings contextSettings = new StackHashContextSettings(); contextSettings.Id = 0; contextSettings.WinQualSettings = new WinQualSettings(TestSettings.WinQualUserName, TestSettings.WinQualPassword, "Cucku", 90, new StackHashProductSyncDataCollection(), false, 0, 1, WinQualSettings.DefaultSyncsBeforeResync, false); contextSettings.ErrorIndexSettings = new ErrorIndexSettings(); contextSettings.ErrorIndexSettings.Folder = Path.GetTempPath() + "\\StackHashIndex"; contextSettings.ErrorIndexSettings.Name = "TestController"; contextSettings.ErrorIndexSettings.Type = ErrorIndexType.Xml; m_Properties = new StackHashSettings(); m_Properties.ContextCollection = new StackHashContextCollection(); m_Properties.ContextCollection.Add(contextSettings); }
private void CompleteAdd() { Debug.Assert(_currentAddSettings != null); if (_currentAddSettings != null) { ProfileAddEdit profileAdd = new ProfileAddEdit(_currentAddSettings, _allContexts, true, _clientLogic); profileAdd.Owner = this; if (profileAdd.ShowDialog() == true) { // ask the user if they want to activate this profile if (StackHashMessageBox.Show(this, string.Format(CultureInfo.CurrentCulture, Properties.Resources.ProfileManager_ActivateProfileMBMessage, _currentAddSettings.WinQualSettings.CompanyName), Properties.Resources.ProfileManager_ActivateProfileMBTitle, StackHashMessageBoxType.YesNo, StackHashMessageBoxIcon.Question) == StackHashDialogResult.Yes) { _activateRequired = true; _activateContextId = _currentAddSettings.Id; // if no contexts or no current context then also make this Id the current client context if ((!_haveContexts) || (UserSettings.Settings.CurrentContextId == UserSettings.InvalidContextId)) { UserSettings.Settings.CurrentContextId = _currentAddSettings.Id; } } _clientLogic.SaveContextSettings(_currentAddSettings.Id, _currentAddSettings, profileAdd.CollectionPolicies, profileAdd.Plugins, profileAdd.WorkFlowMappings, _currentAddSettings.IsActive); } else { DeleteContextCore(_currentAddSettings.Id); } _currentAddSettings = null; } }
void _dbConfigProcess_Exited(object sender, EventArgs e) { if (this.Dispatcher.CheckAccess()) { Mouse.OverrideCursor = null; int exitCode = -1; if (_dbConfigProcess != null) { exitCode = _dbConfigProcess.ExitCode; _dbConfigProcess.Close(); _dbConfigProcess = null; } // will be 0 on success if (exitCode == 0) { // reload DB settings DBConfigSettings.Settings.Load(); _currentAddSettings.ErrorIndexSettings.Folder = DBConfigSettings.Settings.ProfileFolder; _currentAddSettings.ErrorIndexSettings.Name = DBConfigSettings.Settings.ProfileName; _currentAddSettings.ErrorIndexSettings.Type = ErrorIndexType.SqlExpress; _currentAddSettings.ErrorIndexSettings.Location = DBConfigSettings.Settings.IsDatabaseInCabFolder ? StackHashErrorIndexLocation.InCabFolder : StackHashErrorIndexLocation.OnSqlServer; _currentAddSettings.SqlSettings.ConnectionString = DBConfigSettings.Settings.ConnectionString; _currentAddSettings.SqlSettings.InitialCatalog = DBConfigSettings.Settings.ProfileName; _currentAddSettings.WinQualSettings.CompanyName = DBConfigSettings.Settings.ProfileName; CompleteAdd(); } else { // user cancelled DB config DeleteContextCore(_currentAddSettings.Id); _currentAddSettings = null; } } else { this.Dispatcher.BeginInvoke(new Action <object, EventArgs>(_dbConfigProcess_Exited), sender, e); } }
public void CheckWinQualSyncParametersInvalidWinQualSchedule() { try { string settingsFileName = string.Format("{0}\\ServiceSettings.xml", m_TempPath); SettingsManager settingsManager = new SettingsManager(settingsFileName); settingsManager.ServiceGuid = s_TestServiceGuid; StackHashContextSettings settings = settingsManager.CreateNewContextSettings(); settings.ErrorIndexSettings.Folder = m_TempPath; settings.ErrorIndexSettings.Name = "TestIndex"; settings.ErrorIndexSettings.Type = ErrorIndexType.Xml; ScriptManager scriptManager = new ScriptManager(m_TempPath); IDebugger debugger = new Windbg(); // Make sure the correct winqual login details are used. settings.WinQualSettings.UserName = "******"; settings.WinQualSettings.Password = "******"; settings.WinQualSyncSchedule = new ScheduleCollection(); Schedule schedule = new Schedule(); // schedule.DaysOfWeek = Schedule.EveryDay; - No Daily specified. schedule.Period = SchedulePeriod.Daily; DateTime now = DateTime.Now; // Must use local time. DateTime syncTime = now.AddSeconds(5); schedule.Time = new ScheduleTime(syncTime.Hour, syncTime.Minute, syncTime.Second); settings.WinQualSyncSchedule.Add(schedule); string licenseFileName = string.Format("{0}\\License.bin", m_TempPath); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); // Should fail with a param exception. // TODO: should the test setting here be false?? ControllerContext context = new ControllerContext(settings, scriptManager, debugger, settingsManager, true, null, licenseManager); } catch (StackHashException ex) { Assert.AreEqual(StackHashServiceErrorCode.ScheduleFormatError, ex.ServiceErrorCode); } }
/// <summary> /// Called by the wizard to notify the page that it's now active /// </summary> public override void PageActivated() { if (!_firstInitComplete) { // find the current profile StackHashContextSettings profile = null; foreach (DisplayContext contextSettings in this.ClientLogic.ContextCollection) { if (contextSettings.Id == UserSettings.Settings.CurrentContextId) { profile = contextSettings.StackHashContextSettings; } } // find and show the global collection policies StackHashCollectionPolicy globalCabPolicy = null; StackHashCollectionPolicy globalEventPolicy = null; foreach (StackHashCollectionPolicy policy in profile.CollectionPolicy) { if ((policy.RootObject == StackHashCollectionObject.Global) && (policy.ObjectToCollect == StackHashCollectionObject.Cab)) { if (policy.ConditionObject == StackHashCollectionObject.Cab) { globalCabPolicy = policy; } else if (policy.ConditionObject == StackHashCollectionObject.Event) { globalEventPolicy = policy; } } } collectionPolicyControl.SetPolicies(globalCabPolicy, globalEventPolicy, StackHashCollectionObject.Global, 0); _firstInitComplete = true; } this.ClientLogic.ClientLogicSetupWizardPrompt += new EventHandler <ClientLogicSetupWizardPromptEventArgs>(ClientLogic_ClientLogicSetupWizardPrompt); }
/// <summary> /// Adds test data to a profile /// </summary> /// <param name="clientLogic">ClientLogic</param> /// <param name="context">Context (Profile)</param> public AddTestData(ClientLogic clientLogic, StackHashContextSettings context) { if (clientLogic == null) { throw new ArgumentNullException("clientLogic"); } if (context == null) { throw new ArgumentNullException("context"); } _clientLogic = clientLogic; _context = context; InitializeComponent(); if (UserSettings.Settings.HaveWindow(WindowKey)) { UserSettings.Settings.RestoreWindow(WindowKey, this); } }
public void ConstructorInactivePlaintextPassword() { string settingsFileName = string.Format("{0}\\Settings.xml", m_TempPath); SettingsManager settingsManager = new SettingsManager(settingsFileName); settingsManager.ServiceGuid = s_TestServiceGuid; StackHashContextSettings settings = settingsManager.CreateNewContextSettings(); settings.WinQualSettings.Password = "******"; settingsManager.SetContextSettings(settings, false); string licenseFileName = string.Format("{0}\\License.bin", m_TempPath); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); ScriptManager scriptManager = new ScriptManager(m_ScriptPath); IDebugger debugger = new Windbg(); ControllerContext context = new ControllerContext(settings, scriptManager, debugger, settingsManager, true, StackHashTestData.Default, licenseManager); Assert.AreEqual(false, context.IsActive); Assert.AreEqual(null, context.WinQualSyncTimerTask); String password = settings.WinQualSettings.Password; Assert.AreEqual(password, settingsManager.CurrentSettings.ContextCollection[0].WinQualSettings.Password); // Reload to make sure the settings file was updated too. settingsManager = new SettingsManager(settingsFileName); settingsManager.ServiceGuid = s_TestServiceGuid; Assert.AreEqual(password, settingsManager.CurrentSettings.ContextCollection[0].WinQualSettings.Password); String [] lines = File.ReadAllLines(settingsFileName); foreach (String line in lines) { Assert.AreEqual(false, line.Contains(settings.WinQualSettings.Password)); } context.Dispose(); }
public void ProductSyncListDefault() { String settingsFileName = Path.GetTempFileName(); File.Delete(settingsFileName); try { SettingsManager settings = new SettingsManager(settingsFileName); StackHashContextSettings contextSettings = settings.CreateNewContextSettings(); Assert.AreNotEqual(null, contextSettings.WinQualSettings.ProductsToSynchronize); Assert.AreEqual(0, contextSettings.WinQualSettings.ProductsToSynchronize.Count); } finally { if (File.Exists(settingsFileName)) { File.Delete(settingsFileName); } } }
private void DoEdit() { DisplayContext context = listViewProfiles.SelectedItem as DisplayContext; if (context != null) { StackHashContextSettings contextSettings = context.StackHashContextSettings; ProfileAddEdit profileEdit = new ProfileAddEdit(contextSettings, _allContexts, false, _clientLogic); profileEdit.Owner = this; if (profileEdit.ShowDialog() == true) { _clientLogic.SaveContextSettings(contextSettings.Id, contextSettings, profileEdit.CollectionPolicies, profileEdit.Plugins, profileEdit.WorkFlowMappings, contextSettings.IsActive); } } }
public void ConstructorInactive() { string settingsFileName = string.Format("{0}\\Settings.xml", m_TempPath); SettingsManager settingsManager = new SettingsManager(settingsFileName); settingsManager.ServiceGuid = s_TestServiceGuid; StackHashContextSettings settings = settingsManager.CreateNewContextSettings(); string licenseFileName = string.Format("{0}\\License.bin", m_TempPath); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); ScriptManager scriptManager = new ScriptManager(m_ScriptPath); IDebugger debugger = new Windbg(); ControllerContext context = new ControllerContext(settings, scriptManager, debugger, settingsManager, true, StackHashTestData.Default, licenseManager); Assert.AreEqual(false, context.IsActive); Assert.AreEqual(null, context.WinQualSyncTimerTask); context.Dispose(); }
private void RunDBConfigForAdd() { _currentAddSettings = _clientLogic.AdminCollectNewContext(); Debug.Assert(_currentAddSettings != null); if (_currentAddSettings != null) { try { Mouse.OverrideCursor = Cursors.Wait; DBConfigSettings.Settings.ResetSettings(); DBConfigSettings.Settings.IsNewProfile = true; DBConfigSettings.Settings.IsUpgrade = false; DBConfigSettings.Settings.ServiceHost = ServiceProxy.Services.ServiceHost; DBConfigSettings.Settings.ServicePort = ServiceProxy.Services.ServicePort; DBConfigSettings.Settings.ServiceUsername = UserSettings.Settings.ServiceUsername; DBConfigSettings.Settings.ServicePassword = UserSettings.Settings.ServicePassword; DBConfigSettings.Settings.ServiceDomain = UserSettings.Settings.ServiceDomain; if (_clientLogic.ContextCollection != null) { foreach (DisplayContext existingSettings in _clientLogic.ContextCollection) { DBConfigSettings.Settings.ExistingProfileFolders.Add(existingSettings.StackHashContextSettings.ErrorIndexSettings.Folder); DBConfigSettings.Settings.ExistingProfileNames.Add(existingSettings.StackHashContextSettings.ErrorIndexSettings.Name); } } DBConfigSettings.Settings.Save(); _dbConfigProcess = Process.Start("StackHashDBConfig.exe"); _dbConfigProcess.EnableRaisingEvents = true; _dbConfigProcess.Exited += new EventHandler(_dbConfigProcess_Exited); } catch (Exception ex) { Mouse.OverrideCursor = null; bool userCancel = false; Win32Exception win32ex = ex as Win32Exception; if (win32ex != null) { userCancel = (win32ex.NativeErrorCode == 1223); } if (userCancel) { // user cancelled DB config DeleteContextCore(_currentAddSettings.Id); _currentAddSettings = null; } else { DiagnosticsHelper.LogException(DiagSeverity.ComponentFatal, "Failed to launch StackHashDBConfig.exe", ex); StackHashMessageBox.Show(this, Properties.Resources.DBConfigLaunchFailedMBMessage, Properties.Resources.DBConfigLaunchFailedMBTitle, StackHashMessageBoxType.Ok, StackHashMessageBoxIcon.Error, ex, StackHashMessageBox.ParseServiceErrorFromException(ex)); } } } }
/// <summary> /// An index will be created in sourceFolder\SourceIndex called SourceIndex. /// It will then be moved to destFolder\DestIndex. /// If defaultDatabaseLocation is specified then only the cab files will be moved and not the SQL database. /// </summary> private void runMoveTask(String settingsFolder, String sourceErrorIndexFolder, String sourceErrorIndexName, String destErrorIndexFolder, String destErrorIndexName, bool defaultDatabaseLocation, StackHashTestIndexData testIndexData) { String scriptFolder = settingsFolder + "\\Scripts"; SqlCommands sqlCommands = new SqlCommands(m_ProviderFactory, s_MasterConnectionString, s_MasterConnectionString, 1); // Create the source database folders and settings. if (sqlCommands.DatabaseExists(destErrorIndexName)) { try { sqlCommands.DeleteDatabase(destErrorIndexName); } catch {; } } if (sqlCommands.DatabaseExists(sourceErrorIndexName)) { try { sqlCommands.DeleteDatabase(sourceErrorIndexName); } catch {; } } if (Directory.Exists(settingsFolder)) { PathUtils.DeleteDirectory(settingsFolder, true); } if (Directory.Exists(destErrorIndexFolder)) { PathUtils.DeleteDirectory(destErrorIndexFolder, true); } if (Directory.Exists(sourceErrorIndexFolder)) { PathUtils.DeleteDirectory(sourceErrorIndexFolder, true); } if (!Directory.Exists(sourceErrorIndexFolder)) { Directory.CreateDirectory(sourceErrorIndexFolder); } if (!Directory.Exists(settingsFolder)) { Directory.CreateDirectory(settingsFolder); } if (!Directory.Exists(scriptFolder)) { Directory.CreateDirectory(scriptFolder); } if (!Directory.Exists(destErrorIndexFolder)) { Directory.CreateDirectory(destErrorIndexFolder); } try { // Create a settings manager and a new context. SettingsManager settingsManager = new SettingsManager(settingsFolder + "\\ServiceSettings.XML"); StackHashContextSettings contextSettings = settingsManager.CreateNewContextSettings(); contextSettings.ErrorIndexSettings = new ErrorIndexSettings(); contextSettings.ErrorIndexSettings.Folder = sourceErrorIndexFolder; contextSettings.ErrorIndexSettings.Name = sourceErrorIndexName; contextSettings.ErrorIndexSettings.Type = ErrorIndexType.SqlExpress; contextSettings.SqlSettings = StackHashSqlConfiguration.Default; contextSettings.SqlSettings.ConnectionString = s_ConnectionString; contextSettings.SqlSettings.InitialCatalog = sourceErrorIndexName; ScriptManager scriptManager = new ScriptManager(scriptFolder); string licenseFileName = string.Format("{0}\\License.bin", settingsFolder); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_ServiceGuid); licenseManager.SetLicense(s_LicenseId); // Create a dummy controller to record the callbacks. BugTrackerManager bugTrackerManager = new BugTrackerManager(new String[0]); // Create a dummy controller to record the callbacks. ControllerContext controllerContext = new ControllerContext(contextSettings, scriptManager, new Windbg(), settingsManager, true, null, licenseManager); // Hook up to receive admin reports. controllerContext.AdminReports += new EventHandler <AdminReportEventArgs>(this.OnAdminReport); // Progress reports don't come through the controller context - they come straight through the contoller so create a dummy. Controller controller = new Controller(); Reporter reporter = new Reporter(controller); controller.AdminReports += new EventHandler <AdminReportEventArgs>(this.OnAdminReport); // ****************************************** // CREATE THE SOURCE INDEX // ****************************************** // Delete any old index first. SqlConnection.ClearAllPools(); try { controllerContext.DeleteIndex(); } catch {; } // Activate the context and the associated index - this will create the index if necessary. controllerContext.Activate(null, defaultDatabaseLocation); String[] databaseFiles = Directory.GetFiles(Path.Combine(sourceErrorIndexFolder, sourceErrorIndexName), "*.mdf"); Assert.AreEqual(defaultDatabaseLocation, databaseFiles.Length == 0); controllerContext.CreateTestIndex(testIndexData); Guid guid = new Guid(); StackHashClientData clientData = new StackHashClientData(guid, "GuidName", 1); // ****************************************** // MOVE TO DESTINATION // ****************************************** // Deactivate before the move. controllerContext.Deactivate(); StackHashSqlConfiguration sqlConfig = new StackHashSqlConfiguration(s_ConnectionString, destErrorIndexName, 1, 100, 15, 100); // Move the index. controllerContext.RunMoveIndexTask(clientData, destErrorIndexFolder, destErrorIndexName, sqlConfig); // Wait for the move task to complete. waitForMoveCompleted(60000 * 20); Assert.AreEqual(2, m_AdminReports.Count); Assert.AreEqual(null, m_AdminReports[0].Report.LastException); Assert.AreEqual(0, m_AdminReports[0].Report.ContextId); Assert.AreEqual(StackHashAdminOperation.ErrorIndexMoveStarted, m_AdminReports[0].Report.Operation); Assert.AreEqual(0, m_AdminReports[1].Report.ContextId); Assert.AreEqual(StackHashAdminOperation.ErrorIndexMoveCompleted, m_AdminReports[1].Report.Operation); Assert.AreEqual(null, m_AdminReports[1].Report.LastException); Assert.AreEqual(StackHashServiceErrorCode.NoError, m_AdminReports[1].Report.ServiceErrorCode); if ((testIndexData.NumberOfCabs > 0) && (sourceErrorIndexFolder[0] != destErrorIndexFolder[0])) { Assert.AreEqual(true, m_MoveAdminReports.Count > 0); } controllerContext.AdminReports -= new EventHandler <AdminReportEventArgs>(this.OnAdminReport); ErrorIndexSettings destIndexData = new ErrorIndexSettings() { Folder = destErrorIndexFolder, Name = destErrorIndexName, Type = ErrorIndexType.SqlExpress }; IErrorIndex index1 = getIndex(destIndexData, sqlConfig); try { index1.Activate(); // Make a single call just to ensure the database is still in tact. StackHashProductCollection products = index1.LoadProductList(); Assert.AreEqual(testIndexData.NumberOfProducts, products.Count); } finally { index1.Deactivate(); index1.Dispose(); SqlConnection.ClearAllPools(); } } finally { SqlConnection.ClearAllPools(); if (sqlCommands.DatabaseExists(destErrorIndexName)) { try { sqlCommands.DeleteDatabase(destErrorIndexName); } catch {; } } if (sqlCommands.DatabaseExists(sourceErrorIndexName)) { try { sqlCommands.DeleteDatabase(sourceErrorIndexName); } catch {; } } SqlConnection.ClearAllPools(); if (Directory.Exists(sourceErrorIndexFolder)) { PathUtils.SetFilesWritable(sourceErrorIndexFolder, true); PathUtils.DeleteDirectory(sourceErrorIndexFolder, true); } if (Directory.Exists(destErrorIndexFolder)) { PathUtils.SetFilesWritable(destErrorIndexFolder, true); PathUtils.DeleteDirectory(destErrorIndexFolder, true); } if (Directory.Exists(settingsFolder)) { PathUtils.SetFilesWritable(settingsFolder, true); PathUtils.DeleteDirectory(settingsFolder, true); } } }
public void SaveLoadSettings() { StackHashSettings settings = new StackHashSettings(); settings.ContextCollection = new StackHashContextCollection(); settings.ProxySettings = new StackHashProxySettings(true, true, "host", 9000, "UserName", "Password", "Domain"); StackHashContextSettings context1 = new StackHashContextSettings(); context1.CabFilePurgeSchedule = new ScheduleCollection(); context1.CabFilePurgeSchedule.Add(new Schedule()); context1.CabFilePurgeSchedule[0].DaysOfWeek = DaysOfWeek.Monday; context1.CabFilePurgeSchedule[0].Period = SchedulePeriod.Hourly; context1.CabFilePurgeSchedule[0].Time = new ScheduleTime(1, 2, 3); context1.ErrorIndexSettings = new ErrorIndexSettings(); context1.ErrorIndexSettings.Folder = "C:\\test1"; context1.ErrorIndexSettings.Name = "Name1"; context1.ErrorIndexSettings.Type = ErrorIndexType.Xml; context1.Id = 1; StackHashProductSyncDataCollection productsToSync = new StackHashProductSyncDataCollection(); productsToSync.Add(new StackHashProductSyncData(23)); context1.WinQualSettings = new WinQualSettings("username", "password", "cucku", 90, productsToSync, true, 30 * 60, 1, WinQualSettings.DefaultSyncsBeforeResync, true); context1.WinQualSyncSchedule = new ScheduleCollection(); context1.WinQualSyncSchedule.Add(new Schedule()); context1.WinQualSyncSchedule[0].DaysOfWeek = DaysOfWeek.Tuesday; context1.WinQualSyncSchedule[0].Period = SchedulePeriod.Weekly; context1.WinQualSyncSchedule[0].Time = new ScheduleTime(4, 5, 6); context1.DebuggerSettings = new StackHashDebuggerSettings(); context1.DebuggerSettings.BinaryPath = new StackHashSearchPath(); context1.DebuggerSettings.BinaryPath.Add("C:\\Binary"); context1.DebuggerSettings.BinaryPath.Add("C:\\Path"); context1.DebuggerSettings.SymbolPath = new StackHashSearchPath(); context1.DebuggerSettings.SymbolPath.Add("C:\\Symbol"); context1.DebuggerSettings.SymbolPath.Add("C:\\Path2"); context1.DebuggerSettings.BinaryPath64Bit = new StackHashSearchPath(); context1.DebuggerSettings.BinaryPath64Bit.Add("C:\\Binary64"); context1.DebuggerSettings.BinaryPath64Bit.Add("C:\\Path64"); context1.DebuggerSettings.SymbolPath64Bit = new StackHashSearchPath(); context1.DebuggerSettings.SymbolPath64Bit.Add("C:\\Symbol64"); context1.DebuggerSettings.SymbolPath64Bit.Add("C:\\Path264"); context1.DebuggerSettings.DebuggerPathAndFileName = "C:\\debugger64.exe"; context1.DebuggerSettings.DebuggerPathAndFileName64Bit = "C:\\debugger64.exe"; context1.PurgeOptionsCollection = new StackHashPurgeOptionsCollection(); context1.BugTrackerSettings = new StackHashBugTrackerPlugInSettings(); context1.BugTrackerSettings.PlugInSettings = new StackHashBugTrackerPlugInCollection(); context1.BugTrackerSettings.PlugInSettings.Add(new StackHashBugTrackerPlugIn()); context1.BugTrackerSettings.PlugInSettings[0].Enabled = true; context1.BugTrackerSettings.PlugInSettings[0].Name = "TestPlugIn"; context1.BugTrackerSettings.PlugInSettings[0].Properties = new StackHashNameValueCollection(); context1.BugTrackerSettings.PlugInSettings[0].Properties.Add(new StackHashNameValuePair("Name1", "Value1")); context1.BugTrackerSettings.PlugInSettings[0].Properties.Add(new StackHashNameValuePair("Longer name with spaces", "Longer text la la la la la ")); context1.BugTrackerSettings.PlugInSettings[0].Properties.Add(new StackHashNameValuePair("$pec1al &^%$&\"£! mbols", "Hehhijugiuyhg*(&^%*&^%")); StackHashPurgeOptions purgeOptions = new StackHashPurgeOptions(); purgeOptions.Id = 22; purgeOptions.AgeToPurge = 90; purgeOptions.PurgeCabFiles = true; purgeOptions.PurgeDumpFiles = true; purgeOptions.PurgeObject = StackHashPurgeObject.PurgeFile; context1.PurgeOptionsCollection.Add(purgeOptions); settings.ContextCollection.Add(context1); // Now save the settings to an XML file. string tempFile = m_TempPath + "\\testsettings.xml"; StackHashSettings.Save(settings, tempFile); // Now load the new settings and compare them. StackHashSettings loadedSettings = StackHashSettings.Load(tempFile); Assert.AreEqual(settings.ProxySettings.UseProxy, loadedSettings.ProxySettings.UseProxy); Assert.AreEqual(settings.ProxySettings.UseProxyAuthentication, loadedSettings.ProxySettings.UseProxyAuthentication); Assert.AreEqual(settings.ProxySettings.ProxyHost, loadedSettings.ProxySettings.ProxyHost); Assert.AreEqual(settings.ProxySettings.ProxyPort, loadedSettings.ProxySettings.ProxyPort); Assert.AreEqual(settings.ProxySettings.ProxyDomain, loadedSettings.ProxySettings.ProxyDomain); Assert.AreEqual(settings.ProxySettings.ProxyUserName, loadedSettings.ProxySettings.ProxyUserName); Assert.AreEqual(settings.ProxySettings.ProxyPassword, loadedSettings.ProxySettings.ProxyPassword); Assert.AreEqual(settings.ContextCollection.Count, loadedSettings.ContextCollection.Count); for (int i = 0; i < settings.ContextCollection.Count; i++) { StackHashContextSettings contextOriginal = settings.ContextCollection[i]; StackHashContextSettings contextLoaded = loadedSettings.ContextCollection[i]; Assert.AreEqual(contextOriginal.CabFilePurgeSchedule.Count, contextLoaded.CabFilePurgeSchedule.Count); for (int j = 0; j < contextOriginal.CabFilePurgeSchedule.Count; j++) { Schedule scheduleOriginal = settings.ContextCollection[i].CabFilePurgeSchedule[0]; Schedule scheduleLoaded = loadedSettings.ContextCollection[i].CabFilePurgeSchedule[0]; Assert.AreEqual(scheduleOriginal.DaysOfWeek, scheduleLoaded.DaysOfWeek); Assert.AreEqual(scheduleOriginal.Period, scheduleLoaded.Period); Assert.AreEqual(scheduleOriginal.Time.Hour, scheduleLoaded.Time.Hour); Assert.AreEqual(scheduleOriginal.Time.Minute, scheduleLoaded.Time.Minute); Assert.AreEqual(scheduleOriginal.Time.Second, scheduleLoaded.Time.Second); } Assert.AreEqual(contextOriginal.ErrorIndexSettings.Folder, contextLoaded.ErrorIndexSettings.Folder); Assert.AreEqual(contextOriginal.ErrorIndexSettings.Name, contextLoaded.ErrorIndexSettings.Name); Assert.AreEqual(contextOriginal.ErrorIndexSettings.Type, contextLoaded.ErrorIndexSettings.Type); Assert.AreEqual(contextOriginal.Id, contextLoaded.Id); Assert.AreEqual(contextOriginal.WinQualSettings.CompanyName, contextLoaded.WinQualSettings.CompanyName); Assert.AreEqual(contextOriginal.WinQualSettings.Password, contextLoaded.WinQualSettings.Password); Assert.AreEqual(contextOriginal.WinQualSettings.UserName, contextLoaded.WinQualSettings.UserName); Assert.AreEqual(1, contextOriginal.WinQualSettings.ProductsToSynchronize.Count); Assert.AreEqual(23, contextOriginal.WinQualSettings.ProductsToSynchronize[0].ProductId); Assert.AreEqual(true, contextOriginal.WinQualSettings.EnableNewProductsAutomatically); Assert.AreEqual(contextOriginal.WinQualSyncSchedule.Count, contextLoaded.WinQualSyncSchedule.Count); for (int j = 0; j < contextOriginal.CabFilePurgeSchedule.Count; j++) { Schedule scheduleOriginal = settings.ContextCollection[i].CabFilePurgeSchedule[0]; Schedule scheduleLoaded = loadedSettings.ContextCollection[i].CabFilePurgeSchedule[0]; Assert.AreEqual(scheduleOriginal.DaysOfWeek, scheduleLoaded.DaysOfWeek); Assert.AreEqual(scheduleOriginal.Period, scheduleLoaded.Period); Assert.AreEqual(scheduleOriginal.Time.Hour, scheduleLoaded.Time.Hour); Assert.AreEqual(scheduleOriginal.Time.Minute, scheduleLoaded.Time.Minute); Assert.AreEqual(scheduleOriginal.Time.Second, scheduleLoaded.Time.Second); } Assert.AreEqual(contextOriginal.DebuggerSettings.DebuggerPathAndFileName, contextLoaded.DebuggerSettings.DebuggerPathAndFileName); Assert.AreEqual(contextOriginal.DebuggerSettings.BinaryPath[0], contextLoaded.DebuggerSettings.BinaryPath[0]); Assert.AreEqual(contextOriginal.DebuggerSettings.BinaryPath[1], contextLoaded.DebuggerSettings.BinaryPath[1]); Assert.AreEqual(contextOriginal.DebuggerSettings.SymbolPath[0], contextLoaded.DebuggerSettings.SymbolPath[0]); Assert.AreEqual(contextOriginal.DebuggerSettings.SymbolPath[1], contextLoaded.DebuggerSettings.SymbolPath[1]); Assert.AreEqual(contextOriginal.DebuggerSettings.DebuggerPathAndFileName64Bit, contextLoaded.DebuggerSettings.DebuggerPathAndFileName64Bit); Assert.AreEqual(contextOriginal.DebuggerSettings.BinaryPath64Bit[0], contextLoaded.DebuggerSettings.BinaryPath64Bit[0]); Assert.AreEqual(contextOriginal.DebuggerSettings.BinaryPath64Bit[1], contextLoaded.DebuggerSettings.BinaryPath64Bit[1]); Assert.AreEqual(contextOriginal.DebuggerSettings.SymbolPath64Bit[0], contextLoaded.DebuggerSettings.SymbolPath64Bit[0]); Assert.AreEqual(contextOriginal.DebuggerSettings.SymbolPath64Bit[1], contextLoaded.DebuggerSettings.SymbolPath64Bit[1]); Assert.AreEqual(contextOriginal.PurgeOptionsCollection.Count, contextLoaded.PurgeOptionsCollection.Count); int purgeOptionIndex = 0; foreach (StackHashPurgeOptions oldPurgeOptions in contextOriginal.PurgeOptionsCollection) { StackHashPurgeOptions loadedPurgeOptions = contextLoaded.PurgeOptionsCollection[purgeOptionIndex++]; Assert.AreEqual(oldPurgeOptions.Id, loadedPurgeOptions.Id); Assert.AreEqual(oldPurgeOptions.AgeToPurge, loadedPurgeOptions.AgeToPurge); Assert.AreEqual(oldPurgeOptions.PurgeCabFiles, loadedPurgeOptions.PurgeCabFiles); Assert.AreEqual(oldPurgeOptions.PurgeDumpFiles, loadedPurgeOptions.PurgeDumpFiles); Assert.AreEqual(oldPurgeOptions.PurgeObject, loadedPurgeOptions.PurgeObject); } if (contextOriginal.BugTrackerSettings != null) { for (int j = 0; j < contextOriginal.BugTrackerSettings.PlugInSettings.Count; j++) { StackHashBugTrackerPlugIn bugTrackerSettings = contextOriginal.BugTrackerSettings.PlugInSettings[j]; Assert.AreEqual(contextOriginal.BugTrackerSettings.PlugInSettings[j].Enabled, bugTrackerSettings.Enabled); for (int k = 0; k < bugTrackerSettings.Properties.Count; k++) { Assert.AreEqual(contextOriginal.BugTrackerSettings.PlugInSettings[j].Properties[k], bugTrackerSettings.Properties[k]); } } } } }
public void DownloadCabProductDoesNotExist() { String errorIndexFolder = Path.GetTempPath() + "StackHashCabDownloadTests"; String errorIndexName = "CabDownloads"; String scriptFolder = errorIndexFolder + "\\Scripts"; if (Directory.Exists(errorIndexFolder)) { PathUtils.SetFilesWritable(errorIndexFolder, true); PathUtils.DeleteDirectory(errorIndexFolder, true); } Directory.CreateDirectory(errorIndexFolder); Directory.CreateDirectory(scriptFolder); try { // Create a settings manager and a new context. SettingsManager settingsManager = new SettingsManager(errorIndexFolder + "\\ServiceSettings.XML"); StackHashContextSettings contextSettings = settingsManager.CreateNewContextSettings(); contextSettings.WinQualSettings = new WinQualSettings("UserName", "Password", "Company", 10, new StackHashProductSyncDataCollection(), false, 0, 1, WinQualSettings.DefaultSyncsBeforeResync, false); contextSettings.ErrorIndexSettings = new ErrorIndexSettings(); contextSettings.ErrorIndexSettings.Folder = errorIndexFolder; contextSettings.ErrorIndexSettings.Name = errorIndexName; ScriptManager scriptManager = new ScriptManager(scriptFolder); string licenseFileName = string.Format("{0}\\License.bin", errorIndexFolder); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); ControllerContext controllerContext = new ControllerContext(contextSettings, scriptManager, new Windbg(), settingsManager, true, StackHashTestData.Default, licenseManager); // Activate the context and the associated index. controllerContext.Activate(); // Hook up to receive admin reports. controllerContext.AdminReports += new EventHandler <AdminReportEventArgs>(this.OnAdminReport); // Run the download task. Guid guid = new Guid(); StackHashClientData clientData = new StackHashClientData(guid, "GuidName", 1); StackHashProduct product = new StackHashProduct(DateTime.Now, DateTime.Now, "www.files.com", 12345678, "CuckuBackup", 10, 1, "1.2.3.4"); StackHashFile file = new StackHashFile(DateTime.Now, DateTime.Now, 23, DateTime.Now, "FileName", "2.3.4.5"); StackHashEvent theEvent = new StackHashEvent(DateTime.Now, DateTime.Now, "EventTypeName", 10, new StackHashEventSignature(), 1, 23); StackHashCab cab = new StackHashCab(DateTime.Now, DateTime.Now, 10, "EventTypeName", "this.cab", 100, 10000); try { controllerContext.RunDownloadCabTask(clientData, product, file, theEvent, cab, false); } catch (ArgumentException ex) { Assert.AreEqual(true, ex.Message.Contains("Product does not exist")); } controllerContext.Deactivate(); controllerContext.AdminReports -= new EventHandler <AdminReportEventArgs>(this.OnAdminReport); } finally { if (Directory.Exists(errorIndexFolder)) { PathUtils.SetFilesWritable(errorIndexFolder, true); PathUtils.DeleteDirectory(errorIndexFolder, true); } } }
public void DownloadCabAllOkDummy() { String errorIndexFolder = Path.GetTempPath() + "StackHashCabDownloadTests"; String errorIndexName = "CabDownloads"; String scriptFolder = errorIndexFolder + "\\Scripts"; if (Directory.Exists(errorIndexFolder)) { PathUtils.SetFilesWritable(errorIndexFolder, true); PathUtils.DeleteDirectory(errorIndexFolder, true); } Directory.CreateDirectory(errorIndexFolder); Directory.CreateDirectory(scriptFolder); try { // Create a settings manager and a new context. SettingsManager settingsManager = new SettingsManager(errorIndexFolder + "\\ServiceSettings.XML"); StackHashContextSettings contextSettings = settingsManager.CreateNewContextSettings(); contextSettings.WinQualSettings = new WinQualSettings("UserName", "Password", "Company", 10, new StackHashProductSyncDataCollection(), false, 0, 1, WinQualSettings.DefaultSyncsBeforeResync, false); contextSettings.ErrorIndexSettings = new ErrorIndexSettings(); contextSettings.ErrorIndexSettings.Folder = errorIndexFolder; contextSettings.ErrorIndexSettings.Name = errorIndexName; ScriptManager scriptManager = new ScriptManager(scriptFolder); string licenseFileName = string.Format("{0}\\License.bin", errorIndexFolder); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); ControllerContext controllerContext = new ControllerContext(contextSettings, scriptManager, new Windbg(), settingsManager, true, StackHashTestData.Default, licenseManager); // Activate the context and the associated index. controllerContext.Activate(); // Hook up to receive admin reports. controllerContext.AdminReports += new EventHandler <AdminReportEventArgs>(this.OnAdminReport); // Run the download task. Guid guid = new Guid(); StackHashClientData clientData = new StackHashClientData(guid, "GuidName", 1); StackHashProduct product = new StackHashProduct(DateTime.Now, DateTime.Now, "www.files.com", 12345678, "CuckuBackup", 10, 1, "1.2.3.4"); StackHashFile file = new StackHashFile(DateTime.Now, DateTime.Now, 23, DateTime.Now, "FileName", "2.3.4.5"); StackHashEvent theEvent = new StackHashEvent(DateTime.Now, DateTime.Now, "EventTypeName", 10, new StackHashEventSignature(), 1, 23); StackHashCab cab = new StackHashCab(DateTime.Now, DateTime.Now, 10, "EventTypeName", "this.cab", 100, 10000); controllerContext.ErrorIndex.AddProduct(product); controllerContext.ErrorIndex.AddFile(product, file); controllerContext.ErrorIndex.AddEvent(product, file, theEvent); cab.DumpAnalysis = new StackHashDumpAnalysis(); cab.DumpAnalysis.DotNetVersion = "xxx"; controllerContext.ErrorIndex.AddCab(product, file, theEvent, cab, false); controllerContext.RunDownloadCabTask(clientData, product, file, theEvent, cab, false); // Wait for the download task to complete. waitForDownloadCompleted(30000); Assert.AreEqual(2, m_AdminReports.Count); Assert.AreEqual(null, m_AdminReports[0].Report.LastException); Assert.AreEqual(0, m_AdminReports[0].Report.ContextId); Assert.AreEqual(StackHashAdminOperation.DownloadCabStarted, m_AdminReports[0].Report.Operation); Assert.AreEqual(clientData.ApplicationGuid, m_AdminReports[0].Report.ClientData.ApplicationGuid); Assert.AreEqual(clientData.ClientId, m_AdminReports[0].Report.ClientData.ClientId); Assert.AreEqual(clientData.ClientName, m_AdminReports[0].Report.ClientData.ClientName); Assert.AreEqual(clientData.ClientRequestId, m_AdminReports[0].Report.ClientData.ClientRequestId); Assert.AreEqual(null, m_AdminReports[1].Report.LastException); Assert.AreEqual(0, m_AdminReports[1].Report.ContextId); Assert.AreEqual(StackHashAdminOperation.DownloadCabCompleted, m_AdminReports[1].Report.Operation); Assert.AreEqual(clientData.ApplicationGuid, m_AdminReports[1].Report.ClientData.ApplicationGuid); Assert.AreEqual(clientData.ClientId, m_AdminReports[1].Report.ClientData.ClientId); Assert.AreEqual(clientData.ClientName, m_AdminReports[1].Report.ClientData.ClientName); Assert.AreEqual(clientData.ClientRequestId, m_AdminReports[1].Report.ClientData.ClientRequestId); // Get the cab data to ensure that it is set to downloaded. StackHashCabCollection cabs = controllerContext.ErrorIndex.LoadCabList(product, file, theEvent); Assert.AreEqual(true, cabs[0].CabDownloaded); Assert.AreEqual("xxx", cabs[0].DumpAnalysis.DotNetVersion); controllerContext.Deactivate(); controllerContext.AdminReports -= new EventHandler <AdminReportEventArgs>(this.OnAdminReport); } finally { if (Directory.Exists(errorIndexFolder)) { PathUtils.SetFilesWritable(errorIndexFolder, true); PathUtils.DeleteDirectory(errorIndexFolder, true); } } }
public void DownloadCabIdInvalid() { String errorIndexFolder = Path.GetTempPath() + "StackHashCabDownloadTests"; String errorIndexName = "CabDownloads"; String scriptFolder = errorIndexFolder + "\\Scripts"; if (Directory.Exists(errorIndexFolder)) { PathUtils.SetFilesWritable(errorIndexFolder, true); PathUtils.DeleteDirectory(errorIndexFolder, true); } Directory.CreateDirectory(errorIndexFolder); Directory.CreateDirectory(scriptFolder); try { // Create a settings manager and a new context. SettingsManager settingsManager = new SettingsManager(errorIndexFolder + "\\ServiceSettings.XML"); StackHashContextSettings contextSettings = settingsManager.CreateNewContextSettings(); contextSettings.WinQualSettings = new WinQualSettings(TestSettings.WinQualUserName, TestSettings.WinQualPassword, "Company", 10, new StackHashProductSyncDataCollection(), false, 0, 1, WinQualSettings.DefaultSyncsBeforeResync, false); contextSettings.ErrorIndexSettings = new ErrorIndexSettings(); contextSettings.ErrorIndexSettings.Folder = errorIndexFolder; contextSettings.ErrorIndexSettings.Name = errorIndexName; ScriptManager scriptManager = new ScriptManager(scriptFolder); string licenseFileName = string.Format("{0}\\License.bin", errorIndexFolder); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); ControllerContext controllerContext = new ControllerContext(contextSettings, scriptManager, new Windbg(), settingsManager, false, null, licenseManager); // Activate the context and the associated index. controllerContext.Activate(); // Hook up to receive admin reports. controllerContext.AdminReports += new EventHandler <AdminReportEventArgs>(this.OnAdminReport); // Run the download task. Guid guid = new Guid(); StackHashClientData clientData = new StackHashClientData(guid, "GuidName", 1); // Most of these params are real taking from Crashy. StackHashProduct product = new StackHashProduct(DateTime.Parse("2010-04-16T22:31:02Z"), DateTime.Parse("2010-07-07T08:20:58Z"), @"https://winqual.microsoft.com/Services/wer/user/files.aspx?productid=25299", 25299, "Crashy", 10, 0, "1.2.3.4"); StackHashFile file = new StackHashFile(DateTime.Parse("2010-04-19T00:15:00Z"), DateTime.Parse("2010-04-19T00:15:00Z"), 4232330, DateTime.Parse("2010-04-17T05:21:32Z"), "Crashy.exe", "1.2.3.4"); StackHashEvent theEvent = new StackHashEvent(DateTime.Parse("2010-04-19T10:20:00Z"), DateTime.Parse("2010-04-19T10:20:00Z"), "CLR20 Managed Crash", 1099299922, new StackHashEventSignature(), 13, 4232330); StackHashCab cab = new StackHashCab(DateTime.Parse("2010-04-21T16:49:00Z"), DateTime.Parse("2010-04-21T16:49:00Z"), 1099299922, "CLR20 Managed Crash", "1099299922-CLR20ManagedCrash-0837914903.cab", 0x12345678, 9313620); controllerContext.ErrorIndex.AddProduct(product); controllerContext.ErrorIndex.AddFile(product, file); controllerContext.ErrorIndex.AddEvent(product, file, theEvent); controllerContext.ErrorIndex.AddCab(product, file, theEvent, cab, true); controllerContext.RunDownloadCabTask(clientData, product, file, theEvent, cab, false); // Wait for the download task to complete - could take 5 mins to download. waitForDownloadCompleted(5 * 60000); Assert.AreEqual(2, m_AdminReports.Count); Assert.AreEqual(null, m_AdminReports[0].Report.LastException); Assert.AreEqual(0, m_AdminReports[0].Report.ContextId); Assert.AreEqual(StackHashAdminOperation.DownloadCabStarted, m_AdminReports[0].Report.Operation); Assert.AreEqual(clientData.ApplicationGuid, m_AdminReports[0].Report.ClientData.ApplicationGuid); Assert.AreEqual(clientData.ClientId, m_AdminReports[0].Report.ClientData.ClientId); Assert.AreEqual(clientData.ClientName, m_AdminReports[0].Report.ClientData.ClientName); Assert.AreEqual(clientData.ClientRequestId, m_AdminReports[0].Report.ClientData.ClientRequestId); Assert.AreEqual(StackHashAsyncOperationResult.Success, m_AdminReports[0].Report.ResultData); Assert.AreEqual(0, m_AdminReports[1].Report.ContextId); Assert.AreEqual(StackHashAdminOperation.DownloadCabCompleted, m_AdminReports[1].Report.Operation); Assert.AreEqual(clientData.ApplicationGuid, m_AdminReports[1].Report.ClientData.ApplicationGuid); Assert.AreEqual(clientData.ClientId, m_AdminReports[1].Report.ClientData.ClientId); Assert.AreEqual(clientData.ClientName, m_AdminReports[1].Report.ClientData.ClientName); Assert.AreEqual(clientData.ClientRequestId, m_AdminReports[1].Report.ClientData.ClientRequestId); Assert.AreEqual(StackHashAsyncOperationResult.Failed, m_AdminReports[1].Report.ResultData); Assert.AreNotEqual(null, m_AdminReports[1].Report.LastException); Assert.AreEqual(StackHashServiceErrorCode.CabDoesNotExist, m_AdminReports[1].Report.ServiceErrorCode); controllerContext.Deactivate(); controllerContext.AdminReports -= new EventHandler <AdminReportEventArgs>(this.OnAdminReport); } finally { if (Directory.Exists(errorIndexFolder)) { PathUtils.SetFilesWritable(errorIndexFolder, true); PathUtils.DeleteDirectory(errorIndexFolder, true); } } }
private void buttonUpgrade_Click(object sender, RoutedEventArgs e) { StackHashContextSettings settings = listBoxProfiles.SelectedItem as StackHashContextSettings; if (settings != null) { try { Mouse.OverrideCursor = Cursors.Wait; DBConfigSettings.Settings.ResetSettings(); DBConfigSettings.Settings.IsNewProfile = true; DBConfigSettings.Settings.IsUpgrade = true; DBConfigSettings.Settings.ServiceHost = ServiceProxy.Services.ServiceHost; DBConfigSettings.Settings.ServicePort = ServiceProxy.Services.ServicePort; DBConfigSettings.Settings.ServiceUsername = UserSettings.Settings.ServiceUsername; DBConfigSettings.Settings.ServicePassword = UserSettings.Settings.ServicePassword; DBConfigSettings.Settings.ServiceDomain = UserSettings.Settings.ServiceDomain; if (_clientLogic.ContextCollection != null) { foreach (DisplayContext existingSettings in _clientLogic.ContextCollection) { DBConfigSettings.Settings.ExistingProfileFolders.Add(existingSettings.StackHashContextSettings.ErrorIndexSettings.Folder); DBConfigSettings.Settings.ExistingProfileNames.Add(existingSettings.StackHashContextSettings.ErrorIndexSettings.Name); } } DBConfigSettings.Settings.ProfileName = settings.ErrorIndexSettings.Name; DBConfigSettings.Settings.ProfileFolder = null; // not populated as user is required to change this DBConfigSettings.Settings.ConnectionString = null; DBConfigSettings.Settings.Save(); _copyContextId = settings.Id; _copyContextIsActive = settings.IsActive; _dbConfigProcess = Process.Start("StackHashDBConfig.exe"); _dbConfigProcess.EnableRaisingEvents = true; _dbConfigProcess.Exited += new EventHandler(_dbConfigProcess_Exited); } catch (Exception ex) { Mouse.OverrideCursor = null; bool userCancel = false; Win32Exception win32ex = ex as Win32Exception; if (win32ex != null) { userCancel = (win32ex.NativeErrorCode == 1223); } if (!userCancel) { DiagnosticsHelper.LogException(DiagSeverity.ComponentFatal, "Failed to launch StackHashDBConfig.exe", ex); StackHashMessageBox.Show(this, Properties.Resources.DBConfigLaunchFailedMBMessage, Properties.Resources.DBConfigLaunchFailedMBTitle, StackHashMessageBoxType.Ok, StackHashMessageBoxIcon.Error, ex, StackHashMessageBox.ParseServiceErrorFromException(ex)); } } } }
public void ChangeParamsWhileActive() { string settingsFileName = string.Format("{0}\\ServiceSettings.xml", m_TempPath); SettingsManager settingsManager = new SettingsManager(settingsFileName); settingsManager.ServiceGuid = s_TestServiceGuid; StackHashContextSettings settings = settingsManager.CreateNewContextSettings(); settings.ErrorIndexSettings.Folder = m_TempPath; settings.ErrorIndexSettings.Name = "TestIndex"; settings.ErrorIndexSettings.Type = ErrorIndexType.Xml; ScriptManager scriptManager = new ScriptManager(m_ScriptPath); IDebugger debugger = new Windbg(); settings.WinQualSettings.UserName = "******"; settings.WinQualSettings.Password = "******"; settings.WinQualSyncSchedule = new ScheduleCollection(); Schedule schedule = new Schedule(); schedule.Period = SchedulePeriod.Daily; schedule.DaysOfWeek = Schedule.EveryDay; DateTime now = DateTime.Now; // Must get local time. DateTime syncTime = now.AddSeconds(100); schedule.Time = new ScheduleTime(syncTime.Hour, syncTime.Minute, syncTime.Second); settings.WinQualSyncSchedule.Add(schedule); string licenseFileName = string.Format("{0}\\License.bin", m_TempPath); LicenseManager licenseManager = new LicenseManager(licenseFileName, s_TestServiceGuid); licenseManager.SetLicense(s_LicenseId); ControllerContext context = new ControllerContext(settings, scriptManager, debugger, settingsManager, true, StackHashTestData.Default, licenseManager); context.AdminReports += new EventHandler<AdminReportEventArgs>(this.OnAdminReport); try { context.Activate(); // Create and delete some new context settings - should have no effect. StackHashContextSettings settings2 = settingsManager.CreateNewContextSettings(); settingsManager.RemoveContextSettings(settings2.Id, true); // Change the existing active context. settings2.Id = 0; settings2.ErrorIndexSettings.Folder = m_TempPath; settings2.ErrorIndexSettings.Name = "TestIndex"; settings2.ErrorIndexSettings.Type = ErrorIndexType.Xml; settings2.WinQualSettings.UserName = "******"; settings2.WinQualSettings.Password = "******"; settings2.WinQualSyncSchedule = new ScheduleCollection(); schedule = new Schedule(); schedule.Period = SchedulePeriod.Hourly; schedule.DaysOfWeek = Schedule.EveryDay; now = DateTime.Now; syncTime = now.AddSeconds(5); schedule.Time = new ScheduleTime(syncTime.Hour, syncTime.Minute, syncTime.Second); settings2.WinQualSyncSchedule.Add(schedule); context.UpdateSettings(settings2); // Wait for the timer to expire. Assert.AreEqual(true, m_WinQualSyncEvent.WaitOne(10000)); Assert.AreEqual(true, m_AnalyzeEvent.WaitOne(10000)); Assert.AreEqual(1, m_SyncCount); Assert.AreEqual(1, m_AnalyzeCount); context.Deactivate(); Assert.AreEqual(false, context.IsActive); Assert.AreEqual(null, context.WinQualSyncTimerTask); } finally { context.AdminReports -= new EventHandler<AdminReportEventArgs>(this.OnAdminReport); context.Dispose(); } }