public void LoadAndRestoreCurrentRuntimeTestAsync() { AssemblyServiceRepository assManRepo = GetTestRepo(nameof(LoadAndRestoreCurrentRuntimeTestAsync)); DaoRepository fileRepo = new DaoRepository() { Database = assManRepo.Database }; fileRepo.AddTypes(typeof(ChunkedFileDescriptor), typeof(ChunkDataDescriptor), typeof(ChunkData)); fileRepo.EnsureDaoAssemblyAndSchema(); FileService fmSvc = new FileService(fileRepo); AssemblyService svc = new AssemblyService(DataSettings.Current, fmSvc, assManRepo, DefaultConfigurationApplicationNameProvider.Instance); ProcessRuntimeDescriptor prd1 = svc.CurrentProcessRuntimeDescriptor; ProcessRuntimeDescriptor prd2 = svc.CurrentProcessRuntimeDescriptor; ProcessRuntimeDescriptor byName = assManRepo.OneProcessRuntimeDescriptorWhere(c => c.ApplicationName == prd1.ApplicationName); OutLineFormat("AppName: {0}", ConsoleColor.Cyan, prd1.ApplicationName); Expect.AreEqual(prd1.Cuid, prd2.Cuid); Expect.AreEqual(prd1.Cuid, byName.Cuid); bool?fired = false; svc.RuntimeRestored += (o, a) => { fired = true; OutLine(((ProcessRuntimeDescriptorEventArgs)a).DirectoryPath); }; svc.RestoreApplicationRuntime(byName.ApplicationName, $".\\{nameof(LoadAndRestoreCurrentRuntimeTestAsync)}"); Expect.IsTrue(fired.Value); }
public void ProcessRuntimeDescriptorSaveTest() { AssemblyServiceRepository repo = GetAssemblyManagementRepository(GetConsoleLogger(), nameof(ProcessRuntimeDescriptorSaveTest)); repo.SetDaoNamespace <ProcessRuntimeDescriptor>(); repo.Database.TryEnsureSchema <Dao.AssemblyDescriptor>(); List <AssemblyDescriptor> descriptors = AssemblyDescriptor.GetCurrentAppDomainDescriptors().ToList(); ProcessRuntimeDescriptor current = ProcessRuntimeDescriptor.PersistCurrentToRepo(repo); Expect.AreEqual(descriptors.Count, current.AssemblyDescriptors.Length, "Number of descriptors didn't match"); ProcessRuntimeDescriptor retrieved = repo.Retrieve <ProcessRuntimeDescriptor>(current.Id); Expect.AreEqual(descriptors.Count, retrieved.AssemblyDescriptors.Length, "Number of retrieved descriptors didn't match"); foreach (AssemblyDescriptor descriptor in retrieved.AssemblyDescriptors) { AssemblyDescriptor retrievedDescriptor = repo.Retrieve <AssemblyDescriptor>(descriptor.Uuid); OutLineFormat("Checking {0}", ConsoleColor.DarkBlue, retrievedDescriptor.AssemblyFullName); AssemblyDescriptor actual = descriptors.FirstOrDefault(d => d.Name.Equals(retrievedDescriptor.Name) && d.FileHash.Equals(retrievedDescriptor.FileHash) && d.AssemblyFullName.Equals(retrievedDescriptor.AssemblyFullName) ); Expect.AreEqual(actual.AssemblyReferenceDescriptors?.Count, retrievedDescriptor.AssemblyReferenceDescriptors?.Count); OutLineFormat("ProcessRuntimeDescriptors count {0}", retrievedDescriptor.ProcessRuntimeDescriptors.Count); } }
public ProcessRuntimeDescriptor LoadRuntimeDescriptor(ProcessRuntimeDescriptor likeThis) { return(LoadRuntimeDescriptor( likeThis.FilePath, likeThis.CommandLine, likeThis.MachineName, string.IsNullOrEmpty(likeThis.ApplicationName) ? ApplicationNameProvider.GetApplicationName(): likeThis.ApplicationName)); }
public void RestoreApplicationRuntime(string applicationName, string directoryPath) { ProcessRuntimeDescriptor prd = ProcessRuntimeDescriptor.LoadByAppName(applicationName, AssemblyManagementRepository); if (prd == null) { Args.Throw <InvalidOperationException>("The specified application ({0}) was not found", applicationName); } RestoreProcessRuntime(prd, directoryPath); }
protected void RestoreProcessRuntime(ProcessRuntimeDescriptor prd, string directoryPath) { foreach (AssemblyDescriptor ad in prd.AssemblyDescriptors) { string filePath = Path.Combine(directoryPath, ad.Name); FileService.RestoreFile(ad.FileHash, filePath); } DirectoryInfo dir = new DirectoryInfo(directoryPath); FireEvent(RuntimeRestored, new ProcessRuntimeDescriptorEventArgs { ProcessRuntimeDescriptor = prd, DirectoryPath = dir.FullName }); }
public ProcessRuntimeDescriptor PersistRuntimeDescriptor(ProcessRuntimeDescriptor runtimeDescriptor) { ProcessRuntimeDescriptor retrieved = ProcessRuntimeDescriptor.PersistToRepo(AssemblyManagementRepository, runtimeDescriptor); foreach (AssemblyDescriptor descriptor in retrieved.AssemblyDescriptors) { StoreAssemblyFileChunks(descriptor); } FireEvent(CurrentRuntimePersisted, new ProcessRuntimeDescriptorEventArgs { ProcessRuntimeDescriptor = retrieved }); return(retrieved); }
/// <summary> /// Loads the current ProcessRuntimeDescriptor persisting it /// if it isn't found /// </summary> /// <returns></returns> protected internal Task <ProcessRuntimeDescriptor> LoadCurrentRuntimeDescriptor() { return(Task.Run(() => { ProcessRuntimeDescriptor current = ProcessRuntimeDescriptor.GetCurrent(); ProcessRuntimeDescriptor retrieved = LoadRuntimeDescriptor(current); if (retrieved == null) { retrieved = PersistRuntimeDescriptor(current); } return retrieved; })); }
public void ProcessRuntimeDescriptorTest() { ProcessRuntimeDescriptor instance = ProcessRuntimeDescriptor.GetCurrent(); OutLineFormat("MachineName: {0}", ConsoleColor.Cyan, instance.MachineName); OutLineFormat("CommandLine: {0}", ConsoleColor.Cyan, instance.CommandLine); OutLineFormat("FilePath: {0}", ConsoleColor.Cyan, instance.FilePath); instance.AssemblyDescriptors.Each(ad => { OutLineFormat("Name: {0}", ConsoleColor.DarkCyan, ad.Name); OutLineFormat("FileHash: {0}", ConsoleColor.DarkCyan, ad.FileHash); OutLineFormat("AssemblyFullName: {0}", ConsoleColor.DarkCyan, ad.AssemblyFullName); }); OutLine(); }
public ProcessRuntimeDescriptor PersistRuntimeDescriptor(ProcessRuntimeDescriptor runtimeDescriptor) { try { ProcessRuntimeDescriptor retrieved = ProcessRuntimeDescriptor.PersistToRepo(AssemblyManagementRepository, runtimeDescriptor); foreach (AssemblyDescriptor descriptor in retrieved?.AssemblyDescriptors) { StoreAssemblyFileChunks(descriptor); } FireEvent(CurrentRuntimePersisted, new ProcessRuntimeDescriptorEventArgs { ProcessRuntimeDescriptor = retrieved }); return(retrieved); } catch (Exception ex) { FireEvent(ExceptionPersistingCurrentRuntime, new ProcessRuntimeDescriptorEventArgs { ProcessRuntimeDescriptor = runtimeDescriptor, Message = ex.Message }); return(runtimeDescriptor); } }