Program.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using AutoFixture;
  3. using AutoFixture.AutoMoq;
  4. using Emby.Server.Implementations.Data;
  5. using Emby.Server.Implementations.Library;
  6. using MediaBrowser.Controller;
  7. using MediaBrowser.Controller.Entities;
  8. using MediaBrowser.Model.Entities;
  9. using Microsoft.Extensions.Configuration;
  10. using Moq;
  11. using SharpFuzz;
  12. namespace Emby.Server.Implementations.Fuzz
  13. {
  14. public static class Program
  15. {
  16. public static void Main(string[] args)
  17. {
  18. switch (args[0])
  19. {
  20. case "PathExtensions.TryReplaceSubPath": Run(PathExtensions_TryReplaceSubPath); return;
  21. case "SqliteItemRepository.ItemImageInfoFromValueString": Run(SqliteItemRepository_ItemImageInfoFromValueString); return;
  22. default: throw new ArgumentException($"Unknown fuzzing function: {args[0]}");
  23. }
  24. }
  25. private static void Run(Action<string> action) => Fuzzer.OutOfProcess.Run(action);
  26. private static void PathExtensions_TryReplaceSubPath(string data)
  27. {
  28. // Stupid, but it worked
  29. var parts = data.Split(':');
  30. if (parts.Length != 3)
  31. {
  32. return;
  33. }
  34. _ = PathExtensions.TryReplaceSubPath(parts[0], parts[1], parts[2], out _);
  35. }
  36. private static void SqliteItemRepository_ItemImageInfoFromValueString(string data)
  37. {
  38. var sqliteItemRepository = MockSqliteItemRepository();
  39. sqliteItemRepository.ItemImageInfoFromValueString(data);
  40. }
  41. private static SqliteItemRepository MockSqliteItemRepository()
  42. {
  43. const string VirtualMetaDataPath = "%MetadataPath%";
  44. const string MetaDataPath = "/meta/data/path";
  45. var appHost = new Mock<IServerApplicationHost>();
  46. appHost.Setup(x => x.ExpandVirtualPath(It.IsAny<string>()))
  47. .Returns((string x) => x.Replace(VirtualMetaDataPath, MetaDataPath, StringComparison.Ordinal));
  48. appHost.Setup(x => x.ReverseVirtualPath(It.IsAny<string>()))
  49. .Returns((string x) => x.Replace(MetaDataPath, VirtualMetaDataPath, StringComparison.Ordinal));
  50. var configSection = new Mock<IConfigurationSection>();
  51. configSection.SetupGet(x => x[It.Is<string>(s => s == MediaBrowser.Controller.Extensions.ConfigurationExtensions.SqliteCacheSizeKey)])
  52. .Returns("0");
  53. var config = new Mock<IConfiguration>();
  54. config.Setup(x => x.GetSection(It.Is<string>(s => s == MediaBrowser.Controller.Extensions.ConfigurationExtensions.SqliteCacheSizeKey)))
  55. .Returns(configSection.Object);
  56. IFixture fixture = new Fixture().Customize(new AutoMoqCustomization { ConfigureMembers = true });
  57. fixture.Inject(appHost);
  58. fixture.Inject(config);
  59. return fixture.Create<SqliteItemRepository>();
  60. }
  61. }
  62. }