Esempio n. 1
0
        public ApplicationTypeContext(ApplicationManifestType appManifestType, string appPath)
        {
            this.ApplicationManifest = appManifestType;
            this.ServiceManifests    = new Collection <ServiceManifest>();

            this.BuildLayoutSpecification = BuildLayoutSpecification.Create();
            this.BuildLayoutSpecification.SetRoot(appPath);

            this.InitializeAndValidateApplicationParameters(appManifestType.Parameters);
        }
Esempio n. 2
0
        /// <summary>
        /// Generates checksum files for all service package sub-directories (i.e. code/config/data packages) and service manifests found under the application package root directory.
        /// </summary>
        /// <param name="appPackageRootDirectory">The application package root directory.</param>
        /// <param name="progressHandler">An optional handler for tracking progress of the checksum generation.</param>
        /// <param name="isImageStoreServiceEnabled">Should be set to true if the cluster's ImageStoreConnectionString is set to "fabric:ImageStore", false otherwise.</param>
        /// <remarks>
        /// <para>
        /// The cluster will automatically generate checksums during application type registration if they're not already part of the application package. This method can be used to incur the cost of checksum file generation while preparing the application package, which will reduce the cost of registering the application type package for large packages.
        /// </para>
        /// </remarks>
        public static void GenerateApplicationPackageChecksumFiles(
            string appPackageRootDirectory,
            IImageStoreProgressHandler progressHandler,
            bool isImageStoreServiceEnabled = true)
        {
            var layoutSpecification = BuildLayoutSpecification.Create();

            var files       = new List <string>();
            var directories = new List <string>();

            foreach (var servicePackageDirectory in FabricDirectory.GetDirectories(appPackageRootDirectory))
            {
                files.AddRange(FabricDirectory.GetFiles(servicePackageDirectory));
                directories.AddRange(FabricDirectory.GetDirectories(servicePackageDirectory));
            }

            int completedItems = 0;
            int totalItems     = files.Count + directories.Count;

            foreach (var file in files)
            {
                GenerateChecksumFile(file, layoutSpecification, isImageStoreServiceEnabled);

                try
                {
                    if (progressHandler != null)
                    {
                        progressHandler.UpdateProgress(++completedItems, totalItems, ProgressUnitType.Files);
                    }
                }
                catch (Exception)
                {
                    // Do not fail checksum processing if progress update fails
                }
            }

            foreach (var directory in directories)
            {
                GenerateChecksumFile(directory, layoutSpecification, isImageStoreServiceEnabled);

                try
                {
                    if (progressHandler != null)
                    {
                        progressHandler.UpdateProgress(++completedItems, totalItems, ProgressUnitType.Files);
                    }
                }
                catch (Exception)
                {
                    // Do not fail checksum processing if progress update fails
                }
            }
        }
Esempio n. 3
0
        private static void GenerateChecksumFile(
            string fileOrDirectoryPath,
            BuildLayoutSpecification layoutSpecification,
            bool isImageStoreServiceEnabled)
        {
            var checksumFileName = layoutSpecification.GetChecksumFile(fileOrDirectoryPath);

            if (FabricFile.Exists(checksumFileName))
            {
                FabricFile.Delete(checksumFileName);
            }

            var checksumValue = ChecksumUtility.ComputeHash(fileOrDirectoryPath, isImageStoreServiceEnabled);

            WriteStringToFile(checksumFileName, checksumValue);
        }
Esempio n. 4
0
        public void InitializeManifest(string applicationBuildPath = null)
        {
            if (string.IsNullOrEmpty(applicationBuildPath))
            {
                this.ApplicationManifestType =
                    TestUtility.ReadXml <ApplicationManifestType>(Path.Combine(TestDirectory, "ApplicationManifest.xml"));

                this.ServiceManifestTypes = new Collection <ServiceManifestType>();
                this.ServiceManifestTypes.Add(
                    TestUtility.ReadXml <ServiceManifestType>(Path.Combine(TestDirectory, "ServiceManifest.xml")));

                this.SettingsType = TestUtility.ReadXml <SettingsType>(Path.Combine(TestDirectory, "Settings.xml"));

                this.GenerateApplicationFolderName();

                this.BuildLayoutSpecification = BuildLayoutSpecification.Create();
                this.BuildLayoutSpecification.SetRoot(this.ApplicationFolderName);

                this.ApplicationManifestPath = this.BuildLayoutSpecification.GetApplicationManifestFile();
            }
            else
            {
                this.ApplicationManifestType =
                    TestUtility.ReadXml <ApplicationManifestType>(Path.Combine(applicationBuildPath, "ApplicationManifest.xml"));

                var servicePkgDirectories = Directory.EnumerateDirectories(applicationBuildPath);
                this.ServiceManifestTypes = new Collection <ServiceManifestType>();
                foreach (var directory in servicePkgDirectories)
                {
                    if (File.Exists(Path.Combine(directory, "ServiceManifest.xml")))
                    {
                        this.ServiceManifestTypes.Add(
                            TestUtility.ReadXml <ServiceManifestType>(Path.Combine(directory, "ServiceManifest.xml")));
                    }
                }

                this.BuildLayoutSpecification = BuildLayoutSpecification.Create();
                this.BuildLayoutSpecification.SetRoot(Path.GetDirectoryName(applicationBuildPath));

                this.ApplicationManifestPath = this.BuildLayoutSpecification.GetApplicationManifestFile();
            }
        }
