public void SendsBytesThroughDocumentBundleProcessor()
            {
                //Arrange
                var clientConfiguration = new ClientConfiguration(Environment.DifiQa, CoreDomainUtility.GetPostenTestCertificate())
                {
                    DocumentBundleProcessors = new List <IDocumentBundleProcessor>
                    {
                        new SimpleDocumentBundleProcessor(),
                        new SimpleDocumentBundleProcessor()
                    }
                };

                var job = DomainUtility.GetDirectJobWithSender();
                var asiceAttachableProcessors = clientConfiguration.DocumentBundleProcessors.Select(p => new AsiceAttachableProcessor(job, p));
                var asiceAttachables          = new IAsiceAttachable[] { DomainUtility.GetDirectManifest(), DomainUtility.GetSignature(), DomainUtility.GetDirectDocument() };

                //Act
                var asiceArchive = new AsiceArchive(asiceAttachableProcessors, asiceAttachables);

                asiceArchive.GetBytes();

                //Assert
                foreach (var simpleProcessor in clientConfiguration.DocumentBundleProcessors.Cast <SimpleDocumentBundleProcessor>())
                {
                    Assert.True(simpleProcessor.StreamLength > 1000);
                    Assert.True(simpleProcessor.CouldReadBytesStream);
                    Assert.Equal(0, simpleProcessor.Initialposition);
                }
            }
            public void ReturnsProperBytesCount()
            {
                //Arrange
                var forsendelse = DomainUtility.GetDigitalDigitalPostWithNotificationMultipleDocumentsAndHigherSecurity();

                var manifest = new Manifest(forsendelse);
                var cryptographicCertificate = forsendelse.PostInfo.Mottaker.Sertifikat;
                var signature = new Signature(forsendelse, manifest, DomainUtility.GetAvsenderCertificate());

                var asiceAttachables = new List <IAsiceAttachable>();

                asiceAttachables.AddRange(forsendelse.Dokumentpakke.Vedlegg);
                asiceAttachables.Add(forsendelse.Dokumentpakke.Hoveddokument);
                asiceAttachables.Add(manifest);
                asiceAttachables.Add(signature);

                var asiceArchive = new AsiceArchive(cryptographicCertificate, new GuidUtility(), new List <AsiceAttachableProcessor>(), asiceAttachables.ToArray());

                var expectedBytesCount = 0L;

                foreach (var dokument in asiceAttachables)
                {
                    expectedBytesCount += dokument.Bytes.Length;
                }

                //Act
                var actualBytesCount = asiceArchive.UnzippedContentBytesCount;

                //Assert
                Assert.Equal(expectedBytesCount, actualBytesCount);
            }
            public void InitializesFieldsProperly()
            {
                //Arrange
                var forsendelse = DomainUtility.GetDigitalDigitalPostWithNotificationMultipleDocumentsAndHigherSecurity();

                var manifest = new Manifest(forsendelse);
                var cryptographicCertificate = forsendelse.PostInfo.Mottaker.Sertifikat;
                var signature = new Signature(forsendelse, manifest, DomainUtility.GetAvsenderCertificate());

                var asiceAttachables = new List <IAsiceAttachable>();

                asiceAttachables.AddRange(forsendelse.Dokumentpakke.Vedlegg);
                asiceAttachables.Add(forsendelse.Dokumentpakke.Hoveddokument);
                asiceAttachables.Add(manifest);
                asiceAttachables.Add(signature);

                var asiceAttachablesArray = asiceAttachables.ToArray();

                var asiceAttachableProcessors = new List <AsiceAttachableProcessor>();

                //Act
                var asiceArchive = new AsiceArchive(cryptographicCertificate, new GuidUtility(), asiceAttachableProcessors, asiceAttachablesArray);

                //Assert
                Assert.Equal(asiceAttachableProcessors, asiceArchive.AsiceAttachableProcessors);
                Assert.Equal(asiceAttachablesArray, asiceArchive.AsiceAttachables);
            }
            public void SendsBytesThroughDocumentBundleProcessors()
            {
                //Arrange
                var clientConfiguration = new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø)
                {
                    Dokumentpakkeprosessorer = new List <IDokumentpakkeProsessor>
                    {
                        new SimpleDocumentBundleProcessor(),
                        new SimpleDocumentBundleProcessor()
                    }
                };

                var forsendelse = DomainUtility.GetForsendelseSimple();
                var asiceAttachableProcessors = clientConfiguration.Dokumentpakkeprosessorer.Select(p => new AsiceAttachableProcessor(forsendelse, p));
                var asiceAttachables          = new IAsiceAttachable[] { DomainUtility.GetHoveddokumentSimple() };

                //Act
                var asiceArchive = new AsiceArchive(DomainUtility.GetMottakerCertificate(), new GuidUtility(), asiceAttachableProcessors, asiceAttachables);
                var bytes        = asiceArchive.Bytes;

                //Assert
                foreach (var simpleProcessor in clientConfiguration.Dokumentpakkeprosessorer.Cast <SimpleDocumentBundleProcessor>())
                {
                    Assert.True(simpleProcessor.StreamLength > 1000);
                    Assert.True(simpleProcessor.CouldReadBytesStream);
                    Assert.Equal(0, simpleProcessor.Initialposition);
                }
            }
