xmlsecurity/CppunitTest_xmlsecurity_signing.mk | 1 xmlsecurity/qa/unit/signing/signing.cxx | 623 ++++++++----------------- 2 files changed, 205 insertions(+), 419 deletions(-)
New commits: commit 2925425f02c7730343da48dbbf6501b907a21b6b Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Wed Nov 23 09:44:04 2022 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Wed Nov 23 12:28:26 2022 +0100 CppunitTest_xmlsecurity_signing: inherit from UnoApiXmlTest Modify testPreserveMacroTemplateSignature10 and testPreserveMacroTemplateSignature12 to test: OTT -> OTT -> OTT OTT -> ODT -> OTT before it was: OTT -> OTT OTT -> ODT -> OTT Change-Id: I1a0b7f1607202e994bf5847660b5abdc715106eb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143140 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/xmlsecurity/CppunitTest_xmlsecurity_signing.mk b/xmlsecurity/CppunitTest_xmlsecurity_signing.mk index baa3f5b2cec0..c3842c16872d 100644 --- a/xmlsecurity/CppunitTest_xmlsecurity_signing.mk +++ b/xmlsecurity/CppunitTest_xmlsecurity_signing.mk @@ -24,6 +24,7 @@ $(eval $(call gb_CppunitTest_use_libraries,xmlsecurity_signing, \ sax \ sfx \ svx \ + subsequenttest \ test \ tl \ unotest \ diff --git a/xmlsecurity/qa/unit/signing/signing.cxx b/xmlsecurity/qa/unit/signing/signing.cxx index c4de66d57af9..a5dde0c55998 100644 --- a/xmlsecurity/qa/unit/signing/signing.cxx +++ b/xmlsecurity/qa/unit/signing/signing.cxx @@ -17,9 +17,7 @@ #include <secoid.h> #endif -#include <test/bootstrapfixture.hxx> -#include <unotest/macros_test.hxx> -#include <test/xmltesttools.hxx> +#include <test/unoapixml_test.hxx> #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/embed/XStorage.hpp> @@ -64,16 +62,10 @@ using namespace com::sun::star; -namespace -{ -constexpr OUStringLiteral DATA_DIRECTORY = u"/xmlsecurity/qa/unit/signing/data/"; -} - /// Testsuite for the document signing feature. -class SigningTest : public test::BootstrapFixture, public unotest::MacrosTest, public XmlTestTools +class SigningTest : public UnoApiXmlTest { protected: - uno::Reference<lang::XComponent> mxComponent; uno::Reference<xml::crypto::XSEInitializer> mxSEInitializer; uno::Reference<xml::crypto::XXMLSecurityContext> mxSecurityContext; @@ -84,8 +76,6 @@ public: void registerNamespaces(xmlXPathContextPtr& pXmlXpathCtx) override; protected: - void createDoc(const OUString& rURL); - void createCalc(const OUString& rURL); uno::Reference<security::XCertificate> getCertificate(DocumentSignatureManager& rSignatureManager, svl::crypto::SignatureMethodAlgorithm eAlgo); @@ -96,15 +86,18 @@ protected: #endif }; -SigningTest::SigningTest() {} +SigningTest::SigningTest() + : UnoApiXmlTest("/xmlsecurity/qa/unit/signing/data/") +{ +} void SigningTest::setUp() { - test::BootstrapFixture::setUp(); + UnoApiXmlTest::setUp(); + MacrosTest::setUpNssGpg(m_directories, "xmlsecurity_signing"); // Initialize crypto after setting up the environment variables. - mxDesktop.set(frame::Desktop::create(mxComponentContext)); mxSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext); mxSecurityContext = mxSEInitializer->createSecurityContext(OUString()); #if USE_CRYPTO_NSS @@ -118,32 +111,9 @@ void SigningTest::setUp() void SigningTest::tearDown() { - if (mxComponent.is()) - mxComponent->dispose(); - MacrosTest::tearDownNssGpg(); - test::BootstrapFixture::tearDown(); -} -void SigningTest::createDoc(const OUString& rURL) -{ - if (mxComponent.is()) - mxComponent->dispose(); - if (rURL.isEmpty()) - mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument"); - else - mxComponent = loadFromDesktop(rURL, "com.sun.star.text.TextDocument"); -} - -void SigningTest::createCalc(const OUString& rURL) -{ - if (mxComponent.is()) - mxComponent->dispose(); - if (rURL.isEmpty()) - mxComponent - = loadFromDesktop("private:factory/swriter", "com.sun.star.sheet.SpreadsheetDocument"); - else - mxComponent = loadFromDesktop(rURL, "com.sun.star.sheet.SpreadsheetDocument"); + UnoApiXmlTest::tearDown(); } uno::Reference<security::XCertificate> @@ -169,20 +139,15 @@ SigningTest::getCertificate(DocumentSignatureManager& rSignatureManager, CPPUNIT_TEST_FIXTURE(SigningTest, testDescription) { // Create an empty document and store it to a tempfile, finally load it as a storage. - createDoc(""); + load("private:factory/swriter"); - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); - utl::MediaDescriptor aMediaDescriptor; - aMediaDescriptor["FilterName"] <<= OUString("writer8"); - xStorable->storeAsURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + save("writer8"); DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE); + ZIP_STORAGE_FORMAT_STRING, maTempFile.GetURL(), embed::ElementModes::READWRITE); CPPUNIT_ASSERT(xStorage.is()); aManager.setStore(xStorage); aManager.getSignatureHelper().SetStorage(xStorage, u"1.2"); @@ -206,20 +171,15 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testDescription) CPPUNIT_TEST_FIXTURE(SigningTest, testECDSA) { // Create an empty document and store it to a tempfile, finally load it as a storage. - createDoc(""); + load("private:factory/swriter"); - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); - utl::MediaDescriptor aMediaDescriptor; - aMediaDescriptor["FilterName"] <<= OUString("writer8"); - xStorable->storeAsURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + save("writer8"); DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE); + ZIP_STORAGE_FORMAT_STRING, maTempFile.GetURL(), embed::ElementModes::READWRITE); CPPUNIT_ASSERT(xStorage.is()); aManager.setStore(xStorage); aManager.getSignatureHelper().SetStorage(xStorage, u"1.2"); @@ -245,20 +205,15 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testECDSA) CPPUNIT_TEST_FIXTURE(SigningTest, testECDSAOOXML) { // Create an empty document and store it to a tempfile, finally load it as a storage. - createDoc(""); + load("private:factory/swriter"); - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); - utl::MediaDescriptor aMediaDescriptor; - aMediaDescriptor["FilterName"] <<= OUString("MS Word 2007 XML"); - xStorable->storeAsURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + save("MS Word 2007 XML"); DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE); + ZIP_STORAGE_FORMAT_STRING, maTempFile.GetURL(), embed::ElementModes::READWRITE); CPPUNIT_ASSERT(xStorage.is()); aManager.setStore(xStorage); aManager.getSignatureHelper().SetStorage(xStorage, u"1.2"); @@ -286,19 +241,14 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testECDSAPDF) { // Create an empty document and store it to a tempfile, finally load it as // a stream. - createDoc(""); + load("private:factory/swriter"); - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); - utl::MediaDescriptor aMediaDescriptor; - aMediaDescriptor["FilterName"] <<= OUString("writer_pdf_Export"); - xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + save("writer_pdf_Export"); DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); std::unique_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream( - aTempFile.GetURL(), StreamMode::READ | StreamMode::WRITE)); + maTempFile.GetURL(), StreamMode::READ | StreamMode::WRITE)); uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStream)); CPPUNIT_ASSERT(xStream.is()); aManager.setSignatureStream(xStream); @@ -331,20 +281,15 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testECDSAPDF) CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLDescription) { // Create an empty document and store it to a tempfile, finally load it as a storage. - createDoc(""); + load("private:factory/swriter"); - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); - utl::MediaDescriptor aMediaDescriptor; - aMediaDescriptor["FilterName"] <<= OUString("MS Word 2007 XML"); - xStorable->storeAsURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + save("MS Word 2007 XML"); DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE); + ZIP_STORAGE_FORMAT_STRING, maTempFile.GetURL(), embed::ElementModes::READWRITE); CPPUNIT_ASSERT(xStorage.is()); aManager.setStore(xStorage); aManager.getSignatureHelper().SetStorage(xStorage, u"1.2"); @@ -369,12 +314,9 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLDescription) CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLAppend) { // Copy the test document to a temporary file, as it'll be modified. - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - OUString aURL = aTempFile.GetURL(); - CPPUNIT_ASSERT_EQUAL( - osl::File::RC::E_None, - osl::File::copy(m_directories.getURLFromSrc(DATA_DIRECTORY) + "partial.docx", aURL)); + OUString aURL = maTempFile.GetURL(); + CPPUNIT_ASSERT_EQUAL(osl::File::RC::E_None, + osl::File::copy(createFileURL(u"partial.docx"), aURL)); // Load the test document as a storage and read its single signature. DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); @@ -408,12 +350,9 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLRemove) // Load the test document as a storage and read its signatures: purpose1 and purpose2. DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - OUString aURL = aTempFile.GetURL(); - CPPUNIT_ASSERT_EQUAL( - osl::File::RC::E_None, - osl::File::copy(m_directories.getURLFromSrc(DATA_DIRECTORY) + "multi.docx", aURL)); + OUString aURL = maTempFile.GetURL(); + CPPUNIT_ASSERT_EQUAL(osl::File::RC::E_None, + osl::File::copy(createFileURL(u"multi.docx"), aURL)); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL(ZIP_STORAGE_FORMAT_STRING, aURL, embed::ElementModes::READWRITE); @@ -441,12 +380,9 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLRemove) CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLRemoveAll) { // Copy the test document to a temporary file, as it'll be modified. - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - OUString aURL = aTempFile.GetURL(); - CPPUNIT_ASSERT_EQUAL( - osl::File::RC::E_None, - osl::File::copy(m_directories.getURLFromSrc(DATA_DIRECTORY) + "partial.docx", aURL)); + OUString aURL = maTempFile.GetURL(); + CPPUNIT_ASSERT_EQUAL(osl::File::RC::E_None, + osl::File::copy(createFileURL(u"partial.docx"), aURL)); // Load the test document as a storage and read its single signature. DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); @@ -489,7 +425,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLRemoveAll) /// Test a typical ODF where all streams are signed. CPPUNIT_TEST_FIXTURE(SigningTest, testODFGood) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "good.odt"); + loadFromURL(u"good.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -504,7 +440,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFGood) /// Test a typical broken ODF signature where one stream is corrupted. CPPUNIT_TEST_FIXTURE(SigningTest, testODFBroken) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "bad.odt"); + loadFromURL(u"bad.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -516,7 +452,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFBroken) // Document has a signature stream, but no actual signatures. CPPUNIT_TEST_FIXTURE(SigningTest, testODFNo) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "no.odt"); + loadFromURL(u"no.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -528,8 +464,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFNo) // document has one signed timestamp and one unsigned timestamp CPPUNIT_TEST_FIXTURE(SigningTest, testODFUnsignedTimestamp) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) - + "02_doc_signed_by_trusted_person_manipulated.odt"); + loadFromURL(u"02_doc_signed_by_trusted_person_manipulated.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -554,8 +489,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFUnsignedTimestamp) CPPUNIT_TEST_FIXTURE(SigningTest, aaa_testODFX509CertificateChain) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) - + "signed_with_x509certificate_chain.odt"); + loadFromURL(u"signed_with_x509certificate_chain.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -578,8 +512,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, aaa_testODFX509CertificateChain) CPPUNIT_TEST_FIXTURE(SigningTest, testODFDoubleX509Data) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) - + "02_doc_signed_by_attacker_manipulated.odt"); + loadFromURL(u"02_doc_signed_by_attacker_manipulated.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -599,8 +532,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFDoubleX509Data) CPPUNIT_TEST_FIXTURE(SigningTest, testODFTripleX509Data) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) - + "02_doc_signed_by_attacker_manipulated_triple.odt"); + loadFromURL(u"02_doc_signed_by_attacker_manipulated_triple.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -620,8 +552,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFTripleX509Data) CPPUNIT_TEST_FIXTURE(SigningTest, testODFMacroDoubleX509Data) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) - + "02_doc_macros_signed_by_attacker_manipulated.odt"); + loadFromURL(u"02_doc_macros_signed_by_attacker_manipulated.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -641,8 +572,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFMacroDoubleX509Data) CPPUNIT_TEST_FIXTURE(SigningTest, testODFDoubleX509Certificate) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) - + "02_doc_signed_by_attacker_manipulated2.odt"); + loadFromURL(u"02_doc_signed_by_attacker_manipulated2.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -684,7 +614,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testDNCompatibility) /// Test a typical OOXML where a number of (but not all) streams are signed. CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLPartial) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "partial.docx"); + loadFromURL(u"partial.docx"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -701,7 +631,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLPartial) /// Test a typical broken OOXML signature where one stream is corrupted. CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLBroken) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "bad.docx"); + loadFromURL(u"bad.docx"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -716,7 +646,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testOOXMLBroken) /// Test a typical PDF where the signature is good. CPPUNIT_TEST_FIXTURE(SigningTest, testPDFGood) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "good.pdf"); + loadFromURL(u"good.pdf"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -737,7 +667,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testPDFGood) /// Test a typical PDF where the signature is bad. CPPUNIT_TEST_FIXTURE(SigningTest, testPDFBad) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "bad.pdf"); + loadFromURL(u"bad.pdf"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -754,8 +684,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testPDFBad) CPPUNIT_TEST_FIXTURE(SigningTest, testPDFHideAndReplace) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) - + "hide-and-replace-shadow-file-signed-2.pdf"); + loadFromURL(u"hide-and-replace-shadow-file-signed-2.pdf"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -777,7 +706,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testPDFHideAndReplace) /// Test a typical PDF which is not signed. CPPUNIT_TEST_FIXTURE(SigningTest, testPDFNo) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "no.pdf"); + loadFromURL(u"no.pdf"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -799,10 +728,8 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testPDFAddVisibleSignature) if (!IsDefaultDPI()) return; // Given: copy the test document to a temporary file, as it'll be modified. - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - OUString aSourceURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "add-visible-signature.pdf"; - OUString aURL = aTempFile.GetURL(); + OUString aSourceURL = createFileURL(u"add-visible-signature.pdf"); + OUString aURL = maTempFile.GetURL(); osl::File::RC eRet = osl::File::copy(aSourceURL, aURL); CPPUNIT_ASSERT_EQUAL(osl::File::RC::E_None, eRet); @@ -842,11 +769,8 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testPDFAddVisibleSignature) pObjectShell->SignDocumentContentUsingCertificate(aCertificates[0]); // Then: count the # of shapes on the signature widget/annotation. - SvFileStream aFile(aTempFile.GetURL(), StreamMode::READ); - SvMemoryStream aMemory; - aMemory.WriteStream(aFile); - std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument - = pPDFium->openDocument(aMemory.GetData(), aMemory.GetSize(), OString()); + std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport(); + std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0); CPPUNIT_ASSERT_EQUAL(1, pPdfPage->getAnnotationCount()); std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnot = pPdfPage->getAnnotation(/*nIndex=*/0); @@ -861,7 +785,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testPDFAddVisibleSignature) CPPUNIT_TEST_FIXTURE(SigningTest, test96097Calc) { - createCalc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf96097.ods"); + loadFromURL(u"tdf96097.ods"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT_MESSAGE("Failed to access document base model", pBaseModel); @@ -876,30 +800,20 @@ CPPUNIT_TEST_FIXTURE(SigningTest, test96097Calc) uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY_THROW); // Save a copy - utl::TempFileNamed aTempFileSaveCopy; - aTempFileSaveCopy.EnableKillingFile(); uno::Sequence<beans::PropertyValue> descSaveACopy(comphelper::InitPropertySequence( { { "SaveACopy", uno::Any(true) }, { "FilterName", uno::Any(OUString("calc8")) } })); - xDocStorable->storeToURL(aTempFileSaveCopy.GetURL(), descSaveACopy); + xDocStorable->storeToURL(maTempFile.GetURL(), descSaveACopy); - try - { - // Save As - utl::TempFileNamed aTempFileSaveAs; - aTempFileSaveAs.EnableKillingFile(); - uno::Sequence<beans::PropertyValue> descSaveAs( - comphelper::InitPropertySequence({ { "FilterName", uno::Any(OUString("calc8")) } })); - xDocStorable->storeAsURL(aTempFileSaveAs.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Fail to save as the document"); - } + // FIXME: Error: element "document-signatures" is missing "version" attribute + skipValidation(); + + // Save As + save("calc8"); } CPPUNIT_TEST_FIXTURE(SigningTest, test96097Doc) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf96097.odt"); + loadFromURL(u"tdf96097.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -913,43 +827,30 @@ CPPUNIT_TEST_FIXTURE(SigningTest, test96097Doc) uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY_THROW); // Save a copy - utl::TempFileNamed aTempFileSaveCopy; - aTempFileSaveCopy.EnableKillingFile(); uno::Sequence<beans::PropertyValue> descSaveACopy(comphelper::InitPropertySequence( { { "SaveACopy", uno::Any(true) }, { "FilterName", uno::Any(OUString("writer8")) } })); - xDocStorable->storeToURL(aTempFileSaveCopy.GetURL(), descSaveACopy); + xDocStorable->storeToURL(maTempFile.GetURL(), descSaveACopy); - try - { - // Save As - utl::TempFileNamed aTempFileSaveAs; - aTempFileSaveAs.EnableKillingFile(); - uno::Sequence<beans::PropertyValue> descSaveAs( - comphelper::InitPropertySequence({ { "FilterName", uno::Any(OUString("writer8")) } })); - xDocStorable->storeAsURL(aTempFileSaveAs.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Fail to save as the document"); - } + // FIXME: Error: element "document-signatures" is missing "version" attribute + skipValidation(); + + // Save As + save("writer8"); } CPPUNIT_TEST_FIXTURE(SigningTest, testXAdESNotype) { // Create a working copy. - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - OUString aURL = aTempFile.GetURL(); - CPPUNIT_ASSERT_EQUAL( - osl::File::RC::E_None, - osl::File::copy(m_directories.getURLFromSrc(DATA_DIRECTORY) + "notype-xades.odt", aURL)); + OUString aURL = maTempFile.GetURL(); + CPPUNIT_ASSERT_EQUAL(osl::File::RC::E_None, + osl::File::copy(createFileURL(u"notype-xades.odt"), aURL)); // Read existing signature. DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE); + ZIP_STORAGE_FORMAT_STRING, maTempFile.GetURL(), embed::ElementModes::READWRITE); CPPUNIT_ASSERT(xStorage.is()); aManager.setStore(xStorage); aManager.getSignatureHelper().SetStorage(xStorage, u"1.2"); @@ -997,20 +898,15 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testXAdESNotype) CPPUNIT_TEST_FIXTURE(SigningTest, testXAdES) { // Create an empty document, store it to a tempfile and load it as a storage. - createDoc(OUString()); + load("private:factory/swriter"); - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); - utl::MediaDescriptor aMediaDescriptor; - aMediaDescriptor["FilterName"] <<= OUString("writer8"); - xStorable->storeAsURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + save("writer8"); DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE); + ZIP_STORAGE_FORMAT_STRING, maTempFile.GetURL(), embed::ElementModes::READWRITE); CPPUNIT_ASSERT(xStorage.is()); aManager.setStore(xStorage); aManager.getSignatureHelper().SetStorage(xStorage, u"1.2"); @@ -1055,21 +951,15 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testXAdES) CPPUNIT_TEST_FIXTURE(SigningTest, testSigningMultipleTimes_ODT) { - createDoc(""); - - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); - utl::MediaDescriptor aMediaDescriptor; - aMediaDescriptor["FilterName"] <<= OUString("writer8"); - xStorable->storeAsURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + load("private:factory/swriter"); + save("writer8"); { DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE); + ZIP_STORAGE_FORMAT_STRING, maTempFile.GetURL(), embed::ElementModes::READWRITE); CPPUNIT_ASSERT(xStorage.is()); aManager.setStore(xStorage); aManager.getSignatureHelper().SetStorage(xStorage, u"1.2"); @@ -1123,7 +1013,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testSigningMultipleTimes_ODT) Scheduler::ProcessEventsToIdle(); - createDoc(aTempFile.GetURL()); + load(maTempFile.GetURL()); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); @@ -1134,21 +1024,15 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testSigningMultipleTimes_ODT) CPPUNIT_TEST_FIXTURE(SigningTest, testSigningMultipleTimes_OOXML) { - createDoc(""); - - utl::TempFileNamed aTempFile; - aTempFile.EnableKillingFile(); - uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); - utl::MediaDescriptor aMediaDescriptor; - aMediaDescriptor["FilterName"] <<= OUString("MS Word 2007 XML"); - xStorable->storeAsURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); + load("private:factory/swriter"); + save("MS Word 2007 XML"); { DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); CPPUNIT_ASSERT(aManager.init()); uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE); + ZIP_STORAGE_FORMAT_STRING, maTempFile.GetURL(), embed::ElementModes::READWRITE); CPPUNIT_ASSERT(xStorage.is()); aManager.setStore(xStorage); aManager.getSignatureHelper().SetStorage(xStorage, u"1.2"); @@ -1197,7 +1081,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testSigningMultipleTimes_OOXML) Scheduler::ProcessEventsToIdle(); - createDoc(aTempFile.GetURL()); + load(maTempFile.GetURL()); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); @@ -1209,7 +1093,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testSigningMultipleTimes_OOXML) /// Works with an existing good XAdES signature. CPPUNIT_TEST_FIXTURE(SigningTest, testXAdESGood) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "good-xades.odt"); + loadFromURL(u"good-xades.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -1231,8 +1115,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testSignatureLineOOXML) uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetStorageOfFormatFromURL( - ZIP_STORAGE_FORMAT_STRING, - m_directories.getURLFromSrc(DATA_DIRECTORY) + "signatureline.docx", + ZIP_STORAGE_FORMAT_STRING, createFileURL(u"signatureline.docx"), embed::ElementModes::READ); CPPUNIT_ASSERT(xStorage.is()); @@ -1252,7 +1135,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testSignatureLineOOXML) CPPUNIT_TEST_FIXTURE(SigningTest, testSignatureLineODF) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "signatureline.odt"); + loadFromURL(u"signatureline.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -1274,7 +1157,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testSignatureLineODF) /// Test a typical ODF where all streams are GPG-signed. CPPUNIT_TEST_FIXTURE(SigningTest, testODFGoodGPG) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "goodGPG.odt"); + loadFromURL(u"goodGPG.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -1289,7 +1172,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFGoodGPG) /// Test a typical ODF where all streams are GPG-signed, but we don't trust the signature. CPPUNIT_TEST_FIXTURE(SigningTest, testODFUntrustedGoodGPG) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "untrustedGoodGPG.odt"); + loadFromURL(u"untrustedGoodGPG.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -1305,7 +1188,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFUntrustedGoodGPG) /// Test a typical broken ODF signature where one stream is corrupted. CPPUNIT_TEST_FIXTURE(SigningTest, testODFBrokenStreamGPG) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "badStreamGPG.odt"); + loadFromURL(u"badStreamGPG.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -1317,7 +1200,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFBrokenStreamGPG) /// Test a typical broken ODF signature where the XML dsig hash is corrupted. CPPUNIT_TEST_FIXTURE(SigningTest, testODFBrokenDsigGPG) { - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "badDsigGPG.odt"); + loadFromURL(u"badDsigGPG.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); @@ -1332,36 +1215,26 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFBrokenDsigGPG) CPPUNIT_TEST_FIXTURE(SigningTest, testODFEncryptedGPG) { // ODF1.2 + loext flavour - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "encryptedGPG.odt"); + loadFromURL(u"encryptedGPG.odt"); SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); CPPUNIT_ASSERT(pObjectShell); // ODF1.3 flavour - createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "encryptedGPG_odf13.odt"); + loadFromURL(u"encryptedGPG_odf13.odt"); pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); pObjectShell = pBaseModel->GetObjectShell(); CPPUNIT_ASSERT(pObjectShell); // export and import again - utl::TempFileNamed aTempFile; - { - uno::Sequence<beans::PropertyValue> props( - comphelper::InitPropertySequence({ { "FilterName", uno::Any(OUString("writer8")) } })); - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - xDocStorable->storeToURL(aTempFile.GetURL(), props); - } - validate(aTempFile.GetFileName(), test::ODF); + saveAndReload("writer8"); - createDoc(aTempFile.GetURL()); pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); CPPUNIT_ASSERT(pBaseModel); pObjectShell = pBaseModel->GetObjectShell(); CPPUNIT_ASSERT(pObjectShell); - - aTempFile.EnableKillingFile(); } #endif @@ -1397,104 +1270,75 @@ SfxObjectShell* SigningTest::assertDocument(const ::CppUnit::SourceLine aSrcLine /// Test if a macro signature from a OTT 1.2 template is preserved for ODT 1.2 CPPUNIT_TEST_FIXTURE(SigningTest, testPreserveMacroTemplateSignature12_ODF) { - const OUString aURL(m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf42316_odt12.ott"); - const OUString sLoadMessage = "loading failed: " + aURL; - - // load the template as-is to validate signatures - mxComponent = loadFromDesktop( - aURL, OUString(), comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); - - // we are a template, and have a valid document and macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::OK, SignatureState::OK, - ODFVER_012_TEXT); - - // create new document from template - mxComponent->dispose(); - mxComponent = mxDesktop->loadComponentFromURL(aURL, "_default", 0, {}); - CPPUNIT_ASSERT_MESSAGE(OUStringToOString(sLoadMessage, RTL_TEXTENCODING_UTF8).getStr(), - mxComponent.is()); - - // we are somehow a template (?), and have just a valid macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, - SignatureState::OK, ODFVER_012_TEXT); + const OUString aFormats[] = { "writer8", "writer8_template" }; - // save as new ODT document - utl::TempFileNamed aTempFileSaveAsODT; - aTempFileSaveAsODT.EnableKillingFile(); - try - { - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> descSaveAs( - comphelper::InitPropertySequence({ { "FilterName", uno::Any(OUString("writer8")) } })); - xDocStorable->storeAsURL(aTempFileSaveAsODT.GetURL(), descSaveAs); - } - catch (...) + for (OUString const& sFormat : aFormats) { - CPPUNIT_FAIL("Failed to save ODT document"); - } + const OUString aURL(createFileURL(u"tdf42316_odt12.ott")); + const OUString sLoadMessage = "loading failed: " + aURL; + + // load the template as-is to validate signatures + mxComponent = loadFromDesktop( + aURL, OUString(), + comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); + + // we are a template, and have a valid document and macro signature + assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::OK, + SignatureState::OK, ODFVER_012_TEXT); + + // create new document from template + load(aURL); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(sLoadMessage, RTL_TEXTENCODING_UTF8).getStr(), + mxComponent.is()); + + // we are somehow a template (?), and have just a valid macro signature + assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, + SignatureState::OK, ODFVER_012_TEXT); + + // FIXME: Error: element "document-signatures" is missing "version" attribute + skipValidation(); + + if (sFormat == "writer8") + // save as new ODT document + saveAndReload(sFormat); + else + { + // save as new OTT template + save("writer8_template"); + + // load the saved OTT template as-is to validate signatures + mxComponent->dispose(); + mxComponent = loadFromDesktop( + maTempFile.GetURL(), OUString(), + comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); + } - // save as new OTT template - utl::TempFileNamed aTempFileSaveAsOTT; - aTempFileSaveAsOTT.EnableKillingFile(); - try - { - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> descSaveAs(comphelper::InitPropertySequence( - { { "FilterName", uno::Any(OUString("writer8_template")) } })); - xDocStorable->storeAsURL(aTempFileSaveAsOTT.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Failed to save OTT template"); - } + // the loaded document is a OTT/ODT with a macro signature + assertDocument(CPPUNIT_SOURCELINE(), sFormat, SignatureState::NOSIGNATURES, + SignatureState::OK, ODFVER_013_TEXT); - // load the saved OTT template as-is to validate signatures - mxComponent->dispose(); - mxComponent - = loadFromDesktop(aTempFileSaveAsOTT.GetURL(), OUString(), - comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); - - // the loaded document is a OTT with a valid macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, - SignatureState::OK, ODFVER_013_TEXT); + // save as new OTT template + save("writer8_template"); - // load saved ODT document - createDoc(aTempFileSaveAsODT.GetURL()); + // load the template as-is to validate signatures + mxComponent->dispose(); + mxComponent = loadFromDesktop( + maTempFile.GetURL(), OUString(), + comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); - // the loaded document is a ODT with a macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8", SignatureState::NOSIGNATURES, - SignatureState::OK, ODFVER_013_TEXT); + // the loaded document is a OTT with a valid macro signature + assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, + SignatureState::OK, ODFVER_013_TEXT); - // save as new OTT template - utl::TempFileNamed aTempFileSaveAsODT_OTT; - aTempFileSaveAsODT_OTT.EnableKillingFile(); - try - { - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> descSaveAs(comphelper::InitPropertySequence( - { { "FilterName", uno::Any(OUString("writer8_template")) } })); - xDocStorable->storeAsURL(aTempFileSaveAsODT_OTT.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Failed to save OTT template"); + mxComponent->dispose(); + mxComponent.clear(); } - - // load the template as-is to validate signatures - mxComponent->dispose(); - mxComponent - = loadFromDesktop(aTempFileSaveAsODT_OTT.GetURL(), OUString(), - comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); - - // the loaded document is a OTT with a valid macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, - SignatureState::OK, ODFVER_013_TEXT); } /// Test if a macro signature from an OTT 1.0 is dropped for ODT 1.2 CPPUNIT_TEST_FIXTURE(SigningTest, testDropMacroTemplateSignature) { - const OUString aURL(m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf42316.ott"); + const OUString aURL(createFileURL(u"tdf42316.ott")); const OUString sLoadMessage = "loading failed: " + aURL; // load the template as-is to validate signatures @@ -1506,8 +1350,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testDropMacroTemplateSignature) SignatureState::NOTVALIDATED, OUString()); // create new document from template - mxComponent->dispose(); - mxComponent = mxDesktop->loadComponentFromURL(aURL, "_default", 0, {}); + load(aURL); CPPUNIT_ASSERT_MESSAGE(OUStringToOString(sLoadMessage, RTL_TEXTENCODING_UTF8).getStr(), mxComponent.is()); @@ -1516,22 +1359,7 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testDropMacroTemplateSignature) SignatureState::NOTVALIDATED, OUString()); // save as new ODT document - utl::TempFileNamed aTempFileSaveAs; - aTempFileSaveAs.EnableKillingFile(); - try - { - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> descSaveAs( - comphelper::InitPropertySequence({ { "FilterName", uno::Any(OUString("writer8")) } })); - xDocStorable->storeAsURL(aTempFileSaveAs.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Failed to save ODT document"); - } - - // load saved document - createDoc(aTempFileSaveAs.GetURL()); + saveAndReload("writer8"); // the loaded document is a 1.2 ODT without any signatures assertDocument(CPPUNIT_SOURCELINE(), "writer8", SignatureState::NOSIGNATURES, @@ -1547,24 +1375,12 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testDropMacroTemplateSignature) SignatureState::NOTVALIDATED, OUString()); // save as new OTT template - utl::TempFileNamed aTempFileSaveAsOTT; - aTempFileSaveAsOTT.EnableKillingFile(); - try - { - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> descSaveAs(comphelper::InitPropertySequence( - { { "FilterName", uno::Any(OUString("writer8_template")) } })); - xDocStorable->storeAsURL(aTempFileSaveAsOTT.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Failed to save OTT template"); - } + save("writer8_template"); // load the template as-is to validate signatures mxComponent->dispose(); mxComponent - = loadFromDesktop(aTempFileSaveAsOTT.GetURL(), OUString(), + = loadFromDesktop(maTempFile.GetURL(), OUString(), comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); // the loaded document is a 1.2 OTT without any signatures @@ -1587,98 +1403,67 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testPreserveMacroTemplateSignature10) officecfg::Office::Common::Save::ODF::DefaultVersion::set(2, pBatch); pBatch->commit(); - const OUString aURL(m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf42316.ott"); - const OUString sLoadMessage = "loading failed: " + aURL; - - // load the template as-is to validate signatures - mxComponent = loadFromDesktop( - aURL, OUString(), comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); - - // we are a template, and have a non-invalid macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, - SignatureState::NOTVALIDATED, OUString()); - - // create new document from template - mxComponent->dispose(); - mxComponent = mxDesktop->loadComponentFromURL(aURL, "_default", 0, {}); - CPPUNIT_ASSERT_MESSAGE(OUStringToOString(sLoadMessage, RTL_TEXTENCODING_UTF8).getStr(), - mxComponent.is()); - - // we are somehow a template (?), and have just a valid macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, - SignatureState::NOTVALIDATED, OUString()); - - // save as new ODT document - utl::TempFileNamed aTempFileSaveAsODT; - aTempFileSaveAsODT.EnableKillingFile(); - try - { - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> descSaveAs( - comphelper::InitPropertySequence({ { "FilterName", uno::Any(OUString("writer8")) } })); - xDocStorable->storeAsURL(aTempFileSaveAsODT.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Failed to save ODT document"); - } + const OUString aFormats[] = { "writer8", "writer8_template" }; - // save as new OTT template - utl::TempFileNamed aTempFileSaveAsOTT; - aTempFileSaveAsOTT.EnableKillingFile(); - try + for (OUString const& sFormat : aFormats) { - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> descSaveAs(comphelper::InitPropertySequence( - { { "FilterName", uno::Any(OUString("writer8_template")) } })); - xDocStorable->storeAsURL(aTempFileSaveAsOTT.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Failed to save OTT template"); - } + const OUString aURL(createFileURL(u"tdf42316.ott")); + const OUString sLoadMessage = "loading failed: " + aURL; + + // load the template as-is to validate signatures + mxComponent = loadFromDesktop( + aURL, OUString(), + comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); + + // we are a template, and have a non-invalid macro signature + assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, + SignatureState::NOTVALIDATED, OUString()); + + // create new document from template + load(aURL); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(sLoadMessage, RTL_TEXTENCODING_UTF8).getStr(), + mxComponent.is()); + + // we are somehow a template (?), and have just a valid macro signature + assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, + SignatureState::NOTVALIDATED, OUString()); + + // FIXME: Error: element "manifest:manifest" is missing "version" attribute + skipValidation(); + + if (sFormat == "writer8") + // save as new ODT document + saveAndReload(sFormat); + else + { + // save as new OTT template + save("writer8_template"); + + // load the saved OTT template as-is to validate signatures + mxComponent->dispose(); + mxComponent = loadFromDesktop( + maTempFile.GetURL(), OUString(), + comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); + } - // load the saved OTT template as-is to validate signatures - mxComponent->dispose(); - mxComponent - = loadFromDesktop(aTempFileSaveAsOTT.GetURL(), OUString(), - comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); + assertDocument(CPPUNIT_SOURCELINE(), sFormat, SignatureState::NOSIGNATURES, + SignatureState::NOTVALIDATED, OUString()); - // the loaded document is a OTT with a non-invalid macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, - SignatureState::NOTVALIDATED, OUString()); + save("writer8_template"); - // load saved ODT document - createDoc(aTempFileSaveAsODT.GetURL()); + // load the template as-is to validate signatures + mxComponent->dispose(); + mxComponent = loadFromDesktop( + maTempFile.GetURL(), OUString(), + comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); - // the loaded document is a ODT with a non-invalid macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8", SignatureState::NOSIGNATURES, - SignatureState::NOTVALIDATED, OUString()); + // the loaded document is a OTT with a non-invalid macro signature + assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, + SignatureState::NOTVALIDATED, OUString()); - // save as new OTT template - utl::TempFileNamed aTempFileSaveAsODT_OTT; - aTempFileSaveAsODT_OTT.EnableKillingFile(); - try - { - uno::Reference<frame::XStorable> xDocStorable(mxComponent, uno::UNO_QUERY); - uno::Sequence<beans::PropertyValue> descSaveAs(comphelper::InitPropertySequence( - { { "FilterName", uno::Any(OUString("writer8_template")) } })); - xDocStorable->storeAsURL(aTempFileSaveAsODT_OTT.GetURL(), descSaveAs); - } - catch (...) - { - CPPUNIT_FAIL("Failed to save OTT template"); + mxComponent->dispose(); + mxComponent.clear(); } - - // load the template as-is to validate signatures - mxComponent->dispose(); - mxComponent - = loadFromDesktop(aTempFileSaveAsODT_OTT.GetURL(), OUString(), - comphelper::InitPropertySequence({ { "AsTemplate", uno::Any(false) } })); - - // the loaded document is a OTT with a non-invalid macro signature - assertDocument(CPPUNIT_SOURCELINE(), "writer8_template", SignatureState::NOSIGNATURES, - SignatureState::NOTVALIDATED, OUString()); } #endif