Esempio n. 5
0
        public string CreateDiffBuildLayout(string[] includedComponentVersions)
        {
            string tempDirectory = Path.Combine(TestDirectory, "FabricUnitTests", Guid.NewGuid().ToString());

            try
            {
                Directory.CreateDirectory(tempDirectory);

                BuildLayoutSpecification tempBuildLayoutSpec = BuildLayoutSpecification.Create();
                tempBuildLayoutSpec.SetRoot(tempDirectory);

                foreach (var serviceManifestType in this.ServiceManifestTypes)
                {
                    if (!ShouldIncludeVersion(includedComponentVersions, serviceManifestType.Name, serviceManifestType.Version))
                    {
                        continue;
                    }

                    if (serviceManifestType.CodePackage != null)
                    {
                        foreach (CodePackageType codePackage in serviceManifestType.CodePackage)
                        {
                            if (!ShouldIncludeVersion(includedComponentVersions, codePackage.Name, codePackage.Version))
                            {
                                continue;
                            }

                            string codeFolderName = tempBuildLayoutSpec.GetCodePackageFolder(
                                serviceManifestType.Name,
                                codePackage.Name);
                            string pathInCodeFolder = Path.Combine(codeFolderName, "Test Path");

                            Directory.CreateDirectory(codeFolderName);
                            Directory.CreateDirectory(pathInCodeFolder);

                            File.Copy(
                                Path.Combine(TestDirectory, "System.Fabric.Management.dll"),
                                Path.Combine(codeFolderName, string.Format("System.Fabric.Management.{0}.dll", serviceManifestType.Name)),
                                true);

                            File.Copy(
                                Path.Combine(TestDirectory, "System.Fabric.Management.dll"),
                                Path.Combine(codeFolderName, "Setup.exe"),
                                true);

                            File.Copy(
                                Path.Combine(TestDirectory, "System.Fabric.Management.dll"),
                                Path.Combine(pathInCodeFolder, "TestLib.exe"),
                                true);
                        }
                    }

                    if (serviceManifestType.ConfigPackage != null)
                    {
                        foreach (ConfigPackageType configPackage in serviceManifestType.ConfigPackage)
                        {
                            if (!ShouldIncludeVersion(includedComponentVersions, configPackage.Name, configPackage.Version))
                            {
                                continue;
                            }

                            string configFolderName = tempBuildLayoutSpec.GetConfigPackageFolder(
                                serviceManifestType.Name,
                                configPackage.Name);

                            Directory.CreateDirectory(configFolderName);

                            if (this.SettingsType != null)
                            {
                                string settingsFileName = tempBuildLayoutSpec.GetSettingsFile(configFolderName);
                                TestUtility.WriteXml <SettingsType>(settingsFileName, this.SettingsType);
                            }
                            else
                            {
                                File.Copy(
                                    Path.Combine(TestDirectory, "System.Fabric.Management.dll"),
                                    Path.Combine(configFolderName, "MyConfig.xml"),
                                    true);
                            }
                        }
                    }

                    if (serviceManifestType.DataPackage != null)
                    {
                        foreach (DataPackageType dataPackage in serviceManifestType.DataPackage)
                        {
                            if (!ShouldIncludeVersion(includedComponentVersions, dataPackage.Name, dataPackage.Version))
                            {
                                continue;
                            }

                            string dataFolderName = tempBuildLayoutSpec.GetDataPackageFolder(
                                serviceManifestType.Name,
                                dataPackage.Name);

                            Directory.CreateDirectory(dataFolderName);

                            File.Copy(
                                Path.Combine(TestDirectory, "System.Fabric.Management.dll"),
                                Path.Combine(dataFolderName, "MyData.exe"),
                                true);
                        }
                    }

                    string serviceManifestFilePath  = tempBuildLayoutSpec.GetServiceManifestFile(serviceManifestType.Name);
                    string serviceManifestDirectory = Path.GetDirectoryName(serviceManifestFilePath);
                    if (!Directory.Exists(serviceManifestDirectory))
                    {
                        Directory.CreateDirectory(serviceManifestDirectory);
                    }

                    TestUtility.WriteXml <ServiceManifestType>(
                        tempBuildLayoutSpec.GetServiceManifestFile(serviceManifestType.Name),
                        serviceManifestType);
                }

                string appManifestFilePath  = tempBuildLayoutSpec.GetApplicationManifestFile();
                string appManifestDirectory = Path.GetDirectoryName(appManifestFilePath);
                if (!Directory.Exists(appManifestDirectory))
                {
                    Directory.CreateDirectory(appManifestDirectory);
                }

                TestUtility.WriteXml <ApplicationManifestType>(
                    tempBuildLayoutSpec.GetApplicationManifestFile(),
                    this.ApplicationManifestType);

                this.ImageStore.DeleteContent(this.ApplicationFolderName, TimeSpan.MaxValue);
                this.ImageStore.UploadContent(this.ApplicationFolderName, tempDirectory, TimeSpan.MaxValue, CopyFlag.AtomicCopy, false);
            }
            finally
            {
                if (Directory.Exists(tempDirectory))
                {
                    Directory.Delete(tempDirectory, true);
                }
            }

            return(this.ApplicationFolderName);
        }