DeferredKeyTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // Copyright (c) .NET Foundation. All rights reserved.
  2. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
  3. using System;
  4. using System.Xml.Linq;
  5. using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption;
  6. using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel;
  7. using Microsoft.AspNetCore.DataProtection.KeyManagement.Internal;
  8. using Microsoft.AspNetCore.Testing;
  9. using Moq;
  10. using Xunit;
  11. namespace Microsoft.AspNetCore.DataProtection.KeyManagement
  12. {
  13. public class DeferredKeyTests
  14. {
  15. [Fact]
  16. public void Ctor_Properties()
  17. {
  18. // Arrange
  19. var keyId = Guid.NewGuid();
  20. var creationDate = DateTimeOffset.Now;
  21. var activationDate = creationDate.AddDays(2);
  22. var expirationDate = creationDate.AddDays(90);
  23. // Act
  24. var key = new DeferredKey(keyId, creationDate, activationDate, expirationDate, new Mock<IInternalXmlKeyManager>().Object, XElement.Parse(@"<node />"));
  25. // Assert
  26. Assert.Equal(keyId, key.KeyId);
  27. Assert.Equal(creationDate, key.CreationDate);
  28. Assert.Equal(activationDate, key.ActivationDate);
  29. Assert.Equal(expirationDate, key.ExpirationDate);
  30. }
  31. [Fact]
  32. public void SetRevoked_Respected()
  33. {
  34. // Arrange
  35. var now = DateTimeOffset.UtcNow;
  36. var key = new DeferredKey(Guid.Empty, now, now, now, new Mock<IInternalXmlKeyManager>().Object, XElement.Parse(@"<node />"));
  37. // Act & assert
  38. Assert.False(key.IsRevoked);
  39. key.SetRevoked();
  40. Assert.True(key.IsRevoked);
  41. }
  42. [Fact]
  43. public void CreateEncryptorInstance_Success()
  44. {
  45. // Arrange
  46. var expectedEncryptor = new Mock<IAuthenticatedEncryptor>().Object;
  47. var mockDescriptor = new Mock<IAuthenticatedEncryptorDescriptor>();
  48. mockDescriptor.Setup(o => o.CreateEncryptorInstance()).Returns(expectedEncryptor);
  49. var mockKeyManager = new Mock<IInternalXmlKeyManager>();
  50. mockKeyManager.Setup(o => o.DeserializeDescriptorFromKeyElement(It.IsAny<XElement>()))
  51. .Returns<XElement>(element =>
  52. {
  53. XmlAssert.Equal(@"<node />", element);
  54. return mockDescriptor.Object;
  55. });
  56. var now = DateTimeOffset.UtcNow;
  57. var key = new DeferredKey(Guid.Empty, now, now, now, mockKeyManager.Object, XElement.Parse(@"<node />"));
  58. // Act
  59. var actual = key.CreateEncryptorInstance();
  60. // Assert
  61. Assert.Same(expectedEncryptor, actual);
  62. }
  63. [Fact]
  64. public void CreateEncryptorInstance_CachesFailures()
  65. {
  66. // Arrange
  67. int numTimesCalled = 0;
  68. var mockKeyManager = new Mock<IInternalXmlKeyManager>();
  69. mockKeyManager.Setup(o => o.DeserializeDescriptorFromKeyElement(It.IsAny<XElement>()))
  70. .Returns<XElement>(element =>
  71. {
  72. numTimesCalled++;
  73. throw new Exception("How exceptional.");
  74. });
  75. var now = DateTimeOffset.UtcNow;
  76. var key = new DeferredKey(Guid.Empty, now, now, now, mockKeyManager.Object, XElement.Parse(@"<node />"));
  77. // Act & assert
  78. ExceptionAssert.Throws<Exception>(() => key.CreateEncryptorInstance(), "How exceptional.");
  79. ExceptionAssert.Throws<Exception>(() => key.CreateEncryptorInstance(), "How exceptional.");
  80. Assert.Equal(1, numTimesCalled);
  81. }
  82. }
  83. }