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); } }
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; }
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); } } }
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); }