Program.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 Moq;
  10. using SharpFuzz;
  11. namespace Emby.Server.Implementations.Fuzz
  12. {
  13. public static class Program
  14. {
  15. public static void Main(string[] args)
  16. {
  17. switch (args[0])
  18. {
  19. case "PathExtensions.TryReplaceSubPath": Run(PathExtensions_TryReplaceSubPath); return;
  20. case "SqliteItemRepository.ItemImageInfoFromValueString": Run(SqliteItemRepository_ItemImageInfoFromValueString); return;
  21. default: throw new ArgumentException($"Unknown fuzzing function: {args[0]}");
  22. }
  23. }
  24. private static void Run(Action<string> action) => Fuzzer.OutOfProcess.Run(action);
  25. private static void PathExtensions_TryReplaceSubPath(string data)
  26. {
  27. // Stupid, but it worked
  28. var parts = data.Split(':');
  29. if (parts.Length != 3)
  30. {
  31. return;
  32. }
  33. _ = PathExtensions.TryReplaceSubPath(parts[0], parts[1], parts[2], out _);
  34. }
  35. private static void SqliteItemRepository_ItemImageInfoFromValueString(string data)
  36. {
  37. var sqliteItemRepository = MockSqliteItemRepository();
  38. sqliteItemRepository.ItemImageInfoFromValueString(data);
  39. }
  40. private static SqliteItemRepository MockSqliteItemRepository()
  41. {
  42. const string VirtualMetaDataPath = "%MetadataPath%";
  43. const string MetaDataPath = "/meta/data/path";
  44. var appHost = new Mock<IServerApplicationHost>();
  45. appHost.Setup(x => x.ExpandVirtualPath(It.IsAny<string>()))
  46. .Returns((string x) => x.Replace(VirtualMetaDataPath, MetaDataPath, StringComparison.Ordinal));
  47. appHost.Setup(x => x.ReverseVirtualPath(It.IsAny<string>()))
  48. .Returns((string x) => x.Replace(MetaDataPath, VirtualMetaDataPath, StringComparison.Ordinal));
  49. IFixture fixture = new Fixture().Customize(new AutoMoqCustomization { ConfigureMembers = true });
  50. fixture.Inject(appHost);
  51. return fixture.Create<SqliteItemRepository>();
  52. }
  53. }
  54. }