Пример #1
0
        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();
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        /// <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);
                }
            }
        }
Пример #4
0
        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();
            }
        }
Пример #5
0
        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);
                }
            }
        }
Пример #6
0
        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);
                }
            }
        }
Пример #7
0
        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);
                }
            }
        }