diff options
Diffstat (limited to 'extensions/qa/update')
-rw-r--r-- | extensions/qa/update/simple.xml | 18 | ||||
-rw-r--r-- | extensions/qa/update/test_update.cxx | 152 |
2 files changed, 170 insertions, 0 deletions
diff --git a/extensions/qa/update/simple.xml b/extensions/qa/update/simple.xml new file mode 100644 index 000000000..f2694700a --- /dev/null +++ b/extensions/qa/update/simple.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * +--> +<inst:description xmlns:inst="http://update.libreoffice.org/description"> + <inst:id>LibreOffice 3.5.0 Beta2</inst:id> + <inst:version>3.5.0 Beta2</inst:version> + <inst:gitid>123456-abcdef-1a2b3c-4d5e6f</inst:gitid> + <inst:os>Linux</inst:os> + <inst:arch>x86</inst:arch> + + <inst:update type="text/html" src="http://www.libreoffice.org/download/" /> +</inst:description> diff --git a/extensions/qa/update/test_update.cxx b/extensions/qa/update/test_update.cxx new file mode 100644 index 000000000..27d634b3b --- /dev/null +++ b/extensions/qa/update/test_update.cxx @@ -0,0 +1,152 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sal/config.h> + +#include <cstddef> + +#include <test/bootstrapfixture.hxx> + +#include <com/sun/star/deployment/UpdateInformationEntry.hpp> +#include <com/sun/star/deployment/UpdateInformationProvider.hpp> +#include <com/sun/star/xml/dom/XNodeList.hpp> + +#include "../../source/update/check/updatecheck.hxx" +#include "../../source/update/check/updateprotocol.hxx" + +using namespace com::sun::star; +using namespace com::sun::star::xml; + +namespace testupdate { + +class Test : public test::BootstrapFixture +{ +public: + virtual void setUp() override + { + // so that comphelper::getProcessServiceFactory() works, m_xContext is + // set up, etc. + test::BootstrapFixture::setUp(); + + if ( !m_xProvider.is() ) + m_xProvider = deployment::UpdateInformationProvider::create( m_xContext ); + + // repositories that we will be checking + m_aRepositoryList = { m_directories.getURLFromSrc( u"/extensions/qa/update/simple.xml" ) }; + } + + virtual void tearDown() override + { + m_xProvider.clear(); + m_aRepositoryList.realloc( 0 ); + test::BootstrapFixture::tearDown(); + } + +protected: + // test the getUpdateInformationEnumeration() method + void testGetUpdateInformationEnumeration() + { + uno::Reference< container::XEnumeration > aUpdateInfoEnumeration = + m_xProvider->getUpdateInformationEnumeration( + m_aRepositoryList, + "TODO" ); // unused when we do not have a 'feed' + + if ( !aUpdateInfoEnumeration.is() ) + CPPUNIT_FAIL( "Calling getUpdateInformationEnumeration() with TODO failed." ); + + if ( !aUpdateInfoEnumeration->hasMoreElements() ) + CPPUNIT_FAIL( "Should have more elements (this one is 1st)." ); + + deployment::UpdateInformationEntry aEntry; + if ( aUpdateInfoEnumeration->nextElement() >>= aEntry ) + { + CPPUNIT_ASSERT_EQUAL( OUString("description"), aEntry.UpdateDocument->getNodeName() ); + + uno::Reference< dom::XNodeList> xChildNodes = aEntry.UpdateDocument->getChildNodes(); + CPPUNIT_ASSERT( xChildNodes.is() ); +#if 0 + for ( int i = 0; i < xChildNodes->getLength(); ++i ) + { + fprintf( stderr, "node == %d\n", i ); + uno::Reference< dom::XElement > xChildId( xChildNodes->item( i ), uno::UNO_QUERY ); + if ( xChildId.is() ) + { + fprintf( stderr, "Name == %s\n", OUStringToOString( xChildId->getNodeName(), RTL_TEXTENCODING_UTF8 ).getStr() ); + fprintf( stderr, "Value == %s\n", OUStringToOString( xChildId->getNodeValue(), RTL_TEXTENCODING_UTF8 ).getStr() ); + } + } +#endif + CPPUNIT_ASSERT_EQUAL( sal_Int32(13), xChildNodes->getLength() ); + + //uno::Reference< dom::XElement > xChildId( xChildNodes->item( 0 ), uno::UNO_QUERY ); + //CPPUNIT_ASSERT( xChildId.is() ); + //CPPUNIT_ASSERT( xChildId->getNodeValue() == "LibreOffice_3.4" ); + //fprintf( stderr, "Attribute == %s\n", OUStringToOString( aEntry.UpdateDocument->getAttribute( OUString( "test" ) ), RTL_TEXTENCODING_UTF8 ).getStr() ); + //fprintf( stderr, "Value == %s\n", OUStringToOString( xChildId->getNodeValue(), RTL_TEXTENCODING_UTF8 ).getStr() ); + // TODO check more deeply + } + else + CPPUNIT_FAIL( "Wrong type of the entry." ); + } + + // test the checkForUpdates() method - update is available + void testCheckUpdateAvailable() + { + UpdateInfo aInfo; + rtl::Reference< UpdateCheck > aController( UpdateCheck::get() ); + + if ( checkForUpdates( aInfo, m_xContext, aController->getInteractionHandler(), m_xProvider, + u"Linux", + u"x86", + m_aRepositoryList, + u"111111-222222-333333-444444", + "InstallSetID" ) ) + { + CPPUNIT_ASSERT_EQUAL( std::size_t(1), aInfo.Sources.size() ); + CPPUNIT_ASSERT_EQUAL( OUString("http://www.libreoffice.org/download/"), aInfo.Sources[0].URL ); + } + else + CPPUNIT_FAIL( "Calling checkForUpdates() failed." ); + } + + // test the checkForUpdates() method - we are up-to-date + void testCheckUpToDate() + { + UpdateInfo aInfo; + rtl::Reference< UpdateCheck > aController( UpdateCheck::get() ); + + if ( checkForUpdates( aInfo, m_xContext, aController->getInteractionHandler(), m_xProvider, + u"Linux", + u"x86", + m_aRepositoryList, + u"123456-abcdef-1a2b3c-4d5e6f", + "InstallSetID" ) ) + { + CPPUNIT_ASSERT( aInfo.Sources.empty() ); + } + else + CPPUNIT_FAIL( "Calling checkForUpdates() failed." ); + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testGetUpdateInformationEnumeration); + CPPUNIT_TEST(testCheckUpdateAvailable); + CPPUNIT_TEST(testCheckUpToDate); + CPPUNIT_TEST_SUITE_END(); + +private: + uno::Reference< deployment::XUpdateInformationProvider > m_xProvider; + uno::Sequence< OUString > m_aRepositoryList; +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(testupdate::Test); +} // namespace testupdate + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |