Esempio n. 1
0
        public void TestGetMissingDependencies_Missing( )
        {
            Solution appA = new Solution
            {
                Name = "appA"
            };
            Solution appB = new Solution
            {
                Name = "appB"
            };
            Solution appC = new Solution
            {
                Name = "appC"
            };

            ApplicationDependency aDependsOnB = new ApplicationDependency
            {
                Name = "appA depends on appB",
                DependentApplication  = appA,
                DependencyApplication = appB
            };

            appA.DependentApplicationDetails.Add(aDependsOnB);

            appA.Save( );

            ApplicationDependency bDependsOnC = new ApplicationDependency
            {
                Name = "appB depends on appC",
                DependentApplication  = appB,
                DependencyApplication = appC
            };

            appB.DependentApplicationDetails.Add(bDependsOnC);

            appB.Save( );

            AppManager.PublishApp(RunAsDefaultTenant.DefaultTenantName, "appA");
            AppManager.PublishApp(RunAsDefaultTenant.DefaultTenantName, "appB");

            long tenantId = TenantHelper.CreateTenant("ABC");

            AppManager.DeployApp("ABC", Applications.CoreApplicationId.ToString("B"));

            Guid appAUpgradeId = Entity.GetUpgradeId(appA.Id);

            using (new GlobalAdministratorContext( ))
            {
                AppPackage appPackage = SystemHelper.GetLatestPackageByGuid(appAUpgradeId);

                var applicationDependencies = SolutionHelper.GetMissingPackageDependencies(appPackage.Id, tenantId);

                Assert.AreEqual(1, applicationDependencies.Count);

                DependencyFailure dependency = applicationDependencies[0];

                Assert.AreEqual(DependencyFailureReason.Missing, dependency.Reason);
            }
        }
Esempio n. 2
0
        public void TestGetMissingDependencies( )
        {
            Solution appA = new Solution
            {
                Name = "appA"
            };
            Solution appB = new Solution
            {
                Name = "appB"
            };
            Solution appC = new Solution
            {
                Name = "appC"
            };

            ApplicationDependency aDependsOnB = new ApplicationDependency
            {
                Name = "appA depends on appB",
                DependentApplication  = appA,
                DependencyApplication = appB
            };

            appA.DependentApplicationDetails.Add(aDependsOnB);

            appA.Save( );

            ApplicationDependency bDependsOnC = new ApplicationDependency
            {
                Name = "appB depends on appC",
                DependentApplication  = appB,
                DependencyApplication = appC
            };

            appB.DependentApplicationDetails.Add(bDependsOnC);

            appB.Save( );

            AppManager.PublishApp(RunAsDefaultTenant.DefaultTenantName, "appA");

            Guid appAUpgradeId = Entity.GetUpgradeId(appA.Id);
            long tenantId      = RequestContext.TenantId;

            using (new GlobalAdministratorContext( ))
            {
                AppPackage appPackage = SystemHelper.GetLatestPackageByGuid(appAUpgradeId);

                SolutionHelper.GetMissingPackageDependencies(appPackage.Id, tenantId);
            }
        }
        /// <summary>
        ///     Initializes a new instance of the <see cref="SolutionDependency" /> class.
        /// </summary>
        /// <param name="dependency">The dependency.</param>
        public SolutionDependency(ApplicationDependency dependency)
        {
            if (dependency == null)
            {
                throw new ArgumentNullException(nameof(dependency));
            }

            Name = dependency.Name;

            if (dependency.DependencyApplication != null)
            {
                DependencyName        = dependency.DependencyApplication.Name;
                DependencyApplication = dependency.DependencyApplication.UpgradeId;
            }

            Version minVersion;

            if (string.IsNullOrEmpty(dependency.ApplicationMinimumVersion) || dependency.ApplicationMinimumVersion.Equals("any", StringComparison.InvariantCultureIgnoreCase) || !Version.TryParse(dependency.ApplicationMinimumVersion, out minVersion))
            {
                MinimumVersion = null;
            }
            else
            {
                MinimumVersion = minVersion;
            }

            Version maxVersion;

            if (string.IsNullOrEmpty(dependency.ApplicationMaximumVersion) || dependency.ApplicationMaximumVersion.Equals("any", StringComparison.InvariantCultureIgnoreCase) || !Version.TryParse(dependency.ApplicationMaximumVersion, out maxVersion))
            {
                MaximumVersion = null;
            }
            else
            {
                MaximumVersion = maxVersion;
            }

            IsRequired = dependency.ApplicationIsRequired ?? true;
        }
Esempio n. 4
0
        public void TestGetMissingDependencies_NoUpgradePath( )
        {
            Solution appA = new Solution
            {
                Name = "appA",
                SolutionVersionString = "1.0.0.0"
            };
            Solution appB = new Solution
            {
                Name = "appB",
                SolutionVersionString = "1.0.0.0"
            };
            Solution appC = new Solution
            {
                Name = "appC",
                SolutionVersionString = "1.0.0.0"
            };

            ApplicationDependency aDependsOnB = new ApplicationDependency
            {
                Name = "appA depends on appB",
                DependentApplication  = appA,
                DependencyApplication = appB
            };

            appA.DependentApplicationDetails.Add(aDependsOnB);

            appA.Save( );

            ApplicationDependency bDependsOnC = new ApplicationDependency
            {
                Name = "appB depends on appC",
                DependentApplication  = appB,
                DependencyApplication = appC
            };

            appB.DependentApplicationDetails.Add(bDependsOnC);

            appB.Save( );

            AppManager.PublishApp(RunAsDefaultTenant.DefaultTenantName, "appA");
            AppManager.PublishApp(RunAsDefaultTenant.DefaultTenantName, "appB");
            AppManager.PublishApp(RunAsDefaultTenant.DefaultTenantName, "appC");

            Guid appAUpgradeId = Entity.GetUpgradeId(appA.Id);
            Guid appBUpgradeId = Entity.GetUpgradeId(appB.Id);

            long tenantId = TenantHelper.CreateTenant("ABC");

            AppManager.DeployApp("ABC", Applications.CoreApplicationId.ToString("B"));
            AppManager.DeployApp("ABC", appAUpgradeId.ToString("B"));

            bDependsOnC.ApplicationMinimumVersion = "2.0.0.0";
            bDependsOnC.Save( );
            appB.SolutionVersionString = "2.0.0.0";
            appB.Save( );

            AppManager.PublishApp(RunAsDefaultTenant.DefaultTenantName, "appB");

            using (new GlobalAdministratorContext( ))
            {
                AppPackage appPackage = SystemHelper.GetLatestPackageByGuid(appBUpgradeId);

                var applicationDependencies = SolutionHelper.GetMissingPackageDependencies(appPackage.Id, tenantId);

                if (applicationDependencies != null && applicationDependencies.Count > 0)
                {
                    Assert.AreEqual(1, applicationDependencies.Count);

                    DependencyFailure dependency = applicationDependencies[0];

                    if (dependency.Reason == DependencyFailureReason.BelowMinVersion)
                    {
                        SolutionHelper.EnsureUpgradePath(tenantId, dependency);
                    }

                    Assert.AreEqual(DependencyFailureReason.NoUpgradePathAvailable, dependency.Reason);
                }
            }
        }
Esempio n. 5
0
        public void TestGetApplicationDependencies( )
        {
            Solution appA = new Solution
            {
                Name = "appA"
            };
            Solution appB = new Solution
            {
                Name = "appB"
            };
            Solution appC = new Solution
            {
                Name = "appC"
            };
            Solution appD = new Solution
            {
                Name = "appD"
            };
            Solution appE = new Solution
            {
                Name = "appE"
            };

            ApplicationDependency aDependsOnB = new ApplicationDependency
            {
                Name = "appA depends on appB",
                DependentApplication  = appA,
                DependencyApplication = appB
            };

            appA.DependentApplicationDetails.Add(aDependsOnB);

            ApplicationDependency aDependsOnC = new ApplicationDependency
            {
                Name = "appA depends on appC",
                DependentApplication  = appA,
                DependencyApplication = appC
            };

            appA.DependentApplicationDetails.Add(aDependsOnC);

            appA.Save( );

            ApplicationDependency bDependsOnD = new ApplicationDependency
            {
                Name = "appB depends on appD",
                DependentApplication  = appB,
                DependencyApplication = appD
            };

            appB.DependentApplicationDetails.Add(bDependsOnD);

            appB.Save( );

            ApplicationDependency cDependsOnE = new ApplicationDependency
            {
                Name = "appC depends on appE",
                DependentApplication  = appC,
                DependencyApplication = appE
            };

            appC.DependentApplicationDetails.Add(cDependsOnE);

            appC.Save( );

            IList <ApplicationDependency> results = SolutionHelper.GetApplicationDependencies(appA.Id, true);

            Assert.IsNotNull(results);
            Assert.AreEqual(2, results.Count);

            List <long> dependencies = results.Select(r => r.DependencyApplication.Id).ToList( );

            Assert.Contains(appB.Id, dependencies);
            Assert.Contains(appC.Id, dependencies);

            results = SolutionHelper.GetApplicationDependencies(appA.Id);

            Assert.IsNotNull(results);
            Assert.AreEqual(4, results.Count);

            dependencies = results.Select(r => r.DependencyApplication.Id).ToList( );

            Assert.Contains(appB.Id, dependencies);
            Assert.Contains(appC.Id, dependencies);
            Assert.Contains(appD.Id, dependencies);
            Assert.Contains(appE.Id, dependencies);
        }