public async Task Handle_PrivateKeyPlainOnServer_ShouldSucceed() { var mockProjectRepo = new Mock <IProjectRepository>(); mockProjectRepo.Setup(x => x.GetById(It.IsAny <int>())).ReturnsAsync(new Project("test", new AsymmetricKey("PUBLIC KEY", "PLAIN KEY"))); var mockFilesRepo = new Mock <IStoredFileRepository>(); mockFilesRepo.Setup(x => x.FindByHash(It.IsAny <Hash>())).ReturnsAsync(new StoredFile("HASH", 100, 80)); var mockAsymCrypto = new Mock <IAsymmetricCryptoHandler>(); mockAsymCrypto.Setup(x => x.SignHash(It.IsAny <Hash>(), "PLAIN KEY")).Returns("FILE SIGNATURE"); var action = new AddUpdatePackageFilesAction(mockFilesRepo.Object, mockProjectRepo.Object, mockAsymCrypto.Object, null); var files = new List <UpdateFileInfo> { new UpdateFileInfo("asd", Hash.Parse("FF")), new UpdateFileInfo("asd2", Hash.Parse("EE")), }; var package = new UpdatePackage("1.0.0"); // act await action.AddFiles(package, files, null); // assert Assert.False(action.HasError); Assert.Equal(2, package.Files.Count()); Assert.Collection(package.Files, x => Assert.Equal("FILE SIGNATURE", x.Signature), x => Assert.Equal("FILE SIGNATURE", x.Signature)); }
public async Task Handle_GivenFilesWithInvalidSignature_PrivateKeyNotOnServer_ShouldFail() { var mockProjectRepo = new Mock <IProjectRepository>(); mockProjectRepo.Setup(x => x.GetById(It.IsAny <int>())).ReturnsAsync(new Project("test", new AsymmetricKey("PUBLIC KEY"))); var mockFilesRepo = new Mock <IStoredFileRepository>(); mockFilesRepo.Setup(x => x.FindByHash(It.IsAny <Hash>())).ReturnsAsync(new StoredFile("HASH", 100, 80)); var mockAsymCrypto = new Mock <IAsymmetricCryptoHandler>(); mockAsymCrypto.Setup(x => x.VerifyHash(It.IsAny <Hash>(), "SIGNATURE", "PUBLIC KEY")).Returns(false); var action = new AddUpdatePackageFilesAction(mockFilesRepo.Object, mockProjectRepo.Object, mockAsymCrypto.Object, null); var files = new List <UpdateFileInfo> { new UpdateFileInfo("asd", Hash.Parse("FF"), "SIGNATURE") }; var package = new UpdatePackage("1.0.0"); // act await action.AddFiles(package, files, null); // assert ErrorUtils.AssertError(action, ErrorType.ValidationError); }
public async Task Handle_GivenInvalidKeyPassword_PrivateKeyEncryptedOnServer_ShouldFail() { var mockProjectRepo = new Mock <IProjectRepository>(); mockProjectRepo.Setup(x => x.GetById(It.IsAny <int>())).ReturnsAsync(new Project("test", new AsymmetricKey("PUBLIC KEY", "ENCRYPTED KEY", true))); var mockFilesRepo = new Mock <IStoredFileRepository>(); mockFilesRepo.Setup(x => x.FindByHash(It.IsAny <Hash>())).ReturnsAsync(new StoredFile("HASH", 100, 80)); var mockSymmCrypto = new Mock <ISymmetricEncryption>(); mockSymmCrypto.Setup(x => x.DecryptString("ENCRYPTED KEY", "Invalid Password")).Throws(new Exception("Invalid Password")); var action = new AddUpdatePackageFilesAction(mockFilesRepo.Object, mockProjectRepo.Object, null, mockSymmCrypto.Object); var files = new List <UpdateFileInfo> { new UpdateFileInfo("asd", Hash.Parse("FF"), "") }; var package = new UpdatePackage("1.0.0"); // act await action.AddFiles(package, files, "Invalid Password"); // assert ErrorUtils.AssertError(action, ErrorType.ValidationError); }