Example #1
0
        public void zip_packager_unzips_the_file_properly()
        {
            string zipFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"res\test.zip");

            var modulePackage = new ModulePackage
            {
                ModuleManifest =
                    new ModuleManifest(),
                ModuleZip =
                    File.ReadAllBytes(zipFile)
            };


            // get the zip packager
            IModulePackager packager = new ModulePackager();

            // set up directory
            string targetDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Updater\Zip\");

            if (Directory.Exists(targetDirectory))
            {
                Directory.Delete(targetDirectory, true);
            }

            Directory.CreateDirectory(targetDirectory);

            // perform test
            packager.PerformUpdates(targetDirectory, modulePackage);

            // assert test
            Assert.IsTrue(File.Exists(Path.Combine(targetDirectory, "readme")));
        }
Example #2
0
        public void preparing_updates_calls_proper_subsystems_publishes_msg_at_the_end()
        {
            // return the same - might stop working if some of the code is gonna be put to verify download };
            var modulePacakge = new ModulePackage {
                ModuleManifest = _moduleManifest
            };

            ModulesRepository.Setup(x => x.GetModule(It.Is <string>(y => y == _moduleName)))
            .Returns(modulePacakge)
            .Verifiable("This package should be downloaded");

            EventAggregator.Setup(x => x.Publish(It.IsAny <NomadUpdatesReadyMessage>()))
            .Callback <NomadUpdatesReadyMessage>(msg =>
            {
                Assert.IsFalse(msg.Error);
                Assert.AreEqual(1, msg.ModuleManifests.Count);
                Assert.AreSame(modulePacakge.ModuleManifest,
                               msg.ModuleManifests[0]);
            })
            .Returns(null)
            .Verifiable("This message should be published upon exit");

            NomadUpdater.PrepareUpdate(new List <ModuleManifest>()
            {
                _moduleManifest
            });

            EventAggregator.Verify();
            ModulesRepository.Verify();
            Assert.AreEqual(UpdaterStatus.Prepared, NomadUpdater.Status);
        }
Example #3
0
 public void PerformUpdates(string targetDirectory, ModulePackage modulePackage)
 {
     using (ZipFile file = ZipFile.Read(modulePackage.ModuleZip))
     {
         file.ExtractAll(targetDirectory, ExtractExistingFileAction.OverwriteSilently);
     }
 }
Example #4
0
        void Write(ModulePackage package)
        {
            foreach (var kv in package.Modules)
            {
                if (kv.Value.ParseErrors.Count < 1)
                {
                    continue;
                }
                hadErrors = true;
                sw.WriteLine(kv.Value.ModuleName + "\t\t(" + kv.Value.FileName + ")");
                foreach (var err in kv.Value.ParseErrors)
                {
                    sw.WriteLine(string.Format("\t\t{0}\t{1}\t{2}", err.Location.Line, err.Location.Column, err.Message));
                }

                sw.WriteLine();
            }

            sw.Flush();

            foreach (var kv in package.Packages)
            {
                Write(kv.Value);
            }
        }
Example #5
0
        public static bool AddOrUpdateModule(DModule module, out ModulePackage pack)
        {
            pack = null;
            if (module == null || string.IsNullOrEmpty(module.ModuleName))
            {
                return(false);
            }

            pack = GetPackage(module, true);

            if (pack == null)
            {
                return(false);
            }

            var file = module.FileName;

            // Check if a module is already in the file lookup
            DModule oldMod;

            if (file != null && fileLookup.TryGetValue(file, out oldMod))
            {
                RemoveModule(oldMod);
                oldMod = null;
            }

            pack.AddModule(module);
            fileLookup.Add(file, module);
            return(true);
        }
Example #6
0
		public virtual IEnumerable<DModule> PrefilterSubnodes(ModulePackage pack, out ModulePackage[] subPackages)
		{
			subPackages = pack.GetPackages();
			if(subPackages.Length == 0)
				subPackages = null;
			
			var mods = pack.GetModules();
			return mods.Length != 0 ? mods : null;
		}
Example #7
0
        public void creates_directory_when_no_manifest_provided()
        {
            // prepare some package
            const string moduleString = "module1";
            ModulePackage modulePackage = GetPackageWithName(moduleString);

            var name = _moduleFinder.FindDirectoryForPackage(_testDirectory, modulePackage);

            Assert.IsTrue(Directory.Exists(name),"The directory does not exisits");
        }
Example #8
0
        public static DModule GetModule(string basePath, string moduleName, out ModulePackage pack)
        {
            pack = GetPackage(basePath, ModuleNameHelper.ExtractPackageName(moduleName));

            if (pack == null)
            {
                return(null);
            }

            return(pack.GetModule(ModuleNameHelper.ExtractModuleName(moduleName)));
        }