Esempio n. 5
0
            public async Task Throws_exception_on_invalid_manifest_in_attachment()
            {
                //Arrange
                var client = GetClientWithRequestValidator(new FakeHttpClientForDataResponse());

                var serializedfunc = new Func <IRequestContent, string>(p => ContentUtility.GetDirectSignatureJobRequestBody());

                var manifestBytes = Encoding.UTF8.GetBytes(XmlResource.Request.GetPortalManifest().OuterXml);
                var asiceArchive  = new AsiceArchive(new List <AsiceAttachableProcessor>());

                asiceArchive.AddAttachable("manifest.xml", manifestBytes);
                var documentBundle = new DocumentBundle(asiceArchive.GetBytes());

                var createAction = new CreateAction(new FakeJob(), documentBundle, serializedfunc);

                //Act
                await Assert.ThrowsAsync <InvalidXmlException>(async() => await client.SendAsync(GetHttpRequestMessage(createAction.Content())).ConfigureAwait(false)).ConfigureAwait(false);

                //Assert
            }
            public void ConstructorGeneratesBytes()
            {
                //Arrange
                var document     = DomainUtility.GetDirectDocument();
                var asiceArchive = new AsiceArchive(new AsiceAttachableProcessor[] { }, DomainUtility.GetDirectManifest(), DomainUtility.GetSignature(), document);

                //Act
                var archiveBytes = asiceArchive.GetBytes();

                //Assert
                using (var memoryStream = new MemoryStream(archiveBytes))
                {
                    using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Read))
                    {
                        Assert.Contains(archive.Entries, entry => entry.FullName == "manifest.xml");
                        Assert.Contains(archive.Entries, entry => entry.FullName == "META-INF/signatures.xml");
                        Assert.Contains(archive.Entries, entry => entry.FullName == document.FileName);
                    }
                }
            }
            public void AddsAttachableToZip()
            {
                //Arrange
                var asiceArchive = new AsiceArchive(new AsiceAttachableProcessor[] { });

                //Act
                var attachment = DomainUtility.GetDirectDocument();

                asiceArchive.AddAttachable(attachment.FileName, attachment.Bytes);

                var archiveBytes = asiceArchive.GetBytes();

                //Assert
                using (var memoryStream = new MemoryStream(archiveBytes))
                {
                    using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Read))
                    {
                        Assert.Contains(archive.Entries, entry => entry.FullName == attachment.FileName);
                    }
                }
            }
Esempio n. 8
0
        public void CreateArchive()
        {
            byte[] zippedData;
            using (var zippedOutStream = new MemoryStream())
            {
                using (var archive = AsiceArchive.Create(
                           zippedOutStream,
                           CadesManifestCreator.CreateWithSignatureFile(),
                           TestdataLoader.ReadCertificatesForTest(),
                           MessageDigestAlgorithm.SHA256Desig))
                    using (var fileStream = File.OpenRead(FileNameTestPdf))
                    {
                        archive.AddEntry(
                            fileStream,
                            new FileRef(FileNameTestPdf, MimeType.ForString(MimeTypes.GetMimeType(FileNameTestPdf))));
                    }

                zippedData = zippedOutStream.ToArray();
                zippedData.Should().NotBeNull();
                zippedData.Should().HaveCountGreaterThan(0);
            }

            using (var zipInput = new MemoryStream(zippedData))
                using (var zippedArchive = new ZipArchive(zipInput, ZipArchiveMode.Read))
                {
                    zippedArchive.Entries.Should().HaveCount(4);
                    zippedArchive.Entries.First(e => e.FullName.Equals(FileNameTestPdf, StringComparison.CurrentCulture)).Should().NotBeNull();
                    zippedArchive.Entries.First(e => e.FullName.Equals(AsiceConstants.CadesManifestFilename, StringComparison.CurrentCulture)).Should().NotBeNull();
                    zippedArchive.Entries.First(e => e.FullName.Equals(AsiceConstants.FileNameMimeType, StringComparison.CurrentCulture)).Should()
                    .NotBeNull();

                    var mimeTypeEntry = zippedArchive.GetEntry(AsiceConstants.FileNameMimeType);
                    using (var entryStream = mimeTypeEntry.Open())
                        using (var copyStream = new MemoryStream())
                        {
                            entryStream.CopyTo(copyStream);
                            Encoding.UTF8.GetString(copyStream.ToArray()).Should().Be(AsiceConstants.ContentTypeASiCe);
                        }

                    // Verifies that a CADES manifest has been generated
                    using (var entryStream = zippedArchive.GetEntry(AsiceConstants.CadesManifestFilename).Open())
                        using (var copyStream = new MemoryStream())
                        {
                            entryStream.CopyTo(copyStream);

                            var manifestXml = Encoding.UTF8.GetString(copyStream.ToArray());
                            manifestXml.Should().NotBeNull();
                            this.log.Info($"Manifest: {manifestXml}");
                        }

                    var signatureFile = zippedArchive.Entries
                                        .First(e => e.FullName.StartsWith("META-INF", StringComparison.CurrentCulture) &&
                                               e.FullName.EndsWith(".p7s", StringComparison.CurrentCulture));
                    signatureFile.Should().NotBeNull();

                    // Verifies the signature file
                    using (var entryStream = signatureFile.Open())
                        using (var copyStream = new MemoryStream())
                        {
                            entryStream.CopyTo(copyStream);
                            var signatureContent = copyStream.ToArray();
                            signatureContent.Should().HaveCountGreaterThan(0);
                        }
                }

            var tempFileName = Path.GetTempFileName();

            using (var zippedStream = new MemoryStream(zippedData))
                using (var outputFileStream = File.OpenWrite(tempFileName))
                {
                    zippedStream.CopyTo(outputFileStream);
                }

            this.log.Info($"Wrote package to '{tempFileName}'");
        }