public void Will_keep_new_values_and_discard_old_when_limiting() { GlobalOptions.Instance.CompilerCacheFile = null; GlobalOptions.Instance.CompilerCacheFileMaxSizeBytes = 100; var cache = new Testable <CompilerCache>(); var ms = new ExplicitDisposableMemoryStream(GlobalOptions.Instance.CompilerCacheFileMaxSizeBytes * 2); cache.Mock <IFileSystemWrapper>() .Setup(x => x.GetTemporaryFolder(Constants.ChutzpahCompilerCacheFolder)) .Returns("tmp"); var cacheFile = Path.Combine("tmp", Constants.ChutzpahCompilerCacheFileName); cache.Mock <IFileSystemWrapper>().Setup(x => x.FileExists(cacheFile)).Returns(false); cache.ClassUnderTest.Set("ShouldBeRemoved", "SomeCode"); Thread.Sleep(5); // Fill cache with more than the max-size cache.ClassUnderTest.Set("buffer", new string('x', 100)); Thread.Sleep(5); cache.ClassUnderTest.Set("ShouldStillBeHere", "SomeOtherCode"); cache.ClassUnderTest.Save(); var savedValue = cache.ClassUnderTest.Get("ShouldStillBeHere"); var removedValue = cache.ClassUnderTest.Get("ShouldBeRemoved"); Assert.True(string.IsNullOrEmpty(removedValue)); Assert.Equal("SomeOtherCode", savedValue); ms.ExplicitDispose(); }
public void Will_limit_the_size_of_the_cache_file() { GlobalOptions.Instance.CompilerCacheFile = null; GlobalOptions.Instance.CompilerCacheFileMaxSizeBytes = 100; var cache = new Testable <CompilerCache>(); var ms = new ExplicitDisposableMemoryStream(GlobalOptions.Instance.CompilerCacheFileMaxSizeBytes * 2); cache.Mock <IFileSystemWrapper>() .Setup(x => x.GetTemporaryFolder(Constants.ChutzpahCompilerCacheFolder)) .Returns("tmp"); var cacheFile = Path.Combine("tmp", Constants.ChutzpahCompilerCacheFileName); cache.Mock <IFileSystemWrapper>().Setup(x => x.FileExists(cacheFile)).Returns(false); cache.Mock <IFileSystemWrapper>().Setup(x => x.Open(cacheFile, FileMode.Create, FileAccess.Write)) .Returns(ms); cache.ClassUnderTest.Set("buffer", new string('x', 100)); cache.ClassUnderTest.Save(); cache.Mock <IFileSystemWrapper>().Verify(x => x.FileExists(cacheFile), Times.Once()); cache.Mock <IFileSystemWrapper>() .Verify(x => x.Open(cacheFile, FileMode.Create, FileAccess.Write), Times.Once()); Assert.True(ms.Position < GlobalOptions.Instance.CompilerCacheFileMaxSizeBytes); ms.ExplicitDispose(); }