Example #9
0
 public static void EnumPackagesRecursively(ModulePackage pack, List <ModulePackage> list)
 {
     if (pack != null)
     {
         foreach (var kv in pack.packages)
         {
             list.Add(kv.Value);
             EnumPackagesRecursively(kv.Value, list);
         }
     }
 }
Example #10
0
 public static void EnumModulesRecursively(ModulePackage pack, List <DModule> list)
 {
     if (pack != null)
     {
         list.AddRange(pack.modules.Values);
         foreach (var sub in pack.packages)
         {
             EnumModulesRecursively(sub.Value, list);
         }
     }
 }
Example #11
0
        public virtual IEnumerable <DModule> PrefilterSubnodes(ModulePackage pack, out ModulePackage[] subPackages)
        {
            subPackages = pack.GetPackages();
            if (subPackages.Length == 0)
            {
                subPackages = null;
            }

            var mods = pack.GetModules();

            return(mods.Length != 0 ? mods : null);
        }
Example #12
0
        private static ModulePackage GetPackageWithName(string moduleString)
        {
            var package = new ModulePackage
                              {
                                  ModuleZip = new byte[] {0xFf},
                                  ModuleManifest = new ModuleManifest
                                                       {
                                                           ModuleName = moduleString,
                                                       }
                              };

            return package;
        }
Example #13
0
        public override IEnumerable<DModule> PrefilterSubnodes(ModulePackage pack, out ModulePackage[] subPackages)
        {
            var subPack = pack.GetPackage(filterHash);
            if(subPack != null)
                subPackages = new[]{ subPack };
            else
                subPackages = null;

            var ast = pack.GetModule(filterHash);
            if(ast != null)
                return new[]{ast};
            return null;
        }
