public void TestCompleteItemsConcurrent() { var items = new CompleteItems <int>(5000); var addAction = new Action(() => { for (int i = 0; i < 2499; i++) { items.Add(i); } }); var t1 = new Task(addAction); var t2 = new Task(addAction); t1.Start(); t2.Start(); System.Threading.Thread.Sleep(1); Assert.AreEqual(0, items.First()); t1.Wait(); t2.Wait(); Assert.AreEqual(2498, items.Last()); Assert.AreEqual(2499 * 2, items.Count); }
public void TestCompleteItemsLimit() { Assert.ThrowsException <ArgumentOutOfRangeException>(() => { var items = new CompleteItems <int>(0); }); LimitTest(1); LimitTest(10); LimitTest(100); LimitTest(1000); LimitTest(5000); }
public IActionResult TestCompletedItems() { var quality = Quality.GenerateDefaultQualities(DEnc.DefaultQuality.medium, DEnc.H264Preset.fast).ToHashSet(); var items = new CompleteItems <ExportableConversionItem>() { new ConversionItem("SomeLibrary", "The COMPLETE", "Test #6", "/home/test/vid/vid6.mkv", "/home/output/", "completeitem1", true, quality, 24, null, null), new ConversionItem("SomeLibrary", "The FAILED", "Test #7", "/home/test/vid/vid7.mkv", "/home/output/", "completeitem2", true, quality, 24, null, null) { ErrorReason = "Task failed successfully. Reason: Not enough", ErrorDetail = "This is a very long error message which contains all kinds of stack trace information and logs or whatever.\n" + "NullProblemException: There is no issue.\n" + " at Volyar.Testing.TestCompletion()\n" + " at Volar.Testing.FakeStackTraceGenerator()\n" + " at System.Runtime.LoremIpsum()\n" + "Running ffmpeg with arguments: -i something -a -b -c -d A bunch of arguments for ffmpeg which takes up a ridiculous amount of space.\n" + "frame= 365 fps=0.0 q=-1.0 size= 22525kB time=00:00:15.27 bitrate=12077.9kbits/s speed=30.6x\n" + "frame= 882 fps=882 q=-1.0 size= 42585kB time=00:00:36.80 bitrate=9479.1kbits/s speed=36.8x\n" + "frame= 1434 fps=956 q=-1.0 size= 58536kB time=00:00:59.86 bitrate=8010.8kbits/s speed=39.9x\n" + "frame= 1986 fps=993 q=-1.0 size= 74108kB time=00:01:22.82 bitrate=7329.9kbits/s speed=41.4x\n" + "frame= 2445 fps=978 q=-1.0 size= 86742kB time=00:01:42.07 bitrate=6961.5kbits/s speed=40.8x\n" + "frame= 2823 fps=941 q=-1.0 size= 96733kB time=00:01:57.79 bitrate=6727.3kbits/s speed=39.2x\n" + "frame= 3261 fps=931 q=-1.0 size= 111247kB time=00:02:16.02 bitrate=6699.9kbits/s speed=38.8x\n" + "frame= 3716 fps=928 q=-1.0 size= 129424kB time=00:02:35.01 bitrate=6839.5kbits/s speed=38.7x\n" + "frame= 4215 fps=936 q=-1.0 size= 154043kB time=00:02:55.89 bitrate=7174.5kbits/s speed=39.1x\n" + "frame= 4609 fps=921 q=-1.0 size= 169230kB time=00:03:12.19 bitrate=7213.3kbits/s speed=38.4x\n" + "frame= 4986 fps=906 q=-1.0 size= 178219kB time=00:03:28.02 bitrate=7018.2kbits/s speed=37.8x\n" + "frame= 5491 fps=915 q=-1.0 size= 194228kB time=00:03:49.11 bitrate=6944.7kbits/s speed=38.2x\n" + "frame= 6044 fps=929 q=-1.0 size= 224348kB time=00:04:12.05 bitrate=7291.6kbits/s speed=38.8x\n" + "frame= 6613 fps=944 q=-1.0 size= 259268kB time=00:04:35.89 bitrate=7698.2kbits/s speed=39.4x\n" + "frame= 7244 fps=965 q=-1.0 size= 296714kB time=00:05:02.16 bitrate=8044.3kbits/s speed=40.3x\n" + "frame= 7860 fps=982 q=-1.0 size= 328630kB time=00:05:27.84 bitrate=8211.7kbits/s speed= 41x\n" + "frame= 8373 fps=985 q=-1.0 size= 350555kB time=00:05:49.25 bitrate=8222.6kbits/s speed=41.1x\n" + "frame= 8851 fps=983 q=-1.0 size= 370039kB time=00:06:09.17 bitrate=8211.2kbits/s speed= 41x\n" + "frame= 9305 fps=979 q=-1.0 size= 385474kB time=00:06:28.14 bitrate=8135.7kbits/s speed=40.8x\n" + "frame= 9858 fps=985 q=-1.0 size= 419481kB time=00:06:51.24 bitrate=8356.0kbits/s speed=41.1x\n" + "frame=10373 fps=987 q=-1.0 size= 443169kB time=00:07:12.74 bitrate=8389.2kbits/s speed=41.2x\n" + "Error! This is the end of the log, good luck!" } }; return(new ObjectResult(Newtonsoft.Json.JsonConvert.SerializeObject(items))); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { var builder = services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0); if (Env.IsDevelopment()) { builder.AddRazorRuntimeCompilation(); } services.AddOptions(); services.Configure <VSettings>(Configuration.GetSection("VSettings")); MediaDatabase dbOptions = AddDatabase(services); ICompleteItems <IExportableConversionItem> completeQueue = new CompleteItems <IExportableConversionItem>(Settings.CompleteQueueLength); services.AddSingleton(completeQueue); MediaConversionQueue converter = new MediaConversionQueue( Settings.FFmpegPath, Settings.FFprobePath, Settings.Mp4BoxPath, GetTemp(), Settings.Parallelization, completeQueue, LoggerFactory.CreateLogger <MediaConversionQueue>()); services.AddSingleton(converter); RateLimiter rateLimiter = new RateLimiter(TimeSpan.FromSeconds(10), LoggerFactory.CreateLogger <RateLimiter>()); services.AddSingleton(rateLimiter); List <IConversionPlugin> plugins = GeneratePlugins(rateLimiter); services.AddSingleton(new LibraryScanningQueue(dbOptions, converter, plugins, LoggerFactory.CreateLogger <LibraryScanningQueue>())); services.AddSingleton(Settings); services.AddAuthorization(); services.AddHttpClient(); }
private void LimitTest(int limit) { ICompleteItems <int> items = new CompleteItems <int>(limit); Assert.AreEqual(0, items.Count); items.Add(7); Assert.AreEqual(1, items.Count); Assert.AreEqual(7, items.First()); for (int i = 2; i < limit; i++) { items.Add(i); Assert.AreEqual(i, items.Count); } if (limit > 1) { Assert.AreEqual(limit - 1, items.Count); } items.Add(0); Assert.AreEqual(limit, items.Count); items.Add(0); Assert.AreEqual(limit, items.Count); var sw = new Stopwatch(); sw.Start(); items.Add(0); sw.Stop(); Assert.IsTrue(sw.Elapsed < TimeSpan.FromMilliseconds(1)); sw.Restart(); int a = items.First(); sw.Stop(); Assert.IsTrue(sw.Elapsed < TimeSpan.FromMilliseconds(1)); }