public void DeploymentManagerTest_ProductionGoalState() { Console.WriteLine("test begins: {0}", DateTime.UtcNow); string goalStateFilepath = Path.Combine(BaseDir, GoalStateFilename); Assert.IsTrue(File.Exists(goalStateFilepath), string.Format("GoalStateFile {0} did not exist.", goalStateFilepath)); string goalStateJson = File.ReadAllText(goalStateFilepath); GoalStateModel model = GoalStateModel.GetGoalStateModelFromJson(goalStateJson); Assert.IsTrue(model != null, "Goal state JSON could not be deserialized."); Assert.IsTrue(model.Packages != null, "Goal state model must have a packages element."); if (model.Packages.Count() == 0) { return; } // There can only be one goal package int countGoalpackages = model.Packages.Where(package => package.IsGoalPackage).Count(); Assert.IsTrue(countGoalpackages == 1, "Exactly one goal package may be marked as IsGoalPackage in the goal state file."); // Validate each package link is reachable string errorMessage = string.Empty; foreach (PackageDetails package in model.Packages) { Uri packageUri; if (!Uri.TryCreate(package.TargetPackageLocation, UriKind.Absolute, out packageUri)) { errorMessage = string.Format("Cannot parse packageUri: {0}", package.TargetPackageLocation); Assert.Fail(errorMessage); } if (!StandaloneUtility.IsUriReachable(packageUri)) { errorMessage = string.Format("Package uri is not reachable: {0}", packageUri.AbsoluteUri); } } if (!string.IsNullOrEmpty(errorMessage)) { Assert.Fail(errorMessage); } // Validate that goal state downloaded package is the correct version string packageDropDir = System.Fabric.Common.Helpers.GetNewTempPath(); PackageDetails goalPackage = model.Packages.First(package => package.IsGoalPackage); Assert.IsTrue(goalPackage != null, "goalPackage null"); // Validate package downloadable Console.WriteLine("download begins for {0}: {1}", goalPackage.Version, DateTime.UtcNow); string packageLocalDownloadPath = Path.Combine(packageDropDir, string.Format(Microsoft.ServiceFabric.DeploymentManager.Constants.SFPackageDropNameFormat, goalPackage.Version)); bool packageDownloaded = StandaloneUtility.DownloadPackageAsync(goalPackage.Version, goalPackage.TargetPackageLocation, packageLocalDownloadPath).Result; Assert.IsTrue(packageDownloaded, string.Format("Package {0} failed to download from {1}.", goalPackage.Version, goalPackage.TargetPackageLocation)); // Validate downloaded package matches version of version in goal state file string cabVersion = CabFileOperations.GetCabVersion(packageLocalDownloadPath); Assert.IsTrue(goalPackage.Version == cabVersion, string.Format("Goal state package version {0} doesn't match downloaded package version {1}.", goalPackage.Version, cabVersion)); if (Directory.Exists(packageDropDir)) { try { FabricDirectory.Delete(packageDropDir, true, true); } catch { } } Console.WriteLine("test ends: {0}", DateTime.UtcNow); }