Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }
Example #3
0
 public ProcessRuntimeDescriptor LoadRuntimeDescriptor(ProcessRuntimeDescriptor likeThis)
 {
     return(LoadRuntimeDescriptor(
                likeThis.FilePath,
                likeThis.CommandLine,
                likeThis.MachineName,
                string.IsNullOrEmpty(likeThis.ApplicationName) ? ApplicationNameProvider.GetApplicationName(): likeThis.ApplicationName));
 }
Example #4
0
        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);
        }
Example #5
0
        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
            });
        }
Example #6
0
        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);
        }
Example #7
0
        /// <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;
            }));
        }
Example #8
0
        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();
        }
Example #9
0
        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);
            }
        }