From 940b4d1848e8c70ab7642901a68594e8016caffc Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 18:51:28 +0200 Subject: Adding upstream version 1:7.0.4. Signed-off-by: Daniel Baumann --- ucb/qa/cppunit/webdav/webdav_local_neon.cxx | 51 ++++ ucb/qa/cppunit/webdav/webdav_options.cxx | 371 +++++++++++++++++++++++ ucb/qa/cppunit/webdav/webdav_propfindcache.cxx | 135 +++++++++ ucb/qa/cppunit/webdav/webdav_resource_access.cxx | 103 +++++++ 4 files changed, 660 insertions(+) create mode 100644 ucb/qa/cppunit/webdav/webdav_local_neon.cxx create mode 100644 ucb/qa/cppunit/webdav/webdav_options.cxx create mode 100644 ucb/qa/cppunit/webdav/webdav_propfindcache.cxx create mode 100644 ucb/qa/cppunit/webdav/webdav_resource_access.cxx (limited to 'ucb/qa/cppunit') diff --git a/ucb/qa/cppunit/webdav/webdav_local_neon.cxx b/ucb/qa/cppunit/webdav/webdav_local_neon.cxx new file mode 100644 index 000000000..a88266020 --- /dev/null +++ b/ucb/qa/cppunit/webdav/webdav_local_neon.cxx @@ -0,0 +1,51 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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 +#include +#include +#include + +using namespace webdav_ucp; + +namespace +{ + + class webdav_local_test: public CppUnit::TestFixture + { + + public: + void NeonUriTest(); + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE( webdav_local_test ); + CPPUNIT_TEST( NeonUriTest ); + CPPUNIT_TEST_SUITE_END(); + }; // class webdav_local_test + + void webdav_local_test::NeonUriTest() + { + //try URL decomposition + NeonUri aURI( "http://user%40anothername@server.biz:8040/aService/asegment/nextsegment/check.this?test=true&link=http://anotherserver.com/%3Fcheck=theapplication%26os=linuxintel%26lang=en-US%26version=5.2.0" ); + CPPUNIT_ASSERT_EQUAL( OUString( "http" ), aURI.GetScheme() ); + CPPUNIT_ASSERT_EQUAL( OUString( "server.biz" ), aURI.GetHost() ); + CPPUNIT_ASSERT_EQUAL( OUString( "user%40anothername" ), aURI.GetUserInfo() ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 8040 ), aURI.GetPort() ); + CPPUNIT_ASSERT_EQUAL( OUString( "/aService/asegment/nextsegment/check.this?test=true&link=http://anotherserver.com/%3Fcheck=theapplication%26os=linuxintel%26lang=en-US%26version=5.2.0" ), aURI.GetPath( ) ); + } + + CPPUNIT_TEST_SUITE_REGISTRATION( webdav_local_test ); +} // namespace rtl_random + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/ucb/qa/cppunit/webdav/webdav_options.cxx b/ucb/qa/cppunit/webdav/webdav_options.cxx new file mode 100644 index 000000000..ef0cc1b96 --- /dev/null +++ b/ucb/qa/cppunit/webdav/webdav_options.cxx @@ -0,0 +1,371 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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 +#include +#include + +using namespace webdav_ucp; + +namespace +{ + + class webdav_opts_test: public test::BootstrapFixture + { + + public: + webdav_opts_test() : BootstrapFixture( true, true ) {} + + // initialise your test code values here. + void setUp( ) override; + + void tearDown( ) override; + + void DAVTypesCheckInit( DAVOptions const & aDavType ); + void DAVTypesTest(); + + void DAVOptsCacheTests(); + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE( webdav_opts_test ); + CPPUNIT_TEST( DAVTypesTest ); + CPPUNIT_TEST( DAVOptsCacheTests ); + CPPUNIT_TEST_SUITE_END(); + }; // class webdav_local_test + + // initialise your test code values here. + void webdav_opts_test::setUp() + { + } + + void webdav_opts_test::tearDown() + { + } + + void webdav_opts_test::DAVTypesCheckInit( DAVOptions const & aDavType ) + { + // check if the class is at reset state + // using accessors + CPPUNIT_ASSERT_EQUAL( false, aDavType.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavType.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavType.isClass3() ); + CPPUNIT_ASSERT_EQUAL( false, aDavType.isLocked() ); + CPPUNIT_ASSERT_EQUAL( true, aDavType.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavType.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( false, aDavType.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavType.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavType.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavType.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavType.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavType.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavType.getHttpResponseStatusText().isEmpty() ); + } + + void webdav_opts_test::DAVTypesTest() + { + //our DAVOptions + DAVOptions aDavOpt; + DAVTypesCheckInit( aDavOpt ); + + aDavOpt.setClass1(); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + aDavOpt.setClass1( false ); + aDavOpt.setClass2(); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + aDavOpt.setClass2( false ); + aDavOpt.setClass3(); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + aDavOpt.setClass3( false ); + + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + DAVTypesCheckInit( aDavOpt ); + //example of allowed method for a Web resource + OUString aAllowedMethods = "POST,OPTIONS,GET,HEAD,TRACE"; + aDavOpt.setAllowedMethods( aAllowedMethods ); + // now check... + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( aAllowedMethods, aDavOpt.getAllowedMethods() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + //example of allowed method for a WebDAV resource supporting LOCK + aAllowedMethods = "OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,PUT,LOCK,UNLOCK"; + aDavOpt.setAllowedMethods( aAllowedMethods ); + // now check... + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( aAllowedMethods, aDavOpt.getAllowedMethods() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + aAllowedMethods.clear(); + aDavOpt.setAllowedMethods( aAllowedMethods ); + aDavOpt.setStaleTime( 12345678 ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 12345678 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + aDavOpt.setStaleTime( 0 ); + + aDavOpt.setRequestedTimeLife( 300 ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 300 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + aDavOpt.setRequestedTimeLife( 0 ); + + OUString aHTTPResponseStatusText = "522 Origin Connection Time-out"; + aDavOpt.setHttpResponseStatusCode( 522 ); + aDavOpt.setHttpResponseStatusText( aHTTPResponseStatusText ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 522 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( aHTTPResponseStatusText, aDavOpt.getHttpResponseStatusText() ); + + aDavOpt.setHttpResponseStatusCode( 0 ); + aHTTPResponseStatusText.clear(); + aDavOpt.setHttpResponseStatusText( aHTTPResponseStatusText ); + + OUString aURL = "http://my.server.org/a%20fake%20url/to%20test"; + aDavOpt.setURL( aURL ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( aURL, aDavOpt.getURL() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getRedirectedURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + aURL.clear(); + aDavOpt.setURL( aURL ); + aURL = "http://my.server.org/a%20fake%20url/to%20test/another-url"; + aDavOpt.setRedirectedURL( aURL ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass1() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass2() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isClass3() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.isHeadAllowed() ); + CPPUNIT_ASSERT_EQUAL( false, aDavOpt.isLockAllowed() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getAllowedMethods().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getStaleTime() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt32( 0 ), aDavOpt.getRequestedTimeLife() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getURL().isEmpty() ); + CPPUNIT_ASSERT_EQUAL( aURL, aDavOpt.getRedirectedURL() ); + CPPUNIT_ASSERT_EQUAL( sal_uInt16( 0 ), aDavOpt.getHttpResponseStatusCode() ); + CPPUNIT_ASSERT_EQUAL( true, aDavOpt.getHttpResponseStatusText().isEmpty() ); + + //check the init() function + aAllowedMethods = "OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,PUT,LOCK,UNLOCK"; + aURL = "http://my.server.org/a%20fake%20url/to%20test/another-url"; + aHTTPResponseStatusText = "404 Not Found"; + aDavOpt.setClass1(); + aDavOpt.setClass2(); + aDavOpt.setClass3(); + aDavOpt.setHeadAllowed( false ); + aDavOpt.setLocked(); + aDavOpt.setAllowedMethods( aAllowedMethods ); + aDavOpt.setStaleTime( 1234567 ); + aDavOpt.setRequestedTimeLife( 300 ); + aDavOpt.setURL( aURL ); + aDavOpt.setRedirectedURL( aURL ); + aDavOpt.setHttpResponseStatusCode( 404 ); + aDavOpt.setHttpResponseStatusText( aHTTPResponseStatusText ); + + aDavOpt.init(); + DAVTypesCheckInit( aDavOpt ); + // equality check + DAVOptions aDavOptTarget; + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setClass1(); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aDavOpt.setClass1( false ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setClass2(); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aDavOpt.setClass2( false ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setClass3(); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aDavOpt.setClass3( false ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setHeadAllowed( false ); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aDavOpt.setHeadAllowed(); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setLocked(); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aDavOpt.setLocked( false ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setStaleTime( 1234567 ); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aDavOpt.setStaleTime( 0 ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setRequestedTimeLife( 1234567 ); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aDavOpt.setRequestedTimeLife( 0 ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setHttpResponseStatusCode( 404 ); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aDavOpt.setHttpResponseStatusCode( 0 ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setAllowedMethods( aAllowedMethods ); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aAllowedMethods.clear(); + aDavOpt.setAllowedMethods( aAllowedMethods ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setURL( aURL ); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aURL.clear(); + aDavOpt.setURL( aURL ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + aDavOpt.setHttpResponseStatusText( aHTTPResponseStatusText ); + CPPUNIT_ASSERT_EQUAL( false , aDavOpt == aDavOptTarget ); + aHTTPResponseStatusText.clear(); + aDavOpt.setHttpResponseStatusText( aHTTPResponseStatusText ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptTarget ); + + } + + void webdav_opts_test::DAVOptsCacheTests() + { + // define a local cache to test + DAVOptionsCache aDAVOptsCache; + // the value to cache + DAVOptions aDavOpt; + // the returned value to test + DAVOptions aDavOptCached; + // init the values + OUString aAllowedMethods = "OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,PUT,LOCK,UNLOCK"; + OUString aURL = "http://my.server.org/a%20fake%20url/to%20test/another-url"; + OUString aRedirectedURL = "http://my.server.org/a%20fake%20url/to%20test/another-url/redirected"; + aDavOpt.setURL( aURL ); + aDavOpt.setRedirectedURL( aRedirectedURL ); + aDavOpt.setClass1(); + aDavOpt.setClass2(); + aDavOpt.setClass3(); + aDavOpt.setHeadAllowed( false ); + aDavOpt.setAllowedMethods( aAllowedMethods ); + // add to cache + aDAVOptsCache.addDAVOptions( aDavOpt, 30000 ); + CPPUNIT_ASSERT_EQUAL( true ,aDAVOptsCache.getDAVOptions( aURL, aDavOptCached ) ); + CPPUNIT_ASSERT_EQUAL( true , aDavOpt == aDavOptCached ); + } + + CPPUNIT_TEST_SUITE_REGISTRATION( webdav_opts_test ); +} // namespace rtl_random + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/ucb/qa/cppunit/webdav/webdav_propfindcache.cxx b/ucb/qa/cppunit/webdav/webdav_propfindcache.cxx new file mode 100644 index 000000000..29ccf8a46 --- /dev/null +++ b/ucb/qa/cppunit/webdav/webdav_propfindcache.cxx @@ -0,0 +1,135 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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 +#include +#include + +using namespace webdav_ucp; + +namespace +{ + + class webdav_propcache_test: public test::BootstrapFixture + { + + public: + webdav_propcache_test() : BootstrapFixture( true, true ) {} + + // initialise your test code values here. + void setUp( ) override; + + void tearDown( ) override; + + void PropfindCacheElemTests(); + void PropfindCacheTests(); + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE( webdav_propcache_test ); + CPPUNIT_TEST( PropfindCacheElemTests ); + CPPUNIT_TEST( PropfindCacheTests ); + CPPUNIT_TEST_SUITE_END(); + }; // class webdav_local_test + + // initialise your test code values here. + void webdav_propcache_test::setUp() + { + } + + void webdav_propcache_test::tearDown() + { + } + + void webdav_propcache_test::PropfindCacheElemTests( ) + { + OUString aTheURL( "http:://server/path/filename.odt" ); + PropertyNames aPropsNames( aTheURL ); + + CPPUNIT_ASSERT_EQUAL( aTheURL, aPropsNames.getURL() ); + CPPUNIT_ASSERT_EQUAL( static_cast< sal_uInt32 >(0), aPropsNames.getStaleTime() ); + + sal_uInt32 maxTime = static_cast< sal_uInt32 >(std::pow(2,32)-1); + + aPropsNames.setStaleTime( maxTime ); + CPPUNIT_ASSERT_EQUAL( maxTime, aPropsNames.getStaleTime() ); + + std::vector < OUString > properties { + "DAV:lockdiscovery", + "DAV:supportedlock", + "DAV:resourcetype", + "DAV:displayname", + "DAV:getlastmodified", + "DAV:getcontentlength", + "DAV:creationdate", + "DAV:getetag", + "DAV:authticket", + }; + + DAVResourceInfo aSingleInfo { properties }; + std::vector< DAVResourceInfo > aProps { aSingleInfo }; + std::vector< DAVResourceInfo > aRetProp; + + aPropsNames.setPropertiesNames( aProps ); + aRetProp = aPropsNames.getPropertiesNames(); + CPPUNIT_ASSERT_EQUAL( true, ( aProps == aRetProp ) ); + + aProps[0].properties.emplace_back("DAV:getlastmodified" ); + aRetProp = aPropsNames.getPropertiesNames(); + CPPUNIT_ASSERT_EQUAL( false, ( aProps == aRetProp ) ); + } + + void webdav_propcache_test::PropfindCacheTests( ) + { + PropertyNamesCache PropCache; + OUString aTheURL( "http:://server/path/filename.odt" ); + PropertyNames aPropsNames( aTheURL ); + + // check cache emptiness + CPPUNIT_ASSERT_EQUAL( false, PropCache.getCachedPropertyNames( aTheURL, aPropsNames ) ); + + std::vector < OUString > properties { + "DAV:lockdiscovery", + "DAV:supportedlock", + "DAV:resourcetype", + "DAV:displayname", + "DAV:getlastmodified", + "DAV:getcontentlength", + "DAV:creationdate", + "DAV:getetag", + "DAV:authticket", + }; + + DAVResourceInfo aSingleInfo { properties }; + std::vector< DAVResourceInfo > aProps { aSingleInfo }; + + // add the cache an element + aPropsNames.setPropertiesNames( aProps ); + PropCache.addCachePropertyNames( aPropsNames ); + + PropertyNames aRetPropsNames; + //test existence + CPPUNIT_ASSERT_EQUAL( true, PropCache.getCachedPropertyNames( aTheURL, aRetPropsNames ) ); + //check equality + std::vector< DAVResourceInfo > aRetProp = aRetPropsNames.getPropertiesNames(); + CPPUNIT_ASSERT_EQUAL( true, ( aProps == aRetProp ) ); + //remove from cache + PropCache.removeCachedPropertyNames( aTheURL ); + //check absence + CPPUNIT_ASSERT_EQUAL( false, PropCache.getCachedPropertyNames( aTheURL, aPropsNames ) ); + } + + CPPUNIT_TEST_SUITE_REGISTRATION( webdav_propcache_test ); +} // namespace rtl_random + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/ucb/qa/cppunit/webdav/webdav_resource_access.cxx b/ucb/qa/cppunit/webdav/webdav_resource_access.cxx new file mode 100644 index 000000000..d1a73be2d --- /dev/null +++ b/ucb/qa/cppunit/webdav/webdav_resource_access.cxx @@ -0,0 +1,103 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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 +#include +#include +#include + +using namespace webdav_ucp; + +namespace +{ + + class webdav_resource_access_test: public test::BootstrapFixture + { + + public: + webdav_resource_access_test() : BootstrapFixture( true, true ) {} + + // initialise your test code values here. + void setUp() override; + + void tearDown() override; + + void DAVCheckRetries(); + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE( webdav_resource_access_test ); + CPPUNIT_TEST( DAVCheckRetries ); + CPPUNIT_TEST_SUITE_END(); + }; // class webdav_local_test + + // initialise your test code values here. + void webdav_resource_access_test::setUp() + { + } + + void webdav_resource_access_test::tearDown() + { + } + + // test when http connection should retry + void webdav_resource_access_test::DAVCheckRetries() + { + // instantiate a resource access class + DAVResourceAccess ResourceAccess(nullptr, nullptr, "http://url"); + // first check: all http errors from 100 to 399 should return true, to force a retry + for (auto i = SC_CONTINUE; i < SC_BAD_REQUEST; i++) + { + const DAVException aTheException(DAVException::DAV_HTTP_ERROR, "http error code", i ); + CPPUNIT_ASSERT_EQUAL( true , ResourceAccess.handleException( aTheException, 1 ) ); + } + // http error code from 400 to 499 should NOT force a retry + for (auto i = SC_BAD_REQUEST; i < SC_INTERNAL_SERVER_ERROR; i++) + { + const DAVException aTheException(DAVException::DAV_HTTP_ERROR, "http error code", i ); + CPPUNIT_ASSERT_EQUAL( false , ResourceAccess.handleException( aTheException, 1 ) ); + } + + // http error code from 500 (SC_INTERNAL_SERVER_ERROR) up should force a retry + // except in special value + // 1999 as high limit is just a current (2016-09-25) choice. + // RFC poses no limit to the max value of response status code + for (auto i = SC_INTERNAL_SERVER_ERROR; i < 2000; i++) + { + const DAVException aTheException(DAVException::DAV_HTTP_ERROR, "http error code", i ); + switch ( i ) + { + // the HTTP response status codes that can be retried + case SC_BAD_GATEWAY: + case SC_GATEWAY_TIMEOUT: + case SC_SERVICE_UNAVAILABLE: + case SC_INSUFFICIENT_STORAGE: + CPPUNIT_ASSERT_EQUAL( true , ResourceAccess.handleException( aTheException, 1 ) ); + break; + // default is NOT retry + default: + CPPUNIT_ASSERT_EQUAL( false , ResourceAccess.handleException( aTheException, 1 ) ); + } + } + + // check the retry request + { + const DAVException aTheException(DAVException::DAV_HTTP_RETRY, "the-host-name", 8080 ); + CPPUNIT_ASSERT_EQUAL( true , ResourceAccess.handleException( aTheException, 1 ) ); + } + } + + CPPUNIT_TEST_SUITE_REGISTRATION( webdav_resource_access_test ); +} // namespace rtl_random + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3