public void MountFailsUpgradingFromInvalidUpgradePath(string mountSubfolder) { MountSubfolders.EnsureSubfoldersOnDisk(this.Enlistment, this.fileSystem); string headCommitId = GitProcess.Invoke(this.Enlistment.RepoRoot, "rev-parse HEAD"); this.Enlistment.UnmountGSD(); string majorVersion; string minorVersion; GSDHelpers.GetPersistedDiskLayoutVersion(this.Enlistment.DotGSDRoot, out majorVersion, out minorVersion); int majorVersionNum; int minorVersionNum; int.TryParse(majorVersion.ShouldNotBeNull(), out majorVersionNum).ShouldEqual(true); int.TryParse(minorVersion.ShouldNotBeNull(), out minorVersionNum).ShouldEqual(true); // 1 will always be below the minumum support version number GSDHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGSDRoot, "1", "0"); this.MountShouldFail("Breaking change to GSD disk layout has been made since cloning", this.Enlistment.GetVirtualPathTo(mountSubfolder)); GSDHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGSDRoot, majorVersionNum.ToString(), minorVersionNum.ToString()); this.Enlistment.MountGSD(); }
public void MountFailsWhenNoGitObjectsRootInRepoMetadata() { this.Enlistment.UnmountGSD(); string majorVersion; string minorVersion; GSDHelpers.GetPersistedDiskLayoutVersion(this.Enlistment.DotGSDRoot, out majorVersion, out minorVersion); majorVersion.ShouldNotBeNull(); minorVersion.ShouldNotBeNull(); string localCacheRoot = GSDHelpers.GetPersistedLocalCacheRoot(this.Enlistment.DotGSDRoot).ShouldNotBeNull(); string metadataPath = Path.Combine(this.Enlistment.DotGSDRoot, GSDHelpers.RepoMetadataName); string metadataBackupPath = metadataPath + ".backup"; this.fileSystem.MoveFile(metadataPath, metadataBackupPath); this.fileSystem.CreateEmptyFile(metadataPath); GSDHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGSDRoot, majorVersion, minorVersion); GSDHelpers.SaveLocalCacheRoot(this.Enlistment.DotGSDRoot, localCacheRoot); this.MountShouldFail("Failed to determine git objects root from repo metadata"); this.fileSystem.DeleteFile(metadataPath); this.fileSystem.MoveFile(metadataBackupPath, metadataPath); this.Enlistment.MountGSD(); }
public void MountFailsWhenNoOnDiskVersion() { this.Enlistment.UnmountGSD(); // Get the current disk layout version string majorVersion; string minorVersion; GSDHelpers.GetPersistedDiskLayoutVersion(this.Enlistment.DotGSDRoot, out majorVersion, out minorVersion); int majorVersionNum; int minorVersionNum; int.TryParse(majorVersion.ShouldNotBeNull(), out majorVersionNum).ShouldEqual(true); int.TryParse(minorVersion.ShouldNotBeNull(), out minorVersionNum).ShouldEqual(true); // Move the RepoMetadata database to a temp file string versionDatabasePath = Path.Combine(this.Enlistment.DotGSDRoot, GSDHelpers.RepoMetadataName); versionDatabasePath.ShouldBeAFile(this.fileSystem); string tempDatabasePath = versionDatabasePath + "_MountFailsWhenNoOnDiskVersion"; tempDatabasePath.ShouldNotExistOnDisk(this.fileSystem); this.fileSystem.MoveFile(versionDatabasePath, tempDatabasePath); versionDatabasePath.ShouldNotExistOnDisk(this.fileSystem); this.MountShouldFail("Failed to upgrade repo disk layout"); // Move the RepoMetadata database back this.fileSystem.DeleteFile(versionDatabasePath); this.fileSystem.MoveFile(tempDatabasePath, versionDatabasePath); tempDatabasePath.ShouldNotExistOnDisk(this.fileSystem); versionDatabasePath.ShouldBeAFile(this.fileSystem); this.Enlistment.MountGSD(); }
public void MountFailsAfterBreakingDowngrade(string mountSubfolder) { MountSubfolders.EnsureSubfoldersOnDisk(this.Enlistment, this.fileSystem); this.Enlistment.UnmountGSD(); string majorVersion; string minorVersion; GSDHelpers.GetPersistedDiskLayoutVersion(this.Enlistment.DotGSDRoot, out majorVersion, out minorVersion); int majorVersionNum; int minorVersionNum; int.TryParse(majorVersion.ShouldNotBeNull(), out majorVersionNum).ShouldEqual(true); int.TryParse(minorVersion.ShouldNotBeNull(), out minorVersionNum).ShouldEqual(true); GSDHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGSDRoot, (majorVersionNum + 1).ToString(), "0"); this.MountShouldFail("do not allow mounting after downgrade", this.Enlistment.GetVirtualPathTo(mountSubfolder)); GSDHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGSDRoot, majorVersionNum.ToString(), minorVersionNum.ToString()); this.Enlistment.MountGSD(); }