public void TestConfigOnlyFabricUpgradeWithRunAs() { string currentExecutingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); string configurationCsvFilePath = Path.Combine(currentExecutingDirectory, "Configurations.csv"); string[] manifests = new string[] { "ClusterManifest-WithoutDiagnostics.xml", "ClusterManifest-WithRunAs.xml" }; FabricVersion[] fabricVersion = new FabricVersion[2]; for (int i = 0; i < 2; i++) { using (FabricLayoutInfo fabricLayoutInfo = new FabricLayoutInfo(this.imageStore, manifests[i])) { fabricLayoutInfo.PatchVersion = null; string codePath, configPath, infrastructureManifestFilePath; fabricLayoutInfo.Create(out codePath, out configPath, out infrastructureManifestFilePath); fabricVersion[i] = this.imageBuilder.GetFabricVersionInfo(codePath, configPath, TestUtility.ImageStoreDefaultTimeout); this.imageBuilder.ProvisionFabric( codePath, configPath, configurationCsvFilePath, infrastructureManifestFilePath, TimeSpan.MaxValue); TestUtility.VerifyWinFabLayout(fabricLayoutInfo); } } this.imageBuilder.UpgradeFabric( fabricVersion[0].ToString(), fabricVersion[1].ToString(), configurationCsvFilePath, TimeSpan.MaxValue); }
public void TestInvalidMSIFile() { string tempInvalidMsiFileName = Path.ChangeExtension(Path.GetRandomFileName(), "msi"); string tempInvalidMsiFilePath = Path.Combine(TestUtility.TestDirectory, tempInvalidMsiFileName); try { using (var stream = File.CreateText(tempInvalidMsiFilePath)) { stream.WriteLine("Invalid test msi file"); } this.imageStore.UploadContent( tempInvalidMsiFileName, tempInvalidMsiFilePath, TimeSpan.MaxValue, CopyFlag.AtomicCopy, false); FabricVersion fabricVersion = this.imageBuilder.GetFabricVersionInfo(tempInvalidMsiFileName, null, TestUtility.ImageStoreDefaultTimeout); } catch (FabricImageBuilderValidationException exception) { Verify.IsTrue((int)exception.ErrorCode == unchecked ((int)NativeTypes.FABRIC_ERROR_CODE.FABRIC_E_IMAGEBUILDER_INVALID_MSI_FILE)); } finally { if (File.Exists(tempInvalidMsiFilePath)) { File.Delete(tempInvalidMsiFilePath); } this.imageStore.DeleteContent(tempInvalidMsiFileName, TimeSpan.MaxValue); } }
public void TestGetFabricVersionInfo() { using (FabricLayoutInfo fabricLayoutInfo = new FabricLayoutInfo(this.imageStore)) { string codePath, configPath, infrastructureManifestFilePath; fabricLayoutInfo.Create(out codePath, out configPath, out infrastructureManifestFilePath); FabricVersion fabricVersion = this.imageBuilder.GetFabricVersionInfo(codePath, configPath, TestUtility.ImageStoreDefaultTimeout); Verify.AreEqual(fabricVersion.CodeVersion, fabricLayoutInfo.PatchVersion); Verify.AreEqual(fabricVersion.ConfigVersion, fabricLayoutInfo.ClusterManifest.Version); } }
public void UpgradeFabric( string currentFabricVersion, string targetFabricVersion, #if !DotNetCoreClrLinux && !DotNetCoreClrIOT string configurationCsvFilePath, #endif TimeSpan timeout, out bool isConfigOnly) { isConfigOnly = false; TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); ImageBuilder.TraceSource.WriteInfo( TraceType, "UpgradeFabric started: CurrentFabricVersion:{0}, TargetFabricVersion:{1}, Timeout:{2}", currentFabricVersion, targetFabricVersion, timeoutHelper.GetRemainingTime()); // If the current version is invalid (ie. Cluster FabricVersion is not determined) // then do not validate if (ImageBuilderUtility.Equals(currentFabricVersion, FabricVersion.Invalid.ToString())) { return; } FabricVersion currentVersion, targetVersion; bool isValid = FabricVersion.TryParse(currentFabricVersion, out currentVersion); if (!isValid) { ImageBuilderUtility.TraceAndThrowValidationError( TraceType, StringResources.ImageBuilderError_InvalidValue, "CurrentFabricVersion", currentFabricVersion); } isValid = FabricVersion.TryParse(targetFabricVersion, out targetVersion); if (!isValid) { ImageBuilderUtility.TraceAndThrowValidationError( TraceType, StringResources.ImageBuilderError_InvalidValue, "TargetFabricVersion", targetFabricVersion); } WinFabStoreLayoutSpecification winFabLayout = WinFabStoreLayoutSpecification.Create(); string currentClusterManifestPath = winFabLayout.GetClusterManifestFile(currentVersion.ConfigVersion); string targetClusterManifestPath = winFabLayout.GetClusterManifestFile(targetVersion.ConfigVersion); ClusterManifestType currentClusterManifest = this.imageStoreWrapper.GetFromStore <ClusterManifestType>(currentClusterManifestPath, timeoutHelper.GetRemainingTime()); ClusterManifestType targetClusterManifest = this.imageStoreWrapper.GetFromStore <ClusterManifestType>(targetClusterManifestPath, timeoutHelper.GetRemainingTime()); timeoutHelper.ThrowIfExpired(); try { // todo: Vaishnav to pass node list object loaded from the location FabricValidator fabricValidator = FabricValidator.Create(currentClusterManifest, null, new WindowsFabricSettings(currentClusterManifest), DeploymentOperations.Update); IEnumerable <KeyValuePair <string, string> > modifiedStaticSettings = fabricValidator.CompareAndAnalyze(targetClusterManifest, null /*Detect changes for any NodeType*/); isConfigOnly = !modifiedStaticSettings.Any(); } catch (Exception e) { ImageBuilderUtility.TraceAndThrowValidationError( TraceType, StringResources.ImageBuilderError_InvalidConfigFabricUpgrade, e.ToString(), currentFabricVersion, targetFabricVersion); } ImageBuilder.TraceSource.WriteInfo( TraceType, "UpgradeFabric completed: CurrentFabricVersion:{0}, TargetFabricVersion:{1}, ConfigOnly:{2}", currentFabricVersion, targetFabricVersion, isConfigOnly); }