public void CanGetCacheServerWithNoConfig() { MockGSDEnlistment enlistment = this.CreateEnlistment(); this.ValidateIsNone(enlistment, CacheServerResolver.GetCacheServerFromConfig(enlistment)); CacheServerResolver.GetUrlFromConfig(enlistment).ShouldEqual(enlistment.RepoUrl); }
public void SuccessForBatchObjectDownloadJob() { using (ITracer tracer = CreateTracer()) { MockGSDEnlistment enlistment = new MockGSDEnlistment(); MockHttpGitObjects httpGitObjects = new MockHttpGitObjects(tracer, enlistment); httpGitObjects.AddBlobContent(FakeSha, FakeShaContents); MockPhysicalGitObjects gitObjects = new MockPhysicalGitObjects(tracer, null, enlistment, httpGitObjects); BlockingCollection <string> input = new BlockingCollection <string>(); input.Add(FakeSha); input.CompleteAdding(); BatchObjectDownloadStage dut = new BatchObjectDownloadStage(1, 1, input, new BlockingCollection <string>(), tracer, enlistment, httpGitObjects, gitObjects); dut.Start(); dut.WaitForCompletion(); string sha; input.TryTake(out sha).ShouldEqual(false); dut.AvailablePacks.Count.ShouldEqual(0); dut.AvailableObjects.Count.ShouldEqual(1); string output = dut.AvailableObjects.Take(); output.ShouldEqual(FakeSha); } }
private void TestSetup() { ITracer tracer = new MockTracer(); GSDEnlistment enlistment = new MockGSDEnlistment(); PhysicalFileSystem fileSystem = new MockFileSystem(new MockDirectory(enlistment.EnlistmentRoot, null, null)); this.context = new GSDContext(tracer, fileSystem, null, enlistment); }
public void CanGetCacheServerFromOldConfig() { MockGSDEnlistment enlistment = this.CreateEnlistment(null, CacheServerUrl); CacheServerInfo cacheServer = CacheServerResolver.GetCacheServerFromConfig(enlistment); cacheServer.Url.ShouldEqual(CacheServerUrl); CacheServerResolver.GetUrlFromConfig(enlistment).ShouldEqual(CacheServerUrl); }
public void OnlyRequestsObjectsNotDownloaded() { string obj1Sha = new string('1', 40); string obj2Sha = new string('2', 40); BlockingCollection <string> input = new BlockingCollection <string>(); input.Add(obj1Sha); input.Add(obj2Sha); input.CompleteAdding(); int obj1Count = 0; int obj2Count = 0; Func <string, string> objectResolver = (oid) => { if (oid.Equals(obj1Sha)) { obj1Count++; return("Object1Contents"); } if (oid.Equals(obj2Sha) && obj2Count++ == 1) { return("Object2Contents"); } return(null); }; BlockingCollection <string> output = new BlockingCollection <string>(); MockTracer tracer = new MockTracer(); MockGSDEnlistment enlistment = new MockGSDEnlistment(); MockBatchHttpGitObjects httpObjects = new MockBatchHttpGitObjects(tracer, enlistment, objectResolver); BatchObjectDownloadStage dut = new BatchObjectDownloadStage( MaxParallel, ChunkSize, input, output, tracer, enlistment, httpObjects, new MockPhysicalGitObjects(tracer, null, enlistment, httpObjects)); dut.Start(); dut.WaitForCompletion(); input.Count.ShouldEqual(0); output.Count.ShouldEqual(2); output.Take().ShouldEqual(obj1Sha); output.Take().ShouldEqual(obj2Sha); obj1Count.ShouldEqual(1); obj2Count.ShouldEqual(2); }
private void TestSetup() { this.gitProcess = new MockGitProcess(); // Create enlistment using git process GSDEnlistment enlistment = new MockGSDEnlistment(this.gitProcess); PhysicalFileSystem fileSystem = new MockFileSystem(new MockDirectory(enlistment.EnlistmentRoot, null, null)); // Create and return Context this.tracer = new MockTracer(); this.context = new GSDContext(this.tracer, fileSystem, repository: null, enlistment: enlistment); }
public void CanParseAndResolveDefaultWhenServerAdvertisesNullListOfCacheServers() { MockGSDEnlistment enlistment = this.CreateEnlistment(); CacheServerResolver resolver = this.CreateResolver(enlistment); CacheServerInfo resolvedCacheServer; string error; resolver.TryResolveUrlFromRemote(CacheServerInfo.ReservedNames.Default, this.CreateDefaultDeserializedGSDConfig(), out resolvedCacheServer, out error) .ShouldEqual(true); this.ValidateIsNone(enlistment, resolvedCacheServer); }
public void CanResolveUrlAsRepoUrl() { MockGSDEnlistment enlistment = this.CreateEnlistment(); CacheServerResolver resolver = this.CreateResolver(enlistment); this.ValidateIsNone(enlistment, resolver.ResolveNameFromRemote(enlistment.RepoUrl, this.CreateGSDConfig())); this.ValidateIsNone(enlistment, resolver.ResolveNameFromRemote(enlistment.RepoUrl + "/", this.CreateGSDConfig())); this.ValidateIsNone(enlistment, resolver.ResolveNameFromRemote(enlistment.RepoUrl + "//", this.CreateGSDConfig())); this.ValidateIsNone(enlistment, resolver.ResolveNameFromRemote(enlistment.RepoUrl.ToUpper(), this.CreateGSDConfig())); this.ValidateIsNone(enlistment, resolver.ResolveNameFromRemote(enlistment.RepoUrl.ToUpper() + "/", this.CreateGSDConfig())); this.ValidateIsNone(enlistment, resolver.ResolveNameFromRemote(enlistment.RepoUrl.ToLower(), this.CreateGSDConfig())); this.ValidateIsNone(enlistment, resolver.ResolveNameFromRemote(enlistment.RepoUrl.ToLower() + "/", this.CreateGSDConfig())); }
public void CanParseAndResolveOtherWhenServerAdvertisesNullListOfCacheServers() { MockGSDEnlistment enlistment = this.CreateEnlistment(); CacheServerResolver resolver = this.CreateResolver(enlistment); CacheServerInfo resolvedCacheServer; string error; resolver.TryResolveUrlFromRemote(CacheServerInfo.ReservedNames.None, this.CreateDefaultDeserializedGSDConfig(), out resolvedCacheServer, out error) .ShouldEqual(false, "Should not succeed in resolving the name 'None'"); resolvedCacheServer.ShouldEqual(null); error.ShouldNotBeNull(); }
public void ErrorsForIndexPackFile() { using (ITracer tracer = CreateTracer()) { MockGSDEnlistment enlistment = new MockGSDEnlistment(); MockPhysicalGitObjects gitObjects = new MockPhysicalGitObjects(tracer, null, enlistment, null); BlockingCollection <IndexPackRequest> input = new BlockingCollection <IndexPackRequest>(); BlobDownloadRequest downloadRequest = new BlobDownloadRequest(new string[] { FakeSha }); input.Add(new IndexPackRequest("mock:\\path\\packFileName", downloadRequest)); input.CompleteAdding(); IndexPackStage dut = new IndexPackStage(1, input, new BlockingCollection <string>(), tracer, gitObjects); dut.Start(); dut.WaitForCompletion(); } }
public void SetUp() { MockTracer tracer = new MockTracer(); string enlistmentRoot = Path.Combine("mock:", "GSD", "UnitTests", "Repo"); string statusCachePath = Path.Combine("mock:", "GSD", "UnitTests", "Repo", GSDPlatform.Instance.Constants.DotGSDRoot, "gitStatusCache"); this.gitProcess = new MockGitProcess(); this.gitProcess.SetExpectedCommandResult($"--no-optional-locks status \"--serialize={statusCachePath}", () => new GitProcess.Result(string.Empty, string.Empty, 0), true); MockGSDEnlistment enlistment = new MockGSDEnlistment(enlistmentRoot, "fake://repoUrl", "fake://gitBinPath", null, this.gitProcess); enlistment.InitializeCachePathsFromKey("fake:\\gvfsSharedCache", "fakeCacheKey"); this.gitParentPath = enlistment.WorkingDirectoryBackingRoot; this.gvfsMetadataPath = enlistment.DotGSDRoot; this.enlistmentDirectory = new MockDirectory( enlistmentRoot, new MockDirectory[] { new MockDirectory(this.gitParentPath, folders: null, files: null), }, null); this.enlistmentDirectory.CreateFile(Path.Combine(this.gitParentPath, ".git", "config"), ".git config Contents", createDirectories: true); this.enlistmentDirectory.CreateFile(Path.Combine(this.gitParentPath, ".git", "HEAD"), ".git HEAD Contents", createDirectories: true); this.enlistmentDirectory.CreateFile(Path.Combine(this.gitParentPath, ".git", "logs", "HEAD"), "HEAD Contents", createDirectories: true); this.enlistmentDirectory.CreateFile(Path.Combine(this.gitParentPath, ".git", "info", "always_exclude"), "always_exclude Contents", createDirectories: true); this.enlistmentDirectory.CreateDirectory(Path.Combine(this.gitParentPath, ".git", "objects", "pack")); this.fileSystem = new MockFileSystem(this.enlistmentDirectory); this.fileSystem.AllowMoveFile = true; this.fileSystem.DeleteNonExistentFileThrowsException = false; this.context = new GSDContext( tracer, this.fileSystem, new MockGitRepo(tracer, enlistment, this.fileSystem), enlistment); }
public void ErrorsForBatchObjectDownloadJob() { using (ITracer tracer = CreateTracer()) { MockGSDEnlistment enlistment = new MockGSDEnlistment(); MockHttpGitObjects httpGitObjects = new MockHttpGitObjects(tracer, enlistment); MockPhysicalGitObjects gitObjects = new MockPhysicalGitObjects(tracer, null, enlistment, httpGitObjects); BlockingCollection <string> input = new BlockingCollection <string>(); input.Add(FakeSha); input.CompleteAdding(); BatchObjectDownloadStage dut = new BatchObjectDownloadStage(1, 1, input, new BlockingCollection <string>(), tracer, enlistment, httpGitObjects, gitObjects); dut.Start(); dut.WaitForCompletion(); string sha; input.TryTake(out sha).ShouldEqual(false); IndexPackRequest request; dut.AvailablePacks.TryTake(out request).ShouldEqual(false); } }
public void CanParseAndResolveNoCacheServer() { MockGSDEnlistment enlistment = this.CreateEnlistment(); CacheServerResolver resolver = this.CreateResolver(enlistment); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(CacheServerInfo.ReservedNames.None)); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(enlistment.RepoUrl)); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(enlistment.RepoUrl)); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(enlistment.RepoUrl + "/")); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(enlistment.RepoUrl + "//")); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(enlistment.RepoUrl.ToUpper())); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(enlistment.RepoUrl.ToUpper() + "/")); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(enlistment.RepoUrl.ToLower())); this.ValidateIsNone(enlistment, resolver.ParseUrlOrFriendlyName(enlistment.RepoUrl.ToLower() + "/")); CacheServerInfo resolvedCacheServer; string error; resolver.TryResolveUrlFromRemote(CacheServerInfo.ReservedNames.None, this.CreateGSDConfig(), out resolvedCacheServer, out error) .ShouldEqual(false, "Should not succeed in resolving the name 'None'"); resolvedCacheServer.ShouldEqual(null); error.ShouldNotBeNull(); }
private MockHttpGitObjects(MockGSDEnlistment enlistment) : base(new MockTracer(), enlistment, new MockCacheServerInfo(), new RetryConfig(maxRetries: 1)) { }
private void TestSetup(DateTime lastRun, bool failOnVerify = false) { string lastRunTime = EpochConverter.ToUnixEpochSeconds(lastRun).ToString(); this.gitProcess = new MockGitProcess(); // Create enlistment using git process GSDEnlistment enlistment = new MockGSDEnlistment(this.gitProcess); // Create a last run time file MockFile timeFile = new MockFile(Path.Combine(enlistment.GitObjectsRoot, "info", PackfileMaintenanceStep.PackfileLastRunFileName), lastRunTime); // Create info directory to hold last run time file MockDirectory info = new MockDirectory( Path.Combine(enlistment.GitObjectsRoot, "info"), null, new List <MockFile>() { timeFile }); // Create pack info MockDirectory pack = new MockDirectory( enlistment.GitPackRoot, null, new List <MockFile>() { new MockFile(Path.Combine(enlistment.GitPackRoot, "pack-1.pack"), "one"), new MockFile(Path.Combine(enlistment.GitPackRoot, "pack-1.idx"), "1"), new MockFile(Path.Combine(enlistment.GitPackRoot, "pack-2.pack"), "two"), new MockFile(Path.Combine(enlistment.GitPackRoot, "pack-2.idx"), "2"), new MockFile(Path.Combine(enlistment.GitPackRoot, "pack-3.pack"), "three"), new MockFile(Path.Combine(enlistment.GitPackRoot, "pack-3.idx"), "3"), new MockFile(Path.Combine(enlistment.GitPackRoot, KeepName), string.Empty), new MockFile(Path.Combine(enlistment.GitPackRoot, StaleIdxName), "4"), }); // Create git objects directory MockDirectory gitObjectsRoot = new MockDirectory(enlistment.GitObjectsRoot, new List <MockDirectory>() { info, pack }, null); // Add object directory to file System List <MockDirectory> directories = new List <MockDirectory>() { gitObjectsRoot }; PhysicalFileSystem fileSystem = new MockFileSystem(new MockDirectory(enlistment.EnlistmentRoot, directories, null)); MockGitRepo repository = new MockGitRepo(this.tracer, enlistment, fileSystem); // Create and return Context this.tracer = new MockTracer(); this.context = new GSDContext(this.tracer, fileSystem, repository, enlistment); this.gitProcess.SetExpectedCommandResult( this.ExpireCommand, () => new GitProcess.Result(string.Empty, string.Empty, GitProcess.Result.SuccessCode)); this.gitProcess.SetExpectedCommandResult( this.VerifyCommand, () => new GitProcess.Result(string.Empty, string.Empty, failOnVerify ? GitProcess.Result.GenericFailureCode : GitProcess.Result.SuccessCode)); this.gitProcess.SetExpectedCommandResult( this.RepackCommand, () => new GitProcess.Result(string.Empty, string.Empty, GitProcess.Result.SuccessCode)); }
private CacheServerResolver CreateResolver(MockGSDEnlistment enlistment = null) { enlistment = enlistment ?? this.CreateEnlistment(); return(new CacheServerResolver(new MockTracer(), enlistment)); }
private void TestSetup(DateTime lastRun) { string lastRunTime = EpochConverter.ToUnixEpochSeconds(lastRun).ToString(); // Create GitProcess this.gitProcess = new MockGitProcess(); this.gitProcess.SetExpectedCommandResult( PrunePackedCommand, () => new GitProcess.Result(string.Empty, string.Empty, GitProcess.Result.SuccessCode)); // Create enlistment using git process GSDEnlistment enlistment = new MockGSDEnlistment(this.gitProcess); string packPrefix = Path.Combine(enlistment.GitPackRoot, "from-loose"); this.packCommand = $"pack-objects {packPrefix} --non-empty --window=0 --depth=0 -q"; this.gitProcess.SetExpectedCommandResult( this.packCommand, () => new GitProcess.Result(string.Empty, string.Empty, GitProcess.Result.SuccessCode)); // Create a last run time file MockFile timeFile = new MockFile(Path.Combine(enlistment.GitObjectsRoot, "info", LooseObjectsStep.LooseObjectsLastRunFileName), lastRunTime); // Create info directory to hold last run time file MockDirectory infoRoot = new MockDirectory(Path.Combine(enlistment.GitObjectsRoot, "info"), null, new List <MockFile>() { timeFile }); // Create Hex Folder 1 with 1 File MockDirectory hex1 = new MockDirectory( Path.Combine(enlistment.GitObjectsRoot, "AA"), null, new List <MockFile>() { new MockFile(Path.Combine(enlistment.GitObjectsRoot, "AA", "1156f4f2b850673090c285289ea8475d629fe1"), "one") }); // Create Hex Folder 2 with 2 Files MockDirectory hex2 = new MockDirectory( Path.Combine(enlistment.GitObjectsRoot, "F1"), null, new List <MockFile>() { new MockFile(Path.Combine(enlistment.GitObjectsRoot, "F1", "1156f4f2b850673090c285289ea8475d629fe2"), "two"), new MockFile(Path.Combine(enlistment.GitObjectsRoot, "F1", "1156f4f2b850673090c285289ea8475d629fe3"), "three") }); // Create NonHex Folder with 4 Files MockDirectory nonhex = new MockDirectory( Path.Combine(enlistment.GitObjectsRoot, "ZZ"), null, new List <MockFile>() { new MockFile(Path.Combine(enlistment.GitObjectsRoot, "ZZ", "1156f4f2b850673090c285289ea8475d629fe4"), "4"), new MockFile(Path.Combine(enlistment.GitObjectsRoot, "ZZ", "1156f4f2b850673090c285289ea8475d629fe5"), "5"), new MockFile(Path.Combine(enlistment.GitObjectsRoot, "ZZ", "1156f4f2b850673090c285289ea8475d629fe6"), "6"), new MockFile(Path.Combine(enlistment.GitObjectsRoot, "ZZ", "1156f4f2b850673090c285289ea8475d629fe7"), "7") }); MockDirectory pack = new MockDirectory( enlistment.GitPackRoot, null, new List <MockFile>()); // Create git objects directory MockDirectory gitObjectsRoot = new MockDirectory(enlistment.GitObjectsRoot, new List <MockDirectory>() { infoRoot, hex1, hex2, nonhex, pack }, null); // Add object directory to file System List <MockDirectory> directories = new List <MockDirectory>() { gitObjectsRoot }; PhysicalFileSystem fileSystem = new MockFileSystem(new MockDirectory(enlistment.EnlistmentRoot, directories, null)); // Create and return Context this.tracer = new MockTracer(); this.context = new GSDContext(this.tracer, fileSystem, repository: null, enlistment: enlistment); }