Example #14
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="module"></param>
 /// <returns></returns>
 /// TODO: this method probably should not be public!
 public bool AddModule(ModulePackage module)
 {
     try
     {
         var name         = module.ModuleManifest.ModuleName;
         var manifestFile = GetManifestPath(name);
         var zipFile      = GetZipPath(name);
         var manifestData = XmlSerializerHelper.Serialize(module.ModuleManifest);
         File.WriteAllBytes(manifestFile, manifestData);
         File.WriteAllBytes(zipFile, module.ModuleZip);
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Example #15
0
		void Write(ModulePackage package)
		{
			foreach (var kv in package.Modules)
			{
				if (kv.Value.ParseErrors.Count < 1)
					continue;
				hadErrors = true;
				sw.WriteLine(kv.Value.ModuleName + "\t\t(" + kv.Value.FileName + ")");
				foreach (var err in kv.Value.ParseErrors)
					sw.WriteLine(string.Format("\t\t{0}\t{1}\t{2}", err.Location.Line, err.Location.Column, err.Message));

				sw.WriteLine();
			}

			sw.Flush();

			foreach (var kv in package.Packages)
				Write(kv.Value);
		}
Example #16
0
        public string FindDirectoryForPackage(string targetDirectory, ModulePackage modulePackage)
        {
            if (string.IsNullOrEmpty(targetDirectory) || modulePackage == null)
            {
                throw new ArgumentException("Bot arguments must be provided");
            }

            // get module name from package
            var moduleName = modulePackage.ModuleManifest.ModuleName;

            // founded manifest
            string manifestDirectory = string.Empty;

            // search directory for the module with such name
            var          directoryInfo = new DirectoryInfo(targetDirectory);
            const string searchPattern = "*" + ModuleManifest.ManifestFileNameSuffix;
            var          files         = directoryInfo.GetFiles(searchPattern, SearchOption.AllDirectories);

            foreach (var manifestFile in files)
            {
                // get manifest out of the file
                var fileData = File.ReadAllBytes(manifestFile.FullName);
                var manifest = XmlSerializerHelper.Deserialize <ModuleManifest>(fileData);

                // check the names with the manifest)
                if (manifest.ModuleName.Equals(moduleName))
                {
                    manifestDirectory = manifestFile.DirectoryName;
                    break;
                }
            }

            // if no manifest directory found then make the new folder containing the new module
            if (string.IsNullOrEmpty(manifestDirectory))
            {
                manifestDirectory = Path.Combine(targetDirectory, moduleName);
                Directory.CreateDirectory(manifestDirectory);
            }

            return(manifestDirectory);
        }
        void ParseThread()
        {
            var           file = "";
            ModulePackage pack = null;

            while (queue.Count != 0)
            {
                lock (queue)
                {
                    if (queue.Count == 0)
                    {
                        return;
                    }

                    var kv = queue.Pop();
                    file = kv.Key;
                    pack = kv.Value;
                }

                try
                {
                    // If no debugger attached, save time + memory by skipping function bodies
                    var ast = DParser.ParseFile(file, !Debugger.IsAttached);

                    if (!(pack is RootPackage))
                    {
                        ast.ModuleName = pack.Path + "." + Path.GetFileNameWithoutExtension(file);
                    }

                    ast.FileName = file;
                    pack.Modules[ModuleNameHelper.ExtractModuleName(ast.ModuleName)] = ast;
                }
                catch (Exception ex)
                {
                    LastException = ex;
                }
            }
        }
Example #18
0
        public string FindDirectoryForPackage(string targetDirectory, ModulePackage modulePackage)
        {
            if (string.IsNullOrEmpty(targetDirectory) || modulePackage == null)
                throw new ArgumentException("Bot arguments must be provided");

            // get module name from package
            var moduleName = modulePackage.ModuleManifest.ModuleName;

            // founded manifest
            string manifestDirectory = string.Empty;

            // search directory for the module with such name
            var directoryInfo = new DirectoryInfo(targetDirectory);
            const string searchPattern = "*" + ModuleManifest.ManifestFileNameSuffix;
            var files = directoryInfo.GetFiles(searchPattern, SearchOption.AllDirectories);
            foreach (var manifestFile in files)
            {
                // get manifest out of the file
                var fileData = File.ReadAllBytes(manifestFile.FullName);
                var manifest = XmlSerializerHelper.Deserialize<ModuleManifest>(fileData);

                // check the names with the manifest)
                if (manifest.ModuleName.Equals(moduleName))
                {
                    manifestDirectory = manifestFile.DirectoryName;
                    break;
                }
            }

            // if no manifest directory found then make the new folder containing the new module
            if (string.IsNullOrEmpty(manifestDirectory))
            {
                manifestDirectory = Path.Combine(targetDirectory, moduleName);
                Directory.CreateDirectory(manifestDirectory);
            }

            return manifestDirectory;
        }
Example #19
0
        internal static bool RemoveModule(DModule ast, ModulePackage pack)
        {
            if (ast == null || pack == null)
            {
                return(false);
            }

            fileLookup.Remove(ast.FileName);

            if (!pack.RemoveModule(ast.ModuleName ?? ""))
            {
                return(false);
            }

            ModulePackage parPack;

            if (pack.IsEmpty && (parPack = pack.Parent) != null)
            {
                parPack.RemovePackage(pack.Name);
            }

            return(true);
        }
Example #20
0
        public override IEnumerable <DModule> PrefilterSubnodes(ModulePackage pack, out ModulePackage[] subPackages)
        {
            var subPack = pack.GetPackage(filterHash);

            if (subPack != null)
            {
                subPackages = new[] { subPack }
            }
            ;
            else
            {
                subPackages = null;
            }

            var ast = pack.GetModule(filterHash);

            if (ast != null)
            {
                return new[] { ast }
            }
            ;
            return(null);
        }
Example #21
0
        bool _remFromPack(ModulePackage pack, IAbstractSyntaxTree ast)
        {
            if (pack.Modules.ContainsValue(ast))
            {
                foreach (var kv in pack.Modules)
                {
                    if (kv.Value == ast)
                    {
                        pack.Modules.Remove(kv.Key);
                        return(true);
                    }
                }
            }

            foreach (var p in pack.Packages)
            {
                if (_remFromPack(p.Value, ast))
                {
                    return(true);
                }
            }

            return(false);
        }
Example #22
0
		public static DModule GetModule (string basePath, string moduleName, out ModulePackage pack)
		{
			pack = GetPackage (basePath, ModuleNameHelper.ExtractPackageName (moduleName));

			if (pack == null)
				return null;

			return pack.GetModule (ModuleNameHelper.ExtractModuleName (moduleName));
		}
Example #23
0
 public static string ContaningModules(this ModulePackage me) => string.Join(',', me.Modules.Select(m => m.FullName));
Example #24
0
 public PackageSymbol(ModulePackage pack,ISyntaxRegion td)
     : base(td)
 {
     this.Package = pack;
 }
Example #25
0
 public PackageSymbol(ModulePackage pack, ISyntaxRegion td) : base(td)
 {
     this.Package = pack;
 }
Example #26
0
 public override IEnumerable<DModule> PrefilterSubnodes(ModulePackage pack, out ModulePackage[] subPackages)
 {
     subPackages = null;
     return null;
 }
Example #27
0
		public static bool AddOrUpdateModule (DModule module, out ModulePackage pack)
		{
			pack = null;
			if (module == null || string.IsNullOrEmpty (module.ModuleName))
				return false;

			pack = GetPackage (module, true);

			if (pack == null)
				return false;

			var file = module.FileName;

			// Check if a module is already in the file lookup
			DModule oldMod;
			if (file != null && fileLookup.TryGetValue (file, out oldMod)) {
				RemoveModule (oldMod);
				oldMod = null;
			}

			pack.AddModule (module);
			fileLookup.Add (file, module);
			return true;
		}
Example #28
0
		public static void EnumPackagesRecursively(ModulePackage pack, List<ModulePackage> list)
		{
			if (pack != null)
				foreach (var kv in pack.packages)
				{
					list.Add(kv.Value);
					EnumPackagesRecursively(kv.Value, list);
				}
		}
        /// <summary>
        /// Adds <see cref="LayoutModule">modules</see> and <see cref="LayoutService">stations</see> in a <see cref="ModulePackage"/> to a <see cref="Layout"/>
        /// </summary>
        /// <param name="principal"></param>
        /// <param name="participantId"></param>
        /// <param name="layoutId"></param>
        /// <param name="package"></param>
        /// <returns></returns>
        public async Task <(int Count, string Message)> AddPackageModulesAsync(ClaimsPrincipal?principal, int participantId, int layoutId, ModulePackage package)
        {
            if (principal.IsAuthenticated())
            {
                var result = package.Modules.Count();
                using var dbContext = Factory.CreateDbContext();
                var participant = await dbContext.MeetingParticipants.Include(mp => mp.Meeting).SingleOrDefaultAsync(mp => mp.Id == participantId);

                if (participant is null)
                {
                    return(-1, Resources.Strings.NotFound);
                }
                foreach (var module in package.Modules)
                {
                    var existing = await dbContext.LayoutModules.SingleOrDefaultAsync(lm => lm.ModuleId == module.Id);

                    if (existing is null)
                    {
                        var addedModule = new LayoutModule {
                            LayoutId = layoutId, ModuleId = module.Id, ParticipantId = participant.Id, RegisteredTime = TimeProvider.Now
                        };
                        dbContext.LayoutModules.Add(addedModule);
                        await AddLayoutStationAsync(dbContext, participantId, layoutId, module);

                        await dbContext.SaveChangesAsync();
                    }
                    else
                    {
                        result--;
                    }
                }
                return(result == 0 ? (-1, Resources.Strings.NoModification) : (1, Resources.Strings.Saved));
Example #30
0
		public static void EnumModulesRecursively(ModulePackage pack, List<DModule> list)
		{
			if (pack != null)
			{
				list.AddRange(pack.modules.Values);
				foreach (var sub in pack.packages)
					EnumModulesRecursively(sub.Value, list);
			}
		}
    /// <summary>
    /// Adds <see cref="LayoutModule">modules</see> and <see cref="LayoutService">stations</see> in a <see cref="ModulePackage"/> to a <see cref="Layout"/>
    /// </summary>
    /// <param name="principal"></param>
    /// <param name="participantId"></param>
    /// <param name="layoutId"></param>
    /// <param name="package"></param>
    /// <returns></returns>
    public async Task <(int Count, string Message)> AddPackageModulesAsync(ClaimsPrincipal?principal, int layoutParticipantId, ModulePackage package)
    {
        if (principal.IsAuthenticated())
        {
            var result = package.Modules.Count();
            using var dbContext = Factory.CreateDbContext();
            var participant = await dbContext.LayoutParticipants
                              .SingleOrDefaultAsync(lp => lp.Id == layoutParticipantId);

            if (participant is null)
            {
                return(-1, Resources.Strings.NotFound);
            }
            foreach (var module in package.Modules)
            {
                var existing = await dbContext.LayoutModules.SingleOrDefaultAsync(lm => lm.ModuleId == module.Id && lm.LayoutParticipantId == layoutParticipantId);

                if (existing is null)
                {
                    var layoutModule = new LayoutModule {
                        ModuleId = module.Id, LayoutParticipantId = participant.Id, RegisteredTime = TimeProvider.Now
                    };
                    if (module.StationId.HasValue)
                    {
                        var layoutStation = new LayoutStation {
                            StationId = module.StationId.Value
                        };
                        layoutModule.LayoutStation = layoutStation;
                    }
                    dbContext.LayoutModules.Add(layoutModule);
                    await dbContext.SaveChangesAsync();
                }
                else
                {
                    result--;
                }
            }
            return(result == 0 ? (-1, Resources.Strings.NoModification) : (1, Resources.Strings.Saved));
        }
        return(0, Resources.Strings.NotAuthorized);
    }
Example #32
0
		internal static bool RemoveModule (DModule ast, ModulePackage pack)
		{
			if (ast == null || pack == null)
				return false;

			fileLookup.Remove (ast.FileName);

			if (!pack.RemoveModule (ast.ModuleName ?? ""))
				return false;

			ModulePackage parPack;
			if (pack.IsEmpty && (parPack = pack.Parent) != null)
				parPack.RemovePackage (pack.Name);

			return true;
		}
Example #33
0
 public override IEnumerable <DModule> PrefilterSubnodes(ModulePackage pack, out ModulePackage[] subPackages)
 {
     subPackages = null;
     return(null);
 }