Example #1
0
        /// <summary>
        /// Builds a new fusion package into <paramref name="fusion"/> with all the required package versions.
        /// </summary>
        /// <param name="fusionConfig">Configuration of the fusion that needs to be builded.</param>
        /// <param name="fusion">Fusion that needs to be builded.</param>
        /// <param name="packageVersions">Versions of the packages that needs to be included in the fusion.</param>
        /// <inheritdoc />
        public void Build(FusePackConfig fusionConfig, IFusion fusion, IEnumerable <PackageVersion> packageVersions)
        {
            EnsureArg.IsNotNull(fusionConfig, nameof(fusionConfig));
            EnsureArg.IsNotNull(fusion, nameof(fusion));
            EnsureArg.IsNotNull(packageVersions, nameof(packageVersions));

            IEnumerable <IPackage> packages = null;

            try
            {
                packages = packageVersions
                           .Select(_ => packService.LoadPackage(_))
                           .Stale();

                var finalEntries = GetFinalEntries(fusionConfig, packages);

                foreach (var entry in finalEntries)
                {
                    SaveEntryOnFusion(fusion, entry, fusionConfig);

                    logService.Debug($"Entry: '{entry.Name}' added to fusion: '{fusionConfig.Id}'.");
                }
            }
            finally
            {
                if (packages != null)
                {
                    foreach (var package in packages)
                    {
                        (package as IDisposable)?.Dispose();
                    }
                }
            }
        }
        public void BeforeAddEntry(FusePackConfig config, IPackageEntry entry)
        {
            var processEntry       = entry as FusionProcessEntry;
            var processConfigEntry = entry as FusionProcessConfigEntry;

            var metaEntry = entry as FusionMetaEntry;

            if (processEntry != null)
            {
                processEntry.Name = config.Id;
            }

            if (processConfigEntry != null)
            {
                processConfigEntry.Name = $"{config.Id}.config";
            }

            if (metaEntry != null)
            {
                metaEntry.SetInfo(FusionMetaEntry.ExecutableInfoKey, config.Id);
                metaEntry.SetInfo(ZappVariables.StartupAssemblyNameFusionInfoKey, "SuperExitingApp1");
                metaEntry.SetInfo(ZappVariables.TeardownAssemblyNameFusionInfoKey, "SuperExitingApp1");
                metaEntry.SetInfo(ZappVariables.TeardownTypeNameFusionInfoKey, "SuperExitingClass1");
                metaEntry.SetInfo(ZappVariables.TeardownMethodNameFusionInfoKey, "Teardown");
            }
        }
Example #3
0
        private void SaveEntryOnFusion(
            IFusion fusion,
            IPackageEntry entry,
            FusePackConfig fusionConfig)
        {
            foreach (var filter in fusionFilters)
            {
                filter.BeforeAddEntry(fusionConfig, entry);
            }

            fusion.AddEntry(entry);
        }
Example #4
0
        private IEnumerable <IPackageEntry> GetFinalEntries(FusePackConfig fusionConfig, IEnumerable <IPackage> packages)
        {
            var basicEntries = GetBasicEntries(fusionConfig);

            var packageEntries = packages
                                 .SelectMany(_ => _.GetEntries())
                                 .Where(_ => entryFilter.IsMatch(_.Name));

            var finalEntries = basicEntries
                               .Concat(packageEntries);

            return(finalEntries
                   .GroupBy(_ => _.Name, StringComparer.OrdinalIgnoreCase)
                   .Select(_ => _.FirstOrDefault()));
        }
Example #5
0
        private IEnumerable <IPackageEntry> GetBasicEntries(FusePackConfig fusionConfig)
        {
            var dependencyEntries = dependencyFiles
                                    .Select(_ => new LazyPackageEntry(_.Name, new LazyStream(() => _.OpenRead())));

            var interceptorEntries = fusionInterceptors
                                     .Select(_ => _.GetEntries(fusionConfig))
                                     .Where(_ => _ != null)
                                     .SelectMany(_ => _);

            var frameworkEntries = frameworkPackageEntryFactory
                                   .CreateNew()
                                   .Cast <IPackageEntry>();

            return(dependencyEntries
                   .Concat(frameworkEntries)
                   .Concat(interceptorEntries));
        }
Example #6
0
        /// <summary>
        /// Extracts the stream
        /// </summary>
        /// <param name="config">Configuration of the fusion.</param>
        /// <param name="contentStream">Stream of the fusion.</param>
        /// <exception cref="ArgumentNullException">Throw when either <paramref name="config"/> or <paramref name="contentStream"/> is not set.</exception>
        /// <inheritdoc />
        public void Extract(FusePackConfig config, Stream contentStream)
        {
            EnsureArg.IsNotNull(config, nameof(config));
            EnsureArg.IsNotNull(contentStream, nameof(contentStream));

            fusionMaid.CleanAll(config.Id);

            var fusionLocation = fusionCatalogue
                                 .CreateLocation(config.Id);

            Directory.CreateDirectory(fusionLocation);

            using (var archive = new ZipArchive(contentStream))
            {
                archive.ExtractToDirectory(fusionLocation);

                logService.Info($"Fusion: '{config.Id}' has been extracted to disk.");
            }
        }
        public void Extract_WhenCalled_ExtractsFilesToDirectory()
        {
            var cfg = new FusePackConfig {
                Id = "test"
            };
            var fuseDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test");

            var contentStream = AssetsHelper.Read("test.zip");

            kernel.GetMock <IFusionCatalogue>()
            .Setup(_ => _.CreateLocation(cfg.Id))
            .Returns(() => fuseDir);

            var sut = GetSystemUnderTest();

            try
            {
                sut.Extract(cfg, contentStream);

                var dirInfo = new DirectoryInfo(fuseDir);

                Assert.That(dirInfo.GetFiles(), Is.Not.Empty);

                kernel.GetMock <ILog>()
                .Verify(_ => _.Info(It.IsAny <string>()), Times.Once);

                kernel.GetMock <IFusionMaid>()
                .Verify(_ => _.CleanAll(cfg.Id), Times.Once);
            }
            finally
            {
                if (Directory.Exists(fuseDir))
                {
                    Directory.Delete(fuseDir, true);
                }
            }
        }