pax_global_header00006660000000000000000000000064146521530700014515gustar00rootroot0000000000000052 comment=6d3ee1a2830fe8649cccafeed3a143888190e6b9 srm-ifce-v1.24.7/000077500000000000000000000000001465215307000135035ustar00rootroot00000000000000srm-ifce-v1.24.7/.gitignore000066400000000000000000000000641465215307000154730ustar00rootroot00000000000000.cproject .project *.tar.gz *.rpm *.gz *.dsc .idea srm-ifce-v1.24.7/.gitlab-ci.yml000066400000000000000000000042751465215307000161470ustar00rootroot00000000000000stages: - build - publish #-------------------------- # Build templates #-------------------------- .build-template: &build-template_definition stage: build script: - ci/fedora-packages.sh - ci/common-rpm-build.sh - mkdir ${CI_JOB_NAME} - cp -rv build/RPMS build/SRPMS ${CI_JOB_NAME} - tree ${CI_JOB_NAME} variables: BRANCH: ${CI_COMMIT_REF_NAME} artifacts: paths: - "$CI_JOB_NAME" #-------------------------- # Build jobs #-------------------------- alma8: image: gitlab-registry.cern.ch/linuxsupport/alma8-base <<: *build-template_definition alma9: image: gitlab-registry.cern.ch/linuxsupport/alma9-base <<: *build-template_definition fedora-39: image: fedora:39 <<: *build-template_definition fedora-40: image: fedora:40 <<: *build-template_definition fedora-rawhide: image: fedora:rawhide <<: *build-template_definition allow_failure: true when: manual #-------------------------- # Publish templates #-------------------------- .publish-template: &publish-template_definition stage: publish image: gitlab-registry.cern.ch/eos/gitlab-eos/alma9:latest dependencies: - alma8 - alma9 - fedora-39 - fedora-40 - fedora-rawhide script: - automount - cat "${repo_passwd}" | kinit "${repo_user}" - | for platform in alma8 alma9 fedora-39 fedora-40 fedora-rawhide; do if [[ "${platform}" == "fedora-rawhide" ]] && [[ ! -d ${platform} ]] ; then echo "Skipping ${platform} packages..." ; continue ; fi packaging/gfal2-repo-manager.py --action add --base /eos/project-d/dmc/www/repos/ --ref ${CI_COMMIT_REF_NAME} --packages ${platform}/RPMS/*/*.rpm ${platform}/SRPMS/* done - sleep 30 tags: - docker-privileged-xl retry: 2 #-------------------------- # Publish jobs #-------------------------- rpms: <<: *publish-template_definition rules: - if: '$CI_PROJECT_NAMESPACE != "dmc"' when: never - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' when: never - if: '$CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_TAG != null' - if: '$CI_COMMIT_REF_NAME != "develop" && $CI_COMMIT_TAG == null' when: manual srm-ifce-v1.24.7/.gitmodules000066400000000000000000000000001465215307000156460ustar00rootroot00000000000000srm-ifce-v1.24.7/CMakeLists.txt000066400000000000000000000032171465215307000162460ustar00rootroot00000000000000## cmake build script for srm-ifce project (srm-ifce) cmake_minimum_required (VERSION 2.6) message("cmake source dir : ${CMAKE_SOURCE_DIR}") # build type set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "type of build") set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/") #enable testing INCLUDE(CTest) # load module include(DefineInstallationPaths REQUIRED) include(MacroCopyFile REQUIRED) include(ReleaseDebugAutoFlags REQUIRED) include(CMakeGeneratePkgConfig REQUIRED) find_package(gSOAP REQUIRED) find_package(CGSI_GSOAP REQUIRED) find_package(GLIB2 REQUIRED) # Link against Globus # Need to be redundant as cgsi-gsoap is a static library in MacOSX find_package(Globus_COMMON) find_package(Globus_GSI_CERT_UTILS REQUIRED) find_package(Globus_GSI_CREDENTIAL REQUIRED) find_package(Globus_GSS_ASSIST REQUIRED) find_package(Globus_GSSAPI_GSI REQUIRED) find_package(Globus_OPENSSL REQUIRED) find_package(OpenSSL REQUIRED) set (GLOBUS_LIBRARIES ${GLOBUS_COMMON_LIBRARIES} ${GLOBUS_GSI_CERT_UTILS_LIBRARIES} ${GLOBUS_GSI_CREDENTIAL_LIBRARIES} ${GLOBUS_GSS_ASSIST_LIBRARIES} ${GLOBUS_GSSAPI_GSI_LIBRARIES} ${GLOBUS_OPENSSL_LIBRARIES} ${OPENSSL_LIBRARIES} ) #define opts set(UNIT_TESTS FALSE CACHE STRING "enable or disable unit test compilation") #define PROJECT vars set(PROJECT_NAME "srm-ifce") set(OUTPUT_NAME "gfal_srm_ifce") set(VERSION_MAJOR 1) set(VERSION_MINOR 24) set(VERSION_PATCH 7) set(VERSION_STRING ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) #install doc license install(FILES "LICENSE" "RELEASE-NOTES" "VERSION" "README" "readme.html" DESTINATION ${DOC_INSTALL_DIR}) add_subdirectory (src) srm-ifce-v1.24.7/DESCRIPTION000066400000000000000000000002401465215307000152050ustar00rootroot00000000000000The Grid File Access Library offers a POSIX interface to Replica Catalogs, Storage Resource Managers and File Access services using protocols like rfio, dcap...srm-ifce-v1.24.7/LICENSE000066400000000000000000000012331465215307000145070ustar00rootroot00000000000000Copyright (c) Members of the EGEE Collaboration. 2004. See http://www.eu-egee.org/partners/ for details on the copyright holders. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. srm-ifce-v1.24.7/README000066400000000000000000000003721465215307000143650ustar00rootroot00000000000000srm-ifce is a client side implementation of the SRMv1 and SRMv2 specification for GFAL and FTS. SRM means Storage Resource Manager Interface, it is a specification of a SOAP interface providing a generic way to manage distributed storage systems. srm-ifce-v1.24.7/RELEASE-NOTES000066400000000000000000000715701465215307000154060ustar00rootroot00000000000000* Tue Jul 30 2024 Mihai Patrascoiu - 1.24.7 ** Task - [DMC-1379] - Move DMC projects to Alma8 and Alma9 - [DMC-1387] - Data Management Clients for Fedora 38 - [DMC-1413] - Data Management Clients for Fedora 39 and Fedora 40 - [DMC-1414] - Stop building Data Management Clients for CC7 * Tue Feb 07 2023 Joao Lopes - 1.24.6 ** Bug - [DMC-1240] - SRM interface TPermissionMode enum values change with newer gSOAP compilers - [DMC-1363] - gfal-copy -p for SRM broken on RHEL8 ** Task - [DMC-1327] - DMC packages for Centos Stream 9 - [DMC-1336] - Data Management Clients for Fedora 36 - [DMC-1359] - Data Management Clients for Fedora 37 * Mon Feb 15 2021 Mihai Patrascoiu - 1.24.5 - [DMC-1108] - Segmentation Fault in srmv2_mkdir - [DMC-1239] - SRM Bringonline not returning token for ONLINE file * Thu Jul 20 2018 Andrea Manzi - 1.24.4 - [DMC-1004] - SRM Plugin: Map "None" locality - [DMC-1062] - gfal2 unduly returns "no such file or directory" * Thu Nov 09 2017 Alejandro Alvarez Ayllon - 1.24.3 ** Bug - [DMC-995] - MacOSX 10.2 introduces clock_gettime - [DMC-996] - Both cgsi-gsoap and srm-ifce build hang on MacOSX ** Improvement - [DMC-972] - Workaround for Castor response for release with an invalid token * Fri Feb 17 2017 Alejandro Alvarez Ayllon - 1.24.2 - [DMC-917] - Uninitialized struct srm_getbestspacetokens_input for get * Mon Aug 01 2016 Alejandro Alvarez Ayllon - 1.24.1 - [DMC-844] - Remove reverse DNS lookup from srm-ifce/cgsi-gsoap * Fri Nov 06 2015 Alejandro Alvarez Ayllon - 1.23.3 - [DMC-743] Some entries may not have owner and group in the response * Mon Oct 12 2015 Alejandro Alvarez Ayllon - 1.23.2 - [DMC-698] Port DMC clients to MacOSX - [DMC-743] Generate uid and gid from string representations * Fri Apr 09 2015 Alejandro Alvarez Ayllon - 1.23.1 ** Improvement - [DMC-652] - Add an API to allow adding custom headers to the srm requests * Fri Mar 27 2015 Alejandro Alvarez Ayllon - 1.22.3 - [DMC-655] - Need to initialize desiredRequestTime when called via gfal1 - [DMC-656] - Default desired request lifetime reduced to 300 * Mon Mar 02 2015 Alejandro Alvarez Ayllon - 1.22.2 - [DMC-637] - srm-ifce fails to map properly the error code when the server replies synchronously - [DMC-616] - Facilitate build integration with PH-SFT tools * Mon Jan 12 2015 Alejandro Alvarez Ayllon - 1.22.1 - [DMC-593] - ETIME and EBADR portability issue - [DMC-606] - srm-ifce: On status of bring online, arrayOfSourceSURLs was not being set - [DMC-561] - Map SRM_TOO_MANY_RESULTS to EFBIG when listing directories * Thu Nov 06 2014 Alejandro Alvarez Ayllon - 1.21.4 - [DMC-484] - srm_xping and xrm_ping bad return codes on error - [DMC-489] - srm_xping: otherInfo may be null - [DMC-510] - srm-ifce is not mapping correctly status codes (Was Revert DMC-433) - [DMC-512] - BestMan SRM ENOENT when unlinking not properly handled - [DMC-515] - bring online timeout is not set correctly in gfal_srmv2_bring_online_internal - [DMC-521] - SRM_RELEASED as a response to Bring Online should be interpreted as success - [DMC-449] - Add srm_xping, returning more information that srm_ping - [DMC-528] - Yet another ENOENT possible string: [SRM_FAILURE] File does not exist - [DMC-425] - srm-ifce KeepAlive is not honored * Tue Jul 15 2014 Alejandro Alvarez Ayllon - 1.20.1-1 - [LCGUTIL-382] - excessive cpu usage from srm-ifce function - [LCGUTIL-421] - Initialize time fields when stating/listing - [LCGUTIL-389] - Add support to query all space tokens - [LCGUTIL-55] - GFAL 2.0 : set a clean API to set/get at runtime the different possible credential * Mon Apr 07 2014 Alejandro Alvarez - 1.19.0-1: - [LCGUTIL-320] - SRM is overloaded with polling requests on prepare to get - [LCGUTIL-367] - srm-ifce does not respect desired pin lifetime * Fri Sep 20 2013 Adrien Devresse - 1.18.0-1 : - support for mtime and atime st field * Mon Aug 19 2013 Alejandro Alvarez - 1.17.0 : - [LCGUTIL-198] - SRM-ifce : IPv6 flag enabled - [LCGUTIL-203] - GFAL 2.0 : dCache production servers does not return the correct SRM error in case of file already exist. - [LCGUTIL-204] - SRM-ifce : potential security issue allowing arbitrary RAM read - [LCGUTIL-205] - SRM-ifce : globus openssl used indirectly by CGSI_GSOAP override errno values in some case by gsoap_free - [LCGUTIL-206] - GFAL2, SRM-ifce, LCGUTIL, FTS 3.0 : Checksum request are invalid with Storm which answer with MD5 checksum instead of ADLER32 * Tue Jul 02 2013 Adrien Devresse - 1.16.0-0 - [LCGUTIL-90] - SRM-ifce : correct portability issue reported by Mattias - [LCGUTIL-178] - source-contains-unsafe-symlink - [LCGUTIL-183] - SRM-ifce : big cleaning operation done by Michail from coverity scan - [LCGUTIL-184] - SRM-ifce : add srm-mv support for "rename" operation - [LCGUTIL-185] - SRM-ifce : memory leaks correction - [LCGUTIL-186] - Srm-ifce : new session re-use logic in srm-ifce * Tue Jan 08 2013 Adrien Devresse - 1.14.0-1 - correct two timeout bug LCGUTIL-78 and LCGUTIL-82 * Thu Nov 29 2012 Adrien Devresse - 1.14.0-0 - correct misleading namespace in PrepareToGetRequestStatus - correct a timeout issue related to exponential backoff system in put/get - improve reliability of the exponential backoff wait system - big big code cleaning - re-factory of the context system with backward compatibility - fix the srm timeout issue - fix the srm put done issue for long transfer Fri Jul 20 2012 Adrien Devresse - 1.13.0-0 - Synchronise with EMI 2 Update 13 - introduction of operation timeout - buffer overflow and memory corruption corrections - minor warning corrections - ABI break, extend the context structure for timeout-per-context, impact limitated to gfal and gfal 2.0 2012-04-17 17:39 molnarzs * RELEASE-NOTES, VERSION, packaging/rpm/specs/srm-ifce.spec: [ticket:]: Release notes updated for srm-ifce_R_1_1_1_1 2012-03-02 14:22 adevress * src/srmv2_data_transfer_functions.c: -correct asychronous put invalid token, GGUS ticket related to EOS 2012-02-14 12:59 adevress * packaging/rpm/specs/srm-ifce.spec: - increase spec file packaging release number [ticket:251] 2012-02-13 08:30 adevress * src/srmv2_space_management_functions.c: - correct again ^ 34 memory corruption from gsoap [ticket:274] 2012-02-12 21:42 adevress * CMakeLists.txt, src/CMakeLists.txt, src/srmv2_discovery_functions.c, src/srmv2_permission_functions.c: -correct memory corrpution from gsoapfor discovery and directories function [ticket:274] 2012-02-12 21:28 adevress * src/srmv2_directory_functions.c: -correct memory corrpution from gsoap [ticket:274] 2012-02-12 09:14 adevress * src/srmv2_data_transfer_functions.c: -add more fix for soap memory corruption in the srm-ifce [ticket:271] 2012-02-09 14:54 adevress * packaging/rpm/specs/srm-ifce.spec: -correct issue for fc18 [ticket:251] 2012-02-09 09:03 adevress * packaging/rpm/specs/srm-ifce.spec: - correct pakcaging problem after gsoap repackaging [ticket:251] 2012-02-02 13:01 adevress * packaging/rpm/specs/srm-ifce.spec: - remove macro on specfiles, bug on i686 [ticket:251] 2012-01-30 16:12 adevress * packaging/rpm/specs/srm-ifce.spec: - change versiong system 2012-01-30 16:08 adevress * packaging/rpm/specs/srm-ifce.spec, src/CMakeLists.txt, src/srm_util.c, src/srm_util.h, src/srmv2_data_transfer_functions.c, src/srmv2_directory_functions.c, src/srmv2_permission_functions.c: -fix the gsoap stack smash problem increase the version of srm-ifce for epel - change the versioning system 2012-01-16 14:39 adevress * packaging/bin/packager_rpm.sh, packaging/rpm/specs/srm-ifce.spec: -add source url tar - remvoe useless comments 2012-01-16 14:38 adevress * packaging/rpm/specs/srm-ifce.spec: -add the spec file modification for EPEL 2012-01-15 20:59 adevress * packaging/rpm/specs/srm-ifce.spec: -correct maro problem in rpmlint 2012-01-15 20:36 adevress * packaging/rpm/specs/srm-ifce.spec: -add new EPEL version 2012-01-13 12:33 adevress * cmake/modules/CMakeGeneratePkgConfig.cmake, cmake/modules/FindDCAP.cmake: -add cmake files 2012-01-13 10:55 adevress * cmake/modules/FindCGSI_GSOAP.cmake: -add emit version of cgsi gsoap for head compilation 2012-01-13 10:23 adevress * CMakeLists.txt, cmake/modules/CMakeGeneratePkgConfig.cmake, cmake/modules/FindCGSI_GSOAP.cmake, cmake/modules/FindgSOAP.cmake: -add missing cgsi FIND package 2012-01-13 09:43 adevress * cmake/modules/CMakeGeneratePkgConfig.cmake, cmake/modules/CMakeMacroParseArguments.cmake, cmake/modules/CMakeStringHelpers.cmake, cmake/modules/FindDPM.cmake, cmake/modules/FindLFC.cmake: -add missing cmake files 2012-01-13 09:12 adevress * CMakeLists.txt, cmake/modules/DefineInstallationPaths.cmake, packaging/rpm/specs/srm-ifce.spec, src/CMakeLists.txt: -add pkg-config auto-generation tools 2012-01-11 09:54 adevress * packaging/rpm/specs/srm-ifce.spec: -fix the include problem with gcc - create a branch for packaging 2012-01-11 09:12 adevress * src/srm_util.c: -patch srm_util include to avoid problem of deferenced pointer with gcc 4.6 ( rawhide, fedora 15/16 ) 2012-01-09 16:44 adevress * RELEASE-NOTES, VERSION, src/srm_util.c, test/execute_tests.sh, test/unit/execute_tests.sh: -merge the TLocality change 2012-01-05 10:10 adevress * packaging/rpm/specs/srm-ifce.spec: -remove the useless %doc macro ( docdir usage ) 2012-01-05 09:35 adevress * CMakeLists.txt, cmake/modules/DefineInstallationPaths.cmake, packaging/rpm/specs/srm-ifce.spec: -modify spec files and doc install dir for EPEL compliance 2011-12-16 16:02 adevress * packaging/rpm/specs/srm-ifce.spec: -replace place of documentation 2011-12-16 13:24 adevress * CMakeLists.txt, packaging/rpm/specs/srm-ifce.spec: - Improve spec file quality with the comments of my sponsor - change doc install dir - use cmake macro - remove isa macro for build req - correct recursive dependencies 2011-12-15 10:02 adevress * CMakeLists.txt, README, packaging/rpm/specs/srm-ifce.spec: -add README file for documentation purpose in the EPEL devel package 2011-12-15 10:00 adevress * src/gfal_srm_ifce.h, src/gfal_srm_ifce_internal.h, src/gfal_srm_ifce_systemtest.c, src/gfal_srm_ifce_types.h, src/gfal_srm_ifce_unittest.c, src/gfal_srm_ifce_unittest.h, src/gfal_srm_ifce_unittest_common.c, src/gfal_srm_ifce_unittest_srmls.c, src/srm_dependencies.c, src/srm_soap.h, src/srm_util.c, src/srm_util.h, src/srmv2_data_transfer_functions.c, src/srmv2_directory_functions.c: - remove execution right to source file, brings error to debuginfo generation 2011-12-15 09:55 adevress * CMakeLists.txt: -patch srm-ifce for debuginfo generation 2011-12-12 15:14 adevress * packaging/rpm/specs/srm-ifce.spec: -add srm ifce fix for the -libs dependencies -change bad summary 2011-12-02 12:21 adevress * cmake/modules/FindgSOAP.cmake: -correct gsoap macros 2011-12-02 12:19 adevress * packaging/rpm/specs/srm-ifce.spec: -hotfix the version number 2011-12-02 12:16 adevress * CMakeLists.txt: - correct specfiles in order to match the new files name 2011-12-02 10:53 adevress * CMakeLists.txt, cmake/modules/FindgSOAP.cmake, src/CMakeLists.txt: - add macro for gsoap backward compatibility 2011-12-01 16:51 adevress * CMakeLists.txt, cmake/modules/ReleaseDebugAutoFlags.cmake: -add release mode to the build 2011-12-01 15:25 adevress * packaging/rpm/specs/srm-ifce.spec: -correct spec file version number 2011-12-01 15:14 adevress * CMakeLists.txt, cmake, cmake/modules, cmake/modules/DefineInstallationPaths.cmake, cmake/modules/MacroCopyFile.cmake, m4-EPEL/ares.m4, m4-EPEL/boost.m4, m4-EPEL/ccheck.m4, m4-EPEL/cgsi-gsoap.m4, m4-EPEL/classads.m4, m4-EPEL/condorg.m4, m4-EPEL/cppunit.m4, m4-EPEL/db.m4, m4-EPEL/docbook_html.m4, m4-EPEL/docbook_man.m4, m4-EPEL/expat.m4, m4-EPEL/fcgi.m4, m4-EPEL/find_activemq.m4, m4-EPEL/find_apr.m4, m4-EPEL/glib2.m4, m4-EPEL/glite-version.m4, m4-EPEL/glite.m4, m4-EPEL/glite_ce.m4, m4-EPEL/glite_data.m4, m4-EPEL/glite_dgas.m4, m4-EPEL/glite_dgas_common.m4, m4-EPEL/glite_gpbox.m4, m4-EPEL/glite_gsoap_headernames.m4, m4-EPEL/glite_jdl.m4, m4-EPEL/glite_jobid.m4, m4-EPEL/glite_lb_nf.m4, m4-EPEL/glite_rgma.m4, m4-EPEL/glite_security.m4, m4-EPEL/glite_service_discovery.m4, m4-EPEL/glite_wms.m4, m4-EPEL/glite_wms_broker.m4, m4-EPEL/glite_wms_brokerinfo.m4, m4-EPEL/glite_wms_classad_plugin.m4, m4-EPEL/glite_wms_common.m4, m4-EPEL/glite_wms_helper.m4, m4-EPEL/glite_wms_ism.m4, m4-EPEL/glite_wms_jss.m4, m4-EPEL/glite_wms_matchmaking.m4, m4-EPEL/glite_wms_ns.m4, m4-EPEL/glite_wms_optional.m4, m4-EPEL/glite_wms_purger.m4, m4-EPEL/glite_wms_tp_bypass.m4, m4-EPEL/glite_wms_ui_optional.m4, m4-EPEL/glite_wms_wmproxy.m4, m4-EPEL/glite_wmsutils.m4, m4-EPEL/glite_wsdl_file.m4, m4-EPEL/globus-fix.m4, m4-EPEL/globus.m4, m4-EPEL/gridlist.m4, m4-EPEL/gridsite.m4, m4-EPEL/gsoap-fix.m4, m4-EPEL/gsoap.m4, m4-EPEL/gsoap_base.m4, m4-EPEL/httpd.m4, m4-EPEL/java.m4, m4-EPEL/jclassad.m4, m4-EPEL/jglobus.m4, m4-EPEL/lcmaps.m4, m4-EPEL/ldap.m4, m4-EPEL/libtar.m4, m4-EPEL/log4cpp.m4, m4-EPEL/log4cxx.m4, m4-EPEL/log4j.m4, m4-EPEL/ltdl-fix.m4, m4-EPEL/myproxy.m4, m4-EPEL/mysql-devel.m4, m4-EPEL/mysql.m4, m4-EPEL/optimize.m4, m4-EPEL/oracle-instantclient.m4, m4-EPEL/python-c.m4, m4-EPEL/python.m4, m4-EPEL/replica.m4, m4-EPEL/swig.m4, m4-EPEL/symbol-version.m4, m4-EPEL/unixodbc.m4, m4-EPEL/xalan.m4, m4-EPEL/xerces.m4, m4-EPEL/xml2.m4, m4-EPEL/zlib.m4, packaging/rpm/specs/srm-ifce.spec, src/CMakeLists.txt: -modify spec files for CMake - add the cmake macros - add headers to install - validate this 2011-12-01 13:57 adevress * CMakeLists.txt, src/CMakeLists.txt, src/srm_util.c: -add build support for CMake 2011-12-01 13:57 adevress * packaging/rpm/specs/srm-ifce.spec: add the no static lib flag -try to re-enable parallels builds - modify to put them in alphabetical order 2011-12-01 13:57 adevress * packaging/rpm/specs/srm-ifce.spec, src/Makefile.am: -revert changes to original ricardo spec file 2011-12-01 13:57 adevress * configure.ac, packaging/rpm/specs/srm-ifce.spec, src/Makefile.am: -add a way to disable static build - improve spec fiels with ricardo comments 2011-11-28 22:32 adevress * packaging/bin/packager_rpm.sh, packaging/rpm/specs/srm-ifce.spec: Merge branch 'rpm_trunk_local2' into tmp 2011-11-28 17:48 adevress * packaging/rpm/specs/srm-ifce.spec: -valdiate rebase 2011-11-28 15:34 rocha * packaging/rpm/specs/srm-ifce.spec: Proper macro usage, better description, no need for main rpm. 2011-11-28 10:31 adevress * packaging/rpm/specs/srm-ifce.spec: -improve spec files for epel 2011-11-24 17:22 adevress * packaging/rpm/specs/srm-ifce.spec, src/Makefile.am: -full EPEL compatible build 2011-11-24 12:53 adevress * packaging/rpm/specs/srm-ifce.spec: -modify specs files in order to disable tests generation 2011-11-24 12:53 adevress * configure.ac, src/Makefile.am: -add autotools macro in order to disable tests generation 2011-11-24 12:53 adevress * src/autogen/config.h, src/autogen/config.h.in, src/autogen/stamp-h1: remove generated files 2011-11-24 12:53 adevress * Makefile.in, src/Makefile.in: remove generated by configure files 2011-11-24 10:43 adevress * Makefile.in, m4-EPEL, m4-EPEL/ares.m4, m4-EPEL/boost.m4, m4-EPEL/ccheck.m4, m4-EPEL/cgsi-gsoap.m4, m4-EPEL/classads.m4, m4-EPEL/condorg.m4, m4-EPEL/cppunit.m4, m4-EPEL/db.m4, m4-EPEL/docbook_html.m4, m4-EPEL/docbook_man.m4, m4-EPEL/expat.m4, m4-EPEL/fcgi.m4, m4-EPEL/find_activemq.m4, m4-EPEL/find_apr.m4, m4-EPEL/glib2.m4, m4-EPEL/glite-version.m4, m4-EPEL/glite.m4, m4-EPEL/glite_ce.m4, m4-EPEL/glite_data.m4, m4-EPEL/glite_dgas.m4, m4-EPEL/glite_dgas_common.m4, m4-EPEL/glite_gpbox.m4, m4-EPEL/glite_gsoap_headernames.m4, m4-EPEL/glite_jdl.m4, m4-EPEL/glite_jobid.m4, m4-EPEL/glite_lb_nf.m4, m4-EPEL/glite_rgma.m4, m4-EPEL/glite_security.m4, m4-EPEL/glite_service_discovery.m4, m4-EPEL/glite_wms.m4, m4-EPEL/glite_wms_broker.m4, m4-EPEL/glite_wms_brokerinfo.m4, m4-EPEL/glite_wms_classad_plugin.m4, m4-EPEL/glite_wms_common.m4, m4-EPEL/glite_wms_helper.m4, m4-EPEL/glite_wms_ism.m4, m4-EPEL/glite_wms_jss.m4, m4-EPEL/glite_wms_matchmaking.m4, m4-EPEL/glite_wms_ns.m4, m4-EPEL/glite_wms_optional.m4, m4-EPEL/glite_wms_purger.m4, m4-EPEL/glite_wms_tp_bypass.m4, m4-EPEL/glite_wms_ui_optional.m4, m4-EPEL/glite_wms_wmproxy.m4, m4-EPEL/glite_wmsutils.m4, m4-EPEL/glite_wsdl_file.m4, m4-EPEL/globus-fix.m4, m4-EPEL/globus.m4, m4-EPEL/gridlist.m4, m4-EPEL/gridsite.m4, m4-EPEL/gsoap-fix.m4, m4-EPEL/gsoap.m4, m4-EPEL/gsoap_base.m4, m4-EPEL/httpd.m4, m4-EPEL/java.m4, m4-EPEL/jclassad.m4, m4-EPEL/jglobus.m4, m4-EPEL/lcmaps.m4, m4-EPEL/ldap.m4, m4-EPEL/libtar.m4, m4-EPEL/log4cpp.m4, m4-EPEL/log4cxx.m4, m4-EPEL/log4j.m4, m4-EPEL/ltdl-fix.m4, m4-EPEL/myproxy.m4, m4-EPEL/mysql-devel.m4, m4-EPEL/mysql.m4, m4-EPEL/optimize.m4, m4-EPEL/oracle-instantclient.m4, m4-EPEL/python-c.m4, m4-EPEL/python.m4, m4-EPEL/replica.m4, m4-EPEL/swig.m4, m4-EPEL/symbol-version.m4, m4-EPEL/unixodbc.m4, m4-EPEL/xalan.m4, m4-EPEL/xerces.m4, m4-EPEL/xml2.m4, m4-EPEL/zlib.m4, packaging, packaging/bin, packaging/bin/packager_rpm.sh, packaging/rpm, packaging/rpm/specs, packaging/rpm/specs/srm-ifce.spec, src/Makefile.in, src/autogen, src/autogen/config.h, src/autogen/config.h.in, src/autogen/stamp-h1: Merge branch 'rpms_epel' into rpm_epel_trunk_local 2011-11-24 10:19 adevress * .: Branch for EPEL packaging 2011-11-15 05:53 msalicho * one more attempt to fix 32bits 2011-11-14 19:45 msalicho * first attempt to fix 32bit build 2011-11-14 19:45 msalicho * first attempt to fix 32bit build 2011-09-14 16:06 molnarzs * Release candidate glite-data-srm-ifce_R_1_1_0_1 2011-09-12 18:04 molnarzs * Ticket [ticket:134] integrated. 2011-07-28 12:00 molnarzs * The memory leak hunt will be continued in a branch. Checking in everything before branching. 2011-07-20 16:23 adevress * -reverse change for the last chance expo backoff 2011-07-19 11:00 molnarzs * SrmLs tests extended to cover FTS use cases 2011-07-08 09:50 adevress * bug correction on set_permission() returned errcode 2011-06-14 12:05 adevress * -modification of the free functions for the recursive use case 2011-06-09 13:16 adevress * -modification of docs/comments 2011-06-09 13:14 adevress * -add proper file for the memory management - correct a license problem 2011-06-09 13:05 adevress * -modification of the exponential backoff for the timeout 2011-06-09 11:52 adevress * -add memory management function and associated doc 2011-06-08 14:40 adevress * - fix a bad SRM_ERROR -> errno error translation 2011-06-02 05:48 msalicho * remove DDEBUG to prevent gsoap logfiles creation 2011-03-26 06:50 msalicho * change ccheck macro name 2011-03-26 06:35 msalicho * change ccheck macro name 2011-02-23 13:57 msalicho * change gsoap version for EMI 2011-02-04 18:03 molnarzs * Integration candidate glite-data-srm-ifce_R_1_0_0 2011-02-04 11:24 molnarzs * - srm2_mkdir does not attempt to create the root directory - Bugfix in handling permission denied error when creating directories 2011-01-31 10:18 msalicho * EMI gsoap changes 2011-01-20 15:06 molnarzs * Savannah bug fix https://savannah.cern.ch/bugs/?52502 ported to srm-ifce 2011-01-20 12:16 molnarzs * Segmentation fault in unit tests for uninitialized pointer fixed 2011-01-20 10:33 molnarzs * Hard-coded resources from srm-ifce system tests removed. 2011-01-17 15:49 molnarzs * Segfault of srm_ls appeared in the nightly tests fixed. 2011-01-14 15:51 molnarzs * Negative values of count and offset values in srm-ls request cause EINVAL error on client side. 2010-12-03 16:32 tmanev * Fixing gfal-release test fail. 2010-12-03 16:28 tmanev * Fixing failing gfal-release test due to not proper bring online execution(it was not waiting for the end of bring_online queued). 2010-12-03 14:57 tmanev * Reverted back to old behaviour to have positive result even if only one(not all) filestatus returned. 2010-12-02 16:13 tmanev * Fixed gfal-prestagestatus test fail. 2010-12-02 15:42 tmanev * Fixing some of the failing python gfal tests. 2010-12-02 13:08 tmanev * Fixing gfal-get and gfal-getstatus tests. 2010-12-01 14:40 tmanev * Fixing some of the failing gfal api python tests. 2010-11-30 16:04 tmanev * Fixing systemtests. 2010-11-30 15:04 tmanev * Fixing tests for ls,put,bring online according to bug 52893. 2010-11-30 13:30 tmanev * Fixing tests gfal-pin and gfal-unlink. 2010-11-30 12:44 tmanev * Fixing gfal-open test and unittests. 2010-11-30 10:34 tmanev * Added test for unexistent file permission check. Fixed failing gfal_access test. 2010-11-29 15:41 tmanev * Added srmPurgeFromSpace to space management functions. According to savannah bug #49578. 2010-11-26 16:25 tmanev * Improved error message handling. First string [SE] is now stored in one const variable - err_msg_begin. 2010-11-26 13:19 tmanev * Change srm_context_init function added input parameters for errbuf errbufsz and verbose. 2010-11-26 11:13 tmanev * Fixing savannah bug #75530. Added setup of errno on multiple places. 2010-11-25 16:28 tmanev * Script cleanup. 2010-11-25 15:58 tmanev * Removed lib from the script. 2010-11-25 15:50 tmanev * Added first parameter to be added in LD path. 2010-11-25 15:30 tmanev * Show libdir variable. 2010-11-25 13:32 tmanev * Removed change of LD_LIBRARY_PATH. 2010-11-25 11:06 tmanev * Added setup of LD folder before execution of the tests. 2010-11-24 13:27 tmanev * Clean up of commented srm_types. 2010-11-24 13:18 tmanev * Test execution script, fixed to work no matter from where it is executed. 2010-11-24 13:06 tmanev * Add unittest script folder. 2010-11-24 13:04 tmanev * Added EGEE copyright headers. 2010-11-24 10:29 tmanev * Revert back to verbose test results. 2010-11-24 10:28 tmanev * Fixed seg fault in unittests, code cleaned up, added NOFORK capabilities for easier debug. 2010-11-23 14:25 tmanev * Removed unused files from srm-ifce library. 2010-11-23 14:22 tmanev * Removed unused file generation. 2010-11-23 10:19 tmanev * Reverted to the previous gfal enum definitions.(in order not to change dm-util). 2010-11-22 14:33 tmanev * Added globus to configuration. 2010-11-19 16:21 tmanev * Added test folder. 2010-11-19 15:40 tmanev * Added globus dependency due to cgsi dependency. 2010-11-19 14:09 tmanev * Missing CCHECK_CFLAGS. 2010-11-19 12:59 tmanev * Clear warning white space following backslash in makefile.am 2010-11-19 12:38 tmanev * Added m4 macro to build-common-cpp. Adjust configuration and makefile. 2010-11-19 10:52 tmanev * Added ccheck to configuration and include. 2010-11-19 10:21 tmanev * Added gfal_srm_ifce_systemtest binary to the build. 2010-11-19 09:54 tmanev * Fixed build of binaries. 2010-11-19 09:45 tmanev * Fixed linking. Making baniries left. 2010-11-19 09:28 tmanev * Fix compilation. Linking left. 2010-11-19 08:53 molnarzs * Autotools introduced 2010-11-17 13:32 tmanev * Added last chance attempt to the backoff logic, will attempt 2 sec before the timeout. 2010-11-17 10:22 tmanev * Added estimated wait time for request and for file in data transfer functions. 2010-11-17 09:20 tmanev * Async calls wrong function calls. 2010-11-17 09:16 tmanev * Fix one typo. 2010-11-16 15:26 tmanev * Remove various printf in srm_test added verbose output of the test, for better parsing and integration of test results. 2010-11-12 13:42 tmanev * Imporved srm permissions test. 2010-11-12 09:05 tmanev * Fix rmdir unittest. 2010-11-11 12:44 tmanev * Added set/check/get permssions check in srm_test . 2010-11-10 16:47 tmanev * Removed some lcg utils calls fixed mkdir test. Now srm_test only depends on lcg-cp. 2010-11-10 13:43 tmanev * rm_dir returns 1 upon successful directory removal in order to be compatible with the old srm code. 2010-11-08 16:29 tmanev * Empty srm_compy function removed. 2010-11-08 15:52 tmanev * Fixing various bugs in srm_test. 2010-11-08 13:56 tmanev * Fix uninitialized output variables,by memset 0 for srm output structures. 2010-11-05 12:26 tmanev * Fixed Segmentation fault, on double call of bring online. Because of uninitialized request variables of srm abort request. 2010-11-03 11:53 tmanev * Add regression unittest for the mkdir last level directory creation problem. 2010-11-03 09:54 tmanev * Fixing bug of mkdir - last level folder was not created. (fix provided by Ronny Tschueter) 2010-07-28 08:45 tmanev * Fixed wrong commit, from is-interface files. 2010-07-28 08:40 tmanev * cornel configuration script for is-interface wrongly submitted. 2010-07-28 08:40 tmanev * cornel configuration script for is-interface wrongly submitted. 2010-07-27 09:55 cmicu * glib dependencies configuration. 2010-07-27 09:55 cmicu * changed permissions. 2010-07-20 12:25 tmanev * Set output token for synchroneous calls to NULL, in the begining of the calls. 2010-07-13 15:58 tmanev * Added version wrapper for check permission. 2010-07-13 11:58 tmanev * srm extend file lifetime fixed input/output parameters, according to the template. 2010-07-13 07:38 tmanev * Clear a warning, for incompatible pointer types. 2010-07-12 09:45 tmanev * Making the make file build with 32 bit. 2010-07-09 07:59 tmanev * 2010-07-08 15:09 tmanev * prepare was written prepeare in some of the functions. 2010-07-08 14:53 tmanev * Added version wrapper for prepare to put and prepare to get and status of put/get request synchronious calls. 2010-07-07 14:07 tmanev * Fixed verious segmentation faults in unittests due to uninitialized variables in the test and some. 2010-07-06 09:19 tmanev * Removed voms from makefile and configuration file. Changed to stage folder. 2010-07-05 11:25 tmanev * 2010-07-05 11:20 tmanev * missing coma in config file. 2010-07-05 10:03 tmanev * cchek location added. 2010-07-05 09:28 tmanev * Added ccheck folders in configuration script and makefile. 2010-07-02 15:13 tmanev * 2010-07-02 15:03 tmanev * Delete automake file. 2010-07-02 15:02 tmanev * Delete automake scripts. 2010-07-02 15:02 tmanev * Delete auto make files. 2010-07-02 14:27 tmanev * 2010-07-02 13:18 tmanev * 2010-07-02 12:27 tmanev * 2010-07-02 12:23 tmanev * Makefile changes, remove automake. 2010-07-02 07:50 tmanev * Wrong function prototype. 2010-06-29 15:13 tmanev * 2010-06-29 13:41 tmanev * 2010-06-25 15:09 tmanev * 2010-06-25 13:35 tmanev * 2010-06-24 15:05 tmanev * 2010-06-24 13:18 tmanev * Removed various warnings. 2010-06-24 11:36 tmanev * Clearing various warnings and errors. 2010-06-24 08:11 tmanev * Added srm_context_init function. Removed some dependencies. 2010-06-22 13:46 tmanev * 2010-06-17 13:38 tmanev * 2010-06-17 12:19 tmanev * 2010-06-10 14:29 tmanev * 2010-06-09 15:08 tmanev * 2010-06-07 15:55 tmanev * 2010-06-07 13:06 tmanev * 2010-06-04 15:33 tmanev * 2010-06-03 14:57 tmanev * 2010-06-02 15:32 tmanev * 2010-06-02 13:48 tmanev * 2010-06-01 15:45 tmanev * 2010-06-01 15:33 tmanev * 2010-06-01 15:17 tmanev * 2010-06-01 14:54 tmanev * 2010-06-01 13:14 tmanev * 2010-06-01 12:32 tmanev * 2010-06-01 12:11 tmanev * 2010-05-31 16:14 tmanev * 2010-05-31 13:46 tmanev * 2010-05-28 15:58 tmanev * 2010-05-28 08:51 tmanev * 2010-05-27 13:15 tmanev * 2010-05-27 10:02 tmanev * 2010-05-27 08:16 tmanev * 2010-05-26 16:06 tmanev * 2010-05-26 14:14 tmanev * 2010-05-26 11:57 tmanev * 2010-05-25 15:58 tmanev * 2010-05-25 13:23 tmanev * 2010-05-25 12:49 tmanev * 2010-05-25 12:48 tmanev * 2010-05-25 12:47 tmanev * 2010-05-25 11:39 tmanev * 2010-05-25 09:13 tmanev * 2010-05-21 17:10 tmanev * 2010-05-21 14:08 tmanev * 2010-05-20 15:42 tmanev * 2010-05-20 09:41 tmanev * 2010-05-19 14:02 tmanev * 2010-05-18 15:40 tmanev * 2010-05-18 12:31 tmanev * 2010-05-17 16:16 tmanev * 2010-05-07 12:03 tmanev * 2010-05-07 06:58 tmanev * 2010-05-06 14:21 tmanev * 2010-05-04 09:44 tmanev * 2010-05-04 08:55 tmanev * 2010-05-04 07:26 tmanev * 2010-05-03 13:53 tmanev * 2010-04-23 09:22 molnarzs * First import srm-ifce-v1.24.7/VERSION000066400000000000000000000000311465215307000145450ustar00rootroot00000000000000VERSION=1.24.3 RELEASE=1 srm-ifce-v1.24.7/ci/000077500000000000000000000000001465215307000140765ustar00rootroot00000000000000srm-ifce-v1.24.7/ci/common-rpm-build.sh000077500000000000000000000014641465215307000176230ustar00rootroot00000000000000#!/usr/bin/env bash set -e function print_info { printf "======================\n" printf "Distribution:\t%s\n" "$(rpm --eval "%{dist}" | cut -d. -f2)" printf "Branch:\t\t%s\n" "${BRANCH}" printf "Release:\t%s\n" "${RELEASE}" printf "======================\n" } TIMESTAMP=`date +%y%m%d%H%M` GITREF=`git rev-parse --short HEAD` RELEASE=r${TIMESTAMP}git${GITREF} if [[ -z ${BRANCH} ]]; then BRANCH=`git name-rev $GITREF --name-only` else printf "Using environment set variable BRANCH=%s\n" "${BRANCH}" fi if [[ $BRANCH =~ ^(tags/)?(v)[.0-9]+(-[0-9]+)?$ ]]; then RELEASE= fi print_info RPMBUILD=${PWD}/build SRPMS=${RPMBUILD}/SRPMS cd packaging/ make srpm RELEASE=${RELEASE} RPMBUILD=${RPMBUILD} SRPMS=${SRPMS} dnf builddep -y ${SRPMS}/* rpmbuild --rebuild --define="_topdir ${RPMBUILD}" ${SRPMS}/* srm-ifce-v1.24.7/ci/fedora-packages.sh000077500000000000000000000004711465215307000174530ustar00rootroot00000000000000#!/usr/bin/env bash set -e # Ensure "epel-release" package is installed if ! rpm -q --quiet epel-release ; then dnf install -y epel-release || true fi # Fedora rawhide (FC41) dnf install -y dnf5-plugins || true dnf install -y dnf-plugins-core git rpm-build tree which \ cmake make gcc gcc-c++ srm-ifce-v1.24.7/cmake/000077500000000000000000000000001465215307000145635ustar00rootroot00000000000000srm-ifce-v1.24.7/cmake/modules/000077500000000000000000000000001465215307000162335ustar00rootroot00000000000000srm-ifce-v1.24.7/cmake/modules/CMakeCXX11Support.cmake000066400000000000000000000022301465215307000223340ustar00rootroot00000000000000include(CheckCXXSourceCompiles REQUIRED) if(CMAKE_COMPILER_IS_GNUCXX) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7) SET(HAVE_CXX011_FULL_SUPPORT TRUE) SET(HAVE_CXX011_PARTIAL_SUPPORT TRUE) SET(CXX11_FLAG_ENABLE "-std=c++11") elseif(GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3) message(STATUS "C++11 partial support") SET(HAVE_CXX011_PARTIAL_SUPPORT TRUE) SET(CXX11_FLAG_ENABLE "-std=c++0x") else () message(STATUS "C++11 no support ") SET(CXX11_FLAG_ENABLE "") endif() else(CMAKE_COMPILER_IS_GNUCXX) message(STATUS "C++11 activated full") SET(HAVE_CXX011_FULL_SUPPORT TRUE) SET(HAVE_CXX011_PARTIAL_SUPPORT TRUE) SET(CXX11_FLAG_ENABLE "-std=c++0x") endif(CMAKE_COMPILER_IS_GNUCXX) ## Check TR1 CHECK_CXX_SOURCE_COMPILES(" #include int main() { return 0; }" HAVE_TR1_SUPPORT) if(HAVE_TR1_SUPPORT) message(STATUS "TR1 support detected") else(HAVE_TR1_SUPPORT) message(STATUS "no TR1 support") endif(HAVE_TR1_SUPPORT) srm-ifce-v1.24.7/cmake/modules/CMakeGeneratePkgConfig.cmake000066400000000000000000000076301465215307000234660ustar00rootroot00000000000000# @title cmake macro for pkgconfig files generation # @brief generate a .pc package config file with a given name # @author Adrien Devresse include(DefineInstallationPaths REQUIRED) include(CMakeMacroParseArguments REQUIRED) include(CMakeStringHelpers REQUIRED) SET(CMAKE_PKGCONFIG_TEMPLATE "prefix=@PREFIX@ exec_prefix=@PREFIX@ libdir=@LIBDIR_VAR includedir=@INCLUDE_VAR@ Name: @NAME_PROJECT@ Description: @DESCRIPTION_PROJECT@ Version: @VERSION_PROJECT@ URL: @URL_PROJECT@ Requires: @REQUIRES_PROJECT@ Conflicts: @CONFLICTS_PROJECT@ Libs: @LIBS_PROJECT@ Libs.private: @LIBS_PRIVATE_PROJECT@ Cflags: @CFLAGS_PROJECT@ ") SET(CMAKE_PKGCONFIG_TEMPLATE_BASE " prefix=@PREFIX@ exec_prefix= \\\${prefix} libdir= @LIBDIR_VAR@ includedir=@INCLUDE_VAR@ Name: @NAME_PROJECT@ Description: @DESCRIPTION_PROJECT@ Version: @VERSION_PROJECT@ Requires: @REQUIRES_PROJECT@ Libs: @LIBS_PROJECT@ Cflags: @CFLAGS_PROJECT@ " ) LIST(APPEND CMAKE_PKGCONFIG_TEMPLATE_BASE_PATTERN "@PREFIX@" "@LIBDIR_VAR@" "@INCLUDE_VAR@" "@NAME_PROJECT@" "@DESCRIPTION_PROJECT@" "@VERSION_PROJECT@" "@REQUIRES_PROJECT@" "@LIBS_PROJECT@" "@CFLAGS_PROJECT@") # main function to use # FORMAT : add_PkgConfigFile_for_Library("string_filename.pc" target_library # [DESCRIPTION] "description of the pkgconfig files" # [HEADER_DIRS] dir1, dir2 # [REQUIRES] req1 req 2 ) # list of dir to include in $prefix/include/, ex : $prefix/include/dir1 # the pc file is produced in the ${CMAKE_CURRENT_BINARY_DIR} directory function(add_PkgConfigFile_for_Library) PARSE_ARGUMENTS(PKGCONFIGFILE "HEADER_DIRS;DESCRIPTION;REQUIRES;CFLAGS" "" ${ARGN} ) LIST(GET PKGCONFIGFILE_DEFAULT_ARGS 0 pkgconfig_filename) LIST(GET PKGCONFIGFILE_DEFAULT_ARGS 1 lib_target) LIST(GET PKGCONFIGFILE_DESCRIPTION 0 description) get_target_property(library_name ${lib_target} OUTPUT_NAME) get_target_property(library_version ${lib_target} VERSION) set(pkgconfig_prefix "${CMAKE_INSTALL_PREFIX}") set(pkgconfig_libdir_var "\\\${prefix}/lib${LIB_SUFFIX}") set(pkgconfig_include_var "\\\${prefix}/include") set(pkgconfig_linkflags "-l${library_name} -L\\\${libdir}") set(pkgconfig_name "${pkgconfig_filename}") set(pkgconfig_version "${library_version}") set(pkgconfig_description "pkgconfig file for ${library_name}") set(pkgconfig_requires " ") set(pkgconfig_cflags "") IF(PKGCONFIGFILE_REQUIRES) FOREACH(req ${PKGCONFIGFILE_REQUIRES}) set(pkgconfig_requires "${pkgconfig_requires} ${req}") ENDFOREACH(req PKGCONFIGFILE_REQUIRES) ENDIF(PKGCONFIGFILE_REQUIRES) IF(PKGCONFIGFILE_CFLAGS) FOREACH(req ${PKGCONFIGFILE_CFLAGS}) set(pkgconfig_cflags "${pkgconfig_cflags} ${req}") ENDFOREACH(req PKGCONFIGFILE_CFLAGS) ENDIF(PKGCONFIGFILE_CFLAGS) IF(PKGCONFIGFILE_HEADER_DIRS) FOREACH(dir ${PKGCONFIGFILE_HEADER_DIRS}) set(pkgconfig_includedir "${pkgconfig_includedir} -I\\\${includedir}/${dir}") ENDFOREACH(dir PKGCONFIGFILE_HEADER_DIRS) ELSE(PKGCONFIGFILE_HEADER_DIRS) set(pkgconfig_includedir " -I\\\${includedir}") ENDIF(PKGCONFIGFILE_HEADER_DIRS) IF(description) set(pkgconfig_description "${description}") ENDIF(description) set(pkgconfig_cflags "${pkgconfig_cflags} ${pkgconfig_includedir} ") LIST(APPEND pkgconfig_list_var ${pkgconfig_prefix} ${pkgconfig_libdir_var} ${pkgconfig_include_var} ${pkgconfig_name} ${pkgconfig_description} ${pkgconfig_version} ${pkgconfig_requires} ${pkgconfig_linkflags} ${pkgconfig_cflags}) replace_all_occurence(pc_file_content ${CMAKE_PKGCONFIG_TEMPLATE_BASE} LIST_PATTERN ${CMAKE_PKGCONFIG_TEMPLATE_BASE_PATTERN} LIST_REPLACER ${pkgconfig_list_var}) SET(filename "${CMAKE_CURRENT_BINARY_DIR}/${pkgconfig_filename}") FILE(WRITE ${filename} "${pc_file_content}" ) message(STATUS "generate pkgconfig file for ${lib_target} under ${filename}") endfunction(add_PkgConfigFile_for_Library) srm-ifce-v1.24.7/cmake/modules/CMakeMacroParseArguments.cmake000066400000000000000000000020651465215307000240630ustar00rootroot00000000000000 MACRO(PARSE_ARGUMENTS prefix arg_names option_names) SET(DEFAULT_ARGS) FOREACH(arg_name ${arg_names}) SET(${prefix}_${arg_name}) ENDFOREACH(arg_name) FOREACH(option ${option_names}) SET(${prefix}_${option} FALSE) ENDFOREACH(option) SET(current_arg_name DEFAULT_ARGS) SET(current_arg_list) FOREACH(arg ${ARGN}) SET(larg_names ${arg_names}) LIST(FIND larg_names "${arg}" is_arg_name) IF (is_arg_name GREATER -1) SET(${prefix}_${current_arg_name} ${current_arg_list}) SET(current_arg_name ${arg}) SET(current_arg_list) ELSE (is_arg_name GREATER -1) SET(loption_names ${option_names}) LIST(FIND loption_names "${arg}" is_option) IF (is_option GREATER -1) SET(${prefix}_${arg} TRUE) ELSE (is_option GREATER -1) SET(current_arg_list ${current_arg_list} ${arg}) ENDIF (is_option GREATER -1) ENDIF (is_arg_name GREATER -1) ENDFOREACH(arg) SET(${prefix}_${current_arg_name} ${current_arg_list}) ENDMACRO(PARSE_ARGUMENTS) srm-ifce-v1.24.7/cmake/modules/CMakeStringHelpers.cmake000066400000000000000000000032441465215307000227320ustar00rootroot00000000000000##convenience function for string manipulation function(replace_occurence output input pattern replacer) string(REGEX REPLACE ${pattern} ${replacer} tmp_str ${input}) set(${output} ${tmp_str} PARENT_SCOPE) endfunction(replace_occurence output input pattern replacer) function(replace_all_occurence) PARSE_ARGUMENTS(REPLACE_ALL "LIST_PATTERN;LIST_REPLACER" "" ${ARGN} ) LIST(APPEND list_pattern ${REPLACE_ALL_LIST_PATTERN}) LIST(APPEND list_replacer ${REPLACE_ALL_LIST_REPLACER}) LIST(LENGTH list_pattern list_size ) LIST(LENGTH list_replacer list2_size ) math(EXPR list_size ${list_size}-1) LIST(GET REPLACE_ALL_DEFAULT_ARGS 0 output_var) LIST(GET REPLACE_ALL_DEFAULT_ARGS 1 intput_content ) SET(tmp_str ${intput_content}) SET(tmp_str2 "") foreach(i RANGE ${list_size}) list(GET list_pattern ${i} current_pattern ) list(GET list_replacer ${i} current_replacer ) replace_occurence(tmp_str2 ${tmp_str} ${current_pattern} ${current_replacer} ) SET(tmp_str ${tmp_str2}) endforeach(i RANGE ${list_size}) SET(${output_var} ${tmp_str} PARENT_SCOPE) endfunction(replace_all_occurence) function(STRING_APPEND var_name content) SET(${var_name} "${${var_name}}${content}" PARENT_SCOPE) endfunction(STRING_APPEND var_name content) function(parse_lib_path lib_link lib_directory lib_path) string(REGEX REPLACE "^.*/(lib)?(.*)\\.(so|dll)" "\\2" my_lib_link ${lib_path}) string(REGEX REPLACE "^(.*)/(lib)?(.*)\\.(so|dll)" "\\1" my_lib_dir ${lib_path}) SET(${lib_link} ${my_lib_link} PARENT_SCOPE) SET(${lib_directory} ${my_lib_dir} PARENT_SCOPE) endfunction(parse_lib_path lib_link lib_directory lib_path) srm-ifce-v1.24.7/cmake/modules/DefineInstallationPaths.cmake000066400000000000000000000105621465215307000240150ustar00rootroot00000000000000if (UNIX) IF (NOT APPLICATION_NAME) MESSAGE(STATUS "${PROJECT_NAME} is used as APPLICATION_NAME") SET(APPLICATION_NAME ${PROJECT_NAME}) ENDIF (NOT APPLICATION_NAME) # Suffix for Linux IF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") SET(LIB_SUFFIX "" CACHE STRING "Suffix of the lib") ELSE () IF (CMAKE_SIZEOF_VOID_P EQUAL 4) SET(LIB_SUFFIX "" CACHE STRING "Suffix of the lib") SET (PKG_ARCH "i386") ELSE (CMAKE_SIZEOF_VOID_P EQUAL 4) SET(LIB_SUFFIX "64" CACHE STRING "Suffix of the lib") SET (PKG_ARCH "x86_64") ENDIF (CMAKE_SIZEOF_VOID_P EQUAL 4) ENDIF () SET(EXEC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Base directory for executables and libraries" ) SET(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share" CACHE PATH "Base directory for files which go to share/" ) SET(DATA_INSTALL_PREFIX "${SHARE_INSTALL_PREFIX}/${APPLICATION_NAME}" CACHE PATH "The parent directory where applications can install their data") # The following are directories where stuff will be installed to SET(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" CACHE PATH "The ${APPLICATION_NAME} binary install dir (default prefix/bin)" ) SET(SBIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/sbin" CACHE PATH "The ${APPLICATION_NAME} sbin install dir (default prefix/sbin)" ) SET(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is prefix/lib)" ) SET(LIBEXEC_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/libexec" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is prefix/libexec)" ) SET(PKGCONFIG_FILES_DIR "${LIB_INSTALL_DIR}/pkgconfig/" CACHE PATH "subdirectory relative to the install prefix where pkgconfig files (.pc) will be installed" ) SET(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/${APPLICATION_NAME}-plugins/" CACHE PATH "The subdirectory relative to the install prefix where plugins will be installed (default is prefix/lib/${APPLICATION_NAME})" ) SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "The subdirectory to the header prefix (default prefix/include)" ) SET(DATA_INSTALL_DIR "${DATA_INSTALL_PREFIX}" CACHE PATH "The parent directory where applications can install their data (default prefix/share/${APPLICATION_NAME})" ) SET(DOC_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/doc/${APPLICATION_NAME}" CACHE PATH "The parent directory where applications can install their documentation (default prefix/share/doc/${APPLICATION_NAME})" ) SET(HTML_INSTALL_DIR "${DATA_INSTALL_PREFIX}/doc/HTML" CACHE PATH "The HTML install dir for documentation (default data/doc/html)" ) SET(ICON_INSTALL_DIR "${DATA_INSTALL_PREFIX}/icons" CACHE PATH "The icon install dir (default data/icons/)" ) SET(SOUND_INSTALL_DIR "${DATA_INSTALL_PREFIX}/sounds" CACHE PATH "The install dir for sound files (default data/sounds)" ) SET(LOCALE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/locale" CACHE PATH "The install dir for translations (default prefix/share/locale)" ) SET(XDG_APPS_DIR "${SHARE_INSTALL_PREFIX}/applications/" CACHE PATH "The XDG apps dir" ) SET(XDG_DIRECTORY_DIR "${SHARE_INSTALL_PREFIX}/desktop-directories" CACHE PATH "The XDG directory" ) SET(SYSCONF_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/etc" CACHE PATH "The ${APPLICATION_NAME} sysconfig install dir (default prefix/etc)" ) SET(MAN_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/man" CACHE PATH "The ${APPLICATION_NAME} man install dir (default prefix/man)" ) SET(INFO_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/info" CACHE PATH "The ${APPLICATION_NAME} info install dir (default prefix/info)" ) endif (UNIX) if (WIN32) # Same same set(BIN_INSTALL_DIR "." CACHE PATH "-") set(SBIN_INSTALL_DIR "." CACHE PATH "-") set(LIB_INSTALL_DIR "lib" CACHE PATH "-") set(INCLUDE_INSTALL_DIR "include" CACHE PATH "-") set(PLUGIN_INSTALL_DIR "plugins" CACHE PATH "-") set(HTML_INSTALL_DIR "doc/HTML" CACHE PATH "-") set(ICON_INSTALL_DIR "." CACHE PATH "-") set(SOUND_INSTALL_DIR "." CACHE PATH "-") set(LOCALE_INSTALL_DIR "lang" CACHE PATH "-") endif (WIN32) srm-ifce-v1.24.7/cmake/modules/FindCGSI_GSOAP.cmake000066400000000000000000000040771465215307000215240ustar00rootroot00000000000000# # This module detects if CGSI_GSOAP is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # CGSI_GSOAP_LIBRARIES = full path to the CGSI_GSOAP libraries # CGSI_GSOAP_INCLUDE_DIRS = include dir to be used when using the CGSI_GSOAP library # CGSI_GSOAP_FOUND = set to true if CGSI_GSOAP was found successfully # # CGSI_GSOAP_LOCATION # setting this enables search for CGSI_GSOAP libraries / headers in this location include(CMakeStringHelpers) # ----------------------------------------------------- # CGSI_GSOAP Libraries # ----------------------------------------------------- find_library(CGSI_GSOAP_LIBRARIES NAMES cgsi_plugin HINTS ${CGSI_GSOAP_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/cgsigsoap/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/cgsigsoap/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/cgsi-gsoap/lib ${CMAKE_INSTALL_PREFIX}/opt/cgsi-gsoap/lib64 DOC "The main CGSI_GSOAP library" ) # ----------------------------------------------------- # CGSI_GSOAP Include Directories # ----------------------------------------------------- find_path(CGSI_GSOAP_INCLUDE_DIRS NAMES cgsi_plugin.h HINTS ${CGSI_GSOAP_LOCATION} ${STAGE_DIR}/include ${CMAKE_INSTALL_PREFIX}/cgsigsoap/*/${PLATFORM} ${CMAKE_INSTALL_PREFIX}/cgsigsoap/*/${PLATFORM}/include DOC "The CGSI_GSOAP include directory" ) if(CGSI_GSOAP_INCLUDE_DIRS) message(STATUS "CGSI_GSOAP includes found in ${CGSI_GSOAP_INCLUDE_DIRS}") endif() if(CGSI_GSOAP_LIBRARIES) message(STATUS "CGSI_GSOAP libraries found in ${CGSI_GSOAP_LIBRARIES}") endif() # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set CGSI_GSOAP_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CGSI_GSOAP DEFAULT_MSG CGSI_GSOAP_LIBRARIES) mark_as_advanced(CGSI_GSOAP_INCLUDE_DIRS CGSI_GSOAP_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindDCAP.cmake000066400000000000000000000036151465215307000205520ustar00rootroot00000000000000# # This module detects if DCAP is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # DCAP_LIBRARIES = full path to the DCAP libraries # DCAP_INCLUDE_DIR = include dir to be used when using the DCAP library # DCAP_FOUND = set to true if DCAP was found successfully # # DCAP_LOCATION # setting this enables search for DCAP libraries / headers in this location # ----------------------------------------------------- # DCAP Libraries # ----------------------------------------------------- find_library(DCAP_LIBRARIES NAMES dcap HINTS ${DCAP_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/dcap/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/dcap/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/Grid/dcap/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/dcap/*/${PLATFORM}/lib64 DOC "The main DCAP library" ) # ----------------------------------------------------- # DCAP Include Directories # ----------------------------------------------------- find_path(DCAP_INCLUDE_DIR NAMES dcap.h HINTS ${DCAP_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/dcap/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/dcap/*/${PLATFORM}/include DOC "The DCAP include directory" ) if (DCAP_LIBRARIES) message (STATUS "DCAP libraries found in ${DCAP_LIBRARIES}") endif (DCAP_LIBRARIES) if(DCAP_INCLUDE_DIR) message(STATUS "DCAP includes found in ${DCAP_INCLUDE_DIR}") endif() # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set DCAP_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(DCAP DEFAULT_MSG DCAP_LIBRARIES DCAP_INCLUDE_DIR) mark_as_advanced(DCAP_INCLUDE_DIR DCAP_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindDPM.cmake000066400000000000000000000051531465215307000204620ustar00rootroot00000000000000# # This module detects if dpm is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # DPM_LIBRARIES = full path to the dpm libraries # DPM_INCLUDE_DIR = include dir to be used when using the dpm library # DPM_FOUND = set to true if dpm was found successfully # # DPM_LOCATION # setting this enables search for dpm libraries / headers in this location # ----------------------------------------------------- # DPM Libraries # ----------------------------------------------------- find_library(DPM_LIBRARIES NAMES dpm HINTS ${DPM_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/dcap/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/dcap/*/${PLATFORM}/ DOC "The main dpm library" ) # ----------------------------------------------------- # LCGDM Libraries # ----------------------------------------------------- find_library(LCGDM_LIBRARIES NAMES lcgdm HINTS ${DPM_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/dcap/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/dcap/*/${PLATFORM}/ DOC "The main lcgdm library" ) # ----------------------------------------------------- # DPM Include Directories # ----------------------------------------------------- find_path(DPM_INCLUDE_DIR NAMES dpm/dpm_api.h HINTS ${DPM_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/dcap/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/dcap/*/${PLATFORM}/ DOC "The dpm include directory" ) if(DPM_INCLUDE_DIR) message(STATUS "dpm includes found in ${DPM_INCLUDE_DIR}") endif() # ----------------------------------------------------- # LCGDM Include Directories # ----------------------------------------------------- find_path(LCGDM_INCLUDE_DIR NAMES Cinit.h HINTS ${LCGDM_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/dcap/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/dcap/*/${PLATFORM}/ DOC "The LCGDM include directory" ) if(LCGDM_INCLUDE_DIR) message(STATUS "lcgdm includes found in ${LCGDM_INCLUDE_DIR}") endif() # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set DPM_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(dpm DEFAULT_MSG DPM_LIBRARIES DPM_INCLUDE_DIR) find_package_handle_standard_args(lcgdm DEFAULT_MSG LCGDM_LIBRARIES LCGDM_INCLUDE_DIR) mark_as_advanced(DPM_INCLUDE_DIR DPM_LIBRARIES) mark_as_advanced(LCGDM_INCLUDE_DIR LCGDM_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindDavix.cmake000066400000000000000000000056201465215307000211140ustar00rootroot00000000000000# # This module detects if SRM-IFCE is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # DAVIX_LIBRARIES = full path to the SRM-IFCE libraries # DAVIX_INCLUDE_DIR = include dir to be used when using the SRM-IFCE library # DAVIX_FOUND = set to true if SRM-IFCE was found successfully # # DAVIX_LOCATION # setting this enables search for SRM-IFCE libraries / headers in this location # ----------------------------------------------------- # Try with pkgconfig first # ----------------------------------------------------- pkg_check_modules(DAVIX_PKG davix>=0.3.5) pkg_check_modules(DAVIX_COPY_PKG davix_copy>=0.3.5) if (DAVIX_PKG_FOUND AND DAVIX_COPY_PKG_FOUND) set (DAVIX_INCLUDE_DIR "${DAVIX_PKG_INCLUDE_DIRS}" "${DAVIX_COPY_PKG_INCLUDE_DIRS}") set (DAVIX_LIBRARIES "${DAVIX_PKG_LIBRARIES}" "${DAVIX_COPY_PKG_LIBRARIES}") set (DAVIX_CFLAGS "${DAVIX_PKG_CFLAGS} ${DAVIX_COPY_PKG_FLAGS}") else () # Davix Libraries find_library(DAVIX_MAIN_LIBRARY NAMES davix HINTS ${DAVIX_LOCATION}/lib ${DAVIX_LOCATION}/lib64 ${DAVIX_LOCATION}/lib32 ${STAGE_DIR}/lib ${STAGE_DIR}/lib64 ${CMAKE_INSTALL_PREFIX}/Davix/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Davix/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/lib DOC "The main davix library" ) find_library(DAVIX_COPY_LIBRARY NAMES davix_copy HINTS ${DAVIX_LOCATION}/lib ${DAVIX_LOCATION}/lib64 ${DAVIX_LOCATION}/lib32 ${STAGE_DIR}/lib ${STAGE_DIR}/lib64 ${CMAKE_INSTALL_PREFIX}/Davix/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Davix/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/lib DOC "The davix copy library" ) set (DAVIX_LIBRARIES ${DAVIX_MAIN_LIBRARY} ${DAVIX_COPY_LIBRARY}) # Davix Include Directories find_path(DAVIX_INCLUDE_DIR NAMES davix.hpp HINTS ${DAVIX_LOCATION} ${DAVIX_LOCATION}/include ${DAVIX_LOCATION}/include/* ${STAGE_DIR}/include ${STAGE_DIR}/include ${CMAKE_INSTALL_PREFIX}/Davix/*/${PLATFORM}/include/* ${CMAKE_INSTALL_PREFIX}/include/davix DOC "Davix include directory" ) set (DAVIX_CFLAGS "") endif() if (DAVIX_LIBRARIES) message ("DAVIX libraries: ${DAVIX_LIBRARIES}") endif (DAVIX_LIBRARIES) if(DAVIX_INCLUDE_DIR) message(STATUS "DAVIX includes found in ${DAVIX_INCLUDE_DIR}") endif() # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set DAVIX_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(DAVIX DEFAULT_MSG DAVIX_LIBRARIES DAVIX_INCLUDE_DIR) mark_as_advanced(DAVIX_LIBRARIES DAVIX_INCLUDE_DIR DAVIX_CFLAGS) srm-ifce-v1.24.7/cmake/modules/FindGFAL2.cmake000066400000000000000000000050121465215307000206270ustar00rootroot00000000000000# # This module detects if gfal2 is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GFAL2_LIBRARIES = full path to the gfal2 libraries # GFAL2_INCLUDE_DIR = include dir to be used when using the gfal2 library # GFAL2_FOUND = set to true if gfal2 was found successfully # # GFAL2_LOCATION # setting this enables search for gfal2 libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GFAL2_PKG gfal2) pkg_check_modules(GFAL2_TRANSFER_PKG gfal_transfer) if (GFAL2_PKG_FOUND AND GFAL2_TRANSFER_PKG_FOUND) set (GFAL2_LIBRARIES ${GFAL2_PKG_LIBRARIES} ${GFAL2_TRANSFER_PKG_LIBRARIES}) set (GFAL2_INCLUDE_DIRS ${GFAL2_PKG_INCLUDE_DIRS} ${GFAL2_TRANSFER_PKG_INCLUDE_DIRS}) set (GFAL2_DEFINITIONS "${GFAL2_PKG_CFLAGS} ${GFAL2_TRANSFER_PKG_CFLAGS}") set (GFAL2_LIBRARY_DIRS ${GFAL2_PKG_LIBRARY_DIRS}) else (GFAL2_PKG_FOUND AND GFAL2_TRANSFER_PKG_FOUND) find_library(GFAL2_CORE_LIBRARIES NAMES gfal2 HINTS ${GFAL2_LOCATION} ${CMAKE_INSTALL_PREFIX}/Grid/gfal2/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/gfal2/*/${PLATFORM}/lib64 DOC "The main gfal2 library" ) find_library(GFAL2_TRANSFER_LIBRARIES NAMES gfal_transfer HINTS ${GFAL2_LOCATION} ${CMAKE_INSTALL_PREFIX}/Grid/gfal2/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/gfal2/*/${PLATFORM}/lib64 DOC "The transfer gfal2 library" ) set (GFAL2_LIBRARIES ${GFAL2_CORE_LIBRARIES} ${GFAL2_TRANSFER_LIBRARIES}) find_path(GFAL2_INCLUDE_DIRS NAMES gfal_api.h HINTS ${GFAL2_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/Grid/gfal2/*/${PLATFORM}/include/* DOC "The gfal2 include directory" ) set (GFAL2_DEFINITIONS "") endif (GFAL2_PKG_FOUND AND GFAL2_TRANSFER_PKG_FOUND) if (GFAL2_LIBRARIES) message (STATUS "GFAL2 libraries: ${GFAL2_LIBRARIES}") endif (GFAL2_LIBRARIES) if (GFAL2_INCLUDE_DIRS) message (STATUS "GFAL2 include dir: ${GFAL2_INCLUDE_DIRS}") endif (GFAL2_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GFAL2_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GFAL2 DEFAULT_MSG GFAL2_LIBRARIES GFAL2_INCLUDE_DIRS ) mark_as_advanced(GFAL2_INCLUDE_DIRS GFAL2_LIBRARIES GFAL2_LIBRARY_DIRS) srm-ifce-v1.24.7/cmake/modules/FindGLIB2.cmake000066400000000000000000000037511465215307000206430ustar00rootroot00000000000000# # This module detects if glib2 is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLIB2_LIBRARIES = full path to the glib2 libraries # GLIB2_INCLUDE_DIR = include dir to be used when using the glib2 library # GLIB2_FOUND = set to true if glib2 was found successfully # # GLIB2_LOCATION # setting this enables search for glib2 libraries / headers in this location find_package (PkgConfig) pkg_check_modules (GLIB2_PKG glib-2.0) if (GLIB2_PKG_FOUND) set (GLIB2_LIBRARIES ${GLIB2_PKG_LIBRARIES}) set (GLIB2_INCLUDE_DIRS ${GLIB2_PKG_INCLUDE_DIRS}) set (GLIB2_DEFINITIONS "${GLIB2_PKG_CFLAGS} ${GLIB2_PKG_CFLAGS_OTHER}") set (GLIB2_LIBRARY_DIRS ${GLIB2_PKG_LIBRARY_DIRS}) else (GLIB2_PKG_FOUND) find_library(GLIB2_LIBRARIES NAMES libglib-2.0 HINTS ${GLIB2_LOCATION} ${CMAKE_INSTALL_PREFIX}/glib2/*/${PLATFORM}/ DOC "The main glib2 library" ) find_path(GLIB2_INCLUDE_DIRS NAMES glib.h HINTS ${GLIB2_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/glib2/*/${PLATFORM}/ DOC "The glib2 include directory" ) set (GLIB2_DEFINITIONS "") endif (GLIB2_PKG_FOUND) if (GLIB2_LIBRARIES) message (STATUS "GLIB2 libraries: ${GLIB2_LIBRARIES}") endif (GLIB2_LIBRARIES) if (GLIB2_INCLUDE_DIRS) message (STATUS "GLIB2 include dir: ${GLIB2_INCLUDE_DIRS}") endif (GLIB2_INCLUDE_DIRS) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") link_directories ("${CMAKE_INSTALL_PREFIX}/opt/gettext/lib") endif () # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLIB2_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLIB2 DEFAULT_MSG GLIB2_LIBRARIES GLIB2_INCLUDE_DIRS ) mark_as_advanced(GLIB2_INCLUDE_DIRS GLIB2_LIBRARIES GLIB2_LIBRARY_DIRS) srm-ifce-v1.24.7/cmake/modules/FindGRIDFTP_IFCE.cmake000066400000000000000000000033101465215307000217200ustar00rootroot00000000000000# # This module detects if GRIDFTP_IFCE is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GRIDFTP_IFCE_LIBRARIES = full path to the dpm libraries # GRIDFTP_IFCE_INCLUDE_DIR = include dir to be used when using the dpm library # GRIDFTP_IFCE_FOUND = set to true if dpm was found successfully # # GRIDFTP_IFCE_LOCATION # setting this enables search for dpm libraries / headers in this location # ----------------------------------------------------- # DPM Libraries # ----------------------------------------------------- find_library(GRIDFTP_IFCE_LIBRARIES NAMES gridftp_ifce HINTS ${GRIDFTP_IFCE_LOCATION}/lib ${GRIDFTP_IFCE_LOCATION}/lib64 ${GRIDFTP_IFCE_LOCATION}/lib32 DOC "The main gridftp_ifce library" ) # ----------------------------------------------------- # GRIDFTP_IFCE Include Directories # ----------------------------------------------------- find_path(GRIDFTP_IFCE_INCLUDE_DIR NAMES gridftp-ifce.h HINTS ${GRIDFTP_IFCE_LOCATION} ${GRIDFTP_IFCE_LOCATION}/include ${GRIDFTP_IFCE_LOCATION}/include/* DOC "The gridftp-ifce.h include directory" ) if(GRIDFTP_IFCE_INCLUDE_DIR) message(STATUS "gridftp_ifce includes found in ${GRIDFTP_IFCE_INCLUDE_DIR}") endif() # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GRIDFTP_IFCE_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(gridftp_ifce DEFAULT_MSG GRIDFTP_IFCE_LIBRARIES GRIDFTP_IFCE_INCLUDE_DIR) mark_as_advanced(GRIDFTP_IFCE_INCLUDE_DIR GRIDFTP_IFCE_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGTEST.cmake000066400000000000000000000037711465215307000207340ustar00rootroot00000000000000# # This module detects if GTEST is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GTEST_LIBRARIES = full path to the GTEST libraries # GTEST_SSL_LIBRARIES = full path to the GTEST ssl libraries # GTEST_INCLUDE_DIR = include dir to be used when using the GTEST library # GTEST_WSDL2H = wsdl2h binary # GTEST_SOAPCPP2 = soapcpp2 binary # GTEST_FOUND = set to true if GTEST was found successfully # # GTEST_LOCATION # setting this enables search for GTEST libraries / headers in this location # ----------------------------------------------------- # GTEST Libraries # ----------------------------------------------------- find_library(GTEST_LIBRARIES NAMES gtest HINTS ${GTEST_LOCATION}/lib ${GTEST_LOCATION}/lib64 ${GTEST_LOCATION}/lib32 DOC "The main GTEST library" ) # ----------------------------------------------------- # GTEST Libraries # ----------------------------------------------------- find_library(GTEST_MAIN_LIBRARIES NAMES gtest_main HINTS ${GTEST_LOCATION}/lib ${GTEST_LOCATION}/lib64 ${GTEST_LOCATION}/lib32 DOC "The main GTEST main library" ) # ----------------------------------------------------- # GTEST Include Directories # ----------------------------------------------------- find_path(GTEST_INCLUDE_DIR NAMES gtest.h HINTS ${GTEST_LOCATION} ${GTEST_LOCATION}/include ${GTEST_LOCATION}/include/gtest ${GTEST_LOCATION}/include/* /usr/include/gtest DOC "The GTEST include directory" ) SET(GTEST_DEFINITIONS "") # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GTEST_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GTEST DEFAULT_MSG GTEST_LIBRARIES GTEST_MAIN_LIBRARIES GTEST_INCLUDE_DIR) mark_as_advanced(GTEST_INCLUDE_DIR GTEST_LIBRARIES ) srm-ifce-v1.24.7/cmake/modules/FindGTHREAD2.cmake000066400000000000000000000036471465215307000212100ustar00rootroot00000000000000# # This module detects if gthread2 is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GTHREAD2_LIBRARIES = full path to the glib2 libraries # GTHREAD2_INCLUDE_DIR = include dir to be used when using the glib2 library # GTHREAD2_FOUND = set to true if glib2 was found successfully # # GTHREAD2_LOCATION # setting this enables search for gthread2 libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GTHREAD2_PKG gthread-2.0) if (GTHREAD2_PKG_FOUND) set (GTHREAD2_LIBRARIES ${GTHREAD2_PKG_LIBRARIES}) set (GTHREAD2_INCLUDE_DIRS ${GTHREAD2_PKG_INCLUDE_DIRS}) set (GTHREAD2_DEFINITIONS "${GTHREAD2_PKG_CFLAGS} ${GTHREAD2_PKG_CFLAGS_OTHER}") else (GTHREAD2_PKG_FOUND) find_library(GTHREAD2_LIBRARIES NAMES libgthread-2.0.so.0 HINTS ${GTHREAD2_LOCATION} ${CMAKE_INSTALL_PREFIX}/glib2/*/${PLATFORM}/ DOC "The main gthread2 library" ) find_path(GTHREAD2_INCLUDE_DIRS NAMES gthread.h HINTS ${GTHREAD2_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/glib2/*/${PLATFORM}/ DOC "The gthread2 include directory" ) set (GTHREAD2_DEFINITIONS "") endif (GTHREAD2_PKG_FOUND) if (GTHREAD2_LIBRARIES) message (STATUS "GTHREAD2 libraries: ${GTHREAD2_LIBRARIES}") endif (GTHREAD2_LIBRARIES) if (GTHREAD2_INCLUDE_DIRS) message (STATUS "GTHREAD2 include dir: ${GTHREAD2_INCLUDE_DIRS}") endif (GTHREAD2_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GTHREAD2_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GTHREAD2 DEFAULT_MSG GTHREAD2_LIBRARIES GTHREAD2_INCLUDE_DIRS ) mark_as_advanced(GTHREAD2_INCLUDE_DIRS GTHREAD2_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_COMMON.cmake000066400000000000000000000050741465215307000223470ustar00rootroot00000000000000# # This module detects if globus-common is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_COMMON_LIBRARIES = full path to the globus-common libraries # GLOBUS_COMMON_INCLUDE_DIR = include dir to be used when using the globus-common library # GLOBUS_COMMON_FOUND = set to true if globus-common was found successfully # # GLOBUS_COMMON_LOCATION # setting this enables search for globus-common libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_COMMON_PKG globus-common) if (GLOBUS_COMMON_PKG_FOUND) set (GLOBUS_COMMON_LIBRARIES ${GLOBUS_COMMON_PKG_LIBRARIES}) set (GLOBUS_COMMON_INCLUDE_DIRS ${GLOBUS_COMMON_PKG_INCLUDE_DIRS}) set (GLOBUS_COMMON_DEFINITIONS "${GLOBUS_COMMON_PKG_CFLAGS}") else (GLOBUS_COMMON_PKG_FOUND) set (CMAKE_FIND_FRAMEWORK NEVER) find_library(GLOBUS_COMMON_LIBRARIES NAMES globus_common HINTS ${GLOBUS_COMMON_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-common library" ) find_path(GLOBUS_COMMON_INCLUDE_DIRS NAMES globus_common.h HINTS ${GLOBUS_COMMON_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-common include directory" ) set (GLOBUS_COMMON_DEFINITIONS "") endif (GLOBUS_COMMON_PKG_FOUND) if (GLOBUS_COMMON_LIBRARIES) message (STATUS "GLOBUS_COMMON libraries: ${GLOBUS_COMMON_LIBRARIES}") endif (GLOBUS_COMMON_LIBRARIES) if (GLOBUS_COMMON_INCLUDE_DIRS) message (STATUS "GLOBUS_COMMON include dir: ${GLOBUS_COMMON_INCLUDE_DIRS}") endif (GLOBUS_COMMON_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_COMMON_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_COMMON DEFAULT_MSG GLOBUS_COMMON_LIBRARIES GLOBUS_COMMON_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_COMMON_INCLUDE_DIRS GLOBUS_COMMON_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_FTP_CLIENT.cmake000066400000000000000000000053541465215307000230470ustar00rootroot00000000000000# # This module detects if globus-ftp-client is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_FTP_CLIENT_LIBRARIES = full path to the globus-ftp-client libraries # GLOBUS_FTP_CLIENT_INCLUDE_DIR = include dir to be used when using the globus-ftp-client library # GLOBUS_FTP_CLIENT_FOUND = set to true if globus-ftp-client was found successfully # # GLOBUS_FTP_CLIENT_LOCATION # setting this enables search for globus-ftp-client libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_FTP_CLIENT_PKG globus-ftp-client) if (GLOBUS_FTP_CLIENT_PKG_FOUND) set (GLOBUS_FTP_CLIENT_LIBRARIES ${GLOBUS_FTP_CLIENT_PKG_LIBRARIES}) set (GLOBUS_FTP_CLIENT_INCLUDE_DIRS ${GLOBUS_FTP_CLIENT_PKG_INCLUDE_DIRS}) set (GLOBUS_FTP_CLIENT_DEFINITIONS "${GLOBUS_FTP_CLIENT_PKG_CFLAGS}") else (GLOBUS_FTP_CLIENT_PKG_FOUND) set (CMAKE_FIND_FRAMEWORK NEVER) find_library(GLOBUS_FTP_CLIENT_LIBRARIES NAMES globus_ftp_client HINTS ${GLOBUS_FTP_CLIENT_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-ftp-client library" ) find_path(GLOBUS_FTP_CLIENT_INCLUDE_DIRS NAMES globus_ftp_client.h HINTS ${GLOBUS_FTP_CLIENT_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-ftp-client include directory" ) set (GLOBUS_FTP_CLIENT_DEFINITIONS "") endif (GLOBUS_FTP_CLIENT_PKG_FOUND) if (GLOBUS_FTP_CLIENT_LIBRARIES) message (STATUS "GLOBUS_FTP_CLIENT libraries: ${GLOBUS_FTP_CLIENT_LIBRARIES}") endif (GLOBUS_FTP_CLIENT_LIBRARIES) if (GLOBUS_FTP_CLIENT_INCLUDE_DIRS) message (STATUS "GLOBUS_FTP_CLIENT include dir: ${GLOBUS_FTP_CLIENT_INCLUDE_DIRS}") endif (GLOBUS_FTP_CLIENT_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_FTP_CLIENT_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_FTP_CLIENT DEFAULT_MSG GLOBUS_FTP_CLIENT_LIBRARIES GLOBUS_FTP_CLIENT_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_FTP_CLIENT_INCLUDE_DIRS GLOBUS_FTP_CLIENT_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_FTP_CONTROL.cmake000066400000000000000000000054271465215307000232120ustar00rootroot00000000000000# # This module detects if globus-ftp-control is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_FTP_CONTROL_LIBRARIES = full path to the globus-ftp-control libraries # GLOBUS_FTP_CONTROL_INCLUDE_DIR = include dir to be used when using the globus-ftp-control library # GLOBUS_FTP_CONTROL_FOUND = set to true if globus-ftp-control was found successfully # # GLOBUS_FTP_CONTROL_LOCATION # setting this enables search for globus-ftp-control libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_FTP_CONTROL_PKG globus-ftp-control) if (GLOBUS_FTP_CONTROL_PKG_FOUND) set (GLOBUS_FTP_CONTROL_LIBRARIES ${GLOBUS_FTP_CONTROL_PKG_LIBRARIES}) set (GLOBUS_FTP_CONTROL_INCLUDE_DIRS ${GLOBUS_FTP_CONTROL_PKG_INCLUDE_DIRS}) set (GLOBUS_FTP_CONTROL_DEFINITIONS "${GLOBUS_FTP_CONTROL_PKG_CFLAGS}") else (GLOBUS_FTP_CONTROL_PKG_FOUND) set (CMAKE_FIND_FRAMEWORK NEVER) find_library(GLOBUS_FTP_CONTROL_LIBRARIES NAMES globus_ftp_control HINTS ${GLOBUS_FTP_CONTROL_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-ftp-control library" ) find_path(GLOBUS_FTP_CONTROL_INCLUDE_DIRS NAMES globus_ftp_control.h HINTS ${GLOBUS_FTP_CONTROL_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-ftp-control include directory" ) set (GLOBUS_FTP_CONTROL_DEFINITIONS "") endif (GLOBUS_FTP_CONTROL_PKG_FOUND) if (GLOBUS_FTP_CONTROL_LIBRARIES) message (STATUS "GLOBUS_FTP_CONTROL libraries: ${GLOBUS_FTP_CONTROL_LIBRARIES}") endif (GLOBUS_FTP_CONTROL_LIBRARIES) if (GLOBUS_FTP_CONTROL_INCLUDE_DIRS) message (STATUS "GLOBUS_FTP_CONTROL include dir: ${GLOBUS_FTP_CONTROL_INCLUDE_DIRS}") endif (GLOBUS_FTP_CONTROL_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_FTP_CONTROL_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_FTP_CONTROL DEFAULT_MSG GLOBUS_FTP_CONTROL_LIBRARIES GLOBUS_FTP_CONTROL_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_FTP_CONTROL_INCLUDE_DIRS GLOBUS_FTP_CONTROL_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_GASS_COPY.cmake000066400000000000000000000052201465215307000227370ustar00rootroot00000000000000# # This module detects if globus-gass-copy is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_GASS_COPY_LIBRARIES = full path to the globus-gass-copy libraries # GLOBUS_GASS_COPY_INCLUDE_DIR = include dir to be used when using the globus-gass-copy library # GLOBUS_GASS_COPY_FOUND = set to true if globus-gass-copy was found successfully # # GLOBUS_GASS_COPY_LOCATION # setting this enables search for globus-gass-copy libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_GASS_COPY_PKG globus-gass-copy) if (GLOBUS_GASS_COPY_PKG_FOUND) set (GLOBUS_GASS_COPY_LIBRARIES ${GLOBUS_GASS_COPY_PKG_LIBRARIES}) set (GLOBUS_GASS_COPY_INCLUDE_DIRS ${GLOBUS_GASS_COPY_PKG_INCLUDE_DIRS}) set (GLOBUS_GASS_COPY_DEFINITIONS "${GLOBUS_GASS_COPY_PKG_CFLAGS}") else (GLOBUS_GASS_COPY_PKG_FOUND) find_library(GLOBUS_GASS_COPY_LIBRARIES NAMES globus_gass_copy HINTS ${GLOBUS_GASS_COPY_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-gass-copy library" ) find_path(GLOBUS_GASS_COPY_INCLUDE_DIRS NAMES globus_gass_copy.h HINTS ${GLOBUS_GASS_COPY_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-gass-copy include directory" ) set (GLOBUS_GASS_COPY_DEFINITIONS "") endif (GLOBUS_GASS_COPY_PKG_FOUND) if (GLOBUS_GASS_COPY_LIBRARIES) message (STATUS "GLOBUS_GSSAPI_GSI libraries: ${GLOBUS_GASS_COPY_LIBRARIES}") endif (GLOBUS_GASS_COPY_LIBRARIES) if (GLOBUS_GASS_COPY_INCLUDE_DIRS) message (STATUS "GLOBUS_GSSAPI_GSI include dir: ${GLOBUS_GASS_COPY_INCLUDE_DIRS}") endif (GLOBUS_GASS_COPY_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_GASS_COPY_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_GSSAPI_GSI DEFAULT_MSG GLOBUS_GASS_COPY_LIBRARIES GLOBUS_GASS_COPY_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_GASS_COPY_INCLUDE_DIRS GLOBUS_GASS_COPY_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_GSI_CERT_UTILS.cmake000066400000000000000000000056301465215307000235740ustar00rootroot00000000000000# # This module detects if globus-gsi-cert-utils is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_GSI_CERT_UTILS_LIBRARIES = full path to the globus-gsi-cert-utils libraries # GLOBUS_GSI_CERT_UTILS_INCLUDE_DIR = include dir to be used when using the globus-gsi-cert-utils library # GLOBUS_GSI_CERT_UTILS_FOUND = set to true if globus-gsi-cert-utils was found successfully # # GLOBUS_GSI_CERT_UTILS_LOCATION # setting this enables search for globus-gsi-cert-utils libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_GSI_CERT_UTILS_PKG globus-gsi-cert-utils) if (GLOBUS_GSI_CERT_UTILS_PKG_FOUND) set (GLOBUS_GSI_CERT_UTILS_LIBRARIES ${GLOBUS_GSI_CERT_UTILS_PKG_LIBRARIES}) set (GLOBUS_GSI_CERT_UTILS_INCLUDE_DIRS ${GLOBUS_GSI_CERT_UTILS_PKG_INCLUDE_DIRS}) set (GLOBUS_GSI_CERT_UTILS_DEFINITIONS "${GLOBUS_GSI_CERT_UTILS_PKG_CFLAGS}") else (GLOBUS_GSI_CERT_UTILS_PKG_FOUND) set (CMAKE_FIND_FRAMEWORK NEVER) find_library(GLOBUS_GSI_CERT_UTILS_LIBRARIES NAMES globus_gsi_cert_utils HINTS ${GLOBUS_GSI_CERT_UTILS_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-gsi-cert-utils library" ) find_path(GLOBUS_GSI_CERT_UTILS_INCLUDE_DIRS NAMES globus_gsi_cert_utils.h HINTS ${GLOBUS_GSI_CERT_UTILS_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-gsi-cert-utils include directory" ) set (GLOBUS_GSI_CERT_UTILS_DEFINITIONS "") endif (GLOBUS_GSI_CERT_UTILS_PKG_FOUND) if (GLOBUS_GSI_CERT_UTILS_LIBRARIES) message (STATUS "GLOBUS_GSI_CERT_UTILS libraries: ${GLOBUS_GSI_CERT_UTILS_LIBRARIES}") endif (GLOBUS_GSI_CERT_UTILS_LIBRARIES) if (GLOBUS_GSI_CERT_UTILS_INCLUDE_DIRS) message (STATUS "GLOBUS_GSI_CERT_UTILS include dir: ${GLOBUS_GSI_CERT_UTILS_INCLUDE_DIRS}") endif (GLOBUS_GSI_CERT_UTILS_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_GSI_CERT_UTILS_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_GSI_CERT_UTILS DEFAULT_MSG GLOBUS_GSI_CERT_UTILS_LIBRARIES GLOBUS_GSI_CERT_UTILS_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_GSI_CERT_UTILS_INCLUDE_DIRS GLOBUS_GSI_CERT_UTILS_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_GSI_CREDENTIAL.cmake000066400000000000000000000056311465215307000234720ustar00rootroot00000000000000# # This module detects if globus-gsi-credential is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_GSI_CREDENTIAL_LIBRARIES = full path to the globus-gsi-credential libraries # GLOBUS_GSI_CREDENTIAL_INCLUDE_DIR = include dir to be used when using the globus-gsi-credential library # GLOBUS_GSI_CREDENTIAL_FOUND = set to true if globus-gsi-credential was found successfully # # GLOBUS_GSI_CREDENTIAL_LOCATION # setting this enables search for globus-gsi-credential libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_GSI_CREDENTIAL_PKG globus-gsi-credential) if (GLOBUS_GSI_CREDENTIAL_PKG_FOUND) set (GLOBUS_GSI_CREDENTIAL_LIBRARIES ${GLOBUS_GSI_CREDENTIAL_PKG_LIBRARIES}) set (GLOBUS_GSI_CREDENTIAL_INCLUDE_DIRS ${GLOBUS_GSI_CREDENTIAL_PKG_INCLUDE_DIRS}) set (GLOBUS_GSI_CREDENTIAL_DEFINITIONS "${GLOBUS_GSI_CREDENTIAL_PKG_CFLAGS}") else (GLOBUS_GSI_CREDENTIAL_PKG_FOUND) set (CMAKE_FIND_FRAMEWORK NEVER) find_library(GLOBUS_GSI_CREDENTIAL_LIBRARIES NAMES globus_gsi_credential HINTS ${GLOBUS_GSI_CREDENTIAL_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-gsi-credential library" ) find_path(GLOBUS_GSI_CREDENTIAL_INCLUDE_DIRS NAMES globus_gsi_credential.h HINTS ${GLOBUS_GSI_CREDENTIAL_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-gsi-credential include directory" ) set (GLOBUS_GSI_CREDENTIAL_DEFINITIONS "") endif (GLOBUS_GSI_CREDENTIAL_PKG_FOUND) if (GLOBUS_GSI_CREDENTIAL_LIBRARIES) message (STATUS "GLOBUS_GSI_CREDENTIAL libraries: ${GLOBUS_GSI_CREDENTIAL_LIBRARIES}") endif (GLOBUS_GSI_CREDENTIAL_LIBRARIES) if (GLOBUS_GSI_CREDENTIAL_INCLUDE_DIRS) message (STATUS "GLOBUS_GSI_CREDENTIAL include dir: ${GLOBUS_GSI_CREDENTIAL_INCLUDE_DIRS}") endif (GLOBUS_GSI_CREDENTIAL_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_GSI_CREDENTIAL_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_GSI_CREDENTIAL DEFAULT_MSG GLOBUS_GSI_CREDENTIAL_LIBRARIES GLOBUS_GSI_CREDENTIAL_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_GSI_CREDENTIAL_INCLUDE_DIRS GLOBUS_GSI_CREDENTIAL_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_GSSAPI_GSI.cmake000066400000000000000000000053411465215307000230440ustar00rootroot00000000000000# # This module detects if globus-gssapi-gsi is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_GSSAPI_GSI_LIBRARIES = full path to the globus-gssapi-gsi libraries # GLOBUS_GSSAPI_GSI_INCLUDE_DIR = include dir to be used when using the globus-gssapi-gsi library # GLOBUS_GSSAPI_GSI_FOUND = set to true if globus-gssapi-gsi was found successfully # # GLOBUS_GSSAPI_GSI_LOCATION # setting this enables search for globus-gssapi-gsi libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_GSSAPI_GSI_PKG globus-gssapi-gsi) if (GLOBUS_GSSAPI_GSI_PKG_FOUND) set (GLOBUS_GSSAPI_GSI_LIBRARIES ${GLOBUS_GSSAPI_GSI_PKG_LIBRARIES}) set (GLOBUS_GSSAPI_GSI_INCLUDE_DIRS ${GLOBUS_GSSAPI_GSI_PKG_INCLUDE_DIRS}) set (GLOBUS_GSSAPI_GSI_DEFINITIONS "${GLOBUS_GSSAPI_GSI_PKG_CFLAGS}") else (GLOBUS_GSSAPI_GSI_PKG_FOUND) set (CMAKE_FIND_FRAMEWORK NEVER) find_library(GLOBUS_GSSAPI_GSI_LIBRARIES NAMES globus_gssapi_gsi HINTS ${GLOBUS_GSSAPI_GSI_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-gssapi-gsi library" ) find_path(GLOBUS_GSSAPI_GSI_INCLUDE_DIRS NAMES gssapi.h HINTS ${GLOBUS_GSSAPI_GSI_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-gssapi-gsi include directory" ) set (GLOBUS_GSSAPI_GSI_DEFINITIONS "") endif (GLOBUS_GSSAPI_GSI_PKG_FOUND) if (GLOBUS_GSSAPI_GSI_LIBRARIES) message (STATUS "GLOBUS_GSSAPI_GSI libraries: ${GLOBUS_GSSAPI_GSI_LIBRARIES}") endif (GLOBUS_GSSAPI_GSI_LIBRARIES) if (GLOBUS_GSSAPI_GSI_INCLUDE_DIRS) message (STATUS "GLOBUS_GSSAPI_GSI include dir: ${GLOBUS_GSSAPI_GSI_INCLUDE_DIRS}") endif (GLOBUS_GSSAPI_GSI_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_GSSAPI_GSI_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_GSSAPI_GSI DEFAULT_MSG GLOBUS_GSSAPI_GSI_LIBRARIES GLOBUS_GSSAPI_GSI_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_GSSAPI_GSI_INCLUDE_DIRS GLOBUS_GSSAPI_GSI_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_GSS_ASSIST.cmake000066400000000000000000000053021465215307000230730ustar00rootroot00000000000000# # This module detects if globus-gssapi-gsi is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_GSS_ASSIST_LIBRARIES = full path to the globus-gssapi-gsi libraries # GLOBUS_GSS_ASSIST_INCLUDE_DIR = include dir to be used when using the globus-gssapi-gsi library # GLOBUS_GSS_ASSIST_FOUND = set to true if globus-gssapi-gsi was found successfully # # GLOBUS_GSS_ASSIST_LOCATION # setting this enables search for globus-gssapi-gsi libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_GSS_ASSIST_PKG globus-gss-assist) if (GLOBUS_GSS_ASSIST_PKG_FOUND) set (GLOBUS_GSS_ASSIST_LIBRARIES ${GLOBUS_GSS_ASSIST_PKG_LIBRARIES}) set (GLOBUS_GSS_ASSIST_INCLUDE_DIRS ${GLOBUS_GSS_ASSIST_PKG_INCLUDE_DIRS}) set (GLOBUS_GSS_ASSIST_DEFINITIONS "${GLOBUS_GSS_ASSIST_PKG_CFLAGS}") else (GLOBUS_GSS_ASSIST_PKG_FOUND) find_library(GLOBUS_GSS_ASSIST_LIBRARIES NAMES globus_gss_assist HINTS ${GLOBUS_GSS_ASSIST_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-gssapi-gsi library" ) find_path(GLOBUS_GSS_ASSIST_INCLUDE_DIRS NAMES globus_gss_assist.h HINTS ${GLOBUS_GSS_ASSIST_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-gss-assist include directory" ) set (GLOBUS_GSS_ASSIST_DEFINITIONS "") endif (GLOBUS_GSS_ASSIST_PKG_FOUND) if (GLOBUS_GSS_ASSIST_LIBRARIES) message (STATUS "GLOBUS GSS ASSIST libraries: ${GLOBUS_GSS_ASSIST_LIBRARIES}") endif (GLOBUS_GSS_ASSIST_LIBRARIES) if (GLOBUS_GSS_ASSIST_INCLUDE_DIRS) message (STATUS "GLOBUS GSS ASSIST include dir: ${GLOBUS_GSS_ASSIST_INCLUDE_DIRS}") endif (GLOBUS_GSS_ASSIST_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_GSS_ASSIST_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_ASSIST DEFAULT_MSG GLOBUS_GSS_ASSIST_LIBRARIES GLOBUS_GSS_ASSIST_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_GSS_ASSIST_INCLUDE_DIRS GLOBUS_GSS_ASSIST_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindGlobus_OPENSSL.cmake000066400000000000000000000051621465215307000225000ustar00rootroot00000000000000# # This module detects if globus-openssl is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GLOBUS_OPENSSL_LIBRARIES = full path to the globus-openssl libraries # GLOBUS_OPENSSL_INCLUDE_DIR = include dir to be used when using the globus-openssl library # GLOBUS_OPENSSL_FOUND = set to true if globus-openssl was found successfully # # GLOBUS_OPENSSL_LOCATION # setting this enables search for globus-openssl libraries / headers in this location find_package (PkgConfig) pkg_check_modules(GLOBUS_OPENSSL_PKG globus-openssl-module) if (GLOBUS_OPENSSL_PKG_FOUND) set (GLOBUS_OPENSSL_LIBRARIES ${GLOBUS_OPENSSL_PKG_LIBRARIES}) set (GLOBUS_OPENSSL_INCLUDE_DIRS ${GLOBUS_OPENSSL_PKG_INCLUDE_DIRS}) set (GLOBUS_OPENSSL_DEFINITIONS "${GLOBUS_OPENSSL_PKG_CFLAGS}") else (GLOBUS_OPENSSL_PKG_FOUND) set (CMAKE_FIND_FRAMEWORK NEVER) find_library(GLOBUS_OPENSSL_LIBRARIES NAMES globus_openssl HINTS ${GLOBUS_OPENSSL_LOCATION} ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/lib ${GLOBUS_PREFIX}/libexec/lib DOC "The main globus-openssl library" ) find_path(GLOBUS_OPENSSL_INCLUDE_DIRS NAMES globus_openssl.h HINTS ${GLOBUS_OPENSSL_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/globus/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include ${CMAKE_INSTALL_PREFIX}/opt/globus-toolkit/libexec/include ${GLOBUS_PREFIX}/libexec/include DOC "The globus-openssl include directory" ) set (GLOBUS_OPENSSL_DEFINITIONS "") endif (GLOBUS_OPENSSL_PKG_FOUND) if (GLOBUS_OPENSSL_LIBRARIES) message (STATUS "GLOBUS_OPENSSL libraries: ${GLOBUS_OPENSSL_LIBRARIES}") endif (GLOBUS_OPENSSL_LIBRARIES) if (GLOBUS_OPENSSL_INCLUDE_DIRS) message (STATUS "GLOBUS_OPENSSL include dir: ${GLOBUS_OPENSSL_INCLUDE_DIRS}") endif (GLOBUS_OPENSSL_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GLOBUS_OPENSSL_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (GLOBUS_OPENSSL DEFAULT_MSG GLOBUS_OPENSSL_LIBRARIES GLOBUS_OPENSSL_INCLUDE_DIRS ) mark_as_advanced(GLOBUS_OPENSSL_INCLUDE_DIRS GLOBUS_OPENSSL_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindJSONC.cmake000066400000000000000000000013101465215307000207050ustar00rootroot00000000000000# Find json-c find_package (PkgConfig) pkg_check_modules(JSONC_PKG json-c) if (JSONC_PKG_FOUND) set (JSONC_LIBRARIES ${JSONC_PKG_LIBRARIES}) set (JSONC_INCLUDE_DIRS ${JSONC_PKG_INCLUDE_DIRS}) else (JSONC_PKG) find_library(JSONC_LIBRARIES NAMES json-c json HINTS /lib /lib64 /usr/lib /usr/lib64 DOC "json-c library" ) find_path(JSONC_INCLUDE_DIRS NAMES json.h HINTS /usr/include/json /usr/include/json-c DOC "json-c headers" ) endif (JSONC_PKG_FOUND) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(json-c DEFAULT_MSG JSONC_LIBRARIES JSONC_INCLUDE_DIRS ) mark_as_advanced(JSONC_INCLUDE_DIRS JSONC_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindLFC.cmake000066400000000000000000000040521465215307000204430ustar00rootroot00000000000000# # This module detects if LFC is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # LFC_LIBRARIES = full path to the LFC libraries # LFC_INCLUDE_DIR = include dir to be used when using the LFC library # LFC_FOUND = set to true if LFC was found successfully # # LFC_LOCATION # setting this enables search for LFC libraries / headers in this location # ----------------------------------------------------- # LFC Libraries # ----------------------------------------------------- find_library(LFC_LIBRARIES NAMES lfc lcgdm HINTS ${LFC_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/lfc/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/lfc/*/${PLATFORM}/ DOC "The main LFC library" ) # ----------------------------------------------------- # LFC Include Directories # ----------------------------------------------------- find_path(LFC_INCLUDE_DIR NAMES lfc/lfc_api.h HINTS ${LFC_LOCATION} ${STAGE_DIR} ${CMAKE_INSTALL_PREFIX}/lfc/*/${PLATFORM}/ ${CMAKE_INSTALL_PREFIX}/Grid/lfc/*/${PLATFORM}/ DOC "The LFC include directory" ) if(LFC_INCLUDE_DIR) message(STATUS "LFC includes found in ${LFC_INCLUDE_DIR}") endif() # ----------------------------------------------------- # LCGDM Include Directories # ----------------------------------------------------- find_path(LCGDM_INCLUDE_DIR NAMES Cinit.h HINTS ${LCGDM_LOCATION} ${LCGDM_LOCATION}/include ${LCGDM_LOCATION}/include/lcgdm /usr/include/lcgdm ${LCGDM_LOCATION}/include/dpm /usr/include/dpm /usr/include/lfc DOC "The LCGDM include directory" ) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set LFC_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LFC DEFAULT_MSG LFC_LIBRARIES LFC_INCLUDE_DIR) mark_as_advanced(LFC_INCLUDE_DIR LFC_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindLIBSSH2.cmake000066400000000000000000000036771465215307000211210ustar00rootroot00000000000000# # This module detects if libssh2 is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # LIBSSH2_LIBRARIES = full path to the libssh2 libraries # LIBSSH2_INCLUDE_DIR = include dir to be used when using the libssh2 library # LIBSSH2_FOUND = set to true if libssh2 was found successfully # # LIBSSH2_LOCATION # setting this enables search for libssh2 libraries / headers in this location find_package (PkgConfig) pkg_check_modules(LIBSSH2_PKG libssh2) if (LIBSSH2_PKG_FOUND) set (LIBSSH2_LIBRARIES ${LIBSSH2_PKG_LIBRARIES}) set (LIBSSH2_INCLUDE_DIRS ${LIBSSH2_PKG_INCLUDE_DIRS}) set (LIBSSH2_DEFINITIONS "${LIBSSH2_PKG_CFLAGS}") else (LIBSSH2_PKG_FOUND) set (CMAKE_FIND_FRAMEWORK NEVER) find_library(LIBSSH2_LIBRARIES NAMES ssh2 HINTS ${LIBSSH2_LOCATION} ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/lib64 DOC "The main libssh2 library" ) find_path(LIBSSH2_INCLUDE_DIRS NAMES libssh2_sftp.h HINTS ${LIBSSH2_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/Grid/epel/*/${PLATFORM}/include DOC "The libssh2 include directory" ) set (LIBSSH2_DEFINITIONS "") endif (LIBSSH2_PKG_FOUND) if (LIBSSH2_LIBRARIES) message (STATUS "LIBSSH2 libraries: ${LIBSSH2_LIBRARIES}") endif (LIBSSH2_LIBRARIES) if (LIBSSH2_INCLUDE_DIRS) message (STATUS "LIBSSH2 include dir: ${LIBSSH2_INCLUDE_DIRS}") endif (LIBSSH2_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set LIBSSH2_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (SSH2 DEFAULT_MSG LIBSSH2_LIBRARIES LIBSSH2_INCLUDE_DIRS ) mark_as_advanced(LIBSSH2_INCLUDE_DIRS LIBSSH2_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindPugiXML.cmake000066400000000000000000000031301465215307000213200ustar00rootroot00000000000000# # This module detects if pugixml is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # PUGIXML_LIBRARIES = full path to the pugixml libraries # PUGIXML_INCLUDE_DIR = include dir to be used when using the pugixml library # PUGIXML_FOUND = set to true if pugixml was found successfully # # PUGIXML_LOCATION # setting this enables search for pugixml libraries / headers in this location # ----------------------------------------------------- # PUGIXML Libraries # ----------------------------------------------------- find_library(PUGIXML_LIBRARIES NAMES pugixml HINTS ${PUGIXML_LOCATION}/lib ${PUGIXML_LOCATION}/lib64 ${PUGIXML_LOCATION}/lib32 DOC "The main pugixml library" ) # ----------------------------------------------------- # PUGIXML Include Directories # ----------------------------------------------------- find_path(PUGIXML_INCLUDE_DIR NAMES pugixml.hpp HINTS ${PUGIXML_LOCATION} ${PUGIXML_LOCATION}/include ${PUGIXML_LOCATION}/include/* /usr/include DOC "The pugixml include directory" ) if(PUGIXML_INCLUDE_DIR) message(STATUS "pugixml includes found in ${PUGIXML_INCLUDE_DIR}") endif() # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set PUGIXML_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(pugixml DEFAULT_MSG PUGIXML_LIBRARIES PUGIXML_INCLUDE_DIR) mark_as_advanced(PUGIXML_INCLUDE_DIR PUGIXML_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindPythonEasy.cmake000066400000000000000000000121001465215307000221330ustar00rootroot00000000000000# - Find python libraries # This module find the current version of python on your installation in a easy way # # PYTHON_LIBRARIES = path to the python library # PYTHON_LIBRARIES_${VERSION} = path to the python library for the distribution version # PYTHON_SITE_PACKAGES_${_VERSION} = path to the python modules dir # PYTHON_LIBRARIES = path to the python modules dir for the distribution version # PYTHON_INCLUDE_PATH = path to where Python.h is found # PYTHON_INCLUDE_PATH_${VERSION} = path to where Python.h for the distribution version # PYTHON_EXECUTABLE = python interpreter for the distribution version # PYTHON_EXECUTABLE_${VERSION} = available python version # PYTHON_AVAILABLE_VERSIONS = list all the version available on the system # -- LIST(APPEND L_PYTHON_VERSIONS "1.5" "1.6" "2.0" "2.1" "2.2" "2.4" "2.5" "2.6" "2.7" "2.8" "3" "3.0" "3.1" "3.2" "3.3" "3.4" "3.5" ) INCLUDE(FindPackageHandleStandardArgs) # determine the std version # main version executable FIND_PROGRAM(PYTHON_EXECUTABLE NAMES python HINTS ${ALT_PYTHON_LOCATION}/bin PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.4\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.3\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.2\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.1\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.0\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.8\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.2\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.1\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.0\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\1.6\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\1.5\\InstallPath] ) EXECUTE_PROCESS( COMMAND ${PYTHON_EXECUTABLE} -c "import sys; print('%s.%s' % sys.version_info[:2])" OUTPUT_VARIABLE PYTHON_CURRENT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) ## tests for all versions of the packages FOREACH(_VERSION ${L_PYTHON_VERSIONS}) STRING(REPLACE "." "" _VERSION_NO_DOTS ${_VERSION}) FIND_PROGRAM(PYTHON_EXECUTABLE_${_VERSION} NAMES python${_VERSION} HINTS ${ALT_PYTHON_LOCATION}/bin/ ) IF(PYTHON_EXECUTABLE_${_VERSION}) LIST(APPEND PYTHON_AVAILABLE_VERSIONS ${_VERSION}) EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE_${_VERSION}} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(True))" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES_${_VERSION} OUTPUT_STRIP_TRAILING_WHITESPACE) # find libs EXECUTE_PROCESS(COMMAND python${_VERSION}-config --libs OUTPUT_VARIABLE PYTHON_LIBRARY_${_VERSION} OUTPUT_STRIP_TRAILING_WHITESPACE ) SET(PYTHON_LIBRARIES_${_VERSION} ${PYTHON_LIBRARY_${_VERSION}}) # find include EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE_${_VERSION}} -c "from distutils import sysconfig; print(sysconfig.get_python_inc())" OUTPUT_VARIABLE PYTHON_INCLUDE_PATH_${_VERSION} OUTPUT_STRIP_TRAILING_WHITESPACE ) FIND_PACKAGE_HANDLE_STANDARD_ARGS(Python${_VERSION} DEFAULT_MSG PYTHON_EXECUTABLE_${_VERSION}) MARK_AS_ADVANCED(PYTHON_EXECUTABLE_${_VERSION}) MARK_AS_ADVANCED(PYTHON_SITE_PACKAGES_${_VERSION}) MARK_AS_ADVANCED(PYTHON_LIBRARIES_${_VERSION}) MARK_AS_ADVANCED(PYTHON_INCLUDE_PATH_${_VERSION}) ENDIF(PYTHON_EXECUTABLE_${_VERSION}) ENDFOREACH(_VERSION ${L_PYTHON_VERSIONS}) SET(PYTHON_SITE_PACKAGES ${PYTHON_SITE_PACKAGES_${PYTHON_CURRENT_VERSION}} CACHE PATH "path to the python modules dir for the distribution version") SET(PYTHON_LIBRARIES ${PYTHON_LIBRARIES_${PYTHON_CURRENT_VERSION}} CACHE PATH "path to the python modules dir for the distribution version") SET(PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE_PATH_${PYTHON_CURRENT_VERSION}} CACHE PATH "path to the python include dir for the distribution version") FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonCurrentVersion DEFAULT_MSG PYTHON_CURRENT_VERSION ) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonCurrentInclude DEFAULT_MSG PYTHON_INCLUDE_PATH ) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonCurrentLibs DEFAULT_MSG PYTHON_LIBRARIES ) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonCurrentModsDir DEFAULT_MSG PYTHON_SITE_PACKAGES ) IF(PYTHON_EXECUTABLE_3) EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE_3} -c "import sys; print('%s.%s' % sys.version_info[:2])" OUTPUT_VARIABLE PYTHON3_CURRENT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) ENDIF() MARK_AS_ADVANCED(PYTHON_EXECUTABLE) MARK_AS_ADVANCED(PYTHON_SITE_PACKAGES) MARK_AS_ADVANCED(PYTHON_LIBRARIES) MARK_AS_ADVANCED(PYTHON_INCLUDE_PATH) srm-ifce-v1.24.7/cmake/modules/FindSRM_IFCE.cmake000066400000000000000000000045471465215307000212770ustar00rootroot00000000000000# # This module detects if SRM-IFCE is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # SRM_IFCE_LIBRARIES = full path to the SRM-IFCE libraries # SRM_IFCE_INCLUDE_DIR = include dir to be used when using the SRM-IFCE library # SRM_IFCE_FOUND = set to true if SRM-IFCE was found successfully # # SRM_IFCE_LOCATION # setting this enables search for SRM-IFCE libraries / headers in this location # ----------------------------------------------------- # Try with pkgconfig first # ----------------------------------------------------- find_package(PkgConfig) pkg_check_modules(SRM_IFCE_PKG REQUIRED srm-ifce>=1.15.0) if (SRM_IFCE_PKG_FOUND) set (SRM_IFCE_LIBRARIES "${SRM_IFCE_PKG_LIBRARIES}") set (SRM_IFCE_CFLAGS "${SRM_IFCE_PKG_CFLAGS}") if (SRM_IFCE_PKG_INCLUDE_DIRS) set (SRM_IFCE_INCLUDE_DIR "${SRM_IFCE_PKG_INCLUDE_DIRS}") else () set (SRM_IFCE_INCLUDE_DIR "/usr/include") endif () else () # SRM-IFCE Libraries find_library(SRM_IFCE_LIBRARIES NAMES gfal_srm_ifce HINTS ${SRM_IFCE_LOCATION}/lib ${SRM_IFCE_LOCATION}/lib64 ${SRM_IFCE_LOCATION}/lib32 ${STAGE_DIR}/lib ${STAGE_DIR}/lib64 ${CMAKE_INSTALL_PREFIX}/Grid/srm-ifce/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/srm-ifce/*/${PLATFORM}/lib64 DOC "The main srm-ifce library" ) # SRM-IFCE Include Directories find_path(SRM_IFCE_INCLUDE_DIR NAMES gfal_srm_ifce.h HINTS ${SRM_IFCE_LOCATION} ${SRM_IFCE_LOCATION}/include ${SRM_IFCE_LOCATION}/include/* ${STAGE_DIR}/include ${STAGE_DIR}/include ${CMAKE_INSTALL_PREFIX}/Grid/srm-ifce/*/${PLATFORM}/include DOC "The srm-ifce include directory" ) set (SRM_IFCE_CFLAGS "") endif() if(SRM_IFCE_INCLUDE_DIR) message(STATUS "SRM-IFCE includes found in ${SRM_IFCE_INCLUDE_DIR}") endif() # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set SRM_IFCE_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(SRM_IFCE DEFAULT_MSG SRM_IFCE_LIBRARIES SRM_IFCE_INCLUDE_DIR) mark_as_advanced(SRM_IFCE_LIBRARIES SRM_IFCE_INCLUDE_DIR SRM_IFCE_CFLAGS) srm-ifce-v1.24.7/cmake/modules/FindUUID.cmake000066400000000000000000000035341465215307000206110ustar00rootroot00000000000000# # This module detects if uuid is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # UUID_LIBRARIES = full path to the uuid libraries # UUID_INCLUDE_DIR = include dir to be used when using the uuid library # UUID_FOUND = set to true if uuid was found successfully # # UUID_LOCATION # setting this enables search for uuid libraries / headers in this location find_package (PkgConfig) pkg_check_modules(UUID_PKG uuid) if (UUID_PKG_FOUND) set (UUID_LIBRARIES ${UUID_PKG_LIBRARIES}) set (UUID_INCLUDE_DIRS ${UUID_PKG_INCLUDE_DIRS}) if (NOT UUID_INCLUDE_DIRS) set (UUID_INCLUDE_DIRS "/usr/include") endif (NOT UUID_INCLUDE_DIRS) set (UUID_DEFINITIONS "${UUID_PKG_CFLAGS} ${UUID_PKG_CFLAGS_OTHER}") else (UUID_PKG_FOUND) find_library(UUID_LIBRARIES NAMES uuid HINTS ${UUID_LOCATION} ${CMAKE_INSTALL_PREFIX}/uuid/*/${PLATFORM}/ DOC "The uuid library" ) find_path(UUID_INCLUDE_DIRS NAMES uuid.h HINTS ${UUID_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/uuid/*/${PLATFORM}/ DOC "The uuid include directory" ) set (UUID_DEFINITIONS "") endif (UUID_PKG_FOUND) if (UUID_LIBRARIES) message (STATUS "UUID libraries: ${UUID_LIBRARIES}") endif (UUID_LIBRARIES) if (UUID_INCLUDE_DIRS) message (STATUS "UUID include dir: ${UUID_INCLUDE_DIRS}") endif (UUID_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set UUID_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (UUID DEFAULT_MSG UUID_LIBRARIES UUID_INCLUDE_DIRS ) mark_as_advanced(UUID_INCLUDE_DIRS UUID_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindVOMS.cmake000066400000000000000000000041161465215307000206240ustar00rootroot00000000000000# # This module detects if voms is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # VOMS_LIBRARIES = full path to the voms libraries # VOMS_INCLUDE_DIR = include dir to be used when using the voms library # VOMS_DEFINITIONS = compiler flags # VOMS_FOUND = set to true if voms was found successfully # # VOMS_LOCATION # setting this enables search for voms libraries / headers in this location find_package (PkgConfig) pkg_search_module(VOMS_PKG voms-2.0 voms) if (VOMS_PKG_FOUND) set (VOMS_LIBRARIES ${VOMS_PKG_LIBRARIES}) set (VOMS_INCLUDE_DIRS ${VOMS_PKG_INCLUDE_DIRS}) if (NOT VOMS_INCLUDE_DIRS) set (VOMS_INCLUDE_DIRS "/usr/include") endif (NOT VOMS_INCLUDE_DIRS) set (VOMS_DEFINITIONS "${VOMS_PKG_CFLAGS} ${VOMS_PKG_CFLAGS_OTHER}") else (VOMS_PKG_FOUND) message("SEARCH FOR ${CMAKE_INSTALL_PREFIX}/Grid/voms/*/${PLATFORM}/lib64") find_library(VOMS_LIBRARIES NAMES vomsapi HINTS ${VOMS_LOCATION} ${CMAKE_INSTALL_PREFIX}/Grid/voms/*/${PLATFORM}/lib ${CMAKE_INSTALL_PREFIX}/Grid/voms/*/${PLATFORM}/lib64 DOC "The voms library" ) find_path(VOMS_INCLUDE_DIRS NAMES voms/voms_api.h HINTS ${VOMS_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/Grid/voms/*/${PLATFORM}/include DOC "The voms include directory" ) set (VOMS_CFLAGS "") endif (VOMS_PKG_FOUND) if (VOMS_LIBRARIES) message (STATUS "VOMS libraries: ${VOMS_LIBRARIES}") endif (VOMS_LIBRARIES) if (VOMS_INCLUDE_DIRS) message (STATUS "VOMS include dir: ${VOMS_INCLUDE_DIRS}") endif (VOMS_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set VOMS_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (VOMS DEFAULT_MSG VOMS_LIBRARIES VOMS_INCLUDE_DIRS ) mark_as_advanced(VOMS_LIBRARIES VOMS_INCLUDE_DIRS VOMS_DEFINITIONS) srm-ifce-v1.24.7/cmake/modules/FindXROOTD.cmake000066400000000000000000000041511465215307000210560ustar00rootroot00000000000000# - Try to find XROOTD libraries # # XROOTD_FOUND - System has XROOTD # XROOTD_INCLUDE_DIR - The XROOTD include directory # XROOTD_LIBRARIES - The libraries needed to use XROOTD # # XROOTD_LOCATION # setting this enables search for xrootd libraries / headers in this location # ----------------------------------------------------- # XROOTD Libraries # ----------------------------------------------------- find_library(XROOTD_CL NAMES XrdCl HINTS ${XROOTD_LOCATION}/lib ${XROOTD_LOCATION}/lib64 ${XROOTD_LOCATION}/lib32 DOC "xrootd cl" ) find_library(XROOTD_CLIENT NAMES XrdClient HINTS ${XROOTD_LOCATION}/lib ${XROOTD_LOCATION}/lib64 ${XROOTD_LOCATION}/lib32 DOC "xrootd client" ) find_library(XROOTD_POSIX NAMES XrdPosix HINTS ${XROOTD_LOCATION}/lib ${XROOTD_LOCATION}/lib64 ${XROOTD_LOCATION}/lib32 DOC "xrootd posix libraries" ) find_library(XROOTD_UTIL NAMES XrdUtils HINTS ${XROOTD_LOCATION}/lib ${XROOTD_LOCATION}/lib64 ${XROOTD_LOCATION}/lib32 DOC "xrootd util" ) set(XROOTD_LIBRARIES ${XROOTD_CL} ${XROOTD_CLIENT} ${XROOTD_POSIX} ${XROOTD_UTIL} ) if(XROOTD_LIBRARIES) message(STATUS "xrootd library found in ${XROOTD_LIBRARIES}") endif() # ----------------------------------------------------- # XROOTD Include Directories # ----------------------------------------------------- find_path(XROOTD_INCLUDE_DIR NAMES XrdVersion.hh HINTS ${XROOTD_LOCATION} ${XROOTD_LOCATION}/include ${XROOTD_LOCATION}/include/* ${XROOTD_LOCATION}/src/ /usr/include/xrootd ${CMAKE_INSTALL_PREFIX}/include/xrootd DOC "The xrootd include directory" ) if(XROOTD_INCLUDE_DIR) message(STATUS "xrootd includes found in ${XROOTD_INCLUDE_DIR}") endif() # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set XROOTD_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(xrootd DEFAULT_MSG XROOTD_LIBRARIES XROOTD_INCLUDE_DIR) mark_as_advanced(XROOTD_INCLUDE_DIR XROOTD_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindZLIB.cmake000066400000000000000000000035441465215307000206040ustar00rootroot00000000000000# # This module detects if zlib is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # ZLIB_LIBRARIES = full path to the zlib libraries # ZLIB_INCLUDE_DIR = include dir to be used when using the glib2 library # ZLIB_FOUND = set to true if zlib was found successfully # # ZLIB_LOCATION # setting this enables search for zlib libraries / headers in this location find_package (PkgConfig) pkg_check_modules(ZLIB_PKG zlib) if (ZLIB_PKG_FOUND) set (ZLIB_LIBRARIES ${ZLIB_PKG_LIBRARIES}) set (ZLIB_INCLUDE_DIRS ${ZLIB_PKG_INCLUDE_DIRS}) if (NOT ZLIB_INCLUDE_DIRS) set (ZLIB_INCLUDE_DIRS "/usr/include") endif (NOT ZLIB_INCLUDE_DIRS) set (ZLIB_DEFINITIONS "${ZLIB_PKG_CFLAGS} ${ZLIB_PKG_CFLAGS_OTHER}") else (ZLIB_PKG_FOUND) find_library(ZLIB_LIBRARIES NAMES zlib HINTS ${ZLIB_LOCATION} ${CMAKE_INSTALL_PREFIX}/zlib/*/${PLATFORM}/ DOC "The main glib2 library" ) find_path(ZLIB_INCLUDE_DIRS NAMES zlib.h HINTS ${ZLIB_LOCATION}/include/* ${CMAKE_INSTALL_PREFIX}/zlib/*/${PLATFORM}/ DOC "The glib2 include directory" ) set (ZLIB_DEFINITIONS "") endif (ZLIB_PKG_FOUND) if (ZLIB_LIBRARIES) message (STATUS "ZLIB libraries: ${ZLIB_LIBRARIES}") endif (ZLIB_LIBRARIES) if (ZLIB_INCLUDE_DIRS) message (STATUS "ZLIB include dir: ${ZLIB_INCLUDE_DIRS}") endif (ZLIB_INCLUDE_DIRS) # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args (ZLIB DEFAULT_MSG ZLIB_LIBRARIES ZLIB_INCLUDE_DIRS ) mark_as_advanced(ZLIB_INCLUDE_DIRS ZLIB_LIBRARIES) srm-ifce-v1.24.7/cmake/modules/FindgSOAP.cmake000066400000000000000000000114331465215307000207510ustar00rootroot00000000000000# # This module detects if gsoap is installed and determines where the # include files and libraries are. # # This code sets the following variables: # # GSOAP_LIBRARIES = full path to the gsoap libraries # GSOAP_SSL_LIBRARIES = full path to the gsoap ssl libraries # GSOAP_INCLUDE_DIR = include dir to be used when using the gsoap library # GSOAP_WSDL2H = wsdl2h binary # GSOAP_SOAPCPP2 = soapcpp2 binary # GSOAP_FOUND = set to true if gsoap was found successfully # # GSOAP_LOCATION # setting this enables search for gsoap libraries / headers in this location # ------------------------------------------------------ # try pkg config search # # ----------------------------------------------------- find_package(PkgConfig) pkg_check_modules(PC_GSOAP gsoap) IF(PC_GSOAP_FOUND) SET(GSOAP_LIBRARIES ${PC_GSOAP_LIBRARIES}) SET(GSOAP_INCLUDE_DIR ${PC_GSOAP_INCLUDE_DIRS}) if (NOT GSOAP_INCLUDE_DIR) set (GSOAP_INCLUDE_DIR "/usr/include") endif (NOT GSOAP_INCLUDE_DIR) SET(GSOAP_DEFINITIONS "${PC_GSOAP_CFLAGS} ${PC_GSOAP_CFLAGS_OTHER}") ELSE(PC_GSOAP_FOUND) # ----------------------------------------------------- # GSOAP Libraries # ----------------------------------------------------- find_library(GSOAP_LIBRARIES NAMES gsoap HINTS ${GSOAP_LOCATION} ${CMAKE_INSTALL_PREFIX}/gsoap/*/${PLATFORM}/ DOC "The main gsoap library" ) # ----------------------------------------------------- # GSOAP Include Directories # ----------------------------------------------------- find_path(GSOAP_INCLUDE_DIR NAMES stdsoap2.h HINTS ${GSOAP_LOCATION} ${CMAKE_INSTALL_PREFIX}/gsoap/*/${PLATFORM}/ DOC "The gsoap include directory" ) SET(GSOAP_DEFINITIONS "") ENDIF(PC_GSOAP_FOUND) # ----------------------------------------------------- # GSOAP ssl Libraries # ----------------------------------------------------- find_library(GSOAP_SSL_LIBRARIES NAMES gsoapssl HINTS ${GSOAP_LOCATION} ${CMAKE_INSTALL_PREFIX}/gsoap/*/${PLATFORM}/ DOC "The ssl gsoap library" ) # ----------------------------------------------------- # GSOAP Binaries # ----------------------------------------------------- find_program(GSOAP_WSDL2H NAMES wsdl2h HINTS ${GSOAP_LOCATION}/bin ${CMAKE_INSTALL_PREFIX}/gsoap/*/${PLATFORM}/bin/ DOC "The gsoap bin directory" ) find_program(GSOAP_SOAPCPP2 NAMES soapcpp2 HINTS ${GSOAP_LOCATION}/bin ${CMAKE_INSTALL_PREFIX}/gsoap/*/${PLATFORM}/bin/ DOC "The gsoap bin directory" ) # ----------------------------------------------------- # GSOAP_276_COMPAT_FLAGS and GSOAPVERSION # try to determine the flagfor the 2.7.6 compatiblity, break with 2.7.13 and re-break with 2.7.16 # ---------------------------------------------------- message(STATUS " - wsdlh : ${GSOAP_WSDL2H}") message(STATUS " - SOAPCPP2 : ${GSOAP_SOAPCPP2}") # some versions of soapcpp2 interpret "-v" as verbose, and hang while waiting for input # try "-help" first execute_process(COMMAND ${GSOAP_SOAPCPP2} "-help" OUTPUT_VARIABLE GSOAP_STRING_VERSION ERROR_VARIABLE GSOAP_STRING_VERSION ) string(REGEX MATCH "[0-9]*\\.[0-9]*\\.[0-9]*" GSOAP_VERSION ${GSOAP_STRING_VERSION}) # for some reason, -help stopped giving the version at some point # but -v also hangs, so try -V (gah) if( "${GSOAP_VERSION}" STREQUAL ".." OR "${GSOAP_VERSION}" STREQUAL "") execute_process(COMMAND ${GSOAP_SOAPCPP2} "-V" OUTPUT_VARIABLE GSOAP_STRING_VERSION ERROR_VARIABLE GSOAP_STRING_VERSION ) string(REGEX MATCH "[0-9]*\\.[0-9]*\\.[0-9]*" GSOAP_VERSION ${GSOAP_STRING_VERSION}) endif() # nothing worked, fallback to -v if( "${GSOAP_VERSION}" STREQUAL ".." OR "${GSOAP_VERSION}" STREQUAL "") execute_process(COMMAND ${GSOAP_SOAPCPP2} "-v" OUTPUT_VARIABLE GSOAP_STRING_VERSION ERROR_VARIABLE GSOAP_STRING_VERSION ) string(REGEX MATCH "[0-9]*\\.[0-9]*\\.[0-9]*" GSOAP_VERSION ${GSOAP_STRING_VERSION}) endif() message(STATUS " - GSOAP VERSION : ${GSOAP_VERSION}") if( "${GSOAP_VERSION}" VERSION_LESS "2.7.6") set(GSOAP_276_COMPAT_FLAGS "") elseif ( "${GSOAP_VERSION}" VERSION_LESS "2.7.14") set(GSOAP_276_COMPAT_FLAGS "-z") else ( "${GSOAP_VERSION}" VERSION_LESS "2.7.14") set(GSOAP_276_COMPAT_FLAGS "-z1 -z2") endif ( "${GSOAP_VERSION}" VERSION_LESS "2.7.6") # ----------------------------------------------------- # handle the QUIETLY and REQUIRED arguments and set GSOAP_FOUND to TRUE if # all listed variables are TRUE # ----------------------------------------------------- include(FindPackageHandleStandardArgs) find_package_handle_standard_args(gsoap DEFAULT_MSG GSOAP_LIBRARIES GSOAP_INCLUDE_DIR GSOAP_WSDL2H GSOAP_SOAPCPP2) mark_as_advanced(GSOAP_INCLUDE_DIR GSOAP_LIBRARIES GSOAP_DEFINITIONS GSOAP_WSDL2H GSOAP_SOAPCPP2) srm-ifce-v1.24.7/cmake/modules/MacroAddDoxygen.cmake000066400000000000000000000010611465215307000222430ustar00rootroot00000000000000## ## Doxygen macro, allow Doxygen generation from cmake ## do a ""make doc" for the generation macro(addDoxyGeneration DOXYFILE_LOCATION) find_package(Doxygen) if(DOXYGEN_FOUND) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${DOXYFILE_LOCATION} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) endif(DOXYGEN_FOUND) endmacro(addDoxyGeneration DOXYFILE_LOCATION) srm-ifce-v1.24.7/cmake/modules/MacroAddepydoc.cmake000066400000000000000000000036451465215307000221230ustar00rootroot00000000000000## ## Doxygen macro, allow Doxygen generation from cmake ## do a ""make doc" for the generation # for old version < 3.0 cmake variables replace config files ( not supported ) ( needed for EPEL 5 support ) # EPYDOC_MODULE_PATH path of the module to configure # EPYDOC_MODULE_URL project url # EPYDOC_MODULE_NAME project name # macro(addEpydocGeneration EPYDOC_CONFIG_LOCATION) IF(NOT EPYDOC_FOUND) execute_process(COMMAND epydoc --version OUTPUT_VARIABLE EPYDOC_VERSION_UNPARSED ERROR_VARIABLE EPYDOC_ERROR ) IF(${EPYDOC_ERROR}) message(SEND_ERROR "epydoc not found....") ELSE(${EPYDOC_ERROR}) string(REGEX REPLACE ".*version (.*)\n" "\\1" EPYDOC_VERSION ${EPYDOC_VERSION_UNPARSED}) message(STATUS " epydoc version ..... ${EPYDOC_VERSION} ") ENDIF(${EPYDOC_ERROR}) ENDIF(NOT EPYDOC_FOUND) IF(${EPYDOC_VERSION} VERSION_GREATER "3.0.0") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${EPYDOC_CONFIG_LOCATION} ${CMAKE_CURRENT_BINARY_DIR}/epydoc_config @ONLY) add_custom_target(doc epydoc --config ${CMAKE_CURRENT_BINARY_DIR}/epydoc_config -v WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generate API documentation with epydoc" VERBATIM ) ELSE(${EPYDOC_VERSION} VERSION_GREATER "3.0.0") # VERSION TOO OLD, NO CONFIG FILE MANAGEMENT add_custom_target(doc epydoc --html -u ${EPYDOC_MODULE_URL} -n ${EPYDOC_MODULE_NAME} -v -o ${CMAKE_CURRENT_BINARY_DIR}/html ${EPYDOC_MODULE_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generate API documentation with epydoc" VERBATIM ) ENDIF(${EPYDOC_VERSION} VERSION_GREATER "3.0.0") endmacro(addEpydocGeneration EPYDOC_CONFIG_LOCATION) srm-ifce-v1.24.7/cmake/modules/MacroCopyFile.cmake000066400000000000000000000017141465215307000217340ustar00rootroot00000000000000# - macro_copy_file(_src _dst) # Copies a file to ${_dst} only if ${_src} is different (newer) than ${_dst} # # Example: # macro_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/icon.png ${CMAKE_CURRENT_BINARY_DIR}/.) # Copies file icon.png to ${CMAKE_CURRENT_BINARY_DIR} directory # # Copyright (c) 2006-2007 Wengo # Copyright (c) 2006-2008 Andreas Schneider # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING file. macro(copy_files GLOBPAT DESTINATION) file(GLOB COPY_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${GLOBPAT}) add_custom_target(copy ALL COMMENT "Copying files: ${GLOBPAT}") foreach(FILENAME ${COPY_FILES}) set(SRC "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}") set(DST "${DESTINATION}/${FILENAME}") add_custom_command( TARGET copy COMMAND ${CMAKE_COMMAND} -E copy ${SRC} ${DST} ) endforeach(FILENAME) endmacro(copy_files) srm-ifce-v1.24.7/cmake/modules/ReleaseDebugAutoFlags.cmake000066400000000000000000000006201465215307000233700ustar00rootroot00000000000000## debug / release autoManagement set(CMAKE_C_FLAGS_RELEASE "-O2") set(CMAKE_C_FLAGS_DEBUG "-g3 -O0 -ggdb -Wall -fstack-protector-all") set(CMAKE_CXX_FLAGS_RELEASE "-O2") set(CMAKE_CXX_FLAGS_DEBUG "-g3 -O0 -ggdb -Wall -fstack-protector-all") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -Wall -fstack-protector-all") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -Wall -fstack-protector-all") srm-ifce-v1.24.7/packaging/000077500000000000000000000000001465215307000154275ustar00rootroot00000000000000srm-ifce-v1.24.7/packaging/Makefile000066400000000000000000000042551465215307000170750ustar00rootroot00000000000000NAME=srm-ifce SPEC=rpm/$(NAME).spec VERSION=${shell grep '^Version:' $(SPEC) | awk '{print $$2}' } # Leave blank. To be overriden by CI tools. RELEASE= CWD=${shell pwd} RPMBUILD=/tmp/rpmbuild SRPMS=$(CWD) RPMS=$(CWD)/out MOCK_CHROOT=epel-6-cernonly-x86_64 MOCK_FLAGS=--verbose RPMDEFINES_SRC=--define='_topdir $(RPMBUILD)' \ --define='_sourcedir $(CWD)' \ --define='_builddir %{_topdir}/BUILD' \ --define='_srcrpmdir $(SRPMS)' \ --define='_rpmdir $(RPMS)' \ --define "_source_filedigest_algorithm md5" RPMDEFINES_BIN=--define='_topdir $(RPMBUILD)' \ --define='_sourcedir %{_topdir}/SOURCES' \ --define='_builddir %{_topdir}/BUILD' \ --define='_srcrpmdir $(SRPMS).' \ --define='_rpmdir $(RPMS)' \ --define "_binary_filedigest_algorithm md5" PBUILDER_FLAGS= PBUILDER_TMP="/tmp/" all: srpm clean: rm -fv *.tar.gz rm -fv *.rpm rm -fv *.log rm -rfv out rm -rfv "$(RPMBUILD)" rm -fv *.dsc *.gz *.changes dist: clean tar vczf "$(NAME)-$(VERSION).tar.gz" --exclude="packaging" --exclude=".git*" --exclude="*.pyc" --transform="s,^,$(NAME)-$(VERSION)/," .. $(RPMBUILD): mkdir -p "$(RPMBUILD)" override_release: $(SPEC) $(if $(RELEASE), sed -i "s/Release:.*/Release: $(RELEASE)%{?dist}/g" "$(SPEC)") srpm: dist $(SPEC) $(RPMBUILD) override_release /usr/bin/rpmbuild --nodeps -bs $(RPMDEFINES_SRC) $(SPEC) rpm: srpm /usr/bin/rpmbuild --rebuild $(RPMDEFINES_BIN) $(NAME)-$(VERSION)-*.src.rpm mock: srpm /usr/bin/mock $(MOCK_FLAGS) -r $(MOCK_CHROOT) $(NAME)-$(VERSION)-*.src.rpm deb-src: dist rm -rf "$(PBUILDER_TMP)/$(NAME)-$(VERSION)" tar xzf "$(NAME)-$(VERSION).tar.gz" -C "$(PBUILDER_TMP)" cp -rv debian "$(PBUILDER_TMP)/$(NAME)-$(VERSION)" $(if $(RELEASE), sed -ri "s/($(NAME) )\((([0-9]+\.)+[0-9]+)-[0-9]+\)/\\1(\\2-$(RELEASE))/g" "$(PBUILDER_TMP)/$(NAME)-$(VERSION)/debian/changelog") cp -f "$(NAME)-$(VERSION).tar.gz" "$(NAME)_$(VERSION).orig.tar.gz" cp -f "$(NAME)-$(VERSION).tar.gz" "$(PBUILDER_TMP)/$(NAME)_$(VERSION).orig.tar.gz" cd "$(PBUILDER_TMP)/$(NAME)-$(VERSION)"; \ debuild -us -uc -S cp -f $(PBUILDER_TMP)/$(NAME)_$(VERSION)*.diff.gz . cp -f $(PBUILDER_TMP)/$(NAME)_$(VERSION)*.dsc . deb: deb-src pbuilder build $(PBUILDER_FLAGS) $(NAME)_$(VERSION)*.dsc srm-ifce-v1.24.7/packaging/debian/000077500000000000000000000000001465215307000166515ustar00rootroot00000000000000srm-ifce-v1.24.7/packaging/debian/changelog000066400000000000000000000057601465215307000205330ustar00rootroot00000000000000srm-ifce (1.24.7-1) unstable; urgency=low * New upstream release -- Mihai Patrascoiu Tue, 30 Jul 2024 14:00:00 +0200 srm-ifce (1.24.6-1) unstable; urgency=low * New upstream release -- Joao Lopes Tue, 07 Feb 2023 11:00:00 +0100 srm-ifce (1.24.5-1) unstable; urgency=low * New upstream release -- Mihai Patrascoiu Mon, 15 Feb 2021 14:00:00 +0100 srm-ifce (1.24.4-1) unstable; urgency=low * New upstream release -- Andrea Manzi Tue, 20 Jul 2018 09:00:00 +0100 srm-ifce (1.24.3-1) unstable; urgency=low * New upstream release -- Alejandro Álvarez Ayllón Wed, 19 Jul 2017 09:08:00 +0100 srm-ifce (1.24.2-1) unstable; urgency=low * New upstream release -- Alejandro Álvarez Ayllón Thu, 16 Feb 2017 08:56:00 +0100 srm-ifce (1.24.1-1) unstable; urgency=low * New upstream release -- Alejandro Álvarez Ayllón Tue, 07 Jun 2016 09:10:00 +0200 srm-ifce (1.23.3-1) unstable; urgency=medium * New upstream release -- Alejandro Álvarez Ayllon Mon, 09 Nov 2015 08:34:00 +0200 srm-ifce (1.23.2-1) unstable; urgency=medium * New upstream release -- Alejandro Álvarez Ayllon Tue, 13 Oct 2015 13:52:00 +0200 srm-ifce (1.23.1-1) unstable; urgency=medium * New upstream release -- Mattias Ellert Thu, 11 Jun 2015 19:30:56 +0200 srm-ifce (1.22.2-1) unstable; urgency=medium * New upstream release * Drop patch srm-ifce-errno.patch (fixed upstream) -- Mattias Ellert Thu, 09 Apr 2015 16:04:54 +0200 srm-ifce (1.21.4-2) unstable; urgency=medium * Workaround for missing ETIME (kfreebsd) and EBADR (kfreebsd and hurd) * Drop patch srm-ifce-ecomm.patch (fixed upstream) -- Mattias Ellert Tue, 09 Dec 2014 14:25:08 +0100 srm-ifce (1.21.4-1) unstable; urgency=medium * New upstream release -- Mattias Ellert Tue, 09 Dec 2014 07:34:15 +0100 srm-ifce (1.20.1-1) unstable; urgency=medium * New upstream release -- Mattias Ellert Fri, 24 Oct 2014 21:11:20 +0200 srm-ifce (1.18.0-1) unstable; urgency=low * New upstream release -- Mattias Ellert Mon, 14 Oct 2013 13:52:04 +0200 srm-ifce (1.16.0-1) unstable; urgency=low * New upstream release -- Mattias Ellert Sun, 11 Aug 2013 05:47:32 +0200 srm-ifce (1.15.2-2) unstable; urgency=low * Workaround missing ECOMM on hurd and kfreebsd -- Mattias Ellert Sat, 04 May 2013 23:12:43 +0200 srm-ifce (1.15.2-1) unstable; urgency=low * New upstream release -- Mattias Ellert Fri, 03 May 2013 14:54:55 +0200 srm-ifce (1.13.0-1) unstable; urgency=low * Initial release (Closes: #687680) -- Mattias Ellert Fri, 14 Sep 2012 14:03:02 +0200 srm-ifce-v1.24.7/packaging/debian/compat000066400000000000000000000000021465215307000200470ustar00rootroot000000000000008 srm-ifce-v1.24.7/packaging/debian/control000066400000000000000000000017361465215307000202630ustar00rootroot00000000000000Source: srm-ifce Priority: optional Maintainer: Mattias Ellert Build-Depends: debhelper (>= 8.0.0), cmake, libcgsi-gsoap-dev (>= 1.3.6), libglib2.0-dev, libglobus-ftp-client-dev, libglobus-gss-assist-dev, pkg-config Standards-Version: 3.9.6 Section: libs Homepage: http://dmc.web.cern.ch/ Package: libgfal-srm-ifce1 Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: SRM client side library srm-ifce is a client side implementation of the SRMv1 and SRMv2 specification for GFAL1/2 and FTS. SRM means Storage Resource Manager Interface, it is a specification of a SOAP interface providing a generic way to manage distributed storage systems. Package: srm-ifce-dev Section: libdevel Architecture: any Depends: libgfal-srm-ifce1 (= ${binary:Version}), ${misc:Depends}, libglib2.0-dev Description: SRM client side headers and development files Development libraries, pkgconfig files and header files for the srm-ifce. srm-ifce-v1.24.7/packaging/debian/copyright000066400000000000000000000021261465215307000206050ustar00rootroot00000000000000Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: srm-ifce Source: https://gitlab.cern.ch/dmc/srm-ifce.git Files: * Copyright: Copyright (c) Members of the EGEE Collaboration. 2004-2015. See http://www.eu-egee.org/partners/ for details on the copyright holders. License: Apache-2.0 Files: debian/* Copyright: 2012-2015, Mattias Ellert License: Apache-2.0 License: Apache-2.0 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. . On Debian systems the full text of the Apache-2.0 license can be found in the /usr/share/common-licenses/Apache-2.0 file. srm-ifce-v1.24.7/packaging/debian/libgfal-srm-ifce1.dirs000066400000000000000000000000101465215307000227070ustar00rootroot00000000000000usr/lib srm-ifce-v1.24.7/packaging/debian/libgfal-srm-ifce1.docs000066400000000000000000000000331465215307000227030ustar00rootroot00000000000000readme.html README VERSION srm-ifce-v1.24.7/packaging/debian/libgfal-srm-ifce1.install000066400000000000000000000000741465215307000234260ustar00rootroot00000000000000usr/bin/gfal_srm_ifce_version usr/lib/libgfal_srm_ifce.so.* srm-ifce-v1.24.7/packaging/debian/rules000077500000000000000000000012131465215307000177260ustar00rootroot00000000000000#!/usr/bin/make -f # -*- makefile -*- VERSION=1.23.1 -include /usr/share/dpkg/buildflags.mk CFLAGS += $(CPPFLAGS) CXXFLAGS += $(CPPFLAGS) export CFLAGS CXXFLAGS LDFLAGS %: dh $@ override_dh_auto_configure: dh_auto_configure -- -DLIB_SUFFIX="" override_dh_install: rm -rf debian/tmp/usr/share/doc dh_install --fail-missing get-orig-source: git clone https://gitlab.cern.ch/dmc/srm-ifce.git srm-ifce-$(VERSION) ( cd srm-ifce-$(VERSION) ; \ git checkout v$(VERSION) ; \ git submodule init ; \ git submodule update \ ) tar -c -z --exclude-vcs -f ../srm-ifce_$(VERSION).orig.tar.gz srm-ifce-$(VERSION) rm -rf srm-ifce-$(VERSION) srm-ifce-v1.24.7/packaging/debian/srm-ifce-dev.dirs000066400000000000000000000000241465215307000220110ustar00rootroot00000000000000usr/lib usr/include srm-ifce-v1.24.7/packaging/debian/srm-ifce-dev.docs000066400000000000000000000000161465215307000220010ustar00rootroot00000000000000RELEASE-NOTES srm-ifce-v1.24.7/packaging/debian/srm-ifce-dev.install000066400000000000000000000001601465215307000225170ustar00rootroot00000000000000usr/lib/pkgconfig/* usr/lib/libgfal_srm_ifce.so /usr/include/gfal_srm_ifce.h /usr/include/gfal_srm_ifce_types.h srm-ifce-v1.24.7/packaging/gfal2-repo-manager.py000077500000000000000000000164101465215307000213540ustar00rootroot00000000000000#!/usr/bin/env python3 # Author: Georgios Bitzes import os, subprocess, sys, inspect, argparse, re, shutil, errno DRY_RUN = False NO_CREATE_REPO = False RAWHIDE_VERSIONS = ["fc41"] def sh(cmd): # poor man's subprocess.check_output, not supported on SL6 process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, stderr=subprocess.STDOUT) output, unused_err = process.communicate() retcode = process.poll() if retcode: raise Exception("Command {0} exited with code {1}. Output: {2}".format(cmd, retcode, output)) return output def ensure_valid_choice(parser, choice, text, available): if choice: if type(choice) == str: choice = [choice] for item in choice: if item not in available: parser.error("unrecognized {0}: '{1}'. Available choices: {2}".format(text, item, available)) def add_dependency(parser, when_present, dependency): if hasattr(parser, when_present): if not hasattr(parser, dependency): parser.error("argument --{0} is required when --{1} is present".format(dependency, when_present)) def declare_required(parser, args, choice): choice = choice.replace("-", "_") if not hasattr(args, choice): parser.error("argument --{0} is required".format(choice)) def bailout(msg): raise ValueError(msg) # poor man's enum class PackageType: Binary, NoArch, Source = range(1, 4) class Package(object): def __init__(self, path): self.path = path if not os.path.isfile(self.path): bailout("Not a file: {0}".format(self.path)) self.filename = os.path.basename(self.path) if self.filename.endswith(".src.rpm"): self.type = PackageType.Source tmp = self.filename[0:-8] elif self.filename.endswith(".noarch.rpm"): self.type = PackageType.NoArch tmp = self.filename[0:-11] elif self.filename.endswith(".rpm"): self.type = PackageType.Binary tmp = self.filename[0:-4] else: bailout("Unable to parse RPM type for {0}".format(self.path)) if self.type == PackageType.Source or self.type == PackageType.NoArch: self.arch = None elif tmp.endswith(".x86_64"): tmp = tmp[0:-7] self.arch = "x86_64" elif tmp.endswith(".i386"): tmp = tmp[0:-5] self.arch = "i386" else: bailout("Unable to determine architecture for {0}".format(self.path)) self.platform = tmp.split(".")[-1] tmp = tmp[0:-len(self.platform)-1] if self.platform == "cern": self.platform = tmp.split(".")[-1] tmp = tmp[0:-len(self.platform)-1] if self.platform in RAWHIDE_VERSIONS: self.platform = "fc-rawhide" self.packagename = tmp def construct_location(platform, arch, filename): return "{0}/{1}/{2}".format(platform, arch, filename) def is_tag(ref): return (re.compile("""^(v)(\d+)\.(\d+)\.(\d+)$""").match(ref) != None or re.compile("""^(v)(\d+)\.(\d+)$""").match(ref) != None) def mkdir_p(path): try: os.makedirs(path) except OSError as exc: # Python >2.5 if exc.errno == errno.EEXIST and os.path.isdir(path): pass else: raise def createrepo(repo): print("-- Running createrepo on {0}".format(repo)) if NO_CREATE_REPO: return sh("rm -rf {0}".format(repo + "/.olddata")) sh("createrepo -q {0}".format(repo)) def copy_to_repo(source, repo): print("-- Copying {0} to {1}".format(source, repo)) if DRY_RUN: return mkdir_p(repo) shutil.copyfile(source, "{0}/{1}".format(repo, os.path.basename(source))) class Repository(object): def __init__(self, base): self.base = base if not os.path.isdir(self.base): bailout("Not a directory: {0}".format(self.base)) def store(self, ref, packages): platforms = set([x.platform for x in packages]) if len(platforms) != 1: raise ValueError("Cannot mix packages of different platforms in the same invocation: {0}".format(list(platforms))) archs = set([x.arch for x in packages]) archs.discard(None) if len(archs) != 1: raise ValueError("Cannot mix packages of different architectures in the same invocation: {0}".format(list(archs))) tag = is_tag(ref) if tag: base = "{0}/rc".format(self.base) else: base = "{0}/testing".format(self.base) if ref != "develop": base = "{0}/testing/{1}".format(self.base, ref) base += "/" + list(platforms)[0] reposToCreate = set() for package in packages: repo = "{0}/{1}".format(base, list(archs)[0]) copy_to_repo(package.path, repo) reposToCreate.add(repo) for repo in reposToCreate: createrepo(repo) def declare_incompatible_options(parser, option, group): if option not in sys.argv: return for item in group: if item in sys.argv: parser.error("argument {0} is incompatible with argument {1}".format(option, item)) def parseargs(): parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, description="An opinionated yum repository manager.\n") parser.add_argument('--base', type=str, required=True, help="The base directory for your project.") parser.add_argument('--action', type=str, required=True, help="The action to perform. Choices: ['add', 'cleanup']") parser.add_argument('--dry-run', action="store_true", help="If set, don't actually change any files, just show what would happen if ran.") parser.add_argument('--no-create-repo', action="store_true", help="If set, don't run createrepo at the end.") parser.set_defaults(dry_run=False, no_create_repo=False) group = parser.add_argument_group('add options') group.add_argument('--ref', type=str, help="The branch or tag that is being built. Tag names must match 'x.y' or 'x.y.z' (may be prepended by 'v')") group.add_argument('--packages', type=str, nargs='+', help="The list of packages to add") group = parser.add_argument_group('cleanup options') group.add_argument('--keep-last-days', type=int, help="How many days worth of RPMs to keep. (only affects branches)") args = parser.parse_args() ensure_valid_choice(parser, args.action, "action", ["add", "cleanup"]) declare_incompatible_options(parser, "--no-create-repo", ["--dry-run"]) if args.action == "add": declare_required(parser, args, "ref") declare_required(parser, args, "packages") if args.action == "cleanup": declare_required(parser, args, "keep-last-days") bailout("NYI") if args.ref == "tags" or args.ref == "tag": bailout("A branch named '{0}'? Really?".format(args.ref)) global DRY_RUN global NO_CREATE_REPO if args.dry_run: DRY_RUN = True NO_CREATE_REPO = True if args.no_create_repo: NO_CREATE_REPO = True return args def main(): args = parseargs() repository = Repository(args.base) packages = [Package(x) for x in args.packages] repository.store(args.ref, packages) if __name__ == '__main__': main() srm-ifce-v1.24.7/packaging/rpm/000077500000000000000000000000001465215307000162255ustar00rootroot00000000000000srm-ifce-v1.24.7/packaging/rpm/srm-ifce.spec000066400000000000000000000150401465215307000206060ustar00rootroot00000000000000%undefine __cmake_in_source_build %undefine __cmake3_in_source_build Name: srm-ifce Version: 1.24.7 Release: 1%{?dist} Summary: SRM client side library License: ASL 2.0 URL: https://dmc-docs.web.cern.ch/dmc-docs/srm-ifce.html # git clone --depth=1 --branch=v1.24.7 https://gitlab.cern.ch/dmc/srm-ifce.git srm-ifce-1.24.7 # tar czf srm-ifce-1.24.7.tar.gz --exclude-vcs srm-ifce-1.24.7 Source0: %{name}-%{version}.tar.gz BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: cmake3 BuildRequires: CGSI-gSOAP-devel >= 1.3.10 BuildRequires: glib2-devel BuildRequires: globus-ftp-client-devel BuildRequires: globus-gss-assist-devel Requires: CGSI-gSOAP >= 1.3.10 %description srm-ifce is a client side implementation of the SRMv2 specification for GFAL1/2 and FTS. SRM means Storage Resource Manager Interface, it is a specification of a SOAP interface providing a generic way to manage distributed storage systems. %package devel Summary: SRM client side headers and development files Requires: %{name}%{?_isa} = %{version}-%{release} Requires: glib2-devel Requires: pkgconfig %description devel Development libraries, pkgconfig files and header files for the srm-ifce. %prep %setup -q %build %cmake3 -D DOC_INSTALL_DIR=%{_pkgdocdir} %cmake3_build %install %cmake3_install %clean %cmake3_build --target clean %ldconfig_scriptlets %files %{_bindir}/gfal_srm_ifce_version %{_libdir}/libgfal_srm_ifce.so.* %dir %{_pkgdocdir} %{_pkgdocdir}/LICENSE %{_pkgdocdir}/VERSION %{_pkgdocdir}/README %{_pkgdocdir}/readme.html %files devel %{_libdir}/pkgconfig/* %{_libdir}/libgfal_srm_ifce.so %{_includedir}/gfal_srm_ifce.h %{_includedir}/gfal_srm_ifce_types.h %{_pkgdocdir}/RELEASE-NOTES %changelog * Tue Jul 30 2024 Mihai Patrascoiu - 1.24.7-1 - New upstream release * Tue Feb 7 2023 Joao Lopes - 1.24.6-1 - New upstream release - Translate TPermissionMode from srm soap to srmifce enum * Mon Feb 15 2021 Mihai Patrascoiu - 1.24.5-1 - New upstream release * Tue Jul 17 2018 Andrea Manzi - 1.24.4-1 - New upstream release * Mon Feb 20 2017 Alejandro Alvarez Ayllon - 1.24.2-1 - New upstream release * Fri Jan 27 2017 Alejandro Alvarez Ayllon - 1.24.1-2 - Remove trailing whitespaces * Thu Sep 22 2016 Alejandro Alvarez Ayllon - 1.24.1-1 - Release srm-ifce 1.24.1 * Fri Apr 22 2016 Alejandro Alvarez Ayllon - 1.23.3-3 - Rebuild for gsoap 2.8.30 (Fedora 25) * Tue Feb 02 2016 Alejandro Alvarez Ayllon - 1.23.3-2 - Rebuilt for gsoap 2.8.28 * Mon Nov 09 2015 Alejandro Alvarez Ayllon - 1.23.3-1 - Release srm-ifce 1.23.3 * Mon Jun 22 2015 Alejandro Alvarez Ayllon - 1.23.1-3 - Own doc dir * Thu Apr 16 2015 Alejandro Alvarez Ayllon - 1.23.1-1 - Release srm-ifce 1.23.1 * Mon Mar 02 2015 Alejandro Alvarez Ayllon - 1.22.2-1 - Release srm-ifce 1.22.2 * Mon Jan 26 2015 Alejandro Alvarez Ayllon - 1.22.1-2 - Rebuilt for gsoap 2.8.21 * Mon Jan 12 2015 Alejandro Alvarez Ayllon - 1.22.1-1 - Release srm-ifce 1.22.1 * Thu Nov 06 2014 Alejandro Alvarez Ayllon - 1.21.4-1 - Release srm-ifce 1.21.4 * Fri Jul 25 2014 Alejandro Alvarez Ayllon - 1.20.1-1 - Release srm-ifce 1.20.1 * Mon Jul 14 2014 Alejandro Alvarez Ayllon - 1.19.0-3 - Rebuilt for gsoap 2.8.17 * Mon Apr 07 2014 Alejandro Alvarez - 1.19.0-1 - Release srm-ifce 1.19.0 * Thu Oct 17 2013 Adrien Devresse - 1.18.0-2 - Rebuilt for gsoap++ * Fri Sep 20 2013 Adrien Devresse - 1.18.0-1 - Release srm-ifce 1.18.0 * Mon Aug 19 2013 Alejandro Alvarez - 1.17.0-0 - Release srm-ifce 1.17.0 * Tue Jul 02 2013 Adrien Devresse - 1.16.0-0 - Release srm-ifce 1.16.0, first post-EMI release * Mon Jun 10 2013 Michail Salichos - 1.15.3-3 - fixing memory leaks * Fri Apr 26 2013 Michail Salichos - 1.15.3-2 - added srmmv implementation * Wed Mar 20 2013 adevress at cern.ch - 1.15.2-1 - EMI lcgutil 1.15.0 release * Thu Mar 14 2013 Michail Salichos - 1.15.2-0 - avoid double initialization when session reuse is enabled * Fri Feb 22 2013 Adrien Devresse - 1.15.1-0 - fix an estimatedWaitTime problem with the backoff logic - introduce srm session reuse * Tue Jan 08 2013 Adrien Devresse - 1.14.0-1 - correct two timeout bug LCGUTIL-78 and LCGUTIL-82 * Thu Nov 29 2012 Adrien Devresse - 1.14.0-0 - correct misleading namespace in PrepareToGetRequestStatus - correct a timeout issue related to exponential backoff system in put/get - improve reliability of the exponential backoff wait system - big big code cleaning - re-factory of the context system with backward compatibility - fix the srm timeout issue - fix the srm put done issue for long transfer * Fri Jul 20 2012 Adrien Devresse - 1.13.0-0 - Synchronise with EMI 2 Update 13 - introduction of operation timeout - buffer overflow and memory corruption corrections - minor warning corrections * Wed Apr 18 2012 Zsolt Molnar - 1.12.3-1 - Integrating to EPEL, adapting to changes in external components * Tue Feb 14 2012 Adrien Devresse - 1.12.2-10 - correct smash stack related to gsoap * Thu Feb 09 2012 Adrien Devresse - 1.12.2-9 - correct gsoap issue for f18 * Thu Feb 09 2012 Adrien Devresse - 1.12.2-8 - Recompile with gsoap 2.8 compatibility * Thu Feb 02 2012 Adrien Devresse - 1.12.2-7 - remove macro of pkgconfig dependency causing bug on i686 pkgs * Mon Jan 30 2012 Adrien Devresse - 1.12.2-6 - Fix a stack smash problem relative to gsoap internal struct * Sun Jan 15 2012 Adrien Devresse - 1.12.1-5 - add pkg-config files - add dist macro - correct buildroot path * Wed Jan 11 2012 Adrien Devresse - 1.12.1-4 - Add a fixed source tree for packaging - Correct a problem of include with gcc 4.6 * Thu Jan 05 2012 Adrien Devresse - 1.12.1-3 - Second Revision for EPEL/fedora conformance * Fri Dec 16 2011 Adrien Devresse - 1.12.1-2 - First Revision for EPEL/fedora conformance * Mon Nov 28 2011 Adrien Devresse - 1.12.1-1 - Initial build srm-ifce-v1.24.7/readme.html000066400000000000000000000026371465215307000156360ustar00rootroot00000000000000 srm-ifce

srm-ifce

Description

srm-ifce is a client side implementation of the SRMv1 and SRMv2 specification for GFAL and FTS. SRM means Storage Resource Manager Interface, it is a specification of a SOAP interface providing a generic way to manage distributed storage systems.

License

This software is licensed under the Apache 2 License. See LICENSE for details.

Release Notes

See RELEASE-NOTES for a detailed changelog.

Contact

You can notify bugs or ask for feature requests via

Tracker
https://its.cern.ch/jira/browse/DMC/component/10812
Mailing list
dmc-support@cern.ch
srm-ifce-v1.24.7/src/000077500000000000000000000000001465215307000142725ustar00rootroot00000000000000srm-ifce-v1.24.7/src/CMakeLists.txt000066400000000000000000000105131465215307000170320ustar00rootroot00000000000000## src cmake build script for srm-ifce FILE(GLOB src_libs1 "*function*.c") FILE(GLOB src_libs2 "*dependencies*.c") FILE(GLOB src_libs3 "*wrapper*.c") FILE(GLOB src_libs4 "*util*.c") FILE(GLOB src_program "gfal_srm_ifce_version.c") FILE(GLOB src_unit_tests "*unittest*.c") FILE(GLOB src_system_tests "*systemtest*.c") LIST(APPEND src_libs ${src_libs1} ${src_libs2} ${src_libs3} ${src_libs4}) ## gsoap generation # srmv1 set(srmv1_typemap "typemap-srmv1.dat") set(srmv1_wsdl "srm.v1.1.wsdl") set(srm1_header_files "srm.v1.1.h") set(srm1_source_files "srmC.c") set(srm1_dir "srmv1") file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${srm1_dir}) add_custom_command( OUTPUT ${srm1_header_files} DEPENDS ${srmv1_typemap} ${srmv1_wsdl} COMMAND ${GSOAP_WSDL2H} ${GSOAP_276_COMPAT_FLAGS} -c -e -y -z -t ${CMAKE_CURRENT_SOURCE_DIR}/${srmv1_typemap} ${CMAKE_CURRENT_SOURCE_DIR}/${srmv1_wsdl} -o ${srm1_header_files}) add_custom_command( OUTPUT ${srm1_source_files} ${srm1_map_files} DEPENDS ${srm1_header_files} COMMAND ${GSOAP_SOAPCPP2} -c -d ${CMAKE_CURRENT_BINARY_DIR}/${srm1_dir} -p srm ${srm1_header_files} ) #srmv2 set(srm2_dir "${CMAKE_CURRENT_BINARY_DIR}/srmv2") set(srmv2_typemap "typemap-srmv2.dat") set(srmv2_wsdl "srm.v2.2.wsdl") set(srm_map_files "${srm2_dir}/srmSoapBinding.nsmap") set(srm2_header_files "${srm2_dir}/srm.v2.2.h") set(srm2_source_file1 "${srm2_dir}/srmv2C.c") set(srm2_source_file2 "${srm2_dir}/srmv2Client.c") file(MAKE_DIRECTORY ${srm2_dir}) add_custom_command( OUTPUT ${srm2_header_files} DEPENDS ${srmv2_typemap} ${srmv2_wsdl} COMMAND ${GSOAP_WSDL2H} ${GSOAP_276_COMPAT_FLAGS} -c -e -y -t ${CMAKE_CURRENT_SOURCE_DIR}/${srmv2_typemap} ${CMAKE_CURRENT_SOURCE_DIR}/${srmv2_wsdl} -o ${srm2_header_files}) add_custom_command( OUTPUT ${srm2_source_file1} ${srm2_source_file2} DEPENDS ${srm2_header_files} COMMAND ${GSOAP_SOAPCPP2} -c -d ${srm2_dir} -p srmv2 ${srm2_header_files} ) # transform typemap set(srm_map_files_c "srmSoapBinding.c") add_custom_command(OUTPUT ${srm_map_files_c} DEPENDS ${srm2_source_file1} COMMAND cp ${srm_map_files} ${CMAKE_CURRENT_BINARY_DIR}/${srm_map_files_c} ) set_source_files_properties(${srm_map_files_c} ${srm2_source_file1} ${srm2_source_file2} PROPERTIES GENERATED TRUE) add_definitions( -D_LARGEFILE64_SOURCE -DVERSION="${VERSION_STRING}" -DCMAKE_BUILD -D_GNU_SOURCE -DGFAL_SECURE -Wall ${GSOAP_CFLAGS} ) include_directories(${srm2_dir} ${CGSI_GSOAP_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS}) ## main libs add_library(srm-ifce SHARED ${src_libs} ${srm2_source_file1} ${srm2_source_file2} ${CMAKE_CURRENT_BINARY_DIR}/${srm_map_files_c}) target_link_libraries(srm-ifce ${GSOAP_LIBRARIES} ${CGSI_GSOAP_LIBRARIES} ${GLIB2_LIBRARIES} ${GLOBUS_LIBRARIES} ) if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") target_link_libraries (srm-ifce rt) endif () set_target_properties(srm-ifce PROPERTIES VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH} SOVERSION ${VERSION_MAJOR} CLEAN_DIRECT_OUTPUT 1 OUTPUT_NAME ${OUTPUT_NAME} ) # add a package config file add_PkgConfigFile_for_Library(srm-ifce.pc srm-ifce) ## version control add_executable(gfal_srm_ifce_version ${src_program}) target_link_libraries(gfal_srm_ifce_version srm-ifce) IF (UNIT_TESTS) link_directories (${PROJECT_BINARY_DIR}/ ${PROJECT_BINARY_DIR}/src) ## unit tests add_executable(gfal_srm_ifce_unittest ${src_unit_tests} ) target_link_libraries(gfal_srm_ifce_unittest ${OUTPUT_NAME} check srm-ifce) add_executable(gfal_srm_ifce_systemtest ${src_system_tests} ) target_link_libraries(gfal_srm_ifce_systemtest ${OUTPUT_NAME} check srm-ifce) add_test(base_unit_test ${CMAKE_BINARY_DIR}/gfal_srm_ifce_unittest) #add_test(base_system_test ${CMAKE_BINARY_DIR}/gfal_srm_ifce_systemtest) ENDIF (UNIT_TESTS) install(TARGETS srm-ifce RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} LIBRARY DESTINATION ${LIB_INSTALL_DIR} ) install(TARGETS gfal_srm_ifce_version RUNTIME DESTINATION ${BIN_INSTALL_DIR}) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/srm-ifce.pc" DESTINATION ${PKGCONFIG_FILES_DIR}) install(FILES "gfal_srm_ifce_types.h" "gfal_srm_ifce.h" DESTINATION ${INCLUDE_INSTALL_DIR}) srm-ifce-v1.24.7/src/gfal_srm_ifce.h000066400000000000000000000145731465215307000172350ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _SRM_IFCE_H #define _SRM_IFCE_H #include #include "gfal_srm_ifce_types.h" /** @brief create a srm_context srm context are used by all the srm operations need to be free with @ref srm_context_free after usage */ srm_context_t srm_context_new(const char * srm_endpoint, char *errbuf,int errbufsz,int verbose); srm_context_t srm_context_new2(const char * srm_endpoint, char *errbuf,int errbufsz,int verbose, int keep_alive); /** free resources used by a srm context */ void srm_context_free(srm_context_t context); /** brief : old compatibility : deprecated */ void srm_context_init(struct srm_context *context,char *srm_endpoint,char *errbuf,int errbufsz,int verbose); void srm_context_init2(struct srm_context *context,char *srm_endpoint,char *errbuf,int errbufsz,int verbose, int keep_alive); /** * set user credentials */ void srm_set_credentials(struct srm_context *context, const char *ucert, const char *ukey); /** * Set total desired request time. For instance, for bringonline */ void srm_set_desired_request_time(struct srm_context *context, int timeout); /** set a custom header Set value to NULL to remove the header */ void srm_set_http_header(struct srm_context *context, const char *key, const char *value); /** set the custom User-Agent string It will be appended to what gsoap sets */ void srm_set_user_agent(struct srm_context *context, const char *user_agent, ...); /* srm_ls functions */ void srm_ls_output_destroy(struct srm_ls_output *output); int srm_ls(struct srm_context *context, struct srm_ls_input *input,struct srm_ls_output *output); int srm_ls_async(struct srm_context *context, struct srm_ls_input *input,struct srm_ls_output *output); int srm_status_of_ls_async(struct srm_context *context, struct srm_ls_input *input,struct srm_ls_output *output); int srm_bring_online(struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output); int srm_bring_online_async(struct srm_context *context, struct srm_bringonline_input *input,struct srm_bringonline_output *output); int srm_status_of_bring_online_async(struct srm_context *context, struct srm_bringonline_input *input,struct srm_bringonline_output *output); int srm_prepare_to_put(struct srm_context *context, struct srm_preparetoput_input *input,struct srm_preparetoput_output *output); int srm_prepare_to_put_async(struct srm_context *context, struct srm_preparetoput_input *input,struct srm_preparetoput_output *output); int srm_status_of_put_request_async(struct srm_context *context, struct srm_preparetoput_input *input,struct srm_preparetoput_output *output); int srm_prepare_to_get(struct srm_context *context, struct srm_preparetoget_input *input,struct srm_preparetoget_output *output); int srm_prepare_to_get_async(struct srm_context *context, struct srm_preparetoget_input *input,struct srm_preparetoget_output *output); int srm_status_of_get_request_async(struct srm_context *context, struct srm_preparetoget_input *input,struct srm_preparetoget_output *output); int srm_rm(struct srm_context *context, struct srm_rm_input *input,struct srm_rm_output *output); int srm_rmdir(struct srm_context *context, struct srm_rmdir_input *input,struct srm_rmdir_output *output); int srm_mkdir(struct srm_context *context, struct srm_mkdir_input *input); int srm_mv(struct srm_context *context, struct srm_mv_input *input); int srm_put_done(struct srm_context *context, struct srm_putdone_input *input, struct srmv2_filestatus **statuses); int srm_release_files(struct srm_context *context, struct srm_releasefiles_input *input, struct srmv2_filestatus **statuses); int srm_abort_files(struct srm_context *context, struct srm_abort_files_input *input,struct srmv2_filestatus **statuses); int srm_abort_request (struct srm_context *context, char *reqtoken); char* srm_getbestspacetoken (struct srm_context *context, struct srm_getbestspacetokens_input *input); int srm_getspacetokens (struct srm_context *context, struct srm_getspacetokens_input *input,struct srm_getspacetokens_output *output); int srm_getspacemd (struct srm_context *context, struct srm_getspacemd_input *input,struct srm_spacemd **spaces); int srm_ping(struct srm_context *context, struct srm_ping_output *output); int srm_xping(struct srm_context *context, struct srm_xping_output *output); int srm_xping_output_free(struct srm_xping_output output); int srm_getpermission (struct srm_context *context, struct srm_getpermission_input *input,struct srm_getpermission_output *output); int srm_setpermission (struct srm_context *context, struct srm_setpermission_input *input); int srm_check_permission(struct srm_context *context, struct srm_checkpermission_input *input,struct srmv2_filestatus **statuses); char* srmv2_getbestspacetoken (struct srm_context *context, struct srm_getbestspacetokens_input *input); int srm_extend_file_lifetime (struct srm_context *context, struct srm_extendfilelifetime_input *input,struct srm_extendfilelifetime_output *output); int srm_purgefromspace(struct srm_context *context, struct srm_purgefromspace_input *input,struct srm_purgefromspace_output *output); // memory management void srm_srmv2_pinfilestatus_delete(struct srmv2_pinfilestatus* srmv2_pinstatuses, int n); void srm_srmv2_mdfilestatus_delete(struct srmv2_mdfilestatus* mdfilestatus, int n); void srm_srmv2_filestatus_delete(struct srmv2_filestatus* srmv2_statuses, int n); void srm_srm2__TReturnStatus_delete(struct srm2__TReturnStatus* status); // gsoap timeouts void srm_set_timeout_connect (int); int srm_get_timeout_connect (); void srm_set_timeout_sendreceive (int); int srm_get_timeout_sendreceive (); #endif srm-ifce-v1.24.7/src/gfal_srm_ifce_internal.h000066400000000000000000000016461465215307000211260ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _GFAL_SRM_IFCE_INTERNAL_H_ #define _GFAL_SRM_IFCE_INTERNAL_H_ #include #include "gfal_srm_ifce.h" #include "srm_ifce_internal.h" #endif /* _GFAL_SRM_IFCE_INTERNAL_H_ */ srm-ifce-v1.24.7/src/gfal_srm_ifce_memory_functions.c000066400000000000000000000057031465215307000227030ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include "srm_soap.h" #include "gfal_srm_ifce_types.h" #include "srmv2H.h" #include "srm_dependencies.h" /** * @file file for the memory management help functions * @version 0.0.1 * @date 09/06/2011 * @author Adrien Devresse */ /** * @brief delete properly and free memory for a number n of of struct srmv2_pinstatuses * If called on a NULL value, simply return **/ void srm_srmv2_pinfilestatus_delete(struct srmv2_pinfilestatus* srmv2_pinstatuses, int n){ if(srmv2_pinstatuses){ int i ; for(i=0; i < n; ++i){ free(srmv2_pinstatuses[i].surl); free(srmv2_pinstatuses[i].turl); free(srmv2_pinstatuses[i].explanation); } free(srmv2_pinstatuses); } } /** * @brief delete properly and free memory for a number n of struct srmv2_mdfilestatus * If called on a NULL value, simply return **/ void srm_srmv2_mdfilestatus_delete(struct srmv2_mdfilestatus* mdfilestatus, int n){ if(mdfilestatus){ int i,j ; for(i=0; i < n; ++i){ free(mdfilestatus[i].surl); free(mdfilestatus[i].explanation); free(mdfilestatus[i].checksum); free(mdfilestatus[i].checksumtype); for(j=0; j < mdfilestatus[i].nbspacetokens;++j){ if(mdfilestatus && mdfilestatus[i].spacetokens[j] ){ free(mdfilestatus[i].spacetokens[j]); mdfilestatus[i].spacetokens[j]=NULL; } } free(mdfilestatus[i].spacetokens); srm_srmv2_mdfilestatus_delete(mdfilestatus[i].subpaths, mdfilestatus[i].nbsubpaths); } free(mdfilestatus); } } /** * @brief delete properly and free memory for a number n of struct srmv2_filestatuses * If called on a NULL value, simply return **/ void srm_srmv2_filestatus_delete(struct srmv2_filestatus* srmv2_statuses, int n){ if(srmv2_statuses){ int i; for(i=0; i < n; ++i){ free(srmv2_statuses[i].surl); free(srmv2_statuses[i].turl); free(srmv2_statuses[i].explanation); } free(srmv2_statuses); } } /** * * @brief delete properly and free memory for a struct srm2__TReturnStatus * If called on a NULL value, simply return */ void srm_srm2__TReturnStatus_delete(struct srm2__TReturnStatus* status){ if(status){ free(status->explanation); free(status); } } srm-ifce-v1.24.7/src/gfal_srm_ifce_systemtest.c000066400000000000000000000613431465215307000215310ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include "gfal_srm_ifce_types.h" #include "gfal_srm_ifce.h" #include "srmv2_space_management_functions.h" #define MAX_PATH_LEN 1024 #define MAX_FILE_NAME_LEN 100 char test_srm_endpoint[MAX_PATH_LEN + MAX_FILE_NAME_LEN]; char test_file1[MAX_PATH_LEN + MAX_FILE_NAME_LEN]; char test_file2[MAX_PATH_LEN + MAX_FILE_NAME_LEN]; char test_unexisting[MAX_PATH_LEN + MAX_FILE_NAME_LEN]; char test_dir[MAX_PATH_LEN + MAX_FILE_NAME_LEN]; const char *test_vo; char *source_file = "file:///etc/group"; char *test_spacedescriptor = "srm_test_space"; void PrintResult(struct srmv2_mdfilestatus *print_output); void PrintPinFileStatuses(struct srmv2_pinfilestatus *statuses, int count); void TestPrepareToPutPrepareToGet(); void GlobusUrlCopy(char *sourceturl,char *destinationturl); int TestPurgeFromSpace(char** surls,char *token); int TestPutDone(char** surls,char *token); int TestAbortFiles(char **files,char *token); int TestBringOnline(char **files,char **protocols); int TestReleaseFiles(char **files,char *token); int TestPing(char *endpoint); int TestLs(char *surl); int DelSurl(int nbfiles,char **surls); int MkDir(char *directory); void CopyFile(char *file) { char *command; asprintf (&command, "lcg-cp --nobdii -D srmv2 --vo %s %s %s ", test_vo, source_file,file); //printf("%s \n",command); system(command); } void GlobusUrlCopy(char *sourceturl,char *destinationturl) { char* globus_url_copy; asprintf(&globus_url_copy,"globus-url-copy %s %s ",sourceturl,destinationturl); //printf("%s \n",globus_url_copy); system(globus_url_copy); } int FakeCopy(char *surl) // does prepare to put and put done without copying a single byte { char *surls[] = {surl}; int ret; char *protocols[] = {"file","gsiftp",NULL}; //"rfio","dcap","gsidcap","kdcap","" struct srm_context context; struct srm_preparetoput_input input_put; struct srm_preparetoput_output output_put; SRM_LONG64 filesizes[1] ={ 0 }; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; input_put.filesizes = filesizes; input_put.nbfiles = 1; input_put.desiredpintime = 1000; input_put.surls = surls; input_put.protocols = protocols; input_put.spacetokendesc = NULL; MkDir(test_dir); ret = srm_prepare_to_put(&context,&input_put,&output_put); if (ret!= -1) { ret = TestPutDone(surls,output_put.token); } return ret; } int DelDir(char *dir) { struct srm_context context; struct srm_rmdir_input input_rmdir; struct srm_rmdir_output output_rmdir; srm_context_init(&context,test_srm_endpoint,NULL,0,0); input_rmdir.recursive = 1; input_rmdir.surl = dir; return srm_rmdir(&context,&input_rmdir,&output_rmdir); } int DelSurl(int nbfiles,char **surls) { struct srm_context context; struct srm_rm_input rm_input; struct srm_rm_output rm_output; srm_context_init(&context,test_srm_endpoint,NULL,0,0); rm_input.nbfiles = nbfiles; rm_input.surls = surls; return srm_rm(&context,&rm_input,&rm_output); } int MkDir(char *directory) { struct srm_context context; struct srm_mkdir_input input_mkdir; char *test_surl_mkdir; char *test_surl_rmdir; asprintf(&test_surl_rmdir,"%s/test_dir",test_dir); asprintf(&test_surl_mkdir,"%s/test_dir/1/2",test_dir); srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; input_mkdir.dir_name = directory; return srm_mkdir(&context,&input_mkdir); } ////////////////////////////////////////////////////////////////// // test test_directory_functions ////////////////////////////////////////////////////////////////// START_TEST (test_directory_functions) { int a; struct srm_context context; struct srm_rm_input input_rm; struct srm_rm_output output_rm; struct srm_rmdir_input input_rmdir; struct srm_rmdir_output output_rmdir; struct srm_mkdir_input input_mkdir; int j; char *test_surls_rm[] = {test_file1}; char *test_surls_cleanup[] = {test_file1,test_file2}; char *test_surl_mkdir; char *test_surl_rmdir; asprintf(&test_surl_rmdir,"%s/test_dir",test_dir); asprintf(&test_surl_mkdir,"%s/test_dir/1/2",test_dir); srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; // clean up files and folders DelSurl(2,test_surls_cleanup); a = DelDir(test_dir); //printf("Remove dir:%s %d\n",input_rmdir.surl,a); a = TestLs(test_dir); //the error is in ls filestatuse fail_if ((a != -1), "Expected Unexistent Folder!"); CopyFile(test_file1); a = TestLs(test_dir); fail_if ((a != 1), "Expected One File!"); input_mkdir.dir_name = test_surl_mkdir; a = srm_mkdir(&context,&input_mkdir); //printf("Mkdir:%s %d \n",input_mkdir.dir_name,a); fail_if ((a != 0), "Expected Success!"); a = TestLs(test_surl_rmdir); fail_if ((a != 1), "Expected 1 File in this folder!"); a = TestLs(test_dir); fail_if ((a != 2), "Expected 2 Files in this folder!"); input_rmdir.recursive = 1; input_rmdir.surl = test_surl_rmdir; a = srm_rmdir(&context,&input_rmdir,&output_rmdir); //printf("Remove dir:%s %d\n",input_rmdir.surl,a); fail_if ((a != 1), "Expected Success!"); a = TestLs(test_dir); fail_if ((a != 1), "Expected 1 File in this folder!"); input_rm.nbfiles = 1; input_rm.surls = test_surls_rm; a = srm_rm(&context,&input_rm,&output_rm); fail_if ((a != 1), "Expected 1 File deleted!"); a = srm_rm(&context,&input_rm,&output_rm); fail_if ((a != 1), "Expected 1 File deleted!"); fail_if (( !output_rm.statuses || output_rm.statuses[0].status != ENOENT), "Expected no such file error!"); for(j=0;j0) { if (a>0 && b>0) { GlobusUrlCopy(output_get.filestatuses[0].turl,output_put.filestatuses[0].turl); } a = TestReleaseFiles(test_surls_get,output_get.token); fail_if ((a != 1), "Expected Success !"); b = TestPutDone(test_surls_put,output_put.token); fail_if ((b != 1), "Expected Success !"); input_get.surls = test_surls_unexisting; a = srm_prepare_to_get(&context,&input_get,&output_get); fail_if ((a != 1), "Expected Success !"); fail_if ((output_get.filestatuses[0].status != ENOENT), "Expected no such file or directory error!"); } DelSurl(1,test_surls_get); DelSurl(1,test_surls_put); DelDir(test_dir); } END_TEST ////////////////////////////////////////////////////////////////// // test test_srm_ping ////////////////////////////////////////////////////////////////// START_TEST (test_srm_ping) { struct srm_ping_output output; struct srm_context context; int result; context.version = VERSION_2_2; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1);; result = srm_ping(&context,&output); fail_if ((result != 0), "Expected Success !"); srm_set_timeout_connect(1); context.srm_endpoint = "test"; result = srm_ping(&context,&output); // returns 12? fail_if ((result == 0), "Expected Failure !"); srm_set_timeout_connect(60); } END_TEST ////////////////////////////////////////////////////////////////// // test test_srm_space_management ////////////////////////////////////////////////////////////////// START_TEST (test_srm_space_management) { struct srm_getspacemd_input input_metadata; struct srm_spacemd *spaces; struct srm_getbestspacetokens_input input_bestspacetoken; struct srm_getspacetokens_input input_get; struct srm_getspacetokens_output output_get; struct srm_reservespace_input input_reserve; struct srm_reservespace_output output_reserve1; struct srm_reservespace_output output_reserve2; struct srm_context context; int result,i; char *test_spacetoken_descriptor = test_spacedescriptor; char *best_spacetoken; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.version = VERSION_2_2; input_reserve.desired_lifetime = 100; input_reserve.desired_size = 1048576*2; // 2MB input_reserve.spacetokendescriptor = "srm_test_space"; input_get.spacetokendesc = test_spacetoken_descriptor; result = srmv2_getspacetokens (&context, &input_get, &output_get); for(i=0;iowner_permission != SRM_PERMISSION_RWX) , "Expected Success !"); fail_if ((!output.permissions || output.permissions->group_permissions_count != 1) , "Expected Success !"); DelSurl(1,surls); } END_TEST Suite * test_suite (void) { Suite *s = suite_create ("New srm interface communication with real endpoint test suit"); TCase *tc_case_1 = tcase_create ("T1"); TCase *tc_case_2 = tcase_create ("T2"); TCase *tc_case_3 = tcase_create ("T3"); TCase *tc_case_4 = tcase_create ("T4"); TCase *tc_case_5 = tcase_create ("T5"); tcase_add_checked_fixture (tc_case_1, NULL,NULL); tcase_add_test (tc_case_1, test_srm_ping); suite_add_tcase (s, tc_case_1); tcase_add_checked_fixture (tc_case_2, NULL,NULL); tcase_add_test (tc_case_2, test_data_transfer_functions); tcase_set_timeout(tc_case_2, 60); suite_add_tcase (s, tc_case_2); tcase_add_checked_fixture (tc_case_3, NULL,NULL); tcase_add_test (tc_case_3, test_directory_functions); tcase_set_timeout(tc_case_3, 60); suite_add_tcase (s, tc_case_3); tcase_add_checked_fixture (tc_case_4, NULL,NULL); tcase_add_test (tc_case_4, test_srm_space_management); tcase_set_timeout(tc_case_4, 60); suite_add_tcase (s, tc_case_4); tcase_add_checked_fixture (tc_case_5, NULL,NULL); tcase_add_test (tc_case_5, test_srm_permissions); tcase_set_timeout(tc_case_5, 60); suite_add_tcase (s, tc_case_5); return s; } int DoTests() { int number_failed; Suite *s = test_suite (); SRunner *sr = srunner_create (s); srunner_set_fork_status (sr,CK_NOFORK); // FOR EASIER DEBUG srunner_run_all (sr, CK_VERBOSE); number_failed = srunner_ntests_failed (sr); srunner_free (sr); return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; } void SetUp() { char* srm_host = getenv("SE_HOST_1"); if (! srm_host) { printf("\033[91mSE_HOST_1 environment variable not set!\033[0m"); exit(-1); } char* srm_path = getenv("SE_SRM_PATH_1"); if (! srm_path) { printf("\033[91mSE_SRM_PATH_1 environment variable not set!\033[0m"); exit(-1); } assert(strlen(srm_path) < MAX_PATH_LEN); assert(strlen(srm_host) < MAX_PATH_LEN); sprintf(test_srm_endpoint, "%s:8446/srm/managerv2", srm_host); sprintf(test_dir, "%s/srm_test", srm_path); sprintf(test_file1, "%s/test_file1", test_dir); sprintf(test_file2, "%s/test_file2", test_dir); sprintf(test_unexisting, "%s/unexisting", test_dir); test_vo = getenv("VO"); if (!test_vo) test_vo = "dteam"; printf("\nTest setup:\n\n"); printf("SRM host: %s\n", srm_host); printf("Test path: %s\n", test_dir); printf("VO Name: %s\n\n", test_vo); } /////////////////////////////////////////////// // MAIN /////////////////////////////////////////////// int main(void) { SetUp(); return DoTests(); } void PrintPinFileStatuses(struct srmv2_pinfilestatus *statuses, int count) { int i; for(i=0;i 0) { //PrintResult(output_ls.statuses); return ((output_ls.statuses)->nbsubpaths); } return i; } void PrintResult(struct srmv2_mdfilestatus *print_output) { int i; printf("Directory: %s \n",print_output->surl); printf("Files:\n"); for(i=0;inbsubpaths;i++) { printf("%s \n",print_output->subpaths[i].surl); } } int TestPutDone(char** surls,char *token) { struct srmv2_filestatus *filestatuses; int c; struct srm_putdone_input input_putdone; struct srm_context context; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; input_putdone.nbfiles = 1; input_putdone.surls = surls; input_putdone.reqtoken = token; c = srm_put_done(&context,&input_putdone,&filestatuses); //printf("Put Done\nToken: %s \nSurl: %s\nResult: %d\n",token,surls[0],c); return c; } int TestPurgeFromSpace(char** surls,char *token) { int c; struct srm_purgefromspace_input input_purge; struct srm_purgefromspace_output output_purge; struct srm_context context; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; input_purge.nbfiles = 1; input_purge.surls = surls; input_purge.spacetoken = token; c = srm_purgefromspace(&context,&input_purge,&output_purge); //printf("Put Done\nToken: %s \nSurl: %s\nResult: %d\n",token,surls[0],c); return c; } int TestAbortRequest(char *token) { int c; struct srm_context context; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; c = srm_abort_request(&context,token); //printf("Abort request\nToken: %s \nResult: %d\n",token,c); return c; } int TestAbortFiles(char **files,char *token) { struct srmv2_filestatus *filestatuses; int c; struct srm_context context; struct srm_abort_files_input input; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; input.nbfiles = 1; input.surls = files; input.reqtoken = token; c = srm_abort_files(&context,&input,&filestatuses); //printf("Abort files\nFile: %s\nToken: %s \nResult: %d\n",files[0],token,c); return c; } int TestReleaseFiles(char **files,char *token) { struct srmv2_filestatus *filestatuses; int a; struct srm_context context; struct srm_releasefiles_input input; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; input.nbfiles = 1; input.surls = files; input.reqtoken = token; a = srm_release_files(&context,&input,&filestatuses); //printf("Release files\nFile: %s\nToken: %s \nResult: %d\n",files[0],token,a); return a; } int TestBringOnline(char **files,char **protocols) { struct srm_context context; struct srm_bringonline_input input_bringonline; struct srm_bringonline_output output_bringonline; int a; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; input_bringonline.desiredpintime = 1000; input_bringonline.nbfiles = 1; input_bringonline.protocols = protocols; input_bringonline.surls = files; input_bringonline.spacetokendesc = NULL; a = srm_bring_online(&context,&input_bringonline,&output_bringonline); //printf("BRING ONLINE \n"); //PrintPinFileStatuses(output_bringonline.filestatuses,a); return a; } void TestSpaceTokensSpaceMetadata() { int a; struct srm_context context; struct srm_getbestspacetokens_input input_bestspacetokens; struct srm_getspacemd_input input_md; struct srm_spacemd *spacemd; struct srm_getspacetokens_input input_space_tokens; struct srm_getspacetokens_output output_space_tokens; srm_context_init(&context, test_srm_endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; input_space_tokens.spacetokendesc = "NULL"; //output_space_tokens. a = srm_getspacetokens(&context,&input_space_tokens,&output_space_tokens); //input_md pseudo = output_space_tokens input_md.nbtokens = 0; input_md.spacetokens = NULL; a = srm_getspacemd(&context,&input_md,&spacemd); input_bestspacetokens.neededsize = 1000; //input_bestspacetokens.spacetokendesc = ....; srm_getbestspacetoken(&context,&input_bestspacetokens); } int TestPing(char *endpoint) { int a; struct srm_context context; struct srm_ping_output output; srm_context_init(&context, endpoint, NULL, 0, 1); context.timeout = 3600; context.version = VERSION_2_2; a = srm_ping(&context,&output); if (a == 0) { //printf("Ping result: %s\n",output.versioninfo); }else { //printf("Ping error \n",output.versioninfo); } return a; } srm-ifce-v1.24.7/src/gfal_srm_ifce_types.h000066400000000000000000000261371465215307000204600ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _SRM_TYPES_H #define _SRM_TYPES_H #include #include #include #include #include #ifndef SRM_LONG64_FORMAT #if defined(__ia64__) || defined(__x86_64) #define SRM_LONG64_FORMAT "%ld" #elif defined(_WIN32) #define SRM_LONG64_FORMAT "%I64d" #else #define SRM_LONG64_FORMAT "%lld" #endif #endif #ifndef SRM_LONG64 #define SRM_LONG64 gint64 #endif #define SRM_SIZE_MARGIN 1048576 // 1MB #ifndef ECOMM #define ECOMM EIO #endif typedef struct srm_context* srm_context_t; typedef struct srm_context_extension* srm_context_extension_t; enum TFileLocality_ { GFAL_LOCALITY_UNKNOWN = 0, GFAL_LOCALITY_ONLINE_, ///< xs:string value="ONLINE" GFAL_LOCALITY_NEARLINE_, ///< xs:string value="NEARLINE" GFAL_LOCALITY_ONLINE_USCOREAND_USCORENEARLINE, ///< xs:string value="ONLINE_AND_NEARLINE" GFAL_LOCALITY_LOST, ///< xs:string value="LOST" GFAL_LOCALITY_NONE_, ///< xs:string value="NONE" GFAL_LOCALITY_UNAVAILABLE ///< xs:string value="UNAVAILABLE" }; /// Typedef synonym for enum ns1__TFileLocality. typedef enum TFileLocality_ TFileLocality; enum TRetentionPolicy_ { GFAL_POLICY_UNKNOWN = 0, GFAL_POLICY_REPLICA, GFAL_POLICY_OUTPUT, GFAL_POLICY_CUSTODIAL }; /// Typedef synonym for enum ns1__TRetentionPolicy. typedef enum TRetentionPolicy_ TRetentionPolicy; enum TAccessLatency_ { GFAL_LATENCY_UNKNOWN = 0, GFAL_LATENCY_ONLINE, GFAL_LATENCY_NEARLINE }; /// Typedef synonym for enum ns1__TAccessLatency. typedef enum TAccessLatency_ TAccessLatency; enum TPermissionType_ { SRM_PERMISSION_ADD = 0, SRM_PERMISSION_REMOVE = 1, SRM_PERMISSION_CHANGE = 2 }; typedef enum TPermissionType_ TPermissionType; enum TPermissionMode_ { SRM_PERMISSION_NONE = 0, SRM_PERMISSION_X = 1, SRM_PERMISSION_W = 2, SRM_PERMISSION_WX = 3, SRM_PERMISSION_R = 4, SRM_PERMISSION_RX = 5, SRM_PERMISSION_RW = 6, SRM_PERMISSION_RWX = 7 }; typedef enum TPermissionMode_ TPermissionMode; enum srm_version { VERSION_1, VERSION_2_2, }; enum srm_call_status_ { srm_call_status_SUCCESS = 0, srm_call_status_FAILURE = 1, srm_call_status_TIMEOUT = 2, srm_call_status_QUEUED = 3, srm_call_status_INTERNAL_ERROR = 4 }; typedef enum srm_call_status_ srm_call_status; struct srm_filestatus { char *surl; char *turl; int fileid; int status; }; struct srmv2_pinfilestatus { char *surl; // surl of the file char *turl; // turl of the file int status; // status code char *explanation; // string for the status int pinlifetime; // pin lifetime int estimated_wait_time; }; struct srmv2_filestatus { char *surl; // surl of the file char *turl; // turl of the file int status; // status code char *explanation; // string for the status }; struct srm_context { enum srm_version version; char * srm_endpoint; char * errbuf; int errbufsz; int verbose; int timeout; // global timeout for asynchronous operations int timeout_conn; // global timeout for SOAP connection int timeout_ops; // global timeout for response on operation ( send/receive ) srm_context_extension_t ext; struct soap *soap; // bind the soap struct to the context, so there is real keep-alive between calls void* reserved[23]; // reserved field for future usage }; struct srm_internal_context { srm_call_status current_status; time_t end_time; time_t relative_timeout; struct timespec end_time_spec; struct timespec current_waittime_spec; int attempt; int estimated_wait_time; unsigned int random_seed; }; struct srm_ls_input { int nbfiles; // number of surls in the array char **surls; // array of surls int numlevels; int *offset; int count; }; struct srm_ping_output { char *versioninfo; // srm server version information }; struct srm_key_value { char *key; char *value; }; struct srm_xping_output { char *versioninfo; // srm server version information int n_extra; // number of additional key/value struct srm_key_value *extra; }; #if ! defined(linux) || defined(_LARGEFILE64_SOURCE) struct srm_mdfilestatus { char *surl; struct stat64 stat; int fileid; int status; }; struct srmv2_mdfilestatus { char *surl; struct stat64 stat; int status; char *explanation; struct srmv2_mdfilestatus *subpaths; int nbsubpaths; TFileLocality locality; char *checksumtype; char *checksum; char **spacetokens; int nbspacetokens; }; #endif struct srm_ls_output { struct srmv2_mdfilestatus *statuses; char *token; // request token struct srm2__TReturnStatus *retstatus; int statuses_num; }; struct srm_rm_input { int nbfiles; // number of surls in the array char **surls; // array of surls }; struct srm_rm_output { struct srm2__TReturnStatus *retstatus; // status of the srm call struct srmv2_filestatus *statuses; // returned file statuses }; struct srm_rmdir_input { int recursive; // recursive(1) or not(0) char *surl; // directory surl }; struct srm_rmdir_output { struct srm2__TReturnStatus *retstatus; // status of the srm call struct srmv2_filestatus *statuses; }; struct srm_mkdir_input { char *dir_name; // directory surl }; struct srm_mv_input { char *from; char *to; }; struct srm_preparetoget_input { int nbfiles; // number of surls in the array char **surls; // array of surls int desiredpintime; // desired pin time char *spacetokendesc; // space token descriptor char **protocols; // protocols used }; struct srm_preparetoput_input { SRM_LONG64 *filesizes; // filesize int nbfiles; // number of surls in the array char **surls; // array of surls int desiredpintime; // desired pin time char *spacetokendesc; // space token descriptor char **protocols;// protocols used }; struct srm_preparetoget_output { char *token; // request token struct srm2__TReturnStatus *retstatus; // status of the srm call struct srmv2_pinfilestatus *filestatuses; // returned statuses }; struct srm_preparetoput_output { char *token;// request token struct srm2__TReturnStatus *retstatus; // status of the srm call struct srmv2_pinfilestatus *filestatuses;// returned statuses }; struct srm_putdone_input { int nbfiles; // number of surls in the array char **surls; // array of surls char *reqtoken; // request token }; struct srm_releasefiles_input { int nbfiles; // number of surls in the array char **surls; // array of surls char *reqtoken; // request token }; struct srm_abort_files_input { int nbfiles; // number of surls in the array char **surls; // array of surls char *reqtoken; // request token }; struct srm_bringonline_input { int nbfiles; // number of surls in the array char **surls; // array of surls int desiredpintime; // desired pin time char *spacetokendesc; // space token descriptor char **protocols; // protocols used }; struct srm_bringonline_output { char *token;// request token struct srm2__TReturnStatus *retstatus;// status of the srm call struct srmv2_pinfilestatus *filestatuses;// returned statuses }; struct srm_getspacetokens_input { char *spacetokendesc; // space token descriptor }; struct srm_getspacetokens_output { int nbtokens; // number of space tokens in the array char **spacetokens; // array of space tokens }; struct srm_getspacemd_input { int nbtokens; // number of space tokens in the array char **spacetokens; // array of space tokens }; struct srm_getbestspacetokens_input { char *spacetokendesc; // space token descriptor SRM_LONG64 neededsize; // required space }; struct srm_permission { char *name_id; // name id string TPermissionMode mode; // permission mode }; struct srm_setpermission_input { char *surl; // surl to set the permission properties for TPermissionType permission_type; // add/change/remove TPermissionMode owner_permission; // owner permission TPermissionMode other_permission; // other users permission int user_permissions_count; // user permissions size of array struct srm_permission *user_permissions; // array of user permissions int group_permissions_count; // group permissions size of array struct srm_permission *group_permissions; // array of group permissions }; struct srm_getpermission_input { int nbfiles; // number of surls in the array char **surls; // array of surls }; struct srm_checkpermission_input { int amode; int nbfiles; // number of surls in the array char **surls; // array of surls }; struct srm_extendfilelifetime_input { int nbfiles; // number of surls in the array char **surls; // array of surls char *reqtoken; // request token int pintime; // pin time }; struct srm_extendfilelifetime_output { struct srm2__TReturnStatus *retstatus;// status of the srm call struct srmv2_pinfilestatus *filestatuses;// returned statuses }; struct srm_filepermission { char *surl; int status; char *explanation; char *owner; TPermissionMode owner_permission; TPermissionMode other_permission; int user_permissions_count; struct srm_permission *user_permissions; int group_permissions_count; struct srm_permission *group_permissions; }; struct srm_getpermission_output { struct srm2__TReturnStatus *retstatus;// status of the srm call struct srm_filepermission *permissions;// array of file permissions }; struct srm_spacemd { char *spacetoken; // space token string char *owner; // name of the owner SRM_LONG64 totalsize; // total size of the space SRM_LONG64 guaranteedsize; // guaranteed size of the space SRM_LONG64 unusedsize; // unused space int lifetimeassigned; // life time assigned to the space int lifetimeleft; // total time left TRetentionPolicy retentionpolicy; TAccessLatency accesslatency; }; struct srm_reservespace_input { char *spacetokendescriptor; // space token descriptor int desired_lifetime; // desired lifetime SRM_LONG64 desired_size; // desired size }; struct srm_reservespace_output { struct srm2__TReturnStatus *retstatus; char *spacetoken; // space token int lifetime; // lifetime of the space token SRM_LONG64 size_total; // total size of the space SRM_LONG64 size_guaranteed; // guaranteed size of the space }; struct srm_purgefromspace_input { int nbfiles; // number of surls in the array char **surls; // array of surls char *spacetoken; // space token }; struct srm_purgefromspace_output { struct srm2__TReturnStatus *retstatus; // status of the srm call struct srmv2_filestatus *statuses; }; #endif /* _SRM_TYPES_H */ srm-ifce-v1.24.7/src/gfal_srm_ifce_unittest.c000066400000000000000000004115131465215307000211620ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include "srmv2H.h" #include "gfal_srm_ifce_types.h" #include "srm_util.h" #include "srm_soap.h" #include "gfal_srm_ifce_unittest.h" #include "srmv2_data_transfer_functions.h" char test_dir[] = "/test/1/2/3/4"; char* fixture_test_strings[3]= { "fixture_test_string1","fixture_test_string2",NULL}; void PrintResult(struct srmv2_mdfilestatus* output); START_TEST (test_wait_for_new_attempt) { call_function.call_sleep = mock_sleep; int i; struct srm_internal_context internal_context; internal_context.estimated_wait_time = -1; internal_context.attempt = 11; fail_if (wait_for_new_attempt(&internal_context) != -1, "Wait for new attempt does not return timeout error for 11 attempts!"); internal_context.attempt = 5; internal_context.end_time = time(NULL)-20; fail_if (wait_for_new_attempt(&internal_context) != -1, "Timeout error not received!"); call_function.call_sleep = mock_sleep; internal_context.attempt = 1; // be careful changing this number internal_context.end_time = time(NULL)+100; fail_if (wait_for_new_attempt(&internal_context) != 0, "Timeout should not occur!"); fail_if (mock_sleep_time > 1, // be careful changing this number "Random sleep time exceeded expected value !!!"); internal_context.attempt = 1; // be careful changing this number internal_context.end_time = time(NULL)+100; internal_context.estimated_wait_time = 0; fail_if (wait_for_new_attempt(&internal_context) != 0, "Timeout should not occur, estimated wait time == 0 ignored !"); internal_context.attempt = 1; // be careful changing this number internal_context.end_time = time(NULL)+100; internal_context.estimated_wait_time = -10; fail_if (mock_sleep_time > 1, // be careful changing this number "Random sleep time exceeded expected value !!!"); internal_context.attempt = 1; // be careful changing this number for(i=0; i < 8; ++i){ // simple backoff print to evaluate value wait_for_new_attempt(&internal_context); fprintf(stdout, " backoff timeout attempt : %d, sleep_time : %d \n",i ,mock_sleep_time); } internal_context.estimated_wait_time = 2; wait_for_new_attempt(&internal_context); fail_if (mock_sleep_time != 10, "Sleep time estimated wait time not equal to sleep time!"); } END_TEST START_TEST (test_wait_ng) { int i; srm_context_t context = srm_context_new("test",NULL,0,0); struct srm_internal_context internal_context; back_off_logic_init(context, &internal_context); gboolean timeout = FALSE; long total_wait_time = 0; for(i=0;i <100;++i){ time_t t1 = time(NULL); timeout = (wait_for_new_attempt_min_max_ng(context, &internal_context) ==0)?timeout:TRUE; printf(" wait for %d : %ld \n", i, time(NULL)- t1); total_wait_time += (time(NULL)- t1); } fail_if(timeout == FALSE, " should go to timeout, to much iteration..."); printf(" total timeout %ld \n", total_wait_time); fail_if(total_wait_time < context->timeout-2 && total_wait_time > context->timeout+2, "not in the timeout range"); srm_context_free(context); } END_TEST ////////////////////////////////////////////////////////////////// // test wait_for_new_attempt function ////////////////////////////////////////////////////////////////// START_TEST (test_back_off_logic) { const char *srmfunc = "testfunc"; struct srm_context context; struct srm_internal_context internal_context; struct srm2__TReturnStatus retstatus; srm_call_status result; srm_context_init(&context,"test",NULL,0,0); call_function.call_sleep = mock_sleep; // set mock sleep function internal_context.estimated_wait_time = -1; internal_context.attempt = 1; // be careful changing this number internal_context.end_time = time(NULL)+10000; result = back_off_logic(&context,srmfunc,&internal_context,NULL); fail_if ((result != srm_call_status_FAILURE)||(errno != ECOMM), "if internal_context->retstatus is NULL the function must return FAILURE!"); retstatus.statusCode = SRM_USCOREINTERNAL_USCOREERROR; result = back_off_logic(&context,srmfunc,&internal_context,&retstatus); fail_if ((internal_context.attempt != 2), "Wait new attempt!"); fail_if ((result != srm_call_status_INTERNAL_ERROR), "Expected Internal Error!"); internal_context.attempt = 11; retstatus.statusCode = SRM_USCOREINTERNAL_USCOREERROR; result = back_off_logic(&context,srmfunc,&internal_context,&retstatus); fail_if ((result != srm_call_status_TIMEOUT), "Expected Timeout 1!"); internal_context.attempt = 11; retstatus.statusCode = SRM_USCOREREQUEST_USCOREQUEUED; result = back_off_logic(&context,srmfunc,&internal_context,&retstatus); fail_if ((result != srm_call_status_TIMEOUT), "Expected Timeout 2!"); internal_context.attempt = 11; retstatus.statusCode = SRM_USCOREREQUEST_USCOREINPROGRESS; result = back_off_logic(&context,srmfunc,&internal_context,&retstatus); fail_if ((result != srm_call_status_TIMEOUT), "Expected Timeout 3!"); internal_context.attempt = 1; retstatus.statusCode = SRM_USCOREREQUEST_USCOREQUEUED; result = back_off_logic(&context,srmfunc,&internal_context,&retstatus); fail_if ((result != srm_call_status_QUEUED), "Expected Queued 1!"); internal_context.attempt = 1; retstatus.statusCode = SRM_USCOREREQUEST_USCOREINPROGRESS; result = back_off_logic(&context,srmfunc,&internal_context,&retstatus); fail_if ((result != srm_call_status_QUEUED), "Expected Queued 2!"); internal_context.attempt = 1; retstatus.statusCode = SRM_USCORESUCCESS; result = back_off_logic(&context,srmfunc,&internal_context,&retstatus); fail_if ((result != srm_call_status_SUCCESS), "Expected Success!"); internal_context.attempt = 1; retstatus.statusCode = SRM_USCOREFAILURE; result = back_off_logic(&context,srmfunc,&internal_context,&retstatus); fail_if ((result != srm_call_status_FAILURE), "Expected Failure!"); } END_TEST int soap_call_srm2__abort_request_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmAbortRequestRequest *request, struct srm2__srmAbortRequestResponse_ *_param_18) { _param_18 = NULL; return 0; } int soap_call_srm2__abort_request_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmAbortRequestRequest *request, struct srm2__srmAbortRequestResponse_ *_param_18) { return -1; } int soap_call_srm2__abort_request_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmAbortRequestRequest *request, struct srm2__srmAbortRequestResponse_ *_param_18) { struct srm2__srmAbortRequestResponse *resp = (struct srm2__srmAbortRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmAbortRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; // Failure retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmAbortRequestResponse = resp; return 0; // success } int soap_call_srm2__abort_request_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmAbortRequestRequest *request, struct srm2__srmAbortRequestResponse_ *_param_18) { struct srm2__srmAbortRequestResponse *resp = (struct srm2__srmAbortRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmAbortRequestResponse)); resp->returnStatus = NULL; // FAILURE _param_18->srmAbortRequestResponse = resp; return 0; // success } int soap_call_srm2__abort_request_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmAbortRequestRequest *request, struct srm2__srmAbortRequestResponse_ *_param_18) { struct srm2__srmAbortRequestResponse *resp = (struct srm2__srmAbortRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmAbortRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmAbortRequestResponse = resp; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_abort_request ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_abort_request) { const char *token = "testtoken"; struct srm_context context; srm_call_status result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context,"test",NULL,0,0); call_function.call_srm2__srmAbortRequest = soap_call_srm2__abort_request_test1; result = srmv2_abort_request(&context,NULL); fail_if ((result != -1), "Expected Failure 1!"); call_function.call_srm2__srmAbortRequest = soap_call_srm2__abort_request_test2; result = srmv2_abort_request(&context, (char*)token); fail_if ((result != -1), "Expected Failure!"); call_function.call_srm2__srmAbortRequest = soap_call_srm2__abort_request_test3; result = srmv2_abort_request(&context, (char*)token); fail_if ((result != -1), "Expected Failure!"); call_function.call_srm2__srmAbortRequest = soap_call_srm2__abort_request_test4; result = srmv2_abort_request(&context, (char*)token); fail_if ((result != -1), "Expected Failure!"); call_function.call_srm2__srmAbortRequest = soap_call_srm2__abort_request_test5; result = srmv2_abort_request(&context, (char*)token); fail_if ((result != 0), "Expected Success!"); } END_TEST int soap_call_srm2__srmRmDir_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmRmdirRequest *srmRmdirRequest, struct srm2__srmRmdirResponse_ *_param_18) { struct srm2__srmRmdirResponse *resp = (struct srm2__srmRmdirResponse *) soap_malloc (soap,sizeof (struct srm2__srmRmdirResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmRmdirResponse = resp; return 0; } int soap_call_srm2__srmRmDir_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmRmdirRequest *srmRmdirRequest, struct srm2__srmRmdirResponse_ *_param_18) { _param_18->srmRmdirResponse = NULL; return -1; } int soap_call_srm2__srmRmDir_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmRmdirRequest *srmRmdirRequest, struct srm2__srmRmdirResponse_ *_param_18) { struct srm2__srmRmdirResponse *resp = (struct srm2__srmRmdirResponse *) soap_malloc (soap,sizeof (struct srm2__srmRmdirResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmRmdirResponse = resp; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_rmdir ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_rmdir) { struct srm_rmdir_input input; struct srm_rmdir_output output; struct srm_context context; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.surl = fixture_test_string; input.recursive = 0; call_function.call_srm2__srmRmdir = soap_call_srm2__srmRmDir_test1; result = srmv2_rmdir(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != 1), "Expected Success!"); call_function.call_srm2__srmRmdir = soap_call_srm2__srmRmDir_test2; result = srmv2_rmdir(&context,&input,&output); fail_if ((result != -1), "Expected Failure 2!"); call_function.call_srm2__srmRmdir = soap_call_srm2__srmRmDir_test3; result = srmv2_rmdir(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != 1), "Expected Success!"); } END_TEST int soap_call_srm2__srmRm_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmRmRequest *srmRmRequest, struct srm2__srmRmResponse_ *_param_18) { struct srm2__srmRmResponse *resp = (struct srm2__srmRmResponse *) soap_malloc (soap,sizeof (struct srm2__srmRmResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmRmResponse = resp; return 0; } int soap_call_srm2__srmRm_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmRmRequest *srmRmRequest, struct srm2__srmRmResponse_ *_param_18) { struct srm2__srmRmResponse *resp = (struct srm2__srmRmResponse *) soap_malloc (soap,sizeof (struct srm2__srmRmResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmRmResponse = resp; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTSURLReturnStatus *)soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLReturnStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TSURLReturnStatus**) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TSURLReturnStatus*) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus)); resp->arrayOfFileStatuses->statusArray[0]->status = retstatus; resp->arrayOfFileStatuses->statusArray[0]->surl = fixture_test_string; return 0; } ////////////////////////////////////////////////////////////////// // test test_srmv2_rm ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_rm) { struct srm_rm_input input; struct srm_rm_output output; struct srm_context context; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.surls = fixture_test_strings; input.nbfiles = 1; call_function.call_srm2__srmRm = soap_call_srm2__srmRm_test1; result = srmv2_rm(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != -1), "Expected Failure 1!"); call_function.call_srm2__srmRm = soap_call_srm2__srmRm_test2; result = srmv2_rm(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != 1), "Expected Success!"); } END_TEST int soap_call_srm2__srmMkdir_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmMkdirRequest *srmMkdirRequest, struct srm2__srmMkdirResponse_ *_param_18) { struct srm2__srmMkdirResponse *resp = (struct srm2__srmMkdirResponse *) soap_malloc (soap,sizeof (struct srm2__srmMkdirResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmMkdirResponse = resp; return 0; } int soap_call_srm2__srmMkdir_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmMkdirRequest *srmMkdirRequest, struct srm2__srmMkdirResponse_ *_param_18) { struct srm2__srmMkdirResponse *resp = (struct srm2__srmMkdirResponse *) soap_malloc (soap,sizeof (struct srm2__srmMkdirResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmMkdirResponse = resp; return 0; } int soap_call_srm2__srmMkdir_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmMkdirRequest *srmMkdirRequest, struct srm2__srmMkdirResponse_ *_param_18) { struct srm2__srmMkdirResponse *resp = (struct srm2__srmMkdirResponse *) soap_malloc (soap,sizeof (struct srm2__srmMkdirResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREDUPLICATION_USCOREERROR; // dir already exist retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmMkdirResponse = resp; return 0; } int mkdir_test_ok = 0; int soap_call_srm2__srmMkdir_test_last_level(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmMkdirRequest *srmMkdirRequest, struct srm2__srmMkdirResponse_ *_param_18) { int i,n; struct srm2__srmMkdirResponse *resp = (struct srm2__srmMkdirResponse *) soap_malloc (soap,sizeof (struct srm2__srmMkdirResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmMkdirResponse = resp; mkdir_test_ok = 0; n = strlen(test_dir); // Check if we create the full directory not using strcmp because of last slash char for(i=0;iSURL);i++) { if (srmMkdirRequest->SURL[i] != test_dir[i]) { break; } } if ((i == n) || (i == (n-1) && test_dir[n-1] == '/')) { mkdir_test_ok = 1; } return 0; } ////////////////////////////////////////////////////////////////// // test test_srmv2_mkdir ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_mkdir) { struct srm_mkdir_input input; struct srm_context context; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.dir_name = test_dir; call_function.call_srm2__srmMkdir = soap_call_srm2__srmMkdir_test1; result = srmv2_mkdir(&context,&input); fail_if ((result != -1), "Expected Failure 1!"); call_function.call_srm2__srmMkdir = soap_call_srm2__srmMkdir_test2; result = srmv2_mkdir(&context,&input); fail_if ((result != 0), "Expected Success!"); /*call_function.call_srm2__srmMkdir = soap_call_srm2__srmMkdir_test3; result = srmv2_mkdir(&context,&input); fail_if ((result != -1), "Expected Failure 1!"); */ call_function.call_srm2__srmMkdir = soap_call_srm2__srmMkdir_test_last_level; result = srmv2_mkdir(&context,&input); fail_if ((result != 0), "Expected Success!"); fail_if ((mkdir_test_ok != 1), "Expected Success!"); } END_TEST int soap_call_srm2__srmAbortFiles_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmAbortFilesRequest *srmAbortFilesRequest, struct srm2__srmAbortFilesResponse_ *_param_18) { struct srm2__srmAbortFilesResponse *resp = (struct srm2__srmAbortFilesResponse *) soap_malloc (soap,sizeof (struct srm2__srmAbortFilesResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINVALID_USCOREREQUEST; // token empty retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmAbortFilesResponse = resp; return 0; } int soap_call_srm2__srmAbortFiles_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmAbortFilesRequest *srmAbortFilesRequest, struct srm2__srmAbortFilesResponse_ *_param_18) { struct srm2__srmAbortFilesResponse *resp = (struct srm2__srmAbortFilesResponse *) soap_malloc (soap,sizeof (struct srm2__srmAbortFilesResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; // token empty retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmAbortFilesResponse = resp; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTSURLReturnStatus *)soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLReturnStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TSURLReturnStatus**) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TSURLReturnStatus*) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus)); resp->arrayOfFileStatuses->statusArray[0]->status = retstatus; resp->arrayOfFileStatuses->statusArray[0]->surl = fixture_test_string; return 0; } ////////////////////////////////////////////////////////////////// // test test_abort_files ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_abort_files) { char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; struct srmv2_filestatus *statuses; struct srm_abort_files_input input; struct srm_context context; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbfiles = 1; input.surls = test_surls; input.reqtoken = "test"; call_function.call_srm2__srmAbortFiles = soap_call_srm2__srmAbortFiles_test1; result = srmv2_abort_files(&context,&input,&statuses); fail_if ((result != -1), "Expected Failure 1!"); call_function.call_srm2__srmAbortFiles = soap_call_srm2__srmAbortFiles_test2; result = srmv2_abort_files(&context,&input,&statuses); fail_if ((result == -1), "Expected Success!"); } END_TEST int soap_call_srm2__srmPutDone_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPutDoneRequest *srmAbortFilesRequest, struct srm2__srmPutDoneResponse_ *_param_18) { struct srm2__srmPutDoneResponse *resp = (struct srm2__srmPutDoneResponse *) soap_malloc (soap,sizeof (struct srm2__srmPutDoneResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINVALID_USCOREREQUEST; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmPutDoneResponse = resp; return 0; } int soap_call_srm2__srmPutDone_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPutDoneRequest *srmAbortFilesRequest, struct srm2__srmPutDoneResponse_ *_param_18) { struct srm2__srmPutDoneResponse *resp = (struct srm2__srmPutDoneResponse *) soap_malloc (soap,sizeof (struct srm2__srmPutDoneResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmPutDoneResponse = resp; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTSURLReturnStatus *)soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLReturnStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TSURLReturnStatus**) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TSURLReturnStatus*) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus)); resp->arrayOfFileStatuses->statusArray[0]->status = retstatus; resp->arrayOfFileStatuses->statusArray[0]->surl = fixture_test_string; return 0; } int soap_call_srm2__srmPutDone_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPutDoneRequest *srmAbortFilesRequest, struct srm2__srmPutDoneResponse_ *_param_18) { struct srm2__srmPutDoneResponse *resp = (struct srm2__srmPutDoneResponse *) soap_malloc (soap,sizeof (struct srm2__srmPutDoneResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmPutDoneResponse = resp; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTSURLReturnStatus *)soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLReturnStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TSURLReturnStatus**) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TSURLReturnStatus*) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus)); resp->arrayOfFileStatuses->statusArray[0]->status = retstatus; resp->arrayOfFileStatuses->statusArray[0]->surl = fixture_test_string; return 0; } int soap_call_srm2__srmPutDone_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPutDoneRequest *srmAbortFilesRequest, struct srm2__srmPutDoneResponse_ *_param_18) { struct srm2__srmPutDoneResponse *resp = (struct srm2__srmPutDoneResponse *) soap_malloc (soap,sizeof (struct srm2__srmPutDoneResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmPutDoneResponse = NULL; // THIS FAILS return 0; } int soap_call_srm2__srmPutDone_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPutDoneRequest *srmAbortFilesRequest, struct srm2__srmPutDoneResponse_ *_param_18) { struct srm2__srmPutDoneResponse *resp = (struct srm2__srmPutDoneResponse *) soap_malloc (soap,sizeof (struct srm2__srmPutDoneResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = NULL;// THIS FAILS resp->arrayOfFileStatuses = NULL; _param_18->srmPutDoneResponse = resp; return 0; } ////////////////////////////////////////////////////////////////// // test test_put_done ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_put_done) { char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; struct srmv2_filestatus *statuses; struct srm_putdone_input input; struct srm_context context; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbfiles = 1; input.surls = test_surls; input.reqtoken = "test"; call_function.call_srm2__srmPutDone = soap_call_srm2__srmPutDone_test1; result = srmv2_put_done(&context,&input,&statuses); fail_if ((result != -1), "Expected Failure 1!"); call_function.call_srm2__srmPutDone = soap_call_srm2__srmPutDone_test2; result = srmv2_put_done(&context,&input,&statuses); fail_if ((result == -1), "Expected Success!"); call_function.call_srm2__srmPutDone = soap_call_srm2__srmPutDone_test3; result = srmv2_put_done(&context,&input,&statuses); fail_if ((result == -1), "Expected Success!"); call_function.call_srm2__srmPutDone = soap_call_srm2__srmPutDone_test4; result = srmv2_put_done(&context,&input,&statuses); fail_if ((result != -1), "Expected Failure!"); call_function.call_srm2__srmPutDone = soap_call_srm2__srmPutDone_test5; result = srmv2_put_done(&context,&input,&statuses); fail_if ((result != -1), "Expected Failure!"); } END_TEST int soap_call_srm2__srmReleaseFiles_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmReleaseFilesRequest *srmAbortFilesRequest, struct srm2__srmReleaseFilesResponse_ *_param_18) { struct srm2__srmReleaseFilesResponse *resp = (struct srm2__srmReleaseFilesResponse *) soap_malloc (soap,sizeof (struct srm2__srmReleaseFilesResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINVALID_USCOREREQUEST; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmReleaseFilesResponse = resp; return 0; } int soap_call_srm2__srmReleaseFiles_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmReleaseFilesRequest *srmAbortFilesRequest, struct srm2__srmReleaseFilesResponse_ *_param_18) { struct srm2__srmReleaseFilesResponse *resp = (struct srm2__srmReleaseFilesResponse *) soap_malloc (soap,sizeof (struct srm2__srmReleaseFilesResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmReleaseFilesResponse = resp; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTSURLReturnStatus *)soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLReturnStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TSURLReturnStatus**) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TSURLReturnStatus*) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus)); resp->arrayOfFileStatuses->statusArray[0]->status = retstatus; resp->arrayOfFileStatuses->statusArray[0]->surl = fixture_test_string; return 0; } int soap_call_srm2__srmReleaseFiles_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmReleaseFilesRequest *srmAbortFilesRequest, struct srm2__srmReleaseFilesResponse_ *_param_18) { struct srm2__srmReleaseFilesResponse *resp = (struct srm2__srmReleaseFilesResponse *) soap_malloc (soap,sizeof (struct srm2__srmReleaseFilesResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmReleaseFilesResponse = resp; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTSURLReturnStatus *)soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLReturnStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TSURLReturnStatus**) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TSURLReturnStatus*) soap_malloc (soap,sizeof (struct srm2__TSURLReturnStatus)); resp->arrayOfFileStatuses->statusArray[0]->status = retstatus; resp->arrayOfFileStatuses->statusArray[0]->surl = fixture_test_string; return 0; } int soap_call_srm2__srmReleaseFiles_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmReleaseFilesRequest *srmAbortFilesRequest, struct srm2__srmReleaseFilesResponse_ *_param_18) { struct srm2__srmReleaseFilesResponse *resp = (struct srm2__srmReleaseFilesResponse *) soap_malloc (soap,sizeof (struct srm2__srmReleaseFilesResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmReleaseFilesResponse = NULL; // THIS FAILS return 0; } int soap_call_srm2__srmReleaseFiles_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmReleaseFilesRequest *srmAbortFilesRequest, struct srm2__srmReleaseFilesResponse_ *_param_18) { struct srm2__srmReleaseFilesResponse *resp = (struct srm2__srmReleaseFilesResponse *) soap_malloc (soap,sizeof (struct srm2__srmReleaseFilesResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = NULL;// THIS FAILS resp->arrayOfFileStatuses = NULL; _param_18->srmReleaseFilesResponse = resp; return 0; } ////////////////////////////////////////////////////////////////// // test test_release_files ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_release_files) { char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; struct srmv2_filestatus *statuses; struct srm_releasefiles_input input; struct srm_context context; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbfiles = 1; input.surls = test_surls; input.reqtoken = "test"; call_function.call_srm2__srmReleaseFiles = soap_call_srm2__srmReleaseFiles_test1; result = srmv2_release_files(&context,&input,&statuses); fail_if ((result != -1), "Expected Failure 1!"); call_function.call_srm2__srmReleaseFiles = soap_call_srm2__srmReleaseFiles_test2; result = srmv2_release_files(&context,&input,&statuses); fail_if ((result == -1), "Expected Success!"); call_function.call_srm2__srmReleaseFiles = soap_call_srm2__srmReleaseFiles_test3; result = srmv2_release_files(&context,&input,&statuses); fail_if ((result == -1), "Expected Success!"); call_function.call_srm2__srmReleaseFiles = soap_call_srm2__srmReleaseFiles_test4; result = srmv2_release_files(&context,&input,&statuses); fail_if ((result != -1), "Expected Failure!"); call_function.call_srm2__srmReleaseFiles = soap_call_srm2__srmReleaseFiles_test5; result = srmv2_release_files(&context,&input,&statuses); fail_if ((result != -1), "Expected Failure!"); } END_TEST int soap_call_srm2__srmBringOnline_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmBringOnlineRequest *srmBringOnlineRequest, struct srm2__srmBringOnlineResponse_ *_param_18) { struct srm2__srmBringOnlineResponse *resp = (struct srm2__srmBringOnlineResponse *) soap_malloc (soap,sizeof (struct srm2__srmBringOnlineResponse)); resp->returnStatus = NULL; resp->remainingTotalRequestTime = NULL; resp->requestToken = NULL; resp->arrayOfFileStatuses = NULL; _param_18->srmBringOnlineResponse = resp; return 0; // success but return statuses are NULL } int soap_call_srm2__srmBringOnline_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmBringOnlineRequest *srmBringOnlineRequest, struct srm2__srmBringOnlineResponse_ *_param_18) { struct srm2__srmBringOnlineResponse *resp = (struct srm2__srmBringOnlineResponse *) soap_malloc (soap,sizeof (struct srm2__srmBringOnlineResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->remainingTotalRequestTime = NULL; resp->requestToken = NULL; resp->arrayOfFileStatuses = NULL; _param_18->srmBringOnlineResponse = resp; return -1; // failure } int soap_call_srm2__srmBringOnline_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmBringOnlineRequest *srmBringOnlineRequest, struct srm2__srmBringOnlineResponse_ *_param_18) { struct srm2__srmBringOnlineResponse *resp = (struct srm2__srmBringOnlineResponse *) soap_malloc (soap,sizeof (struct srm2__srmBringOnlineResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); resp->returnStatus = retstatus; resp->remainingTotalRequestTime = NULL; resp->requestToken = NULL; resp->arrayOfFileStatuses = NULL; _param_18->srmBringOnlineResponse = resp; retstatus->statusCode = SRM_USCOREPARTIAL_USCORESUCCESS; retstatus->explanation = NULL; return 0; // success } int soap_call_srm2__srmBringOnline_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmBringOnlineRequest *srmBringOnlineRequest, struct srm2__srmBringOnlineResponse_ *_param_18) { struct srm2__srmBringOnlineResponse *resp = (struct srm2__srmBringOnlineResponse *) soap_malloc (soap,sizeof (struct srm2__srmBringOnlineResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->requestToken = NULL; resp->arrayOfFileStatuses = NULL; _param_18->srmBringOnlineResponse = resp; _param_18->srmBringOnlineResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmBringOnline_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmBringOnlineRequest *srmBringOnlineRequest, struct srm2__srmBringOnlineResponse_ *_param_18) { struct srm2__srmBringOnlineResponse *resp = (struct srm2__srmBringOnlineResponse *) soap_malloc (soap,sizeof (struct srm2__srmBringOnlineResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->requestToken = NULL; resp->arrayOfFileStatuses = NULL; _param_18->srmBringOnlineResponse = resp; _param_18->srmBringOnlineResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmBringOnline_test6(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmBringOnlineRequest *srmBringOnlineRequest, struct srm2__srmBringOnlineResponse_ *_param_18) { struct srm2__srmBringOnlineResponse *resp = (struct srm2__srmBringOnlineResponse *) soap_malloc (soap,sizeof (struct srm2__srmBringOnlineResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->requestToken = fixture_test_string; resp->arrayOfFileStatuses = NULL; _param_18->srmBringOnlineResponse = resp; _param_18->srmBringOnlineResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmBringOnline_test7(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmBringOnlineRequest *srmBringOnlineRequest, struct srm2__srmBringOnlineResponse_ *_param_18) { struct srm2__srmBringOnlineResponse *resp = (struct srm2__srmBringOnlineResponse *) soap_malloc (soap,sizeof (struct srm2__srmBringOnlineResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmBringOnlineResponse = resp; _param_18->srmBringOnlineResponse->remainingTotalRequestTime = NULL; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTBringOnlineRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTBringOnlineRequestFileStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TBringOnlineRequestFileStatus**) soap_malloc (soap,sizeof (struct srm2__TBringOnlineRequestFileStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TBringOnlineRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__TBringOnlineRequestFileStatus)); resp->arrayOfFileStatuses->statusArray[0] = NULL; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_ls_async ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_bring_online_async) { struct srm_bringonline_input input; struct srm_bringonline_output output; struct srmv2_pinfilestatus filestatus; struct srm_context context; struct srm_internal_context internal_context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; char *test_protocols[] = {"protocol1","protocol2",NULL}; int result; internal_context.estimated_wait_time = -1; internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbfiles = 1; input.desiredpintime = 1000; input.spacetokendesc = NULL; // TODO test ... getbestspacetoken input.spacetokendesc = "TEST_SPACE_TOKEN_DESC"; input.surls = test_surls; input.protocols = test_protocols; call_function.call_srm2__srmBringOnline = soap_call_srm2__srmBringOnline_test1; result = srmv2_bring_online_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 1!"); call_function.call_srm2__srmBringOnline = soap_call_srm2__srmBringOnline_test2; result = srmv2_bring_online_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 2!"); call_function.call_srm2__srmBringOnline = soap_call_srm2__srmBringOnline_test3; result = srmv2_bring_online_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 3!"); call_function.call_srm2__srmBringOnline = soap_call_srm2__srmBringOnline_test4; result = srmv2_bring_online_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 4!"); call_function.call_srm2__srmBringOnline = soap_call_srm2__srmBringOnline_test5; result = srmv2_bring_online_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_TIMEOUT)|| (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmBringOnline = soap_call_srm2__srmBringOnline_test6; result = srmv2_bring_online_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); free(output.token); fail_if ((internal_context.current_status != srm_call_status_QUEUED)|| (result == -1), "Expected Queued!"); output.filestatuses = &filestatus; call_function.call_srm2__srmBringOnline = soap_call_srm2__srmBringOnline_test7; result = srmv2_bring_online_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_SUCCESS)|| (result == -1), "Expected Success!"); } END_TEST int soap_call_srm2__srmStatusOfBringOnline_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfBringOnlineRequestRequest *srmStatusOfBringOnlineRequest, struct srm2__srmStatusOfBringOnlineRequestResponse_ *_param_18) { _param_18->srmStatusOfBringOnlineRequestResponse = NULL; return 0; // success but return statuses are NULL } int soap_call_srm2__srmStatusOfBringOnline_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfBringOnlineRequestRequest *srmStatusOfBringOnlineRequest, struct srm2__srmStatusOfBringOnlineRequestResponse_ *_param_18) { struct srm2__srmStatusOfBringOnlineRequestResponse *resp = (struct srm2__srmStatusOfBringOnlineRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfBringOnlineRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmStatusOfBringOnlineRequestResponse = resp; _param_18->srmStatusOfBringOnlineRequestResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmStatusOfBringOnline_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfBringOnlineRequestRequest *srmStatusOfBringOnlineRequest, struct srm2__srmStatusOfBringOnlineRequestResponse_ *_param_18) { struct srm2__srmStatusOfBringOnlineRequestResponse *resp = (struct srm2__srmStatusOfBringOnlineRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfBringOnlineRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmStatusOfBringOnlineRequestResponse = resp; _param_18->srmStatusOfBringOnlineRequestResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmStatusOfBringOnline_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfBringOnlineRequestRequest *srmStatusOfBringOnlineRequest, struct srm2__srmStatusOfBringOnlineRequestResponse_ *_param_18) { struct srm2__srmStatusOfBringOnlineRequestResponse *resp = (struct srm2__srmStatusOfBringOnlineRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfBringOnlineRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTBringOnlineRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTBringOnlineRequestFileStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TBringOnlineRequestFileStatus**) soap_malloc (soap,sizeof (struct srm2__TBringOnlineRequestFileStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TBringOnlineRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__TBringOnlineRequestFileStatus)); resp->arrayOfFileStatuses->statusArray[0] = NULL; _param_18->srmStatusOfBringOnlineRequestResponse = resp; _param_18->srmStatusOfBringOnlineRequestResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmStatusOfBringOnline_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfBringOnlineRequestRequest *srmStatusOfBringOnlineRequest, struct srm2__srmStatusOfBringOnlineRequestResponse_ *_param_18) { struct srm2__srmStatusOfBringOnlineRequestResponse *resp = (struct srm2__srmStatusOfBringOnlineRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfBringOnlineRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; // FAILS _param_18->srmStatusOfBringOnlineRequestResponse = resp; _param_18->srmStatusOfBringOnlineRequestResponse->remainingTotalRequestTime = NULL; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_status_of_bring_online ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_status_of_bring_online_async) { int i; struct srm_bringonline_input input; struct srm_bringonline_output output; struct srmv2_pinfilestatus filestatus; struct srm_context context; struct srm_internal_context internal_context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; char *test_protocols[] = {"protocol1","protocol2",NULL}; int result; internal_context.estimated_wait_time = -1; internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbfiles = 1; input.desiredpintime = 1000; input.spacetokendesc = NULL; // TODO test ... getbestspacetoken input.spacetokendesc = "TEST_SPACE_TOKEN_DESC"; input.surls = test_surls; input.protocols = test_protocols; call_function.call_srm2__srmStatusOfBringOnlineRequest = soap_call_srm2__srmStatusOfBringOnline_test1; result = srmv2_status_of_bring_online_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE) || (result != -1), "Expected Failure 1!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfBringOnlineRequest = soap_call_srm2__srmStatusOfBringOnline_test2; result = srmv2_status_of_bring_online_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_QUEUED)|| (result == -1), "Expected Queued in first call!"); for (i=0;i<15;i++) { result = srmv2_status_of_bring_online_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status == srm_call_status_SUCCESS) || (internal_context.current_status == srm_call_status_FAILURE), "Do not fail/succeed if queued,expected timeout after 10 calls.!"); } fail_if ((internal_context.current_status != srm_call_status_TIMEOUT) || (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfBringOnlineRequest = soap_call_srm2__srmStatusOfBringOnline_test3; result = srmv2_status_of_bring_online_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_TIMEOUT) || (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; output.filestatuses= &filestatus; call_function.call_srm2__srmStatusOfBringOnlineRequest = soap_call_srm2__srmStatusOfBringOnline_test4; result = srmv2_status_of_bring_online_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_SUCCESS) || (result == -1), "Expected Success!"); call_function.call_srm2__srmStatusOfBringOnlineRequest = soap_call_srm2__srmStatusOfBringOnline_test5; result = srmv2_status_of_bring_online_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE) || (result != -1), "Expected Failure!"); } END_TEST int soap_call_srm2__srmPrepareToGet_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToGetRequest *srmPrepareToGetRequest, struct srm2__srmPrepareToGetResponse_ *_param_18) { _param_18->srmPrepareToGetResponse = NULL; return 0; // success but return statuses are NULL } int soap_call_srm2__srmPrepareToGet_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToGetRequest *srmBringOnlineRequest, struct srm2__srmPrepareToGetResponse_ *_param_18) { struct srm2__srmPrepareToGetResponse *resp = (struct srm2__srmPrepareToGetResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToGetResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmPrepareToGetResponse = resp; _param_18->srmPrepareToGetResponse->remainingTotalRequestTime = NULL; retstatus->statusCode = SRM_USCOREFAILURE; retstatus->explanation = NULL; return -1; // failure } int soap_call_srm2__srmPrepareToGet_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToGetRequest *srmPrepareToGetRequest, struct srm2__srmPrepareToGetResponse_ *_param_18) { struct srm2__srmPrepareToGetResponse *resp = (struct srm2__srmPrepareToGetResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToGetResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmPrepareToGetResponse = resp; _param_18->srmPrepareToGetResponse->remainingTotalRequestTime = NULL; retstatus->statusCode = SRM_USCOREPARTIAL_USCORESUCCESS; retstatus->explanation = NULL; return 0; // success } int soap_call_srm2__srmPrepareToGet_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToGetRequest *srmPrepareToGetRequest, struct srm2__srmPrepareToGetResponse_ *_param_18) { struct srm2__srmPrepareToGetResponse *resp = (struct srm2__srmPrepareToGetResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToGetResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; resp->requestToken = NULL; _param_18->srmPrepareToGetResponse = resp; _param_18->srmPrepareToGetResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmPrepareToGet_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToGetRequest *srmPrepareToGetRequest, struct srm2__srmPrepareToGetResponse_ *_param_18) { struct srm2__srmPrepareToGetResponse *resp = (struct srm2__srmPrepareToGetResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToGetResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; resp->requestToken = NULL; _param_18->srmPrepareToGetResponse = resp; _param_18->srmPrepareToGetResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmPrepareToGet_test6(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToGetRequest *srmPrepareToGetRequest, struct srm2__srmPrepareToGetResponse_ *_param_18) { struct srm2__srmPrepareToGetResponse *resp = (struct srm2__srmPrepareToGetResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToGetResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; resp->requestToken = fixture_test_string; _param_18->srmPrepareToGetResponse = resp; _param_18->srmPrepareToGetResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmPrepareToGet_test7(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToGetRequest *srmPrepareToGetRequest, struct srm2__srmPrepareToGetResponse_ *_param_18) { struct srm2__srmPrepareToGetResponse *resp = (struct srm2__srmPrepareToGetResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToGetResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmPrepareToGetResponse = resp; _param_18->srmPrepareToGetResponse->remainingTotalRequestTime = NULL; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTGetRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTGetRequestFileStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TGetRequestFileStatus **) soap_malloc (soap,sizeof (struct srm2__TGetRequestFileStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TGetRequestFileStatus *) soap_malloc (soap,sizeof (struct srm2__TGetRequestFileStatus )); resp->arrayOfFileStatuses->statusArray[0] = NULL; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_prepare_to_get_async ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_prepare_to_get_async) { struct srm_preparetoget_input input; struct srm_preparetoget_output output; struct srmv2_pinfilestatus filestatus; struct srm_context context; struct srm_internal_context internal_context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; char *test_protocols[] = {"protocol1","protocol2",NULL}; int result; internal_context.estimated_wait_time = -1; internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbfiles = 1; input.desiredpintime = 1000; input.spacetokendesc = NULL; // TODO test ... getbestspacetoken input.spacetokendesc = "TEST_SPACE_TOKEN_DESC"; input.surls = test_surls; input.protocols = test_protocols; call_function.call_srm2__srmPrepareToGet = soap_call_srm2__srmPrepareToGet_test1; result = srmv2_prepare_to_get_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 1!"); call_function.call_srm2__srmPrepareToGet = soap_call_srm2__srmPrepareToGet_test2; result = srmv2_prepare_to_get_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 2!"); call_function.call_srm2__srmPrepareToGet = soap_call_srm2__srmPrepareToGet_test3; result = srmv2_prepare_to_get_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 3!"); call_function.call_srm2__srmPrepareToGet = soap_call_srm2__srmPrepareToGet_test4; result = srmv2_prepare_to_get_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 4!"); call_function.call_srm2__srmPrepareToGet = soap_call_srm2__srmPrepareToGet_test5; result = srmv2_prepare_to_get_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_TIMEOUT)|| (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmPrepareToGet = soap_call_srm2__srmPrepareToGet_test6; result = srmv2_prepare_to_get_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); free(output.token); fail_if ((internal_context.current_status != srm_call_status_QUEUED)|| (result == -1), "Expected Queued!"); output.filestatuses = &filestatus; call_function.call_srm2__srmPrepareToGet = soap_call_srm2__srmPrepareToGet_test7; result = srmv2_prepare_to_get_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_SUCCESS)|| (result == -1), "Expected Success!"); } END_TEST int soap_call_srm2__srmStatusOfGet_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfGetRequestRequest *srmStatusOfGetRequest, struct srm2__srmStatusOfGetRequestResponse_ *_param_18) { _param_18->srmStatusOfGetRequestResponse = NULL; return 0; // success but return statuses are NULL } int soap_call_srm2__srmStatusOfGet_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfGetRequestRequest *srmStatusOfGetRequest, struct srm2__srmStatusOfGetRequestResponse_ *_param_18) { struct srm2__srmStatusOfGetRequestResponse *resp = (struct srm2__srmStatusOfGetRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfGetRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmStatusOfGetRequestResponse = resp; _param_18->srmStatusOfGetRequestResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmStatusOfGet_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfGetRequestRequest *srmStatusOfGetRequest, struct srm2__srmStatusOfGetRequestResponse_ *_param_18) { struct srm2__srmStatusOfGetRequestResponse *resp = (struct srm2__srmStatusOfGetRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfGetRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmStatusOfGetRequestResponse = resp; _param_18->srmStatusOfGetRequestResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmStatusOfGet_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfGetRequestRequest *srmStatusOfGetRequest, struct srm2__srmStatusOfGetRequestResponse_ *_param_18) { struct srm2__srmStatusOfGetRequestResponse *resp = (struct srm2__srmStatusOfGetRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfGetRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTGetRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTGetRequestFileStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TGetRequestFileStatus**) soap_malloc (soap,sizeof (struct srm2__TGetRequestFileStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TGetRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__TGetRequestFileStatus)); resp->arrayOfFileStatuses->statusArray[0] = NULL; _param_18->srmStatusOfGetRequestResponse = resp; _param_18->srmStatusOfGetRequestResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmStatusOfGet_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfGetRequestRequest *srmStatusOfGetRequest, struct srm2__srmStatusOfGetRequestResponse_ *_param_18) { struct srm2__srmStatusOfGetRequestResponse *resp = (struct srm2__srmStatusOfGetRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfGetRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; // FAILS _param_18->srmStatusOfGetRequestResponse = resp; _param_18->srmStatusOfGetRequestResponse->remainingTotalRequestTime = NULL; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_status_of_get_request_async ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_status_of_get_request_async) { int i; struct srm_preparetoget_input input; struct srm_preparetoget_output output; struct srmv2_pinfilestatus filestatus; struct srm_context context; struct srm_internal_context internal_context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; char *test_protocols[] = {"protocol1","protocol2",NULL}; int result; internal_context.estimated_wait_time = -1; internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbfiles = 1; input.desiredpintime = 1000; input.spacetokendesc = NULL; // TODO test ... getbestspacetoken input.spacetokendesc = "TEST_SPACE_TOKEN_DESC"; input.surls = test_surls; input.protocols = test_protocols; call_function.call_srm2__srmStatusOfGetRequest = soap_call_srm2__srmStatusOfGet_test1; result = srmv2_status_of_get_request_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE) || (result != -1), "Expected Failure 1!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfGetRequest = soap_call_srm2__srmStatusOfGet_test2; result = srmv2_status_of_get_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_QUEUED), "Expected Queued in first call!"); for (i=0;i<15;i++) { result = srmv2_status_of_get_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status == srm_call_status_SUCCESS) || (internal_context.current_status == srm_call_status_FAILURE), "Do not fail/succeed if queued,expected timeout after 10 calls.!"); } fail_if ((internal_context.current_status != srm_call_status_TIMEOUT) || (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfGetRequest = soap_call_srm2__srmStatusOfGet_test3; result = srmv2_status_of_get_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_TIMEOUT) || (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; output.filestatuses= &filestatus; call_function.call_srm2__srmStatusOfGetRequest = soap_call_srm2__srmStatusOfGet_test4; result = srmv2_status_of_get_request_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_SUCCESS) || (result == -1), "Expected Success!"); call_function.call_srm2__srmStatusOfGetRequest = soap_call_srm2__srmStatusOfGet_test5; result = srmv2_status_of_get_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE) || (result != -1), "Expected Failure!"); } END_TEST int soap_call_srm2__srmPrepareToPut_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToPutRequest *srmPrepareToPutRequest, struct srm2__srmPrepareToPutResponse_ *_param_18) { _param_18->srmPrepareToPutResponse = NULL; return 0; // success but return statuses are NULL } int soap_call_srm2__srmPrepareToPut_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToPutRequest *srmBringOnlineRequest, struct srm2__srmPrepareToPutResponse_ *_param_18) { struct srm2__srmPrepareToPutResponse *resp = (struct srm2__srmPrepareToPutResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToPutResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmPrepareToPutResponse = resp; _param_18->srmPrepareToPutResponse->remainingTotalRequestTime = NULL; retstatus->statusCode = SRM_USCOREFAILURE; retstatus->explanation = NULL; return -1; // failure } int soap_call_srm2__srmPrepareToPut_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToPutRequest *srmPrepareToPutRequest, struct srm2__srmPrepareToPutResponse_ *_param_18) { struct srm2__srmPrepareToPutResponse *resp = (struct srm2__srmPrepareToPutResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToPutResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmPrepareToPutResponse = resp; _param_18->srmPrepareToPutResponse->remainingTotalRequestTime = NULL; retstatus->statusCode = SRM_USCOREPARTIAL_USCORESUCCESS; retstatus->explanation = NULL; return 0; // success } int soap_call_srm2__srmPrepareToPut_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToPutRequest *srmPrepareToPutRequest, struct srm2__srmPrepareToPutResponse_ *_param_18) { struct srm2__srmPrepareToPutResponse *resp = (struct srm2__srmPrepareToPutResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToPutResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; resp->requestToken = NULL; _param_18->srmPrepareToPutResponse = resp; _param_18->srmPrepareToPutResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmPrepareToPut_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToPutRequest *srmPrepareToPutRequest, struct srm2__srmPrepareToPutResponse_ *_param_18) { struct srm2__srmPrepareToPutResponse *resp = (struct srm2__srmPrepareToPutResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToPutResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; resp->requestToken = NULL; _param_18->srmPrepareToPutResponse = resp; _param_18->srmPrepareToPutResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmPrepareToPut_test6(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToPutRequest *srmPrepareToPutRequest, struct srm2__srmPrepareToPutResponse_ *_param_18) { struct srm2__srmPrepareToPutResponse *resp = (struct srm2__srmPrepareToPutResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToPutResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; resp->requestToken = fixture_test_string; _param_18->srmPrepareToPutResponse = resp; _param_18->srmPrepareToPutResponse->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmPrepareToPut_test7(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPrepareToPutRequest *srmPrepareToPutRequest, struct srm2__srmPrepareToPutResponse_ *_param_18) { struct srm2__srmPrepareToPutResponse *resp = (struct srm2__srmPrepareToPutResponse *) soap_malloc (soap,sizeof (struct srm2__srmPrepareToPutResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmPrepareToPutResponse = resp; _param_18->srmPrepareToPutResponse->remainingTotalRequestTime = NULL; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTPutRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTPutRequestFileStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TPutRequestFileStatus**) soap_malloc (soap,sizeof (struct srm2__TPutRequestFileStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TPutRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__TPutRequestFileStatus)); resp->arrayOfFileStatuses->statusArray[0] = NULL; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_prepare_to_put_async ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_prepare_to_put_async) { struct srm_preparetoput_input input; struct srm_preparetoput_output output; struct srm_context context; SRM_LONG64 filesizes_test[] = { 1024 }; struct srm_internal_context internal_context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; char *test_protocols[] = {"protocol1","protocol2",NULL}; int result; internal_context.estimated_wait_time = -1; internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.filesizes = filesizes_test; input.nbfiles = 1; input.desiredpintime = 1000; input.spacetokendesc = NULL; // TODO test ... getbestspacetoken input.spacetokendesc = "TEST_SPACE_TOKEN_DESC"; input.surls = test_surls; input.protocols = test_protocols; call_function.call_srm2__srmPrepareToPut = soap_call_srm2__srmPrepareToPut_test1; result = srmv2_prepare_to_put_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 1!"); call_function.call_srm2__srmPrepareToPut = soap_call_srm2__srmPrepareToPut_test2; result = srmv2_prepare_to_put_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 2!"); call_function.call_srm2__srmPrepareToPut = soap_call_srm2__srmPrepareToPut_test3; result = srmv2_prepare_to_put_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 3!"); call_function.call_srm2__srmPrepareToPut = soap_call_srm2__srmPrepareToPut_test4; result = srmv2_prepare_to_put_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 4!"); call_function.call_srm2__srmPrepareToPut = soap_call_srm2__srmPrepareToPut_test5; result = srmv2_prepare_to_put_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_TIMEOUT)|| (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmPrepareToPut = soap_call_srm2__srmPrepareToPut_test6; result = srmv2_prepare_to_put_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); free(output.token); fail_if ((internal_context.current_status != srm_call_status_QUEUED)|| (result == -1), "Expected Queued!"); input.filesizes = NULL; call_function.call_srm2__srmPrepareToPut = soap_call_srm2__srmPrepareToPut_test7; result = srmv2_prepare_to_put_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != -1), "Expected Failure 4!"); input.filesizes = filesizes_test; call_function.call_srm2__srmPrepareToPut = soap_call_srm2__srmPrepareToPut_test7; result = srmv2_prepare_to_put_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_SUCCESS)|| (result == -1), "Expected Success!"); } END_TEST int soap_call_srm2__srmStatusOfPut_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfPutRequestRequest *srmStatusOfPutRequest, struct srm2__srmStatusOfPutRequestResponse_ *_param_18) { _param_18->srmStatusOfPutRequestResponse = NULL; return 0; // success but return statuses are NULL } int soap_call_srm2__srmStatusOfPut_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfPutRequestRequest *srmStatusOfPutRequest, struct srm2__srmStatusOfPutRequestResponse_ *_param_18) { struct srm2__srmStatusOfPutRequestResponse *resp = (struct srm2__srmStatusOfPutRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfPutRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmStatusOfPutRequestResponse = resp; resp->remainingTotalRequestTime = NULL; return 0; // success } int soap_call_srm2__srmStatusOfPut_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfPutRequestRequest *srmStatusOfPutRequest, struct srm2__srmStatusOfPutRequestResponse_ *_param_18) { struct srm2__srmStatusOfPutRequestResponse *resp = (struct srm2__srmStatusOfPutRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfPutRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; resp->remainingTotalRequestTime = NULL; _param_18->srmStatusOfPutRequestResponse = resp; return 0; // success } int soap_call_srm2__srmStatusOfPut_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfPutRequestRequest *srmStatusOfPutRequest, struct srm2__srmStatusOfPutRequestResponse_ *_param_18) { struct srm2__srmStatusOfPutRequestResponse *resp = (struct srm2__srmStatusOfPutRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfPutRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->remainingTotalRequestTime = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTPutRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTPutRequestFileStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TPutRequestFileStatus**) soap_malloc (soap,sizeof (struct srm2__TPutRequestFileStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TPutRequestFileStatus*) soap_malloc (soap,sizeof (struct srm2__TPutRequestFileStatus)); resp->arrayOfFileStatuses->statusArray[0] = NULL; _param_18->srmStatusOfPutRequestResponse = resp; return 0; // success } int soap_call_srm2__srmStatusOfPut_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfPutRequestRequest *srmStatusOfPutRequest, struct srm2__srmStatusOfPutRequestResponse_ *_param_18) { struct srm2__srmStatusOfPutRequestResponse *resp = (struct srm2__srmStatusOfPutRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfPutRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; // FAILS resp->remainingTotalRequestTime = NULL; _param_18->srmStatusOfPutRequestResponse = resp; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_status_of_put_request_async ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_status_of_put_request_async) { int i; struct srm_preparetoput_input input; struct srm_preparetoput_output output; struct srmv2_pinfilestatus filestatus; struct srm_context context; struct srm_internal_context internal_context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; char *test_protocols[] = {"protocol1","protocol2",NULL}; int result; internal_context.estimated_wait_time = -1; internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbfiles = 1; input.desiredpintime = 1000; input.spacetokendesc = NULL; // TODO test ... putbestspacetoken input.spacetokendesc = "TEST_SPACE_TOKEN_DESC"; input.surls = test_surls; input.protocols = test_protocols; call_function.call_srm2__srmStatusOfPutRequest = soap_call_srm2__srmStatusOfPut_test1; result = srmv2_status_of_put_request_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE) || (result != -1), "Expected Failure 1!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfPutRequest = soap_call_srm2__srmStatusOfPut_test2; result = srmv2_status_of_put_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_QUEUED)|| (result == -1), "Expected Queued in first call!"); for (i=0;i<15;i++) { result = srmv2_status_of_put_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status == srm_call_status_SUCCESS) || (internal_context.current_status == srm_call_status_FAILURE), "Do not fail/succeed if queued,expected timeout after 10 calls.!"); } fail_if ((internal_context.current_status != srm_call_status_TIMEOUT) || (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfPutRequest = soap_call_srm2__srmStatusOfPut_test3; result = srmv2_status_of_put_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_TIMEOUT) || (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; output.filestatuses = &filestatus; call_function.call_srm2__srmStatusOfPutRequest = soap_call_srm2__srmStatusOfPut_test4; result = srmv2_status_of_put_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_SUCCESS) || (result == -1), "Expected Success!"); call_function.call_srm2__srmStatusOfPutRequest = soap_call_srm2__srmStatusOfPut_test5; result = srmv2_status_of_put_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE) || (result != -1), "Expected Failure!"); } END_TEST int soap_call_srm2__srmGetSpaceMetaData_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceMetaDataRequest *srmGetSpaceMetaDataRequest, struct srm2__srmGetSpaceMetaDataResponse_ *_param_18) { struct srm2__srmGetSpaceMetaDataResponse *resp = (struct srm2__srmGetSpaceMetaDataResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetSpaceMetaDataResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfSpaceDetails = NULL; // FAILS _param_18->srmGetSpaceMetaDataResponse = resp; return 0; // success } int soap_call_srm2__srmGetSpaceMetaData_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceMetaDataRequest *srmGetSpaceMetaDataRequest, struct srm2__srmGetSpaceMetaDataResponse_ *_param_18) { _param_18->srmGetSpaceMetaDataResponse = NULL; // FAILS return 0; // success } int soap_call_srm2__srmGetSpaceMetaData_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceMetaDataRequest *srmGetSpaceMetaDataRequest, struct srm2__srmGetSpaceMetaDataResponse_ *_param_18) { struct srm2__srmGetSpaceMetaDataResponse *resp = (struct srm2__srmGetSpaceMetaDataResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetSpaceMetaDataResponse)); resp->returnStatus = NULL;// FAILS resp->arrayOfSpaceDetails = NULL; _param_18->srmGetSpaceMetaDataResponse = resp; return 0; // success } int soap_call_srm2__srmGetSpaceMetaData_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceMetaDataRequest *srmGetSpaceMetaDataRequest, struct srm2__srmGetSpaceMetaDataResponse_ *_param_18) { struct srm2__srmGetSpaceMetaDataResponse *resp = (struct srm2__srmGetSpaceMetaDataResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetSpaceMetaDataResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfSpaceDetails = NULL; _param_18->srmGetSpaceMetaDataResponse = resp; return 0; // success } int soap_call_srm2__srmGetSpaceMetaData_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceMetaDataRequest *srmGetSpaceMetaDataRequest, struct srm2__srmGetSpaceMetaDataResponse_ *_param_18) { struct srm2__srmGetSpaceMetaDataResponse *resp = (struct srm2__srmGetSpaceMetaDataResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetSpaceMetaDataResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfSpaceDetails = (struct srm2__ArrayOfTMetaDataSpace*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTMetaDataSpace)); resp->arrayOfSpaceDetails->__sizespaceDataArray = 1; resp->arrayOfSpaceDetails->spaceDataArray = (struct srm2__TMetaDataSpace**) soap_malloc (soap,sizeof (struct srm2__TMetaDataSpace *)); resp->arrayOfSpaceDetails->spaceDataArray[0] = (struct srm2__TMetaDataSpace*) soap_malloc (soap,sizeof (struct srm2__TMetaDataSpace)); resp->arrayOfSpaceDetails->spaceDataArray[0] = NULL; _param_18->srmGetSpaceMetaDataResponse = resp; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_getspacemd ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_getspacemd) { struct srm_getspacemd_input input; struct srm_spacemd *spaces; struct srm_context context; char *test_tokens1[] = {"token1",NULL}; char *test_tokens2[] = {"token1","token2",NULL}; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.nbtokens = 0; input.spacetokens = NULL; call_function.call_srm2__srmGetSpaceMetaData = soap_call_srm2__srmGetSpaceMetaData_test1; result = srmv2_getspacemd(&context,&input,&spaces); fail_if ((result != -1), "Expected Failure !"); input.nbtokens = 1; input.spacetokens = NULL; call_function.call_srm2__srmGetSpaceMetaData = soap_call_srm2__srmGetSpaceMetaData_test1; result = srmv2_getspacemd(&context,&input,&spaces); fail_if ((result != -1), "Expected Failure !"); input.nbtokens = 1; // FAILS wrong count input.spacetokens = test_tokens2; call_function.call_srm2__srmGetSpaceMetaData = soap_call_srm2__srmGetSpaceMetaData_test1; result = srmv2_getspacemd(&context,&input,&spaces); fail_if ((result != -1), "Expected Failure !"); input.nbtokens = 2; call_function.call_srm2__srmGetSpaceMetaData = soap_call_srm2__srmGetSpaceMetaData_test1; result = srmv2_getspacemd(&context,&input,&spaces); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetSpaceMetaData = soap_call_srm2__srmGetSpaceMetaData_test2; result = srmv2_getspacemd(&context,&input,&spaces); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetSpaceMetaData = soap_call_srm2__srmGetSpaceMetaData_test3; result = srmv2_getspacemd(&context,&input,&spaces); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetSpaceMetaData = soap_call_srm2__srmGetSpaceMetaData_test4; result = srmv2_getspacemd(&context,&input,&spaces); fail_if ((result != -1), "Expected Failure !"); input.nbtokens = 1; input.spacetokens = test_tokens1; call_function.call_srm2__srmGetSpaceMetaData = soap_call_srm2__srmGetSpaceMetaData_test5; result = srmv2_getspacemd(&context,&input,&spaces); fail_if ((result != 0), "Expected Success!"); } END_TEST int soap_call_srm2__srmGetSpaceTokens_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceTokensRequest *srmGetSpaceTokensRequest, struct srm2__srmGetSpaceTokensResponse_ *_param_18) { struct srm2__srmGetSpaceTokensResponse *resp = (struct srm2__srmGetSpaceTokensResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetSpaceTokensResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfSpaceTokens = NULL; // FAILS _param_18->srmGetSpaceTokensResponse = resp; return 0; // success } int soap_call_srm2__srmGetSpaceTokens_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceTokensRequest *srmGetSpaceTokensRequest, struct srm2__srmGetSpaceTokensResponse_ *_param_18) { _param_18->srmGetSpaceTokensResponse = NULL; // FAILS return 0; // success } int soap_call_srm2__srmGetSpaceTokens_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceTokensRequest *srmGetSpaceTokensRequest, struct srm2__srmGetSpaceTokensResponse_ *_param_18) { struct srm2__srmGetSpaceTokensResponse *resp = (struct srm2__srmGetSpaceTokensResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetSpaceTokensResponse)); resp->returnStatus = NULL;// FAILS resp->arrayOfSpaceTokens = NULL; _param_18->srmGetSpaceTokensResponse = resp; return 0; // success } int soap_call_srm2__srmGetSpaceTokens_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceTokensRequest *srmGetSpaceTokensRequest, struct srm2__srmGetSpaceTokensResponse_ *_param_18) { struct srm2__srmGetSpaceTokensResponse *resp = (struct srm2__srmGetSpaceTokensResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetSpaceTokensResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfSpaceTokens = NULL; _param_18->srmGetSpaceTokensResponse = resp; return 0; // success } int soap_call_srm2__srmGetSpaceTokens_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceTokensRequest *srmGetSpaceTokensRequest, struct srm2__srmGetSpaceTokensResponse_ *_param_18) { struct srm2__srmGetSpaceTokensResponse *resp = (struct srm2__srmGetSpaceTokensResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetSpaceTokensResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfSpaceTokens = (struct srm2__ArrayOfString*) soap_malloc (soap,sizeof (struct srm2__ArrayOfString)); resp->arrayOfSpaceTokens->__sizestringArray = 1; resp->arrayOfSpaceTokens->stringArray = (char **) soap_malloc (soap,sizeof (char *)); resp->arrayOfSpaceTokens->stringArray[0] = (char *) soap_malloc (soap,sizeof (char)); resp->arrayOfSpaceTokens->stringArray[0] = fixture_test_string; _param_18->srmGetSpaceTokensResponse = resp; return 0; // success } int soap_call_srm2__srmGetSpaceTokens_test6(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetSpaceTokensRequest *srmGetSpaceTokensRequest, struct srm2__srmGetSpaceTokensResponse_ *_param_18) { return -1; // failure } ////////////////////////////////////////////////////////////////// // test test_srmv2_getspacetokens ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_getspacetokens) { struct srm_getspacetokens_input input; struct srm_getspacetokens_output output; struct srm_context context; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); input.spacetokendesc = NULL; call_function.call_srm2__srmGetSpaceTokens = soap_call_srm2__srmGetSpaceTokens_test1; result = srmv2_getspacetokens(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); input.spacetokendesc = "MySpaceTokens"; call_function.call_srm2__srmGetSpaceTokens = soap_call_srm2__srmGetSpaceTokens_test1; result = srmv2_getspacetokens(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetSpaceTokens = soap_call_srm2__srmGetSpaceTokens_test2; result = srmv2_getspacetokens(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetSpaceTokens = soap_call_srm2__srmGetSpaceTokens_test3; result = srmv2_getspacetokens(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetSpaceTokens = soap_call_srm2__srmGetSpaceTokens_test4; result = srmv2_getspacetokens(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetSpaceTokens = soap_call_srm2__srmGetSpaceTokens_test5; result = srmv2_getspacetokens(&context,&input,&output); fail_if ((result != 0), "Expected Success!"); fail_if ((strcmp(output.spacetokens[0],fixture_test_string) != 0), "Expected the same string !"); free(output.spacetokens[0]); free(output.spacetokens); call_function.call_srm2__srmGetSpaceTokens = soap_call_srm2__srmGetSpaceTokens_test6; result = srmv2_getspacetokens(&context,&input,&output); free(output.spacetokens); fail_if ((result != -1), "Expected Failure !"); } END_TEST int soap_call_srm2__srmPing_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPingRequest *srmPingRequest, struct srm2__srmPingResponse_ *_param_18) { struct srm2__srmPingResponse *resp = (struct srm2__srmPingResponse *) soap_malloc (soap,sizeof (struct srm2__srmPingResponse)); resp->versionInfo = fixture_test_string; _param_18->srmPingResponse = resp; return 0; // success } int soap_call_srm2__srmPing_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPingRequest *srmPingRequest, struct srm2__srmPingResponse_ *_param_18) { struct srm2__srmPingResponse *resp = (struct srm2__srmPingResponse *) soap_malloc (soap,sizeof (struct srm2__srmPingResponse)); resp->versionInfo = NULL; // FAIL _param_18->srmPingResponse = resp; return 0; } int soap_call_srm2__srmPing_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPingRequest *srmPingRequest, struct srm2__srmPingResponse_ *_param_18) { _param_18->srmPingResponse = NULL; // FAIL return 0; } int soap_call_srm2__srmPing_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmPingRequest *srmPingRequest, struct srm2__srmPingResponse_ *_param_18) { struct srm2__srmPingResponse *resp = (struct srm2__srmPingResponse *) soap_malloc (soap,sizeof (struct srm2__srmPingResponse)); resp->versionInfo = fixture_test_string; _param_18->srmPingResponse = resp; return -1; // fail } ////////////////////////////////////////////////////////////////// // test test_srmv2_ping ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_ping) { struct srm_ping_output output; struct srm_context context; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); call_function.call_srm2__srmPing = soap_call_srm2__srmPing_test1; result = srmv2_ping(&context,&output); free(output.versioninfo); fail_if ((result != 0), "Expected Success !"); call_function.call_srm2__srmPing = soap_call_srm2__srmPing_test2; result = srmv2_ping(&context,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmPing = soap_call_srm2__srmPing_test3; result = srmv2_ping(&context,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmPing = soap_call_srm2__srmPing_test4; result = srmv2_ping(&context,&output); fail_if ((result != -1), "Expected Failure !"); } END_TEST int soap_call_srm2__srmSetPermission_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmSetPermissionRequest *srmSetPermissionRequest, struct srm2__srmSetPermissionResponse_ *_param_18) { struct srm2__srmSetPermissionResponse *resp = (struct srm2__srmSetPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmSetPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmSetPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmSetPermission_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmSetPermissionRequest *srmSetPermissionRequest, struct srm2__srmSetPermissionResponse_ *_param_18) { _param_18->srmSetPermissionResponse = NULL; // FAILS return 0; // success } int soap_call_srm2__srmSetPermission_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmSetPermissionRequest *srmSetPermissionRequest, struct srm2__srmSetPermissionResponse_ *_param_18) { struct srm2__srmSetPermissionResponse *resp = (struct srm2__srmSetPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmSetPermissionResponse)); resp->returnStatus = NULL;// FAILS _param_18->srmSetPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmSetPermission_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmSetPermissionRequest *srmSetPermissionRequest, struct srm2__srmSetPermissionResponse_ *_param_18) { struct srm2__srmSetPermissionResponse *resp = (struct srm2__srmSetPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmSetPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmSetPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmSetPermission_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmSetPermissionRequest *srmSetPermissionRequest, struct srm2__srmSetPermissionResponse_ *_param_18) { struct srm2__srmSetPermissionResponse *resp = (struct srm2__srmSetPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmSetPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmSetPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmSetPermission_test6(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmSetPermissionRequest *srmSetPermissionRequest, struct srm2__srmSetPermissionResponse_ *_param_18) { return -1; // failure } ////////////////////////////////////////////////////////////////// // test test_srmv2_set_permission ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_set_permission) { struct srm_setpermission_input input; struct srm_permission user_perm; struct srm_context context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); context.version = VERSION_2_2; input.surl = test_surls[0]; input.owner_permission = SRM_PERMISSION_RWX; input.other_permission = SRM_PERMISSION_RW; input.group_permissions_count = 0; input.group_permissions = NULL; user_perm.mode = SRM_PERMISSION_RWX; user_perm.name_id = "tmanev"; input.user_permissions_count = 1; input.user_permissions = &user_perm; input.permission_type = SRM_PERMISSION_ADD; call_function.call_srm2__srmSetPermission = soap_call_srm2__srmSetPermission_test1; result = srmv2_set_permission(&context,&input); fail_if ((result != 0), "Expected Success !"); call_function.call_srm2__srmSetPermission = soap_call_srm2__srmSetPermission_test2; result = srmv2_set_permission(&context,&input); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmSetPermission = soap_call_srm2__srmSetPermission_test3; result = srmv2_set_permission(&context,&input); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmSetPermission = soap_call_srm2__srmSetPermission_test4; result = srmv2_set_permission(&context,&input); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmSetPermission = soap_call_srm2__srmSetPermission_test5; result = srmv2_set_permission(&context,&input); fail_if ((result != 0), "Expected Success!"); call_function.call_srm2__srmSetPermission = soap_call_srm2__srmSetPermission_test6; result = srmv2_set_permission(&context,&input); fail_if ((result != -1), "Expected Failure !"); } END_TEST int soap_call_srm2__srmGetPermission_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetPermissionRequest *srmGetPermissionRequest, struct srm2__srmGetPermissionResponse_ *_param_18) { struct srm2__srmGetPermissionResponse *resp = (struct srm2__srmGetPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfPermissionReturns = NULL; _param_18->srmGetPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmGetPermission_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetPermissionRequest *srmGetPermissionRequest, struct srm2__srmGetPermissionResponse_ *_param_18) { _param_18->srmGetPermissionResponse = NULL; // FAILS return 0; // success } int soap_call_srm2__srmGetPermission_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetPermissionRequest *srmGetPermissionRequest, struct srm2__srmGetPermissionResponse_ *_param_18) { struct srm2__srmGetPermissionResponse *resp = (struct srm2__srmGetPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetPermissionResponse)); resp->returnStatus = NULL;// FAILS resp->arrayOfPermissionReturns = NULL; _param_18->srmGetPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmGetPermission_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetPermissionRequest *srmGetPermissionRequest, struct srm2__srmGetPermissionResponse_ *_param_18) { struct srm2__srmGetPermissionResponse *resp = (struct srm2__srmGetPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfPermissionReturns = NULL; _param_18->srmGetPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmGetPermission_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetPermissionRequest *srmGetPermissionRequest, struct srm2__srmGetPermissionResponse_ *_param_18) { struct srm2__srmGetPermissionResponse *resp = (struct srm2__srmGetPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmGetPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfPermissionReturns = (struct srm2__ArrayOfTPermissionReturn*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTPermissionReturn)); resp->arrayOfPermissionReturns->__sizepermissionArray = 1; resp->arrayOfPermissionReturns->permissionArray = (struct srm2__TPermissionReturn**) soap_malloc (soap,sizeof (struct srm2__TPermissionReturn *)); resp->arrayOfPermissionReturns->permissionArray[0] = (struct srm2__TPermissionReturn*) soap_malloc (soap,sizeof (struct srm2__TPermissionReturn)); resp->arrayOfPermissionReturns->permissionArray[0]->surl = fixture_test_string; resp->arrayOfPermissionReturns->permissionArray[0]->owner = fixture_test_string; resp->arrayOfPermissionReturns->permissionArray[0]->ownerPermission = NULL; resp->arrayOfPermissionReturns->permissionArray[0]->arrayOfGroupPermissions = NULL; resp->arrayOfPermissionReturns->permissionArray[0]->arrayOfUserPermissions = NULL; resp->arrayOfPermissionReturns->permissionArray[0]->otherPermission = NULL; resp->arrayOfPermissionReturns->permissionArray[0]->status = retstatus; _param_18->srmGetPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmGetPermission_test6(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmGetPermissionRequest *srmGetPermissionRequest, struct srm2__srmGetPermissionResponse_ *_param_18) { return -1; // failure } ////////////////////////////////////////////////////////////////// // test test_srmv2_get_permission ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_get_permission) { struct srm_getpermission_input input; struct srm_getpermission_output output; struct srm_context context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); context.version = VERSION_2_2; input.nbfiles = 1; input.surls = test_surls; call_function.call_srm2__srmGetPermission = soap_call_srm2__srmGetPermission_test1; result = srmv2_get_permission(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetPermission = soap_call_srm2__srmGetPermission_test2; result = srmv2_get_permission(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetPermission = soap_call_srm2__srmGetPermission_test3; result = srmv2_get_permission(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetPermission = soap_call_srm2__srmGetPermission_test4; result = srmv2_get_permission(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmGetPermission = soap_call_srm2__srmGetPermission_test5; result = srmv2_get_permission(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != 1), "Expected Success!"); call_function.call_srm2__srmGetPermission = soap_call_srm2__srmGetPermission_test6; result = srmv2_get_permission(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); } END_TEST int soap_call_srm2__srmCheckPermission_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmCheckPermissionRequest *srmCheckPermissionRequest, struct srm2__srmCheckPermissionResponse_ *_param_18) { struct srm2__srmCheckPermissionResponse *resp = (struct srm2__srmCheckPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmCheckPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfPermissions = NULL; _param_18->srmCheckPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmCheckPermission_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmCheckPermissionRequest *srmCheckPermissionRequest, struct srm2__srmCheckPermissionResponse_ *_param_18) { _param_18->srmCheckPermissionResponse = NULL; // FAILS return 0; // success } int soap_call_srm2__srmCheckPermission_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmCheckPermissionRequest *srmCheckPermissionRequest, struct srm2__srmCheckPermissionResponse_ *_param_18) { struct srm2__srmCheckPermissionResponse *resp = (struct srm2__srmCheckPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmCheckPermissionResponse)); resp->returnStatus = NULL;// FAILS resp->arrayOfPermissions = NULL; _param_18->srmCheckPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmCheckPermission_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmCheckPermissionRequest *srmCheckPermissionRequest, struct srm2__srmCheckPermissionResponse_ *_param_18) { struct srm2__srmCheckPermissionResponse *resp = (struct srm2__srmCheckPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmCheckPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfPermissions = NULL; _param_18->srmCheckPermissionResponse = resp; return 0; // success } int soap_call_srm2__srmCheckPermission_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmCheckPermissionRequest *srmCheckPermissionRequest, struct srm2__srmCheckPermissionResponse_ *_param_18) { struct srm2__srmCheckPermissionResponse *resp = (struct srm2__srmCheckPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmCheckPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); enum srm2__TPermissionMode *cur_permission = (enum srm2__TPermissionMode *) soap_malloc (soap,sizeof (enum srm2__TPermissionMode));; retstatus->statusCode = SRM_USCORESUCCESS; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmCheckPermissionResponse = resp; *cur_permission = RWX; resp->arrayOfPermissions = (struct srm2__ArrayOfTSURLPermissionReturn*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLPermissionReturn)); resp->arrayOfPermissions->__sizesurlPermissionArray = 1; resp->arrayOfPermissions->surlPermissionArray = (struct srm2__TSURLPermissionReturn**) soap_malloc (soap,sizeof (struct srm2__TSURLPermissionReturn *)); resp->arrayOfPermissions->surlPermissionArray[0] = (struct srm2__TSURLPermissionReturn*) soap_malloc (soap,sizeof (struct srm2__TSURLPermissionReturn)); resp->arrayOfPermissions->surlPermissionArray[0]->surl = fixture_test_string; resp->arrayOfPermissions->surlPermissionArray[0]->permission = cur_permission; resp->arrayOfPermissions->surlPermissionArray[0]->status = retstatus; return 0; // success } int soap_call_srm2__srmCheckPermission_test6(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmCheckPermissionRequest *srmCheckPermissionRequest, struct srm2__srmCheckPermissionResponse_ *_param_18) { struct srm2__srmCheckPermissionResponse *resp = (struct srm2__srmCheckPermissionResponse *) soap_malloc (soap,sizeof (struct srm2__srmCheckPermissionResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); enum srm2__TPermissionMode *cur_permission = (enum srm2__TPermissionMode *) soap_malloc (soap,sizeof (enum srm2__TPermissionMode));; retstatus->statusCode = SRM_USCORESUCCESS; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmCheckPermissionResponse = resp; *cur_permission = WX; resp->arrayOfPermissions = (struct srm2__ArrayOfTSURLPermissionReturn*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLPermissionReturn)); resp->arrayOfPermissions->__sizesurlPermissionArray = 1; resp->arrayOfPermissions->surlPermissionArray = (struct srm2__TSURLPermissionReturn**) soap_malloc (soap,sizeof (struct srm2__TSURLPermissionReturn *)); resp->arrayOfPermissions->surlPermissionArray[0] = (struct srm2__TSURLPermissionReturn*) soap_malloc (soap,sizeof (struct srm2__TSURLPermissionReturn)); resp->arrayOfPermissions->surlPermissionArray[0]->surl = fixture_test_string; resp->arrayOfPermissions->surlPermissionArray[0]->permission = cur_permission; resp->arrayOfPermissions->surlPermissionArray[0]->status = retstatus; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_check_permission ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_check_permission) { struct srm_checkpermission_input input; struct srmv2_filestatus *status; struct srm_context context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); context.version = VERSION_2_2; input.amode = R_OK; input.nbfiles = 1; input.surls = test_surls; call_function.call_srm2__srmCheckPermission = soap_call_srm2__srmCheckPermission_test1; result = srmv2_check_permission(&context,&input,&status); //failure empty fs fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmCheckPermission = soap_call_srm2__srmCheckPermission_test2; result = srmv2_check_permission(&context,&input,&status); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmCheckPermission = soap_call_srm2__srmCheckPermission_test3; result = srmv2_check_permission(&context,&input,&status); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmCheckPermission = soap_call_srm2__srmCheckPermission_test4; result = srmv2_check_permission(&context,&input,&status); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmCheckPermission = soap_call_srm2__srmCheckPermission_test5; result = srmv2_check_permission(&context,&input,&status); fail_if ((result != 1), "Expected Success!"); fail_if ((status[0].status != 0), "Expected Status 0!"); call_function.call_srm2__srmCheckPermission = soap_call_srm2__srmCheckPermission_test6; result = srmv2_check_permission(&context,&input,&status); fail_if ((result != 1), "Expected Success!"); fail_if ((status[0].status == 0), "Expected Status EACCESS!"); } END_TEST int soap_call_srm2__srmExtendFileLifeTime_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmExtendFileLifeTimeRequest *srmExtendFileLifeTimeRequest, struct srm2__srmExtendFileLifeTimeResponse_ *_param_18) { struct srm2__srmExtendFileLifeTimeResponse *resp = (struct srm2__srmExtendFileLifeTimeResponse *) soap_malloc (soap,sizeof (struct srm2__srmExtendFileLifeTimeResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmExtendFileLifeTimeResponse = resp; return 0; // success } int soap_call_srm2__srmExtendFileLifeTime_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmExtendFileLifeTimeRequest *srmExtendFileLifeTimeRequest, struct srm2__srmExtendFileLifeTimeResponse_ *_param_18) { //struct srm2__srmExtendFileLifeTimeResponse *resp = (struct srm2__srmExtendFileLifeTimeResponse *) soap_malloc (soap,sizeof (struct srm2__srmExtendFileLifeTimeResponse)); _param_18->srmExtendFileLifeTimeResponse = NULL; // FAILS //resp->arrayOfFileStatuses = NULL; //resp->returnStatus = NULL; return 0; // success } int soap_call_srm2__srmExtendFileLifeTime_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmExtendFileLifeTimeRequest *srmExtendFileLifeTimeRequest, struct srm2__srmExtendFileLifeTimeResponse_ *_param_18) { struct srm2__srmExtendFileLifeTimeResponse *resp = (struct srm2__srmExtendFileLifeTimeResponse *) soap_malloc (soap,sizeof (struct srm2__srmExtendFileLifeTimeResponse)); resp->returnStatus = NULL;// FAILS resp->arrayOfFileStatuses = NULL; _param_18->srmExtendFileLifeTimeResponse = resp; return 0; // success } int soap_call_srm2__srmExtendFileLifeTime_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmExtendFileLifeTimeRequest *srmExtendFileLifeTimeRequest, struct srm2__srmExtendFileLifeTimeResponse_ *_param_18) { struct srm2__srmExtendFileLifeTimeResponse *resp = (struct srm2__srmExtendFileLifeTimeResponse *) soap_malloc (soap,sizeof (struct srm2__srmExtendFileLifeTimeResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->arrayOfFileStatuses = NULL; _param_18->srmExtendFileLifeTimeResponse = resp; return 0; // success } int soap_call_srm2__srmExtendFileLifeTime_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmExtendFileLifeTimeRequest *srmExtendFileLifeTimeRequest, struct srm2__srmExtendFileLifeTimeResponse_ *_param_18) { struct srm2__srmExtendFileLifeTimeResponse *resp = (struct srm2__srmExtendFileLifeTimeResponse *) soap_malloc (soap,sizeof (struct srm2__srmExtendFileLifeTimeResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); int *pinlifetime = (int *) soap_malloc (soap,sizeof (int)); retstatus->statusCode = SRM_USCORESUCCESS; // FAILS retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmExtendFileLifeTimeResponse = resp; *pinlifetime = 100; resp->arrayOfFileStatuses = (struct srm2__ArrayOfTSURLLifetimeReturnStatus*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTSURLLifetimeReturnStatus)); resp->arrayOfFileStatuses->__sizestatusArray = 1; resp->arrayOfFileStatuses->statusArray = (struct srm2__TSURLLifetimeReturnStatus**) soap_malloc (soap,sizeof (struct srm2__TSURLLifetimeReturnStatus *)); resp->arrayOfFileStatuses->statusArray[0] = (struct srm2__TSURLLifetimeReturnStatus*) soap_malloc (soap,sizeof (struct srm2__TSURLLifetimeReturnStatus)); resp->arrayOfFileStatuses->statusArray[0]->surl = fixture_test_string; resp->arrayOfFileStatuses->statusArray[0]->fileLifetime = pinlifetime; resp->arrayOfFileStatuses->statusArray[0]->pinLifetime = pinlifetime; resp->arrayOfFileStatuses->statusArray[0]->status = retstatus; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_extend_file_lifetime ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_extend_file_lifetime) { struct srm_extendfilelifetime_input input; struct srm_extendfilelifetime_output output; struct srm_context context; char *test_surls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; int result; call_function.call_sleep = mock_sleep; // set mock sleep function srm_context_init(&context, "test", NULL, 0, 0); context.version = VERSION_2_2; input.pintime = 100; input.nbfiles = 1; input.surls = test_surls; input.reqtoken = "test"; call_function.call_srm2__srmExtendFileLifeTime = soap_call_srm2__srmExtendFileLifeTime_test1; result = srmv2_extend_file_lifetime(&context,&input,&output); //failure empty fs srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmExtendFileLifeTime = soap_call_srm2__srmExtendFileLifeTime_test2; result = srmv2_extend_file_lifetime(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmExtendFileLifeTime = soap_call_srm2__srmExtendFileLifeTime_test3; result = srmv2_extend_file_lifetime(&context,&input,&output); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmExtendFileLifeTime = soap_call_srm2__srmExtendFileLifeTime_test4; result = srmv2_extend_file_lifetime(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != -1), "Expected Failure !"); call_function.call_srm2__srmExtendFileLifeTime = soap_call_srm2__srmExtendFileLifeTime_test5; result = srmv2_extend_file_lifetime(&context,&input,&output); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((result != 1), "Expected Success!"); } END_TEST START_TEST (test_srm_util_add_strings) { const char* s1 = "s1"; const char* s2 = "s2"; char* res = NULL; res = srm_util_add_strings(s1, s2); fail_unless(strcmp("s1s2", res) == 0, "Expected equality"); free(res); res = NULL; res = srm_util_add_strings("", s2); fail_unless(strcmp(s2, res) == 0, "Expected equality"); free(res); res = NULL; res = srm_util_add_strings(s1, ""); fail_unless(strcmp(s1, res) == 0, "Expected equality"); free(res); res = NULL; res = srm_util_add_strings("", ""); fail_unless(strcmp("", res) == 0, "Expected equality"); free(res); res = NULL; } END_TEST START_TEST (test_srm_util_consolidate_multiple_characters) { char* res = NULL; fail_unless(NULL == srm_util_consolidate_multiple_characters(NULL, 'x', 0)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("abcd", 'a', 0); fail_unless(0 == strcmp("abcd", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("abcd", 'x', 0); fail_unless(0 == strcmp("abcd", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("abcd", '0', 0); fail_unless(0 == strcmp("abcd", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("", '0', 0); fail_unless(0 == strcmp("", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("", 'a', 0); fail_unless(0 == strcmp("", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("a", 'a', 0); fail_unless(0 == strcmp("a", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("aa", 'a', 0); fail_unless(0 == strcmp("a", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("aaa", 'a', 0); fail_unless(0 == strcmp("a", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("aaa", 'x', 0); fail_unless(0 == strcmp("aaa", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("xaaa", 'a', 0); fail_unless(0 == strcmp("xa", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("xaaay", 'a', 0); fail_unless(0 == strcmp("xay", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("aaay", 'a', 0); fail_unless(0 == strcmp("ay", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("aaaxaaay", 'a', 3); fail_unless(0 == strcmp("aaaxay", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("aaaxaaay", 'a', 1); fail_unless(0 == strcmp("aaxay", res)); free(res); res = NULL; res = srm_util_consolidate_multiple_characters("aaaxaaay", 'a', 100); fail_unless(0 == strcmp("aaaxaaay", res)); free(res); res = NULL; } END_TEST START_TEST (test_srm_util_normalize_surl) { char* surl_1 = "srm://server:port/"; char* surl_2 = "srm://server:port/dir1"; char* surl_3 = "srm://server:port/dir1/"; char* surl_4 = "srm://server:port/dir1//"; char* surl_5 = "srm://server:port/dir1/dir2/"; char* surl_6 = "srm://server:port/dir1/dir2"; char* surl_7 = "srm://server:port/dir1//dir2/"; char* surl_8 = "srm://server:port/dir1//dir2//"; char* res = NULL; res = srm_util_normalize_surl(surl_1); fail_unless(strcmp(surl_1, res) == 0); free(res); res = NULL; res = srm_util_normalize_surl(surl_2); fail_unless(strcmp(surl_3, res) == 0); free(res); res = NULL; res = srm_util_normalize_surl(surl_3); fail_unless(strcmp(surl_3, res) == 0); free(res); res = NULL; res = srm_util_normalize_surl(surl_4); fail_unless(strcmp(surl_3, res) == 0); free(res); res = NULL; res = srm_util_normalize_surl(surl_5); fail_unless(strcmp(surl_5, res) == 0); free(res); res = NULL; res = srm_util_normalize_surl(surl_6); fail_unless(strcmp(surl_5, res) == 0); free(res); res = NULL; res = srm_util_normalize_surl(surl_7); fail_unless(strcmp(surl_5, res) == 0); free(res); res = NULL; res = srm_util_normalize_surl(surl_8); fail_unless(strcmp(surl_5, res) == 0); free(res); res = NULL; } END_TEST START_TEST (test_srmv2_check_srm_root) { const char* good_url = "srm://server.cern.ch/"; const char* bad_url_1 = "srm://server.cern.ch/file"; const char* bad_url_2 = "fake://server.cern.ch/file"; const char* bad_url_3 = "srm:/server.cern.ch/file"; const char* bad_url_4 = "srm//server.cern.ch/file"; const char* bad_url_5 = "srm://server.cern.ch"; fail_unless(1 == srmv2_check_srm_root(good_url)); fail_unless(0 == srmv2_check_srm_root(NULL)); fail_unless(0 == srmv2_check_srm_root(bad_url_1)); fail_unless(0 == srmv2_check_srm_root(bad_url_2)); fail_unless(0 == srmv2_check_srm_root(bad_url_3)); fail_unless(0 == srmv2_check_srm_root(bad_url_4)); fail_unless(0 == srmv2_check_srm_root(bad_url_5)); } END_TEST START_TEST (test_srm_context) { char errbuff[200]; struct srm_context old_style; srm_context_init(&old_style,"my_endpoint", errbuff,200,1); srm_context_t c = srm_context_new("my_endpoint",errbuff,200,1); srm_context_free(c); c = NULL; srm_context_free(c); srm_context_free(&old_style); } END_TEST Suite * test_suite (void) { Suite *s = suite_create ("new srm interface unit test suit"); gfal_unittest_srmls_test_suite(s); TCase *tc_case_1 = tcase_create ("srm function tests"); tcase_add_checked_fixture (tc_case_1, NULL,NULL); tcase_add_test (tc_case_1, test_srmv2_extend_file_lifetime); tcase_add_test (tc_case_1, test_srmv2_set_permission); tcase_add_test (tc_case_1, test_srmv2_get_permission); tcase_add_test (tc_case_1, test_srmv2_check_permission); tcase_add_test (tc_case_1, test_wait_for_new_attempt); tcase_add_test (tc_case_1, test_back_off_logic); tcase_add_test (tc_case_1, test_srmv2_abort_request); tcase_add_test (tc_case_1, test_srmv2_rmdir); tcase_add_test (tc_case_1, test_srmv2_rm); tcase_add_test (tc_case_1, test_srmv2_mkdir); tcase_add_test (tc_case_1, test_srmv2_abort_files); tcase_add_test (tc_case_1, test_srmv2_put_done); tcase_add_test (tc_case_1, test_srmv2_release_files); tcase_add_test (tc_case_1, test_srmv2_bring_online_async); tcase_add_test (tc_case_1, test_srmv2_status_of_bring_online_async); tcase_add_test (tc_case_1, test_srmv2_prepare_to_get_async); tcase_add_test (tc_case_1, test_srmv2_status_of_get_request_async); tcase_add_test (tc_case_1, test_srmv2_prepare_to_put_async); tcase_add_test (tc_case_1, test_srmv2_status_of_put_request_async); tcase_add_test (tc_case_1, test_srmv2_getspacemd); tcase_add_test (tc_case_1, test_srmv2_getspacetokens); tcase_add_test (tc_case_1, test_srmv2_ping); suite_add_tcase (s, tc_case_1); TCase *tc_case_2 = tcase_create ("utility function tests"); tcase_add_checked_fixture (tc_case_2, NULL,NULL); tcase_add_test (tc_case_2, test_srm_util_add_strings); tcase_add_test (tc_case_2, test_srm_util_normalize_surl); tcase_add_test (tc_case_2, test_srm_util_consolidate_multiple_characters); tcase_add_test (tc_case_2, test_srmv2_check_srm_root); tcase_add_test (tc_case_2, test_srm_context); tcase_add_test (tc_case_2, test_wait_ng); suite_add_tcase (s, tc_case_2); return s; } int main(void) { int number_failed; Suite *s = test_suite (); SRunner *sr = srunner_create (s); srunner_set_fork_status (sr, CK_NOFORK); // for easier debug srunner_run_all (sr, CK_VERBOSE); number_failed = srunner_ntests_failed (sr); srunner_free (sr); return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; } srm-ifce-v1.24.7/src/gfal_srm_ifce_unittest.h000066400000000000000000000022521465215307000211630ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _GFAL_SRM_IFCE_UNITTEST_H_ #define _GFAL_SRM_IFCE_UNITTEST_H_ #include #include "srm_dependencies.h" #include "gfal_srm_ifce.h" /* Test functions */ extern void gfal_unittest_srmls_test_suite (Suite *s); /* Mock functions */ extern unsigned int mock_sleep(unsigned int time); /* Fixtures */ extern char fixture_test_string[]; /* Global properties */ extern unsigned int mock_sleep_time; #endif /* _GFAL_SRM_IFCE_UNITTEST_H */ srm-ifce-v1.24.7/src/gfal_srm_ifce_unittest_common.c000066400000000000000000000016561465215307000225350ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "gfal_srm_ifce_unittest.h" unsigned int mock_sleep_time = 0; char fixture_test_string[] = "test_string"; unsigned int mock_sleep(unsigned int time) { mock_sleep_time = time; return 0; } srm-ifce-v1.24.7/src/gfal_srm_ifce_unittest_srmls.c000066400000000000000000000374671465215307000224160ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "gfal_srm_ifce_unittest.h" #include "srm_util.h" #include "srmv2_directory_functions.h" START_TEST (test_wait_for_new_attempt) { struct srm_internal_context internal_context; internal_context.estimated_wait_time = -1; internal_context.attempt = 11; fail_if (wait_for_new_attempt(&internal_context) != -1, "Wait for new attempt does not return timeout error for 11 attempts!"); internal_context.attempt = 5; internal_context.end_time = time(NULL)-1; fail_if (wait_for_new_attempt(&internal_context) != -1, "Timeout error not received!"); call_function.call_sleep = mock_sleep; internal_context.attempt = 1; // be careful changing this number internal_context.end_time = time(NULL)+100; fail_if (wait_for_new_attempt(&internal_context) != 0, "Timeout should not occur!"); fail_if (mock_sleep_time > 1, // be careful changing this number "Random sleep time exceeded expected value !!!"); internal_context.attempt = 1; // be careful changing this number internal_context.end_time = time(NULL)+100; internal_context.estimated_wait_time = 0; fail_if (wait_for_new_attempt(&internal_context) != -1, "Timeout should occur!"); internal_context.attempt = 1; // be careful changing this number internal_context.end_time = time(NULL)+100; internal_context.estimated_wait_time = -10; fail_if (mock_sleep_time > 1, // be careful changing this number "Random sleep time exceeded expected value !!!"); internal_context.estimated_wait_time = 10; wait_for_new_attempt(&internal_context); fail_if (mock_sleep_time != 10, "Sleep time estimated wait time not equal to sleep time!"); } END_TEST int soap_call_srm2__srmLs_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmLsRequest *srmLsRequest, struct srm2__srmLsResponse_ *_param_18) { _param_18->srmLsResponse = NULL; return 0; // success but return statuses are null } int soap_call_srm2__srmLs_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmLsRequest *srmLsRequest, struct srm2__srmLsResponse_ *_param_18) { struct srm2__srmLsResponse *resp = (struct srm2__srmLsResponse *) soap_malloc (soap,sizeof (struct srm2__srmLsResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREFAILURE; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->requestToken = NULL; resp->details = NULL; _param_18->srmLsResponse = resp; return -1; // failure } int soap_call_srm2__srmLs_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmLsRequest *srmLsRequest, struct srm2__srmLsResponse_ *_param_18) { struct srm2__srmLsResponse *resp = (struct srm2__srmLsResponse *) soap_malloc (soap,sizeof (struct srm2__srmLsResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREPARTIAL_USCORESUCCESS; retstatus->explanation = NULL; resp->requestToken = NULL; resp->details = NULL; resp->returnStatus = retstatus; _param_18->srmLsResponse = resp; return 0; // success } int soap_call_srm2__srmLs_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmLsRequest *srmLsRequest, struct srm2__srmLsResponse_ *_param_18) { struct srm2__srmLsResponse *resp = (struct srm2__srmLsResponse *) soap_malloc (soap,sizeof (struct srm2__srmLsResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->requestToken = NULL; resp->details = NULL; _param_18->srmLsResponse = resp; return 0; // success } int soap_call_srm2__srmLs_test5(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmLsRequest *srmLsRequest, struct srm2__srmLsResponse_ *_param_18) { struct srm2__srmLsResponse *resp = (struct srm2__srmLsResponse *) soap_malloc (soap,sizeof (struct srm2__srmLsResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->details = NULL; resp->requestToken = NULL; _param_18->srmLsResponse = resp; return 0; // success } int soap_call_srm2__srmLs_test6(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmLsRequest *srmLsRequest, struct srm2__srmLsResponse_ *_param_18) { struct srm2__srmLsResponse *resp = (struct srm2__srmLsResponse *) soap_malloc (soap,sizeof (struct srm2__srmLsResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->details = NULL; resp->requestToken = fixture_test_string; _param_18->srmLsResponse = resp; return 0; // success } int soap_call_srm2__srmLs_test7(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmLsRequest *srmLsRequest, struct srm2__srmLsResponse_ *_param_18) { struct srm2__srmLsResponse *resp = (struct srm2__srmLsResponse *) soap_malloc (soap,sizeof (struct srm2__srmLsResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; _param_18->srmLsResponse = resp; resp->details = (struct srm2__ArrayOfTMetaDataPathDetail*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTMetaDataPathDetail)); resp->details->__sizepathDetailArray = 1; resp->details->pathDetailArray = (struct srm2__TMetaDataPathDetail **) soap_malloc (soap,sizeof (struct srm2__TMetaDataPathDetail *)); resp->details->pathDetailArray[0] = (struct srm2__TMetaDataPathDetail *) soap_malloc (soap,sizeof (struct srm2__TMetaDataPathDetail )); resp->details->pathDetailArray[0] = NULL; return 0; // success } ////////////////////////////////////////////////////////////////// // test test_srmv2_ls_async ////////////////////////////////////////////////////////////////// START_TEST (test_srmv2_ls_async) { struct srm_ls_output output; struct srm_context context; struct srm_internal_context internal_context; struct srm_ls_input input; char *test_surls_ls[] = {"srm://lxbra1910.cern.ch:8446/srm/managerv2?SFN=/dpm/cern.ch/home/dteam/"}; int result; internal_context.estimated_wait_time = -1; internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_sleep = mock_sleep; // set mock sleep function context.verbose = 0; context.errbuf = NULL; context.errbufsz = 0; context.srm_endpoint = "test"; input.offset = NULL; input.nbfiles = 1; input.count = 0; input.numlevels = 1; input.surls = test_surls_ls; input.offset = 0; call_function.call_srm2__srmLs = soap_call_srm2__srmLs_test1; result = srmv2_ls_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 1!"); internal_context.attempt = 1; call_function.call_srm2__srmLs = soap_call_srm2__srmLs_test2; result = srmv2_ls_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 2!"); call_function.call_srm2__srmLs = soap_call_srm2__srmLs_test3; result = srmv2_ls_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 3!"); call_function.call_srm2__srmLs = soap_call_srm2__srmLs_test4; result = srmv2_ls_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_FAILURE)|| (result != -1), "Expected Failure 4!"); call_function.call_srm2__srmLs = soap_call_srm2__srmLs_test5; result = srmv2_ls_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_TIMEOUT)|| (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmLs = soap_call_srm2__srmLs_test6; result = srmv2_ls_async_internal(&context,&input,&output,&internal_context); free(output.token); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_QUEUED)|| (result == -1), "Expected Queued!"); call_function.call_srm2__srmLs = soap_call_srm2__srmLs_test7; result = srmv2_ls_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_SUCCESS)|| (result == -1), "Expected Success!"); } END_TEST int soap_call_srm2__srmStatusOfLs_test1(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfLsRequestRequest *srmStatusOfLsRequest, struct srm2__srmStatusOfLsRequestResponse_ *_param_18) { _param_18->srmStatusOfLsRequestResponse = NULL; return 0; // success but return statuses are null } int soap_call_srm2__srmStatusOfLs_test2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfLsRequestRequest *srmStatusOfLsRequest, struct srm2__srmStatusOfLsRequestResponse_ *_param_18) { struct srm2__srmStatusOfLsRequestResponse *resp = (struct srm2__srmStatusOfLsRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfLsRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREREQUEST_USCOREQUEUED; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->details = NULL; _param_18->srmStatusOfLsRequestResponse = resp; return 0; // success } int soap_call_srm2__srmStatusOfLs_test3(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfLsRequestRequest *srmStatusOfLsRequest, struct srm2__srmStatusOfLsRequestResponse_ *_param_18) { struct srm2__srmStatusOfLsRequestResponse *resp = (struct srm2__srmStatusOfLsRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfLsRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCOREINTERNAL_USCOREERROR; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->details = NULL; _param_18->srmStatusOfLsRequestResponse = resp; return 0; // success } int soap_call_srm2__srmStatusOfLs_test4(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct srm2__srmStatusOfLsRequestRequest *srmStatusOfLsRequest, struct srm2__srmStatusOfLsRequestResponse_ *_param_18) { struct srm2__srmStatusOfLsRequestResponse *resp = (struct srm2__srmStatusOfLsRequestResponse *) soap_malloc (soap,sizeof (struct srm2__srmStatusOfLsRequestResponse)); struct srm2__TReturnStatus *retstatus = (struct srm2__TReturnStatus *) soap_malloc (soap,sizeof (struct srm2__TReturnStatus)); retstatus->statusCode = SRM_USCORESUCCESS; retstatus->explanation = NULL; resp->returnStatus = retstatus; resp->details = (struct srm2__ArrayOfTMetaDataPathDetail*) soap_malloc (soap,sizeof (struct srm2__ArrayOfTMetaDataPathDetail)); resp->details->__sizepathDetailArray = 1; resp->details->pathDetailArray = (struct srm2__TMetaDataPathDetail **) soap_malloc (soap,sizeof (struct srm2__TMetaDataPathDetail *)); resp->details->pathDetailArray[0] = (struct srm2__TMetaDataPathDetail *) soap_malloc (soap,sizeof (struct srm2__TMetaDataPathDetail )); resp->details->pathDetailArray[0] = NULL; _param_18->srmStatusOfLsRequestResponse = resp; return 0; // success } START_TEST (test_srmv2_status_of_ls_request) { int i; struct srm_ls_input input; struct srm_ls_output output; struct srm_context context; struct srm_internal_context internal_context; int result; input.offset = NULL; internal_context.estimated_wait_time = -1; internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_sleep = mock_sleep; // set mock sleep function output.token = "test"; context.verbose = 0; context.errbuf = NULL; context.errbufsz = 0; context.srm_endpoint = "test"; call_function.call_srm2__srmStatusOfLsRequest = soap_call_srm2__srmStatusOfLs_test1; result = srmv2_status_of_ls_request_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_FAILURE) || (result != -1), "Expected Failure 1!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfLsRequest = soap_call_srm2__srmStatusOfLs_test2; result = srmv2_status_of_ls_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_QUEUED)|| (result == -1), "Expected Queued in first call!"); for (i=0;i<15;i++) { result = srmv2_status_of_ls_request_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status == srm_call_status_SUCCESS) || (internal_context.current_status == srm_call_status_FAILURE), "Do not fail/succeed if queued,expected timeout after 10 calls!"); } fail_if ((internal_context.current_status != srm_call_status_TIMEOUT) || (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfLsRequest = soap_call_srm2__srmStatusOfLs_test3; result = srmv2_status_of_ls_request_async_internal(&context,&input,&output,&internal_context); fail_if ((internal_context.current_status != srm_call_status_TIMEOUT) || (result != -1), "Expected Timeout!"); internal_context.attempt = 1; internal_context.end_time = time(NULL)+10000; call_function.call_srm2__srmStatusOfLsRequest = soap_call_srm2__srmStatusOfLs_test4; result = srmv2_status_of_ls_request_async_internal(&context,&input,&output,&internal_context); srm_srm2__TReturnStatus_delete(output.retstatus); fail_if ((internal_context.current_status != srm_call_status_SUCCESS) || (result != 1), "Expected Success!"); } END_TEST void gfal_unittest_srmls_test_suite (Suite *s) { TCase *tc_case_1 = tcase_create ("SrmLs function tests"); tcase_add_checked_fixture (tc_case_1, NULL,NULL); tcase_add_test (tc_case_1, test_srmv2_ls_async); tcase_add_test (tc_case_1, test_srmv2_status_of_ls_request); tcase_add_test (tc_case_1, test_wait_for_new_attempt); suite_add_tcase (s, tc_case_1); } srm-ifce-v1.24.7/src/gfal_srm_ifce_version.c000066400000000000000000000017621465215307000207710ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include "gfal_srm_ifce.h" /* the version should be set by a "define" at the makefile level */ static const char version[] = VERSION; int main(int argc, char **argv) { printf ("gfal-srm-ifce--%s\n", version); exit (0); } srm-ifce-v1.24.7/src/srm.v1.1.wsdl000066400000000000000000000401641465215307000164570ustar00rootroot00000000000000 diskCacheV111.srm.server.SRMServerV1 web service srm-ifce-v1.24.7/src/srm.v2.2.wsdl000066400000000000000000003063171465215307000164660ustar00rootroot00000000000000 srm.v2.2.wsdl Wed Sep 27 08:22:41 PDT 2006 Mon Jul 3 09:49:53 PDT 2006 Tue Jun 20 07:21:54 PDT 2006 - FINALIZED Mon Jun 19 09:45:38 PDT 2006 Created by Junmin Gu, Alex Sim Lawrence Berkeley National Laboratory on basis of the Storage Resource Manager Interface Specification v2.2 published at http://sdm.lbl.gov/srm-wg the following location of the service is specific to the particular deployment and is not part of the specification srm-ifce-v1.24.7/src/srmSoapBinding.c000066400000000000000000000025071465215307000173610ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "srmv2H.h" SOAP_NMAC struct Namespace namespaces_srmv2[] = { {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL}, {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL}, {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL}, {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL}, {"srm2", "http://srm.lbl.gov/StorageResourceManager", NULL, NULL}, {NULL, NULL, NULL, NULL} }; struct Namespace namespaces[] ={{NULL, NULL}}; srm-ifce-v1.24.7/src/srm_dependencies.c000066400000000000000000000034271465215307000177530ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "srm_dependencies.h" #include "srm_soap.h" callers_t call_function = { soap_call_srm2__srmPurgeFromSpace, soap_call_srm2__srmExtendFileLifeTime, soap_call_srm2__srmCheckPermission, soap_call_srm2__srmReleaseSpace, soap_call_srm2__srmReserveSpace, soap_call_srm2__srmStatusOfReserveSpaceRequest, soap_call_srm2__srmSetPermission, soap_call_srm2__srmGetPermission, soap_call_srm2__srmPing, soap_call_srm2__srmAbortFiles, soap_call_srm2__srmPutDone, soap_call_srm2__srmReleaseFiles, soap_call_srm2__srmStatusOfGetRequest, soap_call_srm2__srmStatusOfBringOnlineRequest, soap_call_srm2__srmStatusOfPutRequest, soap_call_srm2__srmPrepareToGet, soap_call_srm2__srmBringOnline, soap_call_srm2__srmPrepareToPut, soap_call_srm2__srmGetSpaceMetaData, soap_call_srm2__srmGetSpaceTokens, soap_call_srm2__srmLs, soap_call_srm2__srmStatusOfLsRequest, soap_call_srm2__srmAbortRequest, soap_call_srm2__srmRm, soap_call_srm2__srmRmdir, soap_call_srm2__srmMkdir, soap_call_srm2__srmMv, sleep, usleep }; srm-ifce-v1.24.7/src/srm_dependencies.h000066400000000000000000000202601465215307000177520ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef SRM_DEPENDANCIES_H_ #define SRM_DEPENDANCIES_H_ #define WITH_NOGLOBAL #include "stdsoap2.h" /*#undef SOAP_FMAC3 #define SOAP_FMAC3 static #undef SOAP_FMAC5 #define SOAP_FMAC5 static*/ #include "srmv2H.h" #ifdef GFAL_SECURE #include "cgsi_plugin.h" #endif // #ifdef GFAL_SECURE extern struct Namespace namespaces_srmv2[]; /* Function types of the appropriate SOAP calls */ typedef int (*soap_call_srm2__srmGetSpaceMetaData_fv)( struct soap *, const char *, const char *, struct srm2__srmGetSpaceMetaDataRequest *, struct srm2__srmGetSpaceMetaDataResponse_ *); typedef int (*soap_call_srm2__srmGetSpaceTokens_fv)( struct soap *, const char *, const char *, struct srm2__srmGetSpaceTokensRequest *, struct srm2__srmGetSpaceTokensResponse_ *); typedef int (*soap_call_srm2__srmLs_fv)( struct soap *, const char *, const char *, struct srm2__srmLsRequest *, struct srm2__srmLsResponse_ *); typedef int (*soap_call_srm2__srmStatusOfLsRequest_fv)( struct soap *, const char *, const char *, struct srm2__srmStatusOfLsRequestRequest *, struct srm2__srmStatusOfLsRequestResponse_ *); typedef int (*soap_call_srm2__srmAbortRequest_fv)( struct soap *, const char *, const char *, struct srm2__srmAbortRequestRequest *, struct srm2__srmAbortRequestResponse_ *); typedef int (*soap_call_srm2__srmRm_fv)( struct soap *, const char *, const char *, struct srm2__srmRmRequest *, struct srm2__srmRmResponse_ *); typedef int (*soap_call_srm2__srmRmdir_fv)( struct soap *, const char *, const char *, struct srm2__srmRmdirRequest *, struct srm2__srmRmdirResponse_ *); typedef int (*soap_call_srm2__srmMkdir_fv)( struct soap *, const char *, const char *, struct srm2__srmMkdirRequest *, struct srm2__srmMkdirResponse_ *); typedef int (*soap_call_srm2__srmPrepareToGet_fv)( struct soap *, const char *, const char *, struct srm2__srmPrepareToGetRequest *, struct srm2__srmPrepareToGetResponse_ *); typedef int (*soap_call_srm2__srmBringOnline_fv)( struct soap *, const char *, const char *, struct srm2__srmBringOnlineRequest *, struct srm2__srmBringOnlineResponse_ *); typedef int (*soap_call_srm2__srmPrepareToPut_fv)( struct soap *, const char *, const char *, struct srm2__srmPrepareToPutRequest *, struct srm2__srmPrepareToPutResponse_ *); typedef int (*soap_call_srm2__srmStatusOfPutRequest_fv)( struct soap *, const char *, const char *, struct srm2__srmStatusOfPutRequestRequest *, struct srm2__srmStatusOfPutRequestResponse_ *); typedef int (*soap_call_srm2__srmStatusOfBringOnlineRequest_fv)( struct soap *, const char *, const char *, struct srm2__srmStatusOfBringOnlineRequestRequest *, struct srm2__srmStatusOfBringOnlineRequestResponse_ *); typedef int (*soap_call_srm2__srmStatusOfGetRequest_fv)( struct soap *, const char *, const char *, struct srm2__srmStatusOfGetRequestRequest *, struct srm2__srmStatusOfGetRequestResponse_ *); typedef int (*soap_call_srm2__srmPutDone_fv)( struct soap *, const char *, const char *, struct srm2__srmPutDoneRequest*, struct srm2__srmPutDoneResponse_ *); typedef int (*soap_call_srm2__srmReleaseFiles_fv)( struct soap *, const char *, const char *, struct srm2__srmReleaseFilesRequest*, struct srm2__srmReleaseFilesResponse_ *); typedef int (*soap_call_srm2__srmAbortFiles_fv)( struct soap *, const char *, const char *, struct srm2__srmAbortFilesRequest *, struct srm2__srmAbortFilesResponse_ *); typedef int (*soap_call_srm2__srmPing_fv)( struct soap *, const char *, const char *, struct srm2__srmPingRequest *, struct srm2__srmPingResponse_ *); typedef int (*soap_call_srm2__srmSetPermission_fv)( struct soap *, const char *, const char *, struct srm2__srmSetPermissionRequest *, struct srm2__srmSetPermissionResponse_ *); typedef int (*soap_call_srm2__srmGetPermission_fv)( struct soap *, const char *, const char *, struct srm2__srmGetPermissionRequest *, struct srm2__srmGetPermissionResponse_ *); typedef int (*soap_call_srm2__srmReserveSpace_fv)( struct soap *, const char *, const char *, struct srm2__srmReserveSpaceRequest *, struct srm2__srmReserveSpaceResponse_ *); typedef int (*soap_call_srm2__srmStatusOfReserveSpaceRequest_fv)( struct soap *, const char *, const char *, struct srm2__srmStatusOfReserveSpaceRequestRequest *, struct srm2__srmStatusOfReserveSpaceRequestResponse_ *); typedef int (*soap_call_srm2__srmReleaseSpace_fv)( struct soap *, const char *, const char *, struct srm2__srmReleaseSpaceRequest *, struct srm2__srmReleaseSpaceResponse_ *); typedef int (*soap_call_srm2__srmCheckPermission_fv)( struct soap *, const char *, const char *, struct srm2__srmCheckPermissionRequest *, struct srm2__srmCheckPermissionResponse_ *); typedef int (*soap_call_srm2__srmExtendFileLifeTime_fv)( struct soap *, const char *, const char *, struct srm2__srmExtendFileLifeTimeRequest *, struct srm2__srmExtendFileLifeTimeResponse_ *); typedef int (*soap_call_srm2__srmPurgeFromSpace_fv)( struct soap *, const char *, const char *, struct srm2__srmPurgeFromSpaceRequest *, struct srm2__srmPurgeFromSpaceResponse_ *); typedef int (*soap_call_srm2__srmMv_fv)( struct soap *, const char*, const char*, struct srm2__srmMvRequest*, struct srm2__srmMvResponse_*); typedef unsigned int (*sleep_fv)( unsigned int); /* The collection of SOAP service calls. The pointers may be replaced with test * functions (dependency injection) */ typedef struct misc_callers { soap_call_srm2__srmPurgeFromSpace_fv call_srm2__srmPurgeFromSpace; soap_call_srm2__srmExtendFileLifeTime_fv call_srm2__srmExtendFileLifeTime; soap_call_srm2__srmCheckPermission_fv call_srm2__srmCheckPermission; soap_call_srm2__srmReleaseSpace_fv call_srm2__srmReleaseSpace; soap_call_srm2__srmReserveSpace_fv call_srm2__srmReserveSpace; soap_call_srm2__srmStatusOfReserveSpaceRequest_fv call_srm2__srmStatusOfReserveSpaceRequest; soap_call_srm2__srmSetPermission_fv call_srm2__srmSetPermission; soap_call_srm2__srmGetPermission_fv call_srm2__srmGetPermission; soap_call_srm2__srmPing_fv call_srm2__srmPing; soap_call_srm2__srmAbortFiles_fv call_srm2__srmAbortFiles; soap_call_srm2__srmPutDone_fv call_srm2__srmPutDone; soap_call_srm2__srmReleaseFiles_fv call_srm2__srmReleaseFiles; soap_call_srm2__srmStatusOfGetRequest_fv call_srm2__srmStatusOfGetRequest; soap_call_srm2__srmStatusOfBringOnlineRequest_fv call_srm2__srmStatusOfBringOnlineRequest; soap_call_srm2__srmStatusOfPutRequest_fv call_srm2__srmStatusOfPutRequest; soap_call_srm2__srmPrepareToGet_fv call_srm2__srmPrepareToGet; soap_call_srm2__srmBringOnline_fv call_srm2__srmBringOnline; soap_call_srm2__srmPrepareToPut_fv call_srm2__srmPrepareToPut; soap_call_srm2__srmGetSpaceMetaData_fv call_srm2__srmGetSpaceMetaData; soap_call_srm2__srmGetSpaceTokens_fv call_srm2__srmGetSpaceTokens; soap_call_srm2__srmLs_fv call_srm2__srmLs; soap_call_srm2__srmStatusOfLsRequest_fv call_srm2__srmStatusOfLsRequest; soap_call_srm2__srmAbortRequest_fv call_srm2__srmAbortRequest; soap_call_srm2__srmRm_fv call_srm2__srmRm; soap_call_srm2__srmRmdir_fv call_srm2__srmRmdir; soap_call_srm2__srmMkdir_fv call_srm2__srmMkdir; soap_call_srm2__srmMv_fv call_srm2__srmMv; sleep_fv call_sleep; int (*call_usleep)(useconds_t usec); } callers_t; extern callers_t call_function; #endif /* SRM_DEPENDANCIES_H_ */ srm-ifce-v1.24.7/src/srm_ifce_internal.h000066400000000000000000000037401465215307000201320ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef SRM_IFCE_INTERNAL_H_ #define SRM_IFCE_INTERNAL_H_ #include #include #include #include "gfal_srm_ifce.h" #include "srm_dependencies.h" #include "srm_util.h" #include "srmv2_discovery_functions.h" #include "srmv2_permission_functions.h" #include "srmv2_data_transfer_functions.h" #include "srmv2_directory_functions.h" #include "srmv2_space_management_functions.h" typedef enum _srm_polling_logic{ SRM_POLLING_LOGIC_OLD, SRM_POLLING_LOGIC_MIN_MAX_EXP } srm_polling_logic; struct srm_context_extension{ // asynchronous query strategy srm_polling_logic polling_logic; // polling MIN_MAX_EXP params struct timespec min_waittime; struct timespec max_waittime; // advanced timeout management int turl_resolution_timeout; // keep alive connections int keep_alive; // user credentials char *ucert, *ukey; // Original post header method int (*original_fposthdr)(struct soap*, const char*, const char*); // List of key/values headers GData* additional_headers; // Append to the User-Agent char user_agent[128]; }; /* Normal assertion for srm-ifce */ #define GFAL_SRM_IFCE_ASSERT(cond) \ do{ \ g_assert((cond)); \ }while(0) #endif srm-ifce-v1.24.7/src/srm_soap.h000066400000000000000000000015671465215307000162770ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NEW_SRM_SOAP_H_ #define NEW_SRM_SOAP_H_ #include "srm_dependencies.h" #include "gfal_srm_ifce_types.h" #endif /* NEW_SRM_SOAP_H_ */ srm-ifce-v1.24.7/src/srm_struct_util.c000066400000000000000000000114721465215307000177050ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "srm_ifce_internal.h" srm_context_extension_t srm_context_extension_new(){ struct srm_context_extension* res = g_new0(struct srm_context_extension,1); res->polling_logic = SRM_POLLING_LOGIC_MIN_MAX_EXP; res->min_waittime.tv_nsec = 200000000; res->max_waittime.tv_sec = 5; res->turl_resolution_timeout = 300; res->keep_alive = 0; g_datalist_init(&res->additional_headers); return res; } void srm_context_extension_free(srm_context_extension_t context){ if(context){ g_free(context->ucert); g_free(context->ukey); g_datalist_clear(&context->additional_headers); g_free(context); } } // srm_context_t srm_context_new(const char * srm_endpoint, char *errbuf,int errbufsz,int verbose){ struct srm_context* context = g_new0(struct srm_context, 1); context->errbuf = errbuf; context->errbufsz = errbufsz; context->version = VERSION_2_2; context->srm_endpoint = g_strdup(srm_endpoint); context->timeout = 60; context->verbose = verbose; context->timeout_conn = srm_get_timeout_connect (); context->timeout_ops = srm_get_timeout_sendreceive(); context->ext = srm_context_extension_new(); context->ext->keep_alive = TRUE; return context; } srm_context_t srm_context_new2(const char * srm_endpoint, char *errbuf,int errbufsz,int verbose, int keep_alive){ srm_context_t c = srm_context_new(srm_endpoint, errbuf, errbufsz, verbose); c->ext->keep_alive = keep_alive; return c; } // void srm_context_free(srm_context_t context){ if(context){ if(context->ext) { srm_context_extension_free(context->ext); } if (context->soap) { srm_soap_free(context->soap); } g_free(context->srm_endpoint); g_free(context); } } // void srm_context_init(struct srm_context *context,char *srm_endpoint,char *errbuf,int errbufsz,int verbose) { GFAL_SRM_IFCE_ASSERT(context); memset(context, 0, sizeof(*context)); context->ext = srm_context_extension_new(); context->errbuf = errbuf; context->errbufsz = errbufsz; context->version = VERSION_2_2; context->srm_endpoint = srm_endpoint; context->timeout = 60; context->verbose = verbose; context->timeout_conn = srm_get_timeout_connect (); context->timeout_ops = srm_get_timeout_sendreceive(); context->soap = NULL; } void srm_context_init2(struct srm_context *context,char *srm_endpoint,char *errbuf,int errbufsz,int verbose, int keep_alive){ srm_context_init(context, srm_endpoint, errbuf, errbufsz, verbose); context->ext = srm_context_extension_new(); context->ext->keep_alive = keep_alive; } void srm_set_credentials(struct srm_context *context, const char *ucert, const char *ukey) { if (context->ext == NULL) context->ext = srm_context_extension_new(); context->ext->ucert = g_strdup(ucert); context->ext->ukey = g_strdup(ukey); // Drop soap context, so it will recreated if (context->soap) { srm_soap_free(context->soap); context->soap = NULL; } } void srm_set_desired_request_time(struct srm_context *context, int timeout) { if (context->ext == NULL) context->ext = srm_context_extension_new(); context->ext->turl_resolution_timeout = timeout; } void srm_set_http_header(struct srm_context *context, const char *key, const char *value) { if (context->ext == NULL) context->ext = srm_context_extension_new(); if (value) { g_datalist_set_data_full(&context->ext->additional_headers, key, g_strdup(value), g_free); } else { g_datalist_remove_data(&context->ext->additional_headers, key); } } void srm_set_user_agent(struct srm_context *context, const char *user_agent, ...) { if (context->ext == NULL) context->ext = srm_context_extension_new(); if (user_agent) { va_list args; va_start(args, user_agent); g_vsnprintf(context->ext->user_agent, sizeof(context->ext->user_agent), user_agent, args); va_end(args); } else { context->ext->user_agent[0] = '\0'; } } srm-ifce-v1.24.7/src/srm_util.c000066400000000000000000001463331465215307000163060ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include #include "srmv2Stub.h" #include "srm_soap.h" #include "srm_util.h" #include "gfal_srm_ifce_internal.h" /* Not defined on kfreebsd */ #ifndef ETIME #define ETIME EIO #endif /* Not defined on kfreebsd and hurd */ #ifndef EBADR #define EBADR EIO #endif #ifdef CMAKE_BUILD #define namespaces_srmv2 namespaces #endif const char *err_msg_begin = "SE"; const char *srmv2_errmsg[] = { "SRM_SUCCESS", "SRM_FAILURE", "SRM_AUTHENTICATION_FAILURE", "SRM_AUTHORIZATION_FAILURE", "SRM_INVALID_REQUEST", "SRM_INVALID_PATH", "SRM_FILE_LIFETIME_EXPIRED", "SRM_SPACE_LIFETIME_EXPIRED", "SRM_EXCEED_ALLOCATION", "SRM_NO_USER_SPACE", "SRM_NO_FREE_SPACE", "SRM_DUPLICATION_ERROR", "SRM_NON_EMPTY_DIRECTORY", "SRM_TOO_MANY_RESULTS", "SRM_INTERNAL_ERROR", "SRM_FATAL_INTERNAL_ERROR", "SRM_NOT_SUPPORTED", "SRM_REQUEST_QUEUED", "SRM_REQUEST_INPROGRESS", "SRM_REQUEST_SUSPENDED", "SRM_ABORTED", "SRM_RELEASED", "SRM_FILE_PINNED", "SRM_FILE_IN_CACHE", "SRM_SPACE_AVAILABLE", "SRM_LOWER_SPACE_GRANTED", "SRM_DONE", "SRM_PARTIAL_SUCCESS", "SRM_REQUEST_TIMED_OUT", "SRM_LAST_COPY", "SRM_FILE_BUSY", "SRM_FILE_LOST", "SRM_FILE_UNAVAILABLE", "SRM_CUSTOM_STATUS" }; static int srm_timeout_connect = 60; static int srm_timeout_sendreceive = 3600; // Aleternative implementation for clock_gettime for platforms that // do not have it (i.e. MacOSX) #if !(_POSIX_C_SOURCE >= 199309L) && !(__APPLE__ && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) #include #include #define CLOCK_MONOTONIC 0 typedef int clockid_t; static int clock_gettime(clockid_t clk_id, struct timespec *tp) { clock_serv_t cclock; mach_timespec_t mts; host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock); clock_get_time(cclock, &mts); mach_port_deallocate(mach_task_self(), cclock); tp->tv_sec = mts.tv_sec; tp->tv_nsec = mts.tv_nsec; } #endif int srm_get_timeout_connect () { return (srm_timeout_connect); } void srm_set_timeout_connect (int value) { if (value >= 0) srm_timeout_connect = value; } int srm_get_timeout_sendreceive () { return (srm_timeout_sendreceive); } void srm_set_timeout_sendreceive (int value) { if (value >= 0) srm_timeout_sendreceive = value; } void back_off_logic_init(struct srm_context *context, struct srm_internal_context *internal_context) { GFAL_SRM_IFCE_ASSERT(context); GFAL_SRM_IFCE_ASSERT(internal_context); memset(internal_context,0, sizeof(struct srm_internal_context)); clock_gettime(CLOCK_MONOTONIC, &internal_context->end_time_spec); if (context->timeout > 0) { internal_context->relative_timeout = context->timeout; internal_context->end_time = (time(NULL) + internal_context->relative_timeout); internal_context->end_time_spec.tv_sec+= internal_context->relative_timeout; }else{ internal_context->relative_timeout = 180; internal_context->end_time = (time(NULL) + internal_context->relative_timeout); internal_context->end_time_spec.tv_sec+= internal_context->relative_timeout; } internal_context->estimated_wait_time = -1; internal_context->attempt = 1; if(context->ext){ timespec_add(&(internal_context->current_waittime_spec), &(context->ext->min_waittime), &(internal_context->current_waittime_spec)); } internal_context->random_seed = (unsigned int) time(NULL); } void set_estimated_wait_time(struct srm_internal_context *internal_context, int my_time) { // safety check on the serve value, if > relative_timeout -> fallback on eponential backoff logic internal_context->estimated_wait_time = (my_time > 0 && my_time < internal_context->relative_timeout)?my_time:-1; } static void srm_send_one_header(GQuark key_id, gpointer data, gpointer user_data) { struct soap* soap = (struct soap*)user_data; struct srm_context* c = (struct srm_context*)soap->user; c->ext->original_fposthdr(soap, g_quark_to_string(key_id), data); } static int srm_post_header(struct soap* soap, const char* key, const char* value) { struct srm_context* c = (struct srm_context*)soap->user; assert(c->ext->original_fposthdr); // If NULL, NULL, it is our chance to push our headers, since the caller // expects just to end the headers with a \n\r now if (key == NULL && value == NULL) { g_datalist_foreach(&c->ext->additional_headers, srm_send_one_header, soap); } // Override user-agent else if (c->ext->user_agent[0] && key != NULL && strncasecmp(key, "User-Agent", 10) == 0) { char* buffer = g_strdup_printf("%s srm-ifce/%s %s", c->ext->user_agent, VERSION, value); int r = c->ext->original_fposthdr(soap, key, buffer); g_free(buffer); return r; } // Forward the request return c->ext->original_fposthdr(soap, key, value); } void srm_context_soap_init(struct srm_context* c) { assert(c); if (c->soap) { c->soap->fault = NULL; return; } #ifdef GFAL_SECURE int flags; #endif if (c->ext && c->ext->keep_alive) { c->soap = soap_new2(SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE); #ifdef SO_NOSIGPIPE c->soap->bind_flags |= (SO_REUSEADDR | SO_NOSIGPIPE); #else c->soap->bind_flags |= SO_REUSEADDR; #endif c->soap->tcp_keep_alive = 1; #ifdef MSG_NOSIGNAL c->soap->socket_flags = MSG_NOSIGNAL; #endif } else { c->soap = soap_new(); } c->soap->namespaces = namespaces_srmv2; #ifdef GFAL_SECURE flags = CGSI_OPT_KEEP_ALIVE; soap_register_plugin_arg (c->soap, client_cgsi_plugin, &flags); if (c->ext) { if (cgsi_plugin_set_credentials(c->soap, 0, c->ext->ucert, c->ext->ukey) != 0) { soap_free(c->soap); c->soap = NULL; srm_errmsg (c, "[SRM][srm_soap_init_context_new] could not load client credentials"); return; } } #endif c->soap->recv_timeout= c->timeout_ops; c->soap->send_timeout = c->timeout_ops; c->soap->connect_timeout = c->timeout_conn; // Allow to inject our own headers if (c->ext) { c->soap->user = c; c->ext->original_fposthdr = c->soap->fposthdr; c->soap->fposthdr = srm_post_header; } } void srm_soap_free(struct soap *soap) { const int srm_ifce_errno = errno; soap_end (soap); soap_done (soap); soap_free(soap); // override errno with srm-ifce specific value // hack for globus openssl errno problems errno = srm_ifce_errno; } const char * statuscode2errmsg (unsigned int statuscode) { if(statuscode < (sizeof(srmv2_errmsg)/sizeof(char*))) return (srmv2_errmsg[statuscode]); return srmv2_errmsg[1]; } int statuscode2errno (int statuscode) { switch (statuscode) { case SRM_USCOREINVALID_USCOREPATH: return (ENOENT); case SRM_USCOREAUTHENTICATION_USCOREFAILURE: case SRM_USCOREAUTHORIZATION_USCOREFAILURE: return (EACCES); case SRM_USCOREDUPLICATION_USCOREERROR: return (EEXIST); case SRM_USCORENO_USCOREFREE_USCORESPACE: return (ENOSPC); case SRM_USCOREINTERNAL_USCOREERROR: return (ECOMM); case SRM_USCORENOT_USCORESUPPORTED: return (EOPNOTSUPP); case SRM_USCORENON_USCOREEMPTY_USCOREDIRECTORY: return (ENOTEMPTY); case SRM_USCOREFILE_USCORELIFETIME_USCOREEXPIRED: return (ETIME); case SRM_USCOREREQUEST_USCOREINPROGRESS: case SRM_USCOREREQUEST_USCOREQUEUED: return (EAGAIN); case SRM_USCOREFAILURE: return (EIO); case SRM_USCORENO_USCOREUSER_USCORESPACE: case SRM_USCOREINVALID_USCOREREQUEST: return (EBADR); case SRM_USCOREEXCEED_USCOREALLOCATION: return (EDQUOT); case SRM_USCOREFILE_USCOREBUSY: case SRM_USCOREFILE_USCOREUNAVAILABLE: return (EBUSY); case SRM_USCOREFILE_USCORELOST: return (EIDRM); case SRM_USCOREABORTED: return (ECANCELED); case SRM_USCORETOO_USCOREMANY_USCORERESULTS: return (EFBIG); case SRM_USCORESUCCESS: case SRM_USCOREFILE_USCOREPINNED: case SRM_USCORESPACE_USCOREAVAILABLE: case SRM_USCORERELEASED: return (0); default: return (EINVAL); } } int statuscode_and_msg_to_errno(int statuscode, const char* err_tab_msg){ int err_code = statuscode2errno(statuscode); if((err_code == EINVAL || err_code == EIO) && err_tab_msg != NULL){ // search for string pattern // search for pattern EEXIST, LCGUTIL-203 bug if( strstr(err_tab_msg, "exists, overwite is not allowed") != NULL) err_code = EEXIST; // https://its.cern.ch/jira/browse/DMC-512 if (strstr(err_tab_msg, "o such file or directory") != NULL) err_code = ENOENT; // https://its.cern.ch/jira/browse/DMC-528 if (strstr(err_tab_msg, "ile does not exist") != NULL) err_code = ENOENT; } return err_code; } void srm_errmsg (struct srm_context *context, const char *format, ...) { va_list ap; char *actual_format; if ((context->errbuf == NULL && context->verbose == 0) || format == NULL || format[0] == 0) return; va_start (ap, format); (void)asprintf (&actual_format, "%s\n", format); if (actual_format == NULL){ va_end(ap); return; } if (context->errbuf == NULL) vfprintf (stderr, actual_format, ap); else vsnprintf (context->errbuf, context->errbufsz, actual_format, ap); free (actual_format); va_end(ap); } int srm_soap_call_err(struct srm_context *context, const char *srmfunc) { if (context->soap->fault != NULL && context->soap->fault->faultstring != NULL) { srm_errmsg (context, "[%s][%s][] %s: %s",err_msg_begin, srmfunc, context->srm_endpoint, context->soap->fault->faultstring); }else if (context->soap->error == SOAP_EOF) { srm_errmsg (context, "[%s][%s][] %s: Connection fails or timeout", err_msg_begin,srmfunc,context->srm_endpoint); }else { srm_errmsg (context, "[%s][%s][] %s: Unknown SOAP error (%d)", err_msg_begin,srmfunc,context->srm_endpoint, context->soap->error); } return ECOMM; } int srm_call_err(struct srm_context *context,struct srm2__TReturnStatus *retstatus, const char *srmfunc) { int result_errno; if (retstatus == NULL) { srm_errmsg (context, "[%s][%s][] %s: ",err_msg_begin, srmfunc,context->srm_endpoint); return ECOMM; } if (retstatus->statusCode != SRM_USCORESUCCESS && retstatus->statusCode != SRM_USCOREPARTIAL_USCORESUCCESS && retstatus->statusCode != SRM_USCOREDONE && retstatus->statusCode != SRM_USCORETOO_USCOREMANY_USCORERESULTS) { result_errno = statuscode_and_msg_to_errno(retstatus->statusCode, retstatus->explanation); if (retstatus->explanation && retstatus->explanation[0]) { srm_errmsg (context, "[%s][%s][%s] %s: %s",err_msg_begin, srmfunc, statuscode2errmsg (retstatus->statusCode), context->srm_endpoint, retstatus->explanation); }else { srm_errmsg (context, "[%s][%s][%s] %s: ",err_msg_begin, srmfunc, statuscode2errmsg (retstatus->statusCode), context->srm_endpoint); } } else { srm_errmsg (context, "[%s][%s][%s] %s: ",err_msg_begin, srmfunc, statuscode2errmsg (retstatus->statusCode), context->srm_endpoint); result_errno = ECOMM; } return result_errno; } // return error status int srm_print_error_status(struct srm_context *context,struct srm2__TReturnStatus *status,const char *srmfunc) { if (status->explanation && status->explanation[0]) { srm_errmsg (context, "[%s][%s][%s] %s: %s",err_msg_begin, srmfunc, statuscode2errmsg (status->statusCode), context->srm_endpoint, status->explanation); }else { srm_errmsg (context, "[%s][%s][%s] %s: ",err_msg_begin, srmfunc, statuscode2errmsg (status->statusCode), context->srm_endpoint); } return statuscode2errno (status->statusCode); } int srm_print_error_status_additional(struct srm_context *context,struct srm2__TReturnStatus *status,const char *srmfunc,char *additional_info) { if (status->explanation && status->explanation[0]) { srm_errmsg (context, "[%s][%s][%s] %s: %s: %s",err_msg_begin, srmfunc, statuscode2errmsg (status->statusCode), context->srm_endpoint,additional_info, status->explanation); }else { srm_errmsg (context, "[%s][%s][%s] %s: %s: ",err_msg_begin, srmfunc, statuscode2errmsg (status->statusCode), context->srm_endpoint,additional_info); } return statuscode2errno (status->statusCode); } void srm_print_explanation(char **explanation,struct srm2__TReturnStatus *reqstatp,const char *srmfunc) { if (reqstatp->explanation != NULL && reqstatp->explanation[0]) (void)asprintf(explanation, "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg( reqstatp->statusCode), reqstatp->explanation); else (void)asprintf(explanation, "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg( reqstatp->statusCode)); } int wait_for_new_attempt_min_max_ng(srm_context_t context, struct srm_internal_context *internal_context){ int ret =-1; // default -> go timeout struct timespec sleep_time, current_time, end_sleep_time; clock_gettime(CLOCK_MONOTONIC, ¤t_time); timespec_add(&(internal_context->current_waittime_spec), &(current_time), &(end_sleep_time)); if( timespec_cmp(&end_sleep_time, &(internal_context->end_time_spec), <) ){ //printf(" I wil sleep %ld %ld", internal_context->current_waittime_spec.tv_sec, internal_context->current_waittime_spec.tv_nsec); while(timespec_cmp(&(current_time), &end_sleep_time, <)){ // go to sleep for the exact required time call_function.call_usleep(500000); clock_gettime(CLOCK_MONOTONIC, ¤t_time); } ret =0; } // double the wait time if < max timespec_add(&(internal_context->current_waittime_spec),&(internal_context->current_waittime_spec), &(sleep_time)); if(timespec_cmp(&sleep_time, &(context->ext->max_waittime), <) ){ timespec_copy(&(internal_context->current_waittime_spec), &sleep_time); }else{ timespec_copy(&(internal_context->current_waittime_spec), &(context->ext->max_waittime)); } return ret; } // Returns -1 for timeout // Returns 0 for wait finished int wait_for_new_attempt(struct srm_internal_context *internal_context) // Or Timeout { const time_t last_chance_sec_before_end = 2; // 2 seconds before the end int random_limit; int random_wait; time_t wait_till_end=0; time_t after_sleep; after_sleep = time(NULL) ; if (internal_context->estimated_wait_time <= 0 && internal_context->estimated_wait_time < ( internal_context->end_time - time(NULL))) { // Exponential logic if (internal_context->attempt<=10) // Maximum 10 attempts { random_limit = (time_t) (1<<(internal_context->attempt)); random_wait = (rand_r(&(internal_context->random_seed)) % random_limit)+1; internal_context->attempt++; after_sleep += (time_t) random_wait; if (after_sleep >= internal_context->end_time) { wait_till_end = internal_context->end_time - time(NULL) - last_chance_sec_before_end; //try the last hope before the end if (wait_till_end>0) call_function.call_sleep(wait_till_end); else // deadline outdated, return -1; // simply return in timeout }else { call_function.call_sleep(random_wait); } }else { // Timeout, attempts exceeded return -1; } }else{ after_sleep += internal_context->estimated_wait_time ; if (after_sleep >= internal_context->end_time) { wait_till_end = internal_context->end_time - (time(NULL)+last_chance_sec_before_end); if (wait_till_end>0) { call_function.call_sleep(wait_till_end); }else { // Timeout return -1; } }else { call_function.call_sleep(internal_context->estimated_wait_time ); } } return 0; } int wait_switch_auto(srm_context_t context, struct srm_internal_context *internal_context){ if(context->ext == NULL) return wait_for_new_attempt(internal_context); switch(context->ext->polling_logic){ case SRM_POLLING_LOGIC_OLD: return wait_for_new_attempt(internal_context); case SRM_POLLING_LOGIC_MIN_MAX_EXP: default: return wait_for_new_attempt_min_max_ng(context, internal_context); } return -1; } // Return all statuses timeout, failure,internal error, queued srm_call_status back_off_logic(struct srm_context *context,const char *srmfunc, struct srm_internal_context *internal_context,struct srm2__TReturnStatus *retstatus) { if (retstatus == NULL) { srm_errmsg (context, "[%s][%s][] %s: ",err_msg_begin, srmfunc, context->srm_endpoint); errno = ECOMM; // No response status return srm_call_status_FAILURE; }else { switch (retstatus->statusCode ) { case SRM_USCOREINTERNAL_USCOREERROR: if (wait_switch_auto(context,internal_context) != 0) { srm_errmsg (context, "[%s][%s][ETIMEDOUT] %s: User timeout over", err_msg_begin,srmfunc, context->srm_endpoint); errno = ETIMEDOUT; // Timeout return srm_call_status_TIMEOUT; } return srm_call_status_INTERNAL_ERROR; case SRM_USCOREREQUEST_USCOREQUEUED: case SRM_USCOREREQUEST_USCOREINPROGRESS: if (wait_switch_auto(context,internal_context) != 0) { srm_errmsg (context, "[%s][%s][ETIMEDOUT] %s: User timeout over", err_msg_begin,srmfunc, context->srm_endpoint); errno = ETIMEDOUT; // Timeout return srm_call_status_TIMEOUT; } return srm_call_status_QUEUED; case SRM_USCORESUCCESS: case SRM_USCOREPARTIAL_USCORESUCCESS: // TODO return srm_call_status_SUCCESS; default: return srm_call_status_FAILURE; } } return srm_call_status_FAILURE; } void srm_spacemd_free (int nbtokens,struct srm_spacemd *smd) { int i; if (smd == NULL) return; for (i = 0; i < nbtokens; ++i) { if (smd[i].spacetoken) free (smd[i].spacetoken); if (smd[i].owner) free (smd[i].owner); } free (smd); } int srm_set_protocol_in_transferParameters( struct srm_context *context, struct srm2__TTransferParameters* transferParameters, char** protocols) { struct srm2__ArrayOfString ** array = NULL; assert(transferParameters); array = &(transferParameters->arrayOfTransferProtocols); *array = NULL; if (protocols) { *array = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfString)); if (*array == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return -1; } (*array)->__sizestringArray = srm_count_elements_of_string_array(protocols); (*array)->stringArray = protocols; } return 0; } char* srm_strip_string(const char* str, const char chr) { char *res = 0; assert(str); if (str) { char *pos = strrchr(str, chr); int size = -1; if (pos) { /* +1: to include the last character as well */ size = pos - str + 1; } else { size = strlen(str); } res = (char*) malloc(size + 1); strncpy(res, str, size); res[size] = 0; } return res; } int srm_count_elements_of_string_array(char** a) { int ret = -1; GFAL_SRM_IFCE_ASSERT(a); for (ret = 0; a[ret] != 0; ++ret) ; return ret; } int copy_string(char **dest,char *src) { GFAL_SRM_IFCE_ASSERT(dest); if (src) { *dest = strdup(src); if (*dest == NULL) { errno = ENOMEM; return (-1); } } else { *dest = NULL; errno = EINVAL; // queued but empty token return (-1); } return 0; } int copy_permissionfilestatuses(struct srm2__TReturnStatus *reqstatp, struct srmv2_filestatus **statuses, struct srm2__ArrayOfTSURLPermissionReturn *repfs, const char *srmfunc, int amode) { int i,n; n = repfs->__sizesurlPermissionArray; if ((*statuses = (struct srmv2_filestatus *) calloc (n, sizeof(struct srmv2_filestatus))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < n; i++) { if (!repfs->surlPermissionArray[i]) continue; memset (*statuses + i, 0, sizeof (struct srmv2_filestatus)); if (repfs->surlPermissionArray[i]->surl) (*statuses)[i].surl = strdup (repfs->surlPermissionArray[i]->surl); if (repfs->surlPermissionArray[i]->status) { (*statuses)[i].status = statuscode2errno (repfs->surlPermissionArray[i]->status->statusCode); if (repfs->surlPermissionArray[i]->status->explanation && repfs->surlPermissionArray[i]->status->explanation[0]) (void)asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->surlPermissionArray[i]->status->statusCode), repfs->surlPermissionArray[i]->status->explanation); else if (reqstatp->explanation != NULL && reqstatp->explanation[0] && strncasecmp (reqstatp->explanation, "failed for all", 14)) (void)asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->surlPermissionArray[i]->status->statusCode), reqstatp->explanation); else (void)asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg (repfs->surlPermissionArray[i]->status->statusCode)); } else (*statuses)[i].status = ENOMEM; if ((*statuses)[i].status == 0) { enum srm2__TPermissionMode perm = *(repfs->surlPermissionArray[i]->permission); if ((amode == R_OK && (perm == NONE || perm == X || perm == W || perm == WX)) || (amode == W_OK && (perm == NONE || perm == X || perm == R || perm == RX)) || (amode == X_OK && (perm == NONE || perm == W || perm == R || perm == RW)) || (amode == (R_OK|W_OK) && perm != RW && perm != RWX) || (amode == (R_OK|X_OK) && perm != RX && perm != RWX) || (amode == (W_OK|X_OK) && perm != WX && perm != RWX) || (amode == (R_OK|W_OK|X_OK) && perm != RWX)) (*statuses)[i].status = EACCES; } } return n; } int copy_filestatuses(struct srm2__TReturnStatus *reqstatp, struct srmv2_filestatus **statuses, struct srm2__ArrayOfTSURLReturnStatus *repfs, const char *srmfunc) { int i,n; n = repfs->__sizestatusArray; if ((*statuses = (struct srmv2_filestatus *) calloc (n, sizeof(struct srmv2_filestatus))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < n; i++) { if (!repfs->statusArray[i]) continue; memset (*statuses + i, 0, sizeof (struct srmv2_filestatus)); if (repfs->statusArray[i]->surl) (*statuses)[i].surl = strdup (repfs->statusArray[i]->surl); if (repfs->statusArray[i]->status) { (*statuses)[i].status = statuscode2errno (repfs->statusArray[i]->status->statusCode); if (repfs->statusArray[i]->status->explanation && repfs->statusArray[i]->status->explanation[0]) (void)asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), repfs->statusArray[i]->status->explanation); else if (reqstatp->explanation != NULL && reqstatp->explanation[0] && strncasecmp (reqstatp->explanation, "failed for all", 14)) (void)asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), reqstatp->explanation); else (void)asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode)); } } return n; } int copy_pinfilestatuses_extendlifetime(struct srm2__TReturnStatus *reqstatp, struct srmv2_pinfilestatus **filestatuses, struct srm2__ArrayOfTSURLLifetimeReturnStatus *repfs, const char *srmfunc) { int n,i; n = repfs->__sizestatusArray; if ((*filestatuses = (struct srmv2_pinfilestatus *) calloc (n, sizeof (struct srmv2_pinfilestatus))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < n; i++) { if (!repfs->statusArray[i]) continue; memset (*filestatuses + i, 0, sizeof (struct srmv2_pinfilestatus)); if (repfs->statusArray[i]->surl) { (*filestatuses)[i].surl = strdup (repfs->statusArray[i]->surl); } if (repfs->statusArray[i]->pinLifetime) { (*filestatuses)[i].pinlifetime = *(repfs->statusArray[i]->pinLifetime); } if (repfs->statusArray[i]->status) { (*filestatuses)[i].status = statuscode2errno (repfs->statusArray[i]->status->statusCode); if (repfs->statusArray[i]->status->explanation && repfs->statusArray[i]->status->explanation[0]) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), repfs->statusArray[i]->status->explanation); else if (reqstatp->explanation != NULL && reqstatp->explanation[0] && strncasecmp (reqstatp->explanation, "failed for all", 14)) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), reqstatp->explanation); else if ((*filestatuses)[i].status != 0) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode)); } } return n; } int copy_pinfilestatuses_get(struct srm2__TReturnStatus *reqstatp, struct srmv2_pinfilestatus **filestatuses, struct srm2__ArrayOfTGetRequestFileStatus *repfs, const char *srmfunc) { int n,i; n = repfs->__sizestatusArray; if ((*filestatuses = (struct srmv2_pinfilestatus *) calloc (n, sizeof (struct srmv2_pinfilestatus))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < n; i++) { if (!repfs->statusArray[i]) continue; memset (*filestatuses + i, 0, sizeof (struct srmv2_pinfilestatus)); if (repfs->statusArray[i]->sourceSURL) (*filestatuses)[i].surl = strdup (repfs->statusArray[i]->sourceSURL); if (repfs->statusArray[i]->transferURL) (*filestatuses)[i].turl = strdup (repfs->statusArray[i]->transferURL); if (repfs->statusArray[i]->status) { (*filestatuses)[i].status = statuscode2errno (repfs->statusArray[i]->status->statusCode); if (repfs->statusArray[i]->status->explanation && repfs->statusArray[i]->status->explanation[0]) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), repfs->statusArray[i]->status->explanation); else if (reqstatp->explanation != NULL && reqstatp->explanation[0] && strncasecmp (reqstatp->explanation, "failed for all", 14)) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), reqstatp->explanation); else if ((*filestatuses)[i].status != 0) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode)); } if (repfs->statusArray[i]->remainingPinTime) (*filestatuses)[i].pinlifetime = *(repfs->statusArray[i]->remainingPinTime); if (repfs->statusArray[i]->estimatedWaitTime) { (*filestatuses)[i].estimated_wait_time = *(repfs->statusArray[i]->estimatedWaitTime); }else { (*filestatuses)[i].estimated_wait_time = -1; } } return n; } int copy_pinfilestatuses_bringonline(struct srm2__TReturnStatus *reqstatp, struct srmv2_pinfilestatus **filestatuses, struct srm2__ArrayOfTBringOnlineRequestFileStatus *repfs, const char *srmfunc) { int n,i; n = repfs->__sizestatusArray; if ((*filestatuses = (struct srmv2_pinfilestatus *) calloc (n, sizeof (struct srmv2_pinfilestatus))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < n; i++) { if (!repfs->statusArray[i]) continue; memset (*filestatuses + i, 0, sizeof (struct srmv2_pinfilestatus)); if (repfs->statusArray[i]->sourceSURL) (*filestatuses)[i].surl = strdup (repfs->statusArray[i]->sourceSURL); if (repfs->statusArray[i]->status) { (*filestatuses)[i].status = statuscode2errno (repfs->statusArray[i]->status->statusCode); if (repfs->statusArray[i]->status->explanation && repfs->statusArray[i]->status->explanation[0]) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), repfs->statusArray[i]->status->explanation); else if (reqstatp->explanation != NULL && reqstatp->explanation[0] && strncasecmp (reqstatp->explanation, "failed for all", 14)) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), reqstatp->explanation); else if ((*filestatuses)[i].status != 0) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode)); } if (repfs->statusArray[i]->remainingPinTime) (*filestatuses)[i].pinlifetime = *(repfs->statusArray[i]->remainingPinTime); if (repfs->statusArray[i]->estimatedWaitTime) { (*filestatuses)[i].estimated_wait_time = *(repfs->statusArray[i]->estimatedWaitTime); }else { (*filestatuses)[i].estimated_wait_time = -1; } } return n; } int copy_pinfilestatuses_put(struct srm2__TReturnStatus *reqstatp, struct srmv2_pinfilestatus **filestatuses, struct srm2__ArrayOfTPutRequestFileStatus *repfs, const char *srmfunc) { int n,i; n = repfs->__sizestatusArray; if ((*filestatuses = (struct srmv2_pinfilestatus *) calloc (n, sizeof (struct srmv2_pinfilestatus))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < n; i++) { if (!repfs->statusArray[i]) continue; memset (*filestatuses + i, 0, sizeof (struct srmv2_pinfilestatus)); if (repfs->statusArray[i]->SURL) (*filestatuses)[i].surl = strdup (repfs->statusArray[i]->SURL); if (repfs->statusArray[i]->transferURL) (*filestatuses)[i].turl = strdup (repfs->statusArray[i]->transferURL); if (repfs->statusArray[i]->status) { (*filestatuses)[i].status = statuscode2errno (repfs->statusArray[i]->status->statusCode); if (repfs->statusArray[i]->status->explanation && repfs->statusArray[i]->status->explanation[0]) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), repfs->statusArray[i]->status->explanation); else if (reqstatp->explanation != NULL && reqstatp->explanation[0] && strncasecmp (reqstatp->explanation, "failed for all", 14)) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode), reqstatp->explanation); else if ((*filestatuses)[i].status != 0) (void) asprintf (&((*filestatuses)[i].explanation), "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg (repfs->statusArray[i]->status->statusCode)); } if (repfs->statusArray[i]->remainingPinLifetime) (*filestatuses)[i].pinlifetime = *(repfs->statusArray[i]->remainingPinLifetime); if (repfs->statusArray[i]->estimatedWaitTime) { (*filestatuses)[i].estimated_wait_time = *(repfs->statusArray[i]->estimatedWaitTime); }else { (*filestatuses)[i].estimated_wait_time = -1; } } return n; } int copy_filepermissions(struct srm2__TReturnStatus *reqstatp, struct srm_filepermission **permissions, struct srm2__ArrayOfTPermissionReturn *repperm) { int i, n, j , k; const char srmfunc[] = "GetPermission"; if (reqstatp == NULL || repperm == NULL || permissions == NULL) { errno = EFAULT; return (-1); } n = repperm->__sizepermissionArray; if ((*permissions = (struct srm_filepermission *) calloc (n, sizeof (struct srm_filepermission))) == NULL) { return (-1); } for (i = 0; i < n; ++i) { if (!repperm->permissionArray[i]) continue; memset (*permissions + i, 0, sizeof(struct srm_filepermission)); if (repperm->permissionArray[i]->owner) { (*permissions)[i].owner = strdup (repperm->permissionArray[i]->owner); } if (repperm->permissionArray[i]->surl) { (*permissions)[i].surl = strdup (repperm->permissionArray[i]->surl); } if (repperm->permissionArray[i]->status) { (*permissions)[i].status = statuscode2errno(repperm->permissionArray[i]->status->statusCode); if (repperm->permissionArray[i]->status->explanation && repperm->permissionArray[i]->status->explanation[0]) { asprintf (&((*permissions)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg(repperm->permissionArray[i]->status->statusCode), repperm->permissionArray[i]->status->explanation); }else if (reqstatp->explanation != NULL && reqstatp->explanation[0] && strncasecmp (reqstatp->explanation, "failed for all", 14)) { asprintf (&((*permissions)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg(repperm->permissionArray[i]->status->statusCode), reqstatp->explanation); }else { asprintf (&((*permissions)[i].explanation), "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg(repperm->permissionArray[i]->status->statusCode)); } //continue; } if (repperm->permissionArray[i]->ownerPermission) { (*permissions)[i].owner_permission = *repperm->permissionArray[i]->ownerPermission; } if (repperm->permissionArray[i]->otherPermission) { (*permissions)[i].other_permission = *repperm->permissionArray[i]->otherPermission; } if (repperm->permissionArray[i]->arrayOfGroupPermissions && repperm->permissionArray[i]->arrayOfGroupPermissions->__sizegroupPermissionArray>0) { k = repperm->permissionArray[i]->arrayOfGroupPermissions->__sizegroupPermissionArray; (*permissions)[i].group_permissions_count = k; if (( (*permissions)[i].group_permissions = (struct srm_permission *) calloc (k, sizeof (struct srm_permission))) == NULL) return (-1); for (j = 0; j < k; ++j) { if (repperm->permissionArray[i]->arrayOfGroupPermissions->groupPermissionArray[j] == NULL) continue; (*permissions)[i].group_permissions[j].name_id = strdup (repperm->permissionArray[i]->arrayOfGroupPermissions->groupPermissionArray[j]->groupID); (*permissions)[i].group_permissions[j].mode = repperm->permissionArray[i]->arrayOfGroupPermissions->groupPermissionArray[j]->mode; } }else { (*permissions)[i].group_permissions_count = 0; (*permissions)[i].group_permissions = NULL; } if (repperm->permissionArray[i]->arrayOfUserPermissions && repperm->permissionArray[i]->arrayOfUserPermissions->__sizeuserPermissionArray>0) { k = repperm->permissionArray[i]->arrayOfUserPermissions->__sizeuserPermissionArray; (*permissions)[i].user_permissions_count = k; if (( (*permissions)[i].user_permissions = (struct srm_permission *) calloc (k, sizeof (struct srm_permission))) == NULL) return (-1); for (j = 0; j < k; ++j) { if (repperm->permissionArray[i]->arrayOfUserPermissions->userPermissionArray[j] == NULL) continue; (*permissions)[i].user_permissions[j].name_id = strdup (repperm->permissionArray[i]->arrayOfUserPermissions->userPermissionArray[j]->userID); (*permissions)[i].user_permissions[j].mode = repperm->permissionArray[i]->arrayOfUserPermissions->userPermissionArray[j]->mode; } }else { (*permissions)[i].user_permissions_count = 0; (*permissions)[i].user_permissions = NULL; } } errno = 0; return (n); } /** * Copy TLocality (ONLINE, NEARLINE,...) from srm soap to srmifce enum */ void copy_Locality(struct srm2__TMetaDataPathDetail *soap_file_meta_data, struct srmv2_mdfilestatus *statuses){ enum srm2__TFileLocality loc = *(soap_file_meta_data->fileLocality); TFileLocality res_loc; switch(loc){ case ONLINE_: res_loc = GFAL_LOCALITY_ONLINE_; break; case NEARLINE_: res_loc = GFAL_LOCALITY_NEARLINE_; break; case ONLINE_USCOREAND_USCORENEARLINE: res_loc = GFAL_LOCALITY_ONLINE_USCOREAND_USCORENEARLINE; break; case LOST: res_loc = GFAL_LOCALITY_LOST; break; case UNAVAILABLE: res_loc = GFAL_LOCALITY_UNAVAILABLE; break; case NONE_: res_loc = GFAL_LOCALITY_NONE_; break; default: res_loc = GFAL_LOCALITY_UNKNOWN; } statuses->locality = res_loc; } /** * Translates TPermissionMode (X, W, R, WX,...) from srm soap to srmifce enum */ TPermissionMode translate_permission_mode(srm2__TPermissionMode mode) { TPermissionMode res_mode; switch (mode) { case X: res_mode = SRM_PERMISSION_X; break; case W: res_mode = SRM_PERMISSION_W; break; case WX: res_mode = SRM_PERMISSION_WX; break; case R: res_mode = SRM_PERMISSION_R; break; case RX: res_mode = SRM_PERMISSION_RX; break; case RW: res_mode = SRM_PERMISSION_RW; break; case RWX: res_mode = SRM_PERMISSION_RWX; break; default: res_mode = SRM_PERMISSION_NONE; break; } return res_mode; } int copy_mdfilestatuses(struct srm2__TReturnStatus *reqstatp, struct srmv2_mdfilestatus **statuses, struct srm2__ArrayOfTMetaDataPathDetail *repfs) { int i, n, r; const char srmfunc[] = "Ls"; if (reqstatp == NULL || repfs == NULL || statuses == NULL) { errno = EFAULT; return (-1); } n = repfs->__sizepathDetailArray; if ((*statuses = (struct srmv2_mdfilestatus *) calloc (n, sizeof (struct srmv2_mdfilestatus))) == NULL) { return (-1); } for (i = 0; i < n; ++i) { if (!repfs->pathDetailArray[i]) continue; memset (*statuses + i, 0, sizeof(struct srmv2_mdfilestatus)); if (repfs->pathDetailArray[i]->path) { (*statuses)[i].surl = strdup (repfs->pathDetailArray[i]->path); } if (repfs->pathDetailArray[i]->status) { (*statuses)[i].status = statuscode2errno(repfs->pathDetailArray[i]->status->statusCode); if (reqstatp->statusCode == SRM_USCORETOO_USCOREMANY_USCORERESULTS) (*statuses)[i].status = EFBIG; if ((*statuses)[i].status) { if (repfs->pathDetailArray[i]->status->explanation && repfs->pathDetailArray[i]->status->explanation[0]) { (void) asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg(repfs->pathDetailArray[i]->status->statusCode), repfs->pathDetailArray[i]->status->explanation); }else if (reqstatp->explanation != NULL && reqstatp->explanation[0] && strncasecmp (reqstatp->explanation, "failed for all", 14)) { (void) asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] %s",err_msg_begin, srmfunc, statuscode2errmsg(repfs->pathDetailArray[i]->status->statusCode), reqstatp->explanation); }else { (void) asprintf (&((*statuses)[i].explanation), "[%s][%s][%s] ",err_msg_begin, srmfunc, statuscode2errmsg(repfs->pathDetailArray[i]->status->statusCode)); } continue; } } if (repfs->pathDetailArray[i]->size) { (*statuses)[i].stat.st_size = *(repfs->pathDetailArray[i]->size); }else { (*statuses)[i].stat.st_size = 0; } if (repfs->pathDetailArray[i]->fileLocality) { copy_Locality(repfs->pathDetailArray[i], &((*statuses)[i]) ); } if (repfs->pathDetailArray[i]->ownerPermission) (*statuses)[i].stat.st_uid = g_quark_from_string( repfs->pathDetailArray[i]->ownerPermission[0].userID); if (repfs->pathDetailArray[i]->groupPermission) (*statuses)[i].stat.st_gid = g_quark_from_string( repfs->pathDetailArray[i]->groupPermission[0].groupID); (*statuses)[i].stat.st_nlink = 1; if (repfs->pathDetailArray[i]->otherPermission) { (*statuses)[i].stat.st_mode = translate_permission_mode(*(repfs->pathDetailArray[i]->otherPermission)); } if (repfs->pathDetailArray[i]->groupPermission) { (*statuses)[i].stat.st_mode |= translate_permission_mode(repfs->pathDetailArray[i]->groupPermission->mode) << 3; } if (repfs->pathDetailArray[i]->ownerPermission) { (*statuses)[i].stat.st_mode |= translate_permission_mode(repfs->pathDetailArray[i]->ownerPermission->mode) << 6; } if (repfs->pathDetailArray[i]->createdAtTime) { struct tm createdAtTime; memset(&createdAtTime, 0, sizeof(createdAtTime)); strptime(repfs->pathDetailArray[i]->createdAtTime, "%Y-%m-%dT%T", &createdAtTime); (*statuses)[i].stat.st_ctime = mktime(&createdAtTime); } if (repfs->pathDetailArray[i]->lastModificationTime) { struct tm modifiedTime; memset(&modifiedTime, 0, sizeof(modifiedTime)); strptime(repfs->pathDetailArray[i]->lastModificationTime, "%Y-%m-%dT%T", &modifiedTime); (*statuses)[i].stat.st_mtime = mktime(&modifiedTime); } if (repfs->pathDetailArray[i]->type) { switch (*(repfs->pathDetailArray[i]->type)) { case FILE_: (*statuses)[i].stat.st_mode |= S_IFREG; break; case DIRECTORY: (*statuses)[i].stat.st_mode |= S_IFDIR; break; case LINK: (*statuses)[i].stat.st_mode |= S_IFLNK; break; } } if (repfs->pathDetailArray[i]->checkSumType && repfs->pathDetailArray[i]->checkSumValue) { (*statuses)[i].checksumtype = strdup (repfs->pathDetailArray[i]->checkSumType); (*statuses)[i].checksum = strdup (repfs->pathDetailArray[i]->checkSumValue); } if (repfs->pathDetailArray[i]->arrayOfSpaceTokens && repfs->pathDetailArray[i]->arrayOfSpaceTokens->__sizestringArray > 0 && repfs->pathDetailArray[i]->arrayOfSpaceTokens->stringArray) { int j; (*statuses)[i].nbspacetokens = repfs->pathDetailArray[i]->arrayOfSpaceTokens->__sizestringArray; if (((*statuses)[i].spacetokens = (char **) calloc ((*statuses)[i].nbspacetokens, sizeof (char *))) == NULL) return (-1); for (j = 0; j < (*statuses)[i].nbspacetokens; ++j) { if (repfs->pathDetailArray[i]->arrayOfSpaceTokens->stringArray[j] == NULL) continue; (*statuses)[i].spacetokens[j] = strdup (repfs->pathDetailArray[i]->arrayOfSpaceTokens->stringArray[j]); } } if (repfs->pathDetailArray[i]->arrayOfSubPaths) { r = copy_mdfilestatuses (reqstatp, &((*statuses)[i].subpaths), repfs->pathDetailArray[i]->arrayOfSubPaths ); if (r < 0) return (r); (*statuses)[i].nbsubpaths = r; } } errno = 0; return (n); } int copy_returnstatus(struct srm2__TReturnStatus **destination,struct srm2__TReturnStatus *returnStatus) { if (returnStatus) { GFAL_SRM_IFCE_ASSERT(destination); *destination = (struct srm2__TReturnStatus *) malloc (sizeof (struct srm2__TReturnStatus)); if ((*destination) != NULL) { (**destination).explanation = NULL; if (returnStatus->explanation) { if (((**destination).explanation = strdup(returnStatus->explanation)) == NULL) { errno = ENOMEM; return (-1); } } (**destination).statusCode = returnStatus->statusCode; return 0; }else { errno = ENOMEM; return (-1); } }else { return -1; // empty response } return 0; } char* srm_util_consolidate_multiple_characters(const char* s, const char c, const int start) { char *tmp = 0; char *ret = 0; int i = 0; int tmp_i = 0; if (s == 0) { return 0; } tmp = (char*) malloc (strlen(s) + 1); for (; s[i] != 0; ++i) { // Copy the characters unless we find c. If the index + 1 also stores c, do not copy, if (i < start || s[i] != c || s[i + 1] != c) { tmp[tmp_i] = s[i]; ++tmp_i; } } tmp[tmp_i] = 0; // strdup the string, to shrink to the real size ret = strdup(tmp); free(tmp); return ret; } char* srm_util_add_strings(const char* s1, const char* s2) { char* ret = 0; unsigned int len_s1 = 0; assert(s1); assert(s2); if (!s1 || !s2) { return 0; } len_s1 = strlen(s1); ret = malloc(len_s1 + strlen(s2) + 1); assert(ret); if (ret) { strcpy(ret, s1); strcat(ret + len_s1, s2); } return ret; } char* srm_util_normalize_surl(const char* surl) { char *consolidated_file = NULL; char *with_trailing_slash = NULL; /* We put a trailing "/" to the end of each directory, fo fix the algorithm in srmv2_makedirp (Savannah bug #52502) */ with_trailing_slash = srm_util_add_strings(surl, "/"); assert(with_trailing_slash); /* do not consolidate the "//" after the protocol part... (srm://...) */ consolidated_file = srm_util_consolidate_multiple_characters( with_trailing_slash, '/', strlen("srm://") + 1); assert(consolidated_file); free(with_trailing_slash); return consolidated_file; } srm-ifce-v1.24.7/src/srm_util.h000066400000000000000000000133671465215307000163130ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef SRM_UTIL_H_ #define SRM_UTIL_H_ #include "time_utils.h" /** dynamic allocation of a srm soap context timeouts are initialized from the context values ( default, excepted if user-change ) */ void srm_context_soap_init(struct srm_context* c); /** free an srm gsoap context */ void srm_soap_free(struct soap *soap); void srm_print_explanation(char **explanation,struct srm2__TReturnStatus *reqstatp,const char *srmfunc); extern const char *err_msg_begin; void srm_errmsg (struct srm_context *context, const char *format, ...); int srm_soap_call_err(struct srm_context *context, const char *srmfunc); int srm_call_err(struct srm_context *context,struct srm2__TReturnStatus *retstatus,const char *srmfunc); int srm_print_error_status(struct srm_context *context,struct srm2__TReturnStatus *status,const char *srmfunc); int srm_print_error_status_additional(struct srm_context *context,struct srm2__TReturnStatus *status,const char *srmfunc,char *additional_info); int statuscode2errno (int statuscode); const char * statuscode2errmsg (unsigned int statuscode); int statuscode_and_msg_to_errno(int, const char*); void back_off_logic_init(struct srm_context *context,struct srm_internal_context *internal_context); srm_call_status back_off_logic(struct srm_context *context,const char *srmfunc, struct srm_internal_context *internal_context,struct srm2__TReturnStatus *retstatus); int wait_for_new_attempt(struct srm_internal_context *internal_context); void srm_spacemd_free (int nbtokens, struct srm_spacemd *smd); int srm_set_protocol_in_transferParameters( struct srm_context *context, struct srm2__TTransferParameters* transferParameters, char** protocols); char* srm_strip_string(const char* str, const char chr); int srm_count_elements_of_string_array(char** a); int copy_string(char **dest,char *src); int copy_permissionfilestatuses(struct srm2__TReturnStatus *reqstatp, struct srmv2_filestatus **statuses, struct srm2__ArrayOfTSURLPermissionReturn *repfs, const char *srmfunc, int amode); int copy_filestatuses(struct srm2__TReturnStatus *reqstatp, struct srmv2_filestatus **statuses, struct srm2__ArrayOfTSURLReturnStatus *repfs, const char *srmfunc); int copy_pinfilestatuses_extendlifetime(struct srm2__TReturnStatus *reqstatp, struct srmv2_pinfilestatus **filestatuses, struct srm2__ArrayOfTSURLLifetimeReturnStatus *repfs, const char *srmfunc); int copy_pinfilestatuses_get(struct srm2__TReturnStatus *reqstatp, struct srmv2_pinfilestatus **filestatuses, struct srm2__ArrayOfTGetRequestFileStatus *repfs, const char *srmfunc); int copy_pinfilestatuses_put(struct srm2__TReturnStatus *reqstatp, struct srmv2_pinfilestatus **filestatuses, struct srm2__ArrayOfTPutRequestFileStatus *repfs, const char *srmfunc); int copy_pinfilestatuses_bringonline(struct srm2__TReturnStatus *reqstatp, struct srmv2_pinfilestatus **filestatuses, struct srm2__ArrayOfTBringOnlineRequestFileStatus *repfs, const char *srmfunc); int copy_mdfilestatuses(struct srm2__TReturnStatus *reqstatp, struct srmv2_mdfilestatus **statuses, struct srm2__ArrayOfTMetaDataPathDetail *repfs); int copy_returnstatus(struct srm2__TReturnStatus **destination, struct srm2__TReturnStatus *returnStatus); int copy_filepermissions(struct srm2__TReturnStatus *reqstatp, struct srm_filepermission **permissions, struct srm2__ArrayOfTPermissionReturn *repperm); void set_estimated_wait_time(struct srm_internal_context *internal_context, int time); int wait_for_new_attempt_min_max_ng(srm_context_t context, struct srm_internal_context *internal_context); int wait_switch_auto(srm_context_t context, struct srm_internal_context *internal_context); /* General utility functions */ /** * Normalize a SURL: remove multiple slashes (exept for "srm://"), and add a single slash * to the end of the SURL. For example, SURL * * srm://server:port/dir1//dir2 * * will be * * srm://server:port/dir1/dir2/ * * @param surl The SURL to be normalized * * @return The dyamically allocated normalized SURL. */ char* srm_util_normalize_surl(const char* surl); /** * Remove multiple, subsequent characters from a string. For instance: * * srm_util_consolidate_multiple_characters("charrrrrstring, 'r'); * * returns "charstring". * * The returned string is dynamically allocated, free it! * * @param s the string to be consolidated. * @param c the character to look for * @param start consolidating starts from this index. Before this index, all the characters * are copied. * * @return the consolidated string, dynamically allocated, or NULL if s was NULL. */ char* srm_util_consolidate_multiple_characters(const char* s, const char c, const int start); /** * Add (concatenate) two strings into a dynamically allocated new string. * * @param s1 First string * @param s2 Second string (will be added after s2) * * @return The dynamically allocated concatenation. */ char* srm_util_add_strings(const char* s1, const char* s2); #endif /* SRM_UTIL_H_ */ srm-ifce-v1.24.7/src/srm_version_wrapper.c000066400000000000000000000241221465215307000205450ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include "gfal_srm_ifce.h" #include "srmv2_async_wrapper.h" #include "srmv2_sync_wrapper.h" #include "srm_ifce_internal.h" int srm_ls(struct srm_context *context,struct srm_ls_input *input,struct srm_ls_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_ls_sync(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_ls_async(struct srm_context *context,struct srm_ls_input *input,struct srm_ls_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_ls_async(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_status_of_ls_async(struct srm_context *context,struct srm_ls_input *input,struct srm_ls_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_status_of_ls_async(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_bring_online(struct srm_context *context,struct srm_bringonline_input *input,struct srm_bringonline_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_bring_online_sync(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_bring_online_async(struct srm_context *context,struct srm_bringonline_input *input,struct srm_bringonline_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_bring_online_async(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_status_of_bring_online_async(struct srm_context *context,struct srm_bringonline_input *input,struct srm_bringonline_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_status_of_bring_online_async(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_rm(struct srm_context *context,struct srm_rm_input *input,struct srm_rm_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_rm(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_rmdir(struct srm_context *context,struct srm_rmdir_input *input,struct srm_rmdir_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_rmdir(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_mkdir(struct srm_context *context,struct srm_mkdir_input *input) { switch (context->version) { case VERSION_2_2: return srmv2_mkdir(context,input); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_mv(struct srm_context *context, struct srm_mv_input *input) { switch (context->version) { case VERSION_2_2: return srmv2_mv(context,input); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_release_files(struct srm_context *context, struct srm_releasefiles_input *input, struct srmv2_filestatus **statuses) { switch (context->version) { case VERSION_2_2: return srmv2_release_files(context,input,statuses); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_put_done(struct srm_context *context, struct srm_putdone_input *input, struct srmv2_filestatus **statuses) { switch (context->version) { case VERSION_2_2: return srmv2_put_done(context,input,statuses); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_prepare_to_get(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_prepare_to_get_sync(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_prepare_to_get_async(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_prepare_to_get_async(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_status_of_get_request_async(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_status_of_get_request_async(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_prepare_to_put(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_prepare_to_put_sync(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_prepare_to_put_async(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_prepare_to_put_async(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_status_of_put_request_async(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_status_of_put_request_async(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_abort_files(struct srm_context *context, struct srm_abort_files_input *input,struct srmv2_filestatus **statuses) { switch (context->version) { case VERSION_2_2: return srmv2_abort_files(context,input,statuses); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_abort_request(struct srm_context *context, char *token) { switch (context->version) { case VERSION_2_2: return srmv2_abort_request(context,token); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_ping(struct srm_context *context, struct srm_ping_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_ping(context,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_xping(struct srm_context *context, struct srm_xping_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_xping(context,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_xping_output_free(struct srm_xping_output output) { int i; free(output.versioninfo); output.versioninfo = NULL; for (i = 0; i < output.n_extra; ++i) { free(output.extra[i].key); free(output.extra[i].value); } free(output.extra); output.extra = NULL; output.n_extra = 0; return 0; } char* srm_getbestspacetoken (struct srm_context *context, struct srm_getbestspacetokens_input *input) { switch (context->version) { case VERSION_2_2: return srmv2_getbestspacetoken(context,input); case VERSION_1: // TODO return (NULL); default: return (NULL); } } int srm_getspacetokens (struct srm_context *context, struct srm_getspacetokens_input *input,struct srm_getspacetokens_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_getspacetokens(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_getspacemd (struct srm_context *context, struct srm_getspacemd_input *input,struct srm_spacemd **spaces) { switch (context->version) { case VERSION_2_2: return srmv2_getspacemd(context,input,spaces); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_getpermission (struct srm_context *context, struct srm_getpermission_input *input,struct srm_getpermission_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_get_permission(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_setpermission (struct srm_context *context, struct srm_setpermission_input *input) { switch (context->version) { case VERSION_2_2: return srmv2_set_permission(context,input); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_extend_file_lifetime (struct srm_context *context, struct srm_extendfilelifetime_input *input, struct srm_extendfilelifetime_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_extend_file_lifetime(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_check_permission(struct srm_context *context, struct srm_checkpermission_input *input, struct srmv2_filestatus **statuses) { switch (context->version) { case VERSION_2_2: return srmv2_check_permission(context,input,statuses); case VERSION_1: // TODO return (-1); default: return (-1); } } int srm_purgefromspace(struct srm_context *context, struct srm_purgefromspace_input *input, struct srm_purgefromspace_output *output) { switch (context->version) { case VERSION_2_2: return srmv2_purgefromspace(context,input,output); case VERSION_1: // TODO return (-1); default: return (-1); } } srm-ifce-v1.24.7/src/srmv2_async_wrapper.c000066400000000000000000000064761465215307000204610ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "srmv2_async_wrapper.h" int srmv2_ls_async(struct srm_context *context, struct srm_ls_input *input, struct srm_ls_output *output) { struct srm_internal_context internal_context; back_off_logic_init(context,&internal_context); return srmv2_ls_async_internal(context,input,output,&internal_context); } int srmv2_status_of_ls_async(struct srm_context *context, struct srm_ls_input *input, struct srm_ls_output *output) { struct srm_internal_context internal_context; back_off_logic_init(context,&internal_context); return srmv2_status_of_ls_request_async_internal(context,input,output,&internal_context); } int srmv2_prepare_to_get_async(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output) { struct srm_internal_context internal_context; back_off_logic_init(context,&internal_context); return srmv2_prepare_to_get_async_internal(context,input,output,&internal_context); } int srmv2_status_of_get_request_async(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output) { struct srm_internal_context internal_context; back_off_logic_init(context,&internal_context); return srmv2_status_of_get_request_async_internal(context,input,output,&internal_context); } int srmv2_prepare_to_put_async(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output) { struct srm_internal_context internal_context; back_off_logic_init(context,&internal_context); return srmv2_prepare_to_put_async_internal(context,input,output,&internal_context); } int srmv2_status_of_put_request_async(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output) { struct srm_internal_context internal_context; back_off_logic_init(context,&internal_context); return srmv2_status_of_put_request_async_internal(context,input,output,&internal_context); } int srmv2_bring_online_async(struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output) { struct srm_internal_context internal_context; back_off_logic_init(context,&internal_context); return srmv2_bring_online_async_internal(context,input,output,&internal_context); } int srmv2_status_of_bring_online_async(struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output) { struct srm_internal_context internal_context; back_off_logic_init(context,&internal_context); return srmv2_status_of_bring_online_async_internal(context,input,output,&internal_context); } srm-ifce-v1.24.7/src/srmv2_async_wrapper.h000066400000000000000000000037521465215307000204600ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef _SRMV2_ASYNC_WRAPPER_H_ #define _SRMV2_ASYNC_WRAPPER_H_ #include "srm_ifce_internal.h" int srmv2_ls_async(struct srm_context *context, struct srm_ls_input *input, struct srm_ls_output *output); int srmv2_status_of_ls_async(struct srm_context *context, struct srm_ls_input *input, struct srm_ls_output *output); int srmv2_prepare_to_get_async(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output); int srmv2_status_of_get_request_async(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output); int srmv2_prepare_to_put_async(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output); int srmv2_status_of_put_request_async(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output); int srmv2_bring_online_async(struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output); int srmv2_status_of_bring_online_async(struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output); #endif srm-ifce-v1.24.7/src/srmv2_data_transfer_functions.c000066400000000000000000001252061465215307000225020ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "srm_ifce_internal.h" #include "srm_soap.h" int srmv2_put_status_estimated_wait_time(struct srm2__srmStatusOfPutRequestResponse_ *prepareToPutStatusRep){ if( prepareToPutStatusRep && prepareToPutStatusRep->srmStatusOfPutRequestResponse && prepareToPutStatusRep->srmStatusOfPutRequestResponse->arrayOfFileStatuses && prepareToPutStatusRep->srmStatusOfPutRequestResponse->arrayOfFileStatuses->__sizestatusArray > 0 && prepareToPutStatusRep->srmStatusOfPutRequestResponse->arrayOfFileStatuses->statusArray){ struct srm2__TPutRequestFileStatus* status= *prepareToPutStatusRep->srmStatusOfPutRequestResponse->arrayOfFileStatuses->statusArray; if(status && status->estimatedWaitTime){ return *status->estimatedWaitTime; } } return -1; } int srmv2_status_of_put_request_async_internal(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output, struct srm_internal_context *internal_context) { struct srm2__ArrayOfTPutRequestFileStatus *repfs; int ret = 0; struct srm2__srmStatusOfPutRequestResponse_ srep; struct srm2__srmStatusOfPutRequestRequest sreq; const char srmfunc[] = "StatusOfPutRequest"; srm_context_soap_init(context); memset (&sreq, 0, sizeof(sreq)); sreq.requestToken = output->token; output->retstatus = NULL; output->filestatuses = NULL; do { ret = call_function.call_srm2__srmStatusOfPutRequest(context->soap, context->srm_endpoint, srmfunc, &sreq, &srep); // If no response break with failure if ((srep.srmStatusOfPutRequestResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,srep.srmStatusOfPutRequestResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context->current_status = srm_call_status_FAILURE; return -1; } set_estimated_wait_time(internal_context, srmv2_put_status_estimated_wait_time(&srep)); // Check status and wait with back off logic if necessary(Internal_error) internal_context->current_status = back_off_logic(context,srmfunc,internal_context,output->retstatus); repfs = srep.srmStatusOfPutRequestResponse->arrayOfFileStatuses; }while (internal_context->current_status == srm_call_status_INTERNAL_ERROR); if (output->retstatus->statusCode == SRM_USCORESPACE_USCORELIFETIME_USCOREEXPIRED) { srm_errmsg(context, "[SRM][%s][%s] %s: Space lifetime expired", srmfunc, statuscode2errmsg(output->retstatus->statusCode), context->srm_endpoint); errno = statuscode2errno(output->retstatus->statusCode); return (-1); } switch (internal_context->current_status) { case srm_call_status_QUEUED: break; case srm_call_status_SUCCESS: case srm_call_status_FAILURE: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; }else { errno = 0; internal_context->current_status = srm_call_status_SUCCESS; ret = copy_pinfilestatuses_put(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_TIMEOUT: errno = ETIMEDOUT; ret = -1; break; default: errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } return ret; } int srmv2_put_estimated_wait_time(struct srm2__srmPrepareToPutResponse_ *prepareToPutRep){ if(prepareToPutRep && prepareToPutRep->srmPrepareToPutResponse && prepareToPutRep->srmPrepareToPutResponse->arrayOfFileStatuses && prepareToPutRep->srmPrepareToPutResponse->arrayOfFileStatuses->__sizestatusArray > 0 && prepareToPutRep->srmPrepareToPutResponse->arrayOfFileStatuses->statusArray){ struct srm2__TPutRequestFileStatus * status = *prepareToPutRep->srmPrepareToPutResponse->arrayOfFileStatuses->statusArray; if(status && status->estimatedWaitTime){ return *status->estimatedWaitTime; } } return -1; } int srmv2_prepare_to_put_async_internal(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output, struct srm_internal_context *internal_context) { int i; int ret = 0; struct srm2__srmPrepareToPutResponse_ rep; struct srm2__ArrayOfTPutRequestFileStatus *repfs; struct srm2__srmPrepareToPutRequest req; static enum srm2__TFileStorageType s_types[] = {VOLATILE, DURABLE, PERMANENT}; char *targetspacetoken; const char srmfunc[] = "PrepareToPut"; struct srm_getbestspacetokens_input spacetokeninput = {0}; SRM_LONG64 totalsize=0; srm_context_soap_init(context); memset(&req, 0, sizeof(req)); memset(&rep, 0, sizeof(rep)); memset(output,0,sizeof(*output)); if ((req.arrayOfFileRequests = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfTPutFileRequest))) == NULL || (req.arrayOfFileRequests->requestArray = soap_malloc (context->soap, input->nbfiles* sizeof(struct srm2__TPutFileRequest *))) == NULL || (req.transferParameters = soap_malloc (context->soap, sizeof(struct srm2__TTransferParameters))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } if (input->desiredpintime > 0) req.desiredPinLifeTime = &input->desiredpintime; if (context->ext && context->ext->turl_resolution_timeout) req.desiredTotalRequestTime = &(context->ext->turl_resolution_timeout); req.desiredFileStorageType = &s_types[PERMANENT]; req.arrayOfFileRequests->__sizerequestArray = input->nbfiles; if (input->filesizes == NULL && input->nbfiles>0) { errno = EINVAL; return (-1); } for (i = 0; i < input->nbfiles; i++) { if ((req.arrayOfFileRequests->requestArray[i] = soap_malloc (context->soap, sizeof(struct srm2__TPutFileRequest))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } memset (req.arrayOfFileRequests->requestArray[i], 0, sizeof(struct srm2__TPutFileRequest)); req.arrayOfFileRequests->requestArray[i]->targetSURL = (char *)input->surls[i]; if ((req.arrayOfFileRequests->requestArray[i]->expectedFileSize = soap_malloc (context->soap, sizeof(ULONG64))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } *(req.arrayOfFileRequests->requestArray[i]->expectedFileSize) = input->filesizes[i]; totalsize += input->filesizes[i]; // compute total size to determine best space token } req.transferParameters->accessPattern = NULL; req.transferParameters->connectionType = NULL; req.transferParameters->arrayOfClientNetworks = NULL; req.transferParameters->arrayOfTransferProtocols = NULL; ret = srm_set_protocol_in_transferParameters(context, req.transferParameters,input->protocols); if (ret) { return (-1); } if (!input->spacetokendesc) { req.targetSpaceToken = NULL; } else { spacetokeninput.neededsize = totalsize; spacetokeninput.spacetokendesc = input->spacetokendesc; targetspacetoken = srm_getbestspacetoken (context,&spacetokeninput); if (targetspacetoken != NULL) { req.targetSpaceToken = targetspacetoken; } else { return (-1); } } // Create sub-directories of SURLs - NOT NEEDED for srmv2.2 /*for (i = 0; i < input->nbfiles; ++i) { const char* dir = srm_strip_string(input->surls[i], '/'); int res = 0; assert (dir); if (dir && strlen(dir) > 0) { mkdirinput.dir_name = dir; res = srmv2_mkdir (context,mkdirinput); } free(dir); if (res < 0) { srm_soap_deinit(&soap); return (-1); } }*/ do { ret = call_function.call_srm2__srmPrepareToPut (context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmPrepareToPutResponse== NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,rep.srmPrepareToPutResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context->current_status = srm_call_status_FAILURE; return -1; } set_estimated_wait_time(internal_context, srmv2_put_estimated_wait_time(&rep)); // Check status and wait with back off logic if necessary(Internal_error) internal_context->current_status = back_off_logic(context,srmfunc,internal_context,output->retstatus); repfs = rep.srmPrepareToPutResponse->arrayOfFileStatuses; }while (internal_context->current_status == srm_call_status_INTERNAL_ERROR); switch (internal_context->current_status) { case srm_call_status_QUEUED: if (copy_string(&output->token,rep.srmPrepareToPutResponse->requestToken)) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; } break; case srm_call_status_SUCCESS: case srm_call_status_FAILURE: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { internal_context->current_status = srm_call_status_FAILURE; if (internal_context->current_status == srm_call_status_FAILURE) { errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; } else { srm_call_err(context, NULL, srmfunc); errno = ECOMM; } }else{ if ( output->token == NULL && copy_string(&output->token,rep.srmPrepareToPutResponse->requestToken)) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; }else{ errno = 0; internal_context->current_status = srm_call_status_SUCCESS; ret = copy_pinfilestatuses_put(output->retstatus, &output->filestatuses, repfs, srmfunc); } } break; case srm_call_status_TIMEOUT: // add timeout management for backoff logic errno = ETIMEDOUT; ret = -1; break; default: errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } return ret; } int srmv2_get_estimated_wait_time(struct srm2__srmPrepareToGetResponse_ *prepareTogetResp){ if(prepareTogetResp && prepareTogetResp->srmPrepareToGetResponse && prepareTogetResp->srmPrepareToGetResponse->arrayOfFileStatuses && prepareTogetResp->srmPrepareToGetResponse->arrayOfFileStatuses->statusArray > 0 && prepareTogetResp->srmPrepareToGetResponse->arrayOfFileStatuses->statusArray){ struct srm2__TGetRequestFileStatus* status= *prepareTogetResp->srmPrepareToGetResponse->arrayOfFileStatuses->statusArray; if(status && status->estimatedWaitTime ){ return *status->estimatedWaitTime ; } } return -1; } int srmv2_prepare_to_get_async_internal(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output, struct srm_internal_context *internal_context) { char *targetspacetoken; int i; int ret = 0; struct srm2__srmPrepareToGetResponse_ rep; struct srm2__ArrayOfTGetRequestFileStatus *repfs; struct srm2__srmPrepareToGetRequest req; struct srm_getbestspacetokens_input spacetokeninput = {0}; static enum srm2__TFileStorageType s_types[] = {VOLATILE, DURABLE, PERMANENT}; const char srmfunc[] = "PrepareToGet"; srm_context_soap_init(context); /* issue "get" request */ memset (&req, 0, sizeof(req)); memset(output,0,sizeof(*output)); if ((req.arrayOfFileRequests = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfTGetFileRequest))) == NULL || (req.arrayOfFileRequests->requestArray = soap_malloc (context->soap, input->nbfiles * sizeof(struct srm2__TGetFileRequest *))) == NULL || (req.transferParameters = soap_malloc (context->soap, sizeof(struct srm2__TTransferParameters))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } /* get first space token from user space token description */ if (!input->spacetokendesc) { req.targetSpaceToken = NULL; } else { spacetokeninput.spacetokendesc = input->spacetokendesc; targetspacetoken = srm_getbestspacetoken (context,&spacetokeninput); if (targetspacetoken != NULL) { req.targetSpaceToken = targetspacetoken; } else { return (-1); } } if (input->desiredpintime > 0) req.desiredPinLifeTime = &input->desiredpintime; if (context->ext && context->ext->turl_resolution_timeout) req.desiredTotalRequestTime = &(context->ext->turl_resolution_timeout); req.desiredFileStorageType = &s_types[PERMANENT]; req.arrayOfFileRequests->__sizerequestArray = input->nbfiles; for (i = 0; i < input->nbfiles; i++) { if ((req.arrayOfFileRequests->requestArray[i] = soap_malloc (context->soap, sizeof(struct srm2__TGetFileRequest))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } memset (req.arrayOfFileRequests->requestArray[i], 0, sizeof(struct srm2__TGetFileRequest)); req.arrayOfFileRequests->requestArray[i]->sourceSURL = (char *)input->surls[i]; req.arrayOfFileRequests->requestArray[i]->dirOption = NULL; } req.transferParameters->accessPattern = NULL; req.transferParameters->connectionType = NULL; req.transferParameters->arrayOfClientNetworks = NULL; ret = srm_set_protocol_in_transferParameters(context, req.transferParameters,input->protocols); if (ret) { return (-1); } do { ret = call_function.call_srm2__srmPrepareToGet (context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmPrepareToGetResponse== NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,rep.srmPrepareToGetResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context->current_status = srm_call_status_FAILURE; return -1; } set_estimated_wait_time(internal_context, srmv2_get_estimated_wait_time(&rep)); // Check status and wait with back off logic if necessary(Internal_error) internal_context->current_status = back_off_logic(context,srmfunc,internal_context,output->retstatus); repfs = rep.srmPrepareToGetResponse->arrayOfFileStatuses; }while (internal_context->current_status == srm_call_status_INTERNAL_ERROR); switch (internal_context->current_status) { case srm_call_status_QUEUED: if (copy_string(&output->token,rep.srmPrepareToGetResponse->requestToken)) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { break; }else { errno = 0; ret = copy_pinfilestatuses_get(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_SUCCESS: case srm_call_status_FAILURE: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; }else { errno = 0; internal_context->current_status = srm_call_status_SUCCESS; if(rep.srmPrepareToGetResponse->requestToken != NULL){ ret = copy_string(&output->token,rep.srmPrepareToGetResponse->requestToken); } if (ret >= 0) ret = copy_pinfilestatuses_get(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_TIMEOUT: // add timeout management for backoff logic errno = ETIMEDOUT; ret = -1; break; default: errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } return ret; } int srmv2_get_status_estimated_wait_time(struct srm2__srmStatusOfGetRequestResponse_ *prepareTogetRespstatus){ if(prepareTogetRespstatus && prepareTogetRespstatus->srmStatusOfGetRequestResponse && prepareTogetRespstatus->srmStatusOfGetRequestResponse->arrayOfFileStatuses && prepareTogetRespstatus->srmStatusOfGetRequestResponse->arrayOfFileStatuses->__sizestatusArray > 0 && prepareTogetRespstatus->srmStatusOfGetRequestResponse->arrayOfFileStatuses->statusArray){ struct srm2__TGetRequestFileStatus* status = *prepareTogetRespstatus->srmStatusOfGetRequestResponse->arrayOfFileStatuses->statusArray; if(status && status->estimatedWaitTime) return *status->estimatedWaitTime; } return -1; } int srmv2_status_of_get_request_async_internal(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output, struct srm_internal_context *internal_context) { struct srm2__ArrayOfTGetRequestFileStatus *repfs; int ret = 0; struct srm2__srmStatusOfGetRequestResponse_ srep; struct srm2__srmStatusOfGetRequestRequest sreq; const char srmfunc[] = "StatusOfGetRequest"; srm_context_soap_init(context); memset (&sreq, 0, sizeof(sreq)); sreq.requestToken = output->token; output->retstatus = NULL; output->filestatuses = NULL; do { ret = call_function.call_srm2__srmStatusOfGetRequest(context->soap, context->srm_endpoint, srmfunc, &sreq, &srep); // If no response break with failure if ((srep.srmStatusOfGetRequestResponse == NULL)||(ret!=0) || copy_returnstatus(&output->retstatus,srep.srmStatusOfGetRequestResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context->current_status = srm_call_status_FAILURE; return -1; } set_estimated_wait_time(internal_context, srmv2_get_status_estimated_wait_time(&srep)); // Check status and wait with back off logic if necessary(Internal_error) internal_context->current_status = back_off_logic(context,srmfunc,internal_context,output->retstatus); repfs = srep.srmStatusOfGetRequestResponse->arrayOfFileStatuses; }while (internal_context->current_status == srm_call_status_INTERNAL_ERROR); switch (internal_context->current_status) { case srm_call_status_QUEUED: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { break; }else { errno = 0; ret = copy_pinfilestatuses_get(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_SUCCESS: case srm_call_status_FAILURE: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; }else { errno = 0; internal_context->current_status = srm_call_status_SUCCESS; ret = copy_pinfilestatuses_get(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_TIMEOUT: // add timeout management for backoff logic errno = ETIMEDOUT; ret = -1; break; default: errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } return ret; } int srmv2_put_done(struct srm_context *context, struct srm_putdone_input *input, struct srmv2_filestatus **statuses) { struct srm_internal_context internal_context; int ret=0; struct srm2__srmPutDoneResponse_ rep; struct srm2__TReturnStatus *reqstatp; struct srm2__ArrayOfTSURLReturnStatus *repfs; struct srm2__srmPutDoneRequest req; const char srmfunc[] = "PutDone"; srm_context_soap_init(context); // Setup the timeout back_off_logic_init(context,&internal_context); memset (&req, 0, sizeof(req)); req.requestToken = (char *) input->reqtoken; // NOTE: only one SURL in the array if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = (char **) input->surls; do { ret = call_function.call_srm2__srmPutDone(context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmPutDoneResponse == NULL)||(ret!=0)) { errno = srm_soap_call_err(context, srmfunc); internal_context.current_status = srm_call_status_FAILURE; return -1; } // Check status and wait with back off logic if necessary(Internal_error) reqstatp = rep.srmPutDoneResponse->returnStatus; internal_context.current_status = back_off_logic(context,srmfunc,&internal_context,reqstatp); repfs = rep.srmPutDoneResponse->arrayOfFileStatuses; }while (internal_context.current_status == srm_call_status_INTERNAL_ERROR); switch(internal_context.current_status){ case srm_call_status_TIMEOUT: // add timeout management for backoff logic errno = ETIMEDOUT; ret = -1; break; default: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { errno = srm_call_err(context,reqstatp,srmfunc); return (-1); }else { errno = 0; internal_context.current_status = srm_call_status_SUCCESS; ret = copy_filestatuses(reqstatp,statuses,repfs,srmfunc); } break; } return (ret); } int srmv2_release_files(struct srm_context *context, struct srm_releasefiles_input *input, struct srmv2_filestatus **statuses) { struct srm_internal_context internal_context; int ret; struct srm2__srmReleaseFilesResponse_ rep; struct srm2__ArrayOfTSURLReturnStatus *repfs; struct srm2__srmReleaseFilesRequest req; struct srm2__TReturnStatus *reqstatp; const char srmfunc[] = "ReleaseFiles"; srm_context_soap_init(context); // Setup the timeout back_off_logic_init(context,&internal_context); memset (&req, 0, sizeof(req)); req.requestToken = (char *) input->reqtoken; // NOTE: only one SURL in the array if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = (char **) input->surls; do { ret = call_function.call_srm2__srmReleaseFiles(context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmReleaseFilesResponse == NULL)||(ret!=0)) { errno = srm_soap_call_err(context, srmfunc); internal_context.current_status = srm_call_status_FAILURE; return -1; } // Copy response status //internal_context.retstatus = rep.srmReleaseFilesResponse->returnStatus; // Check status and wait with back off logic if necessary(Internal_error) reqstatp = rep.srmReleaseFilesResponse->returnStatus; internal_context.current_status = back_off_logic(context,srmfunc,&internal_context,reqstatp); repfs = rep.srmReleaseFilesResponse->arrayOfFileStatuses; // Ugly hack for Castor if (internal_context.current_status == srm_call_status_INTERNAL_ERROR && strstr(reqstatp->explanation, "Request token") != NULL && strstr(reqstatp->explanation, "not found") != NULL) { internal_context.current_status = srm_call_status_FAILURE; reqstatp->statusCode = SRM_USCOREINVALID_USCOREREQUEST; } }while (internal_context.current_status == srm_call_status_INTERNAL_ERROR); switch(internal_context.current_status){ case srm_call_status_TIMEOUT: // add timeout management for backoff logic errno = ETIMEDOUT; ret = -1; break; default: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { errno = srm_call_err(context,reqstatp,srmfunc); return (-1); }else { errno = 0; internal_context.current_status = srm_call_status_SUCCESS; ret = copy_filestatuses(reqstatp,statuses,repfs,srmfunc); } break; } return (ret); } int srmv2_bringonline_estimated_wait_time(struct srm2__srmBringOnlineResponse_ *bringOnlineRep){ if( bringOnlineRep && bringOnlineRep->srmBringOnlineResponse && bringOnlineRep->srmBringOnlineResponse->arrayOfFileStatuses && bringOnlineRep->srmBringOnlineResponse->arrayOfFileStatuses->__sizestatusArray > 0 && bringOnlineRep->srmBringOnlineResponse->arrayOfFileStatuses->statusArray){ struct srm2__TBringOnlineRequestFileStatus* status = *bringOnlineRep->srmBringOnlineResponse->arrayOfFileStatuses->statusArray; if(status && status->estimatedWaitTime){ return *status->estimatedWaitTime; } } return -1; } int srmv2_bring_online_async_internal (struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output, struct srm_internal_context *internal_context) { int ret,i; struct srm_getbestspacetokens_input spacetokeninput = {0}; struct srm2__srmBringOnlineResponse_ rep; struct srm2__ArrayOfTBringOnlineRequestFileStatus *repfs; struct srm2__srmBringOnlineRequest req; static enum srm2__TFileStorageType s_types[] = {VOLATILE, DURABLE, PERMANENT}; char *targetspacetoken; const char srmfunc[] = "BringOnline"; srm_context_soap_init(context); // issue "bringonline" request memset(output,0,sizeof(*output)); memset (&req, 0, sizeof(req)); if ((req.arrayOfFileRequests = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfTGetFileRequest))) == NULL || (req.arrayOfFileRequests->requestArray = soap_malloc (context->soap, input->nbfiles * sizeof(struct srm2__TGetFileRequest *))) == NULL || (req.transferParameters = soap_malloc (context->soap, sizeof(struct srm2__TTransferParameters))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } // get first space token from user space token description if (!input->spacetokendesc) { req.targetSpaceToken = NULL; } else { spacetokeninput.spacetokendesc = input->spacetokendesc; targetspacetoken = srm_getbestspacetoken (context,&spacetokeninput); if (targetspacetoken != NULL) { req.targetSpaceToken = targetspacetoken; } else { return (-1); } } req.authorizationID = NULL; req.userRequestDescription = NULL; req.storageSystemInfo = NULL; req.desiredFileStorageType = &s_types[PERMANENT]; req.targetFileRetentionPolicyInfo = NULL; req.deferredStartTime = NULL; if (input->desiredpintime > 0) req.desiredLifeTime = &input->desiredpintime; if (context->ext && context->ext->turl_resolution_timeout) req.desiredTotalRequestTime = &(context->ext->turl_resolution_timeout); req.arrayOfFileRequests->__sizerequestArray = input->nbfiles; for (i = 0; i < input->nbfiles; i++) { if ((req.arrayOfFileRequests->requestArray[i] = soap_malloc (context->soap, sizeof(struct srm2__TGetFileRequest))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } memset (req.arrayOfFileRequests->requestArray[i], 0, sizeof(struct srm2__TGetFileRequest)); req.arrayOfFileRequests->requestArray[i]->sourceSURL = (char *) input->surls[i]; req.arrayOfFileRequests->requestArray[i]->dirOption = NULL; } req.transferParameters->accessPattern = NULL; req.transferParameters->connectionType = NULL; req.transferParameters->arrayOfClientNetworks = NULL; ret = srm_set_protocol_in_transferParameters(context, req.transferParameters,input->protocols); if (ret) { return (-1); } do { ret = call_function.call_srm2__srmBringOnline (context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmBringOnlineResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,rep.srmBringOnlineResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context->current_status = srm_call_status_FAILURE; return -1; } set_estimated_wait_time(internal_context, srmv2_bringonline_estimated_wait_time(&rep)); // Check status and wait with back off logic if necessary(Internal_error) internal_context->current_status = back_off_logic(context,srmfunc,internal_context,output->retstatus ); repfs = rep.srmBringOnlineResponse->arrayOfFileStatuses; }while (internal_context->current_status == srm_call_status_INTERNAL_ERROR); switch (internal_context->current_status) { case srm_call_status_QUEUED: if (copy_string(&output->token,rep.srmBringOnlineResponse->requestToken)) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { break; }else { errno = 0; ret = copy_pinfilestatuses_bringonline(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_SUCCESS: case srm_call_status_FAILURE: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; }else { // Copy bringonline request token, if provided copy_string(&output->token, rep.srmBringOnlineResponse->requestToken); errno = 0; internal_context->current_status = srm_call_status_SUCCESS; ret = copy_pinfilestatuses_bringonline(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_TIMEOUT: // add timeout management for backoff logic errno = ETIMEDOUT; ret = -1; break; default: errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } return ret; } int srmv2_bringonline_status_estimated_wait_time(struct srm2__srmStatusOfBringOnlineRequestResponse_ *bringOnlineStatusRep) { if( bringOnlineStatusRep && bringOnlineStatusRep->srmStatusOfBringOnlineRequestResponse && bringOnlineStatusRep->srmStatusOfBringOnlineRequestResponse->arrayOfFileStatuses && bringOnlineStatusRep->srmStatusOfBringOnlineRequestResponse->arrayOfFileStatuses->__sizestatusArray > 0 && bringOnlineStatusRep->srmStatusOfBringOnlineRequestResponse->arrayOfFileStatuses->statusArray){ struct srm2__TBringOnlineRequestFileStatus* status = *bringOnlineStatusRep->srmStatusOfBringOnlineRequestResponse->arrayOfFileStatuses->statusArray; if(status && status->estimatedWaitTime){ return *status->estimatedWaitTime; } } return -1; } int srmv2_status_of_bring_online_async_internal (struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output, struct srm_internal_context *internal_context) { int ret; struct srm2__ArrayOfTBringOnlineRequestFileStatus *repfs; struct srm2__srmStatusOfBringOnlineRequestResponse_ srep; struct srm2__srmStatusOfBringOnlineRequestRequest sreq; const char srmfunc[] = "StatusOfBringOnlineRequest"; srm_context_soap_init(context); memset (&sreq, 0, sizeof(sreq)); sreq.requestToken = (char *) output->token; if (input->surls) { sreq.arrayOfSourceSURLs = soap_malloc(context->soap, sizeof(struct srm2__ArrayOfAnyURI)); sreq.arrayOfSourceSURLs->__sizeurlArray = input->nbfiles; sreq.arrayOfSourceSURLs->urlArray = input->surls; } output->retstatus = NULL; output->filestatuses = NULL; do { ret = call_function.call_srm2__srmStatusOfBringOnlineRequest(context->soap, context->srm_endpoint, srmfunc, &sreq, &srep); // If no response break with failure if ((srep.srmStatusOfBringOnlineRequestResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,srep.srmStatusOfBringOnlineRequestResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context->current_status = srm_call_status_FAILURE; return -1; } set_estimated_wait_time(internal_context, srmv2_bringonline_status_estimated_wait_time(&srep)); // Check status and wait with back off logic if necessary(Internal_error) internal_context->current_status = back_off_logic(context,srmfunc,internal_context,output->retstatus); repfs = srep.srmStatusOfBringOnlineRequestResponse->arrayOfFileStatuses; }while (internal_context->current_status == srm_call_status_INTERNAL_ERROR); switch (internal_context->current_status) { case srm_call_status_SUCCESS: case srm_call_status_FAILURE: // Check if file structure ok if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; }else { errno = 0; internal_context->current_status = srm_call_status_SUCCESS; ret = copy_pinfilestatuses_bringonline(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_QUEUED: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { break; }else { errno = 0; ret = copy_pinfilestatuses_bringonline(output->retstatus, &output->filestatuses, repfs, srmfunc); } break; case srm_call_status_TIMEOUT: // add timeout management for backoff logic errno = ETIMEDOUT; ret = -1; break; default: errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } return (ret); } int srmv2_abort_files(struct srm_context *context, struct srm_abort_files_input *input,struct srmv2_filestatus **statuses) { int ret; struct srm_internal_context internal_context; struct srm2__srmAbortFilesResponse_ rep; struct srm2__ArrayOfTSURLReturnStatus *repfs; struct srm2__srmAbortFilesRequest req; struct srm2__TReturnStatus *reqstatp; const char srmfunc[] = "AbortFiles"; srm_context_soap_init(context); // Setup the timeout back_off_logic_init(context,&internal_context); memset (&req, 0, sizeof(req)); req.requestToken = (char *) input->reqtoken; // NOTE: only one SURL in the array if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = (char **) input->surls; do { ret = call_function.call_srm2__srmAbortFiles (context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmAbortFilesResponse == NULL)||(ret!=0)) { errno = srm_soap_call_err(context, srmfunc); internal_context.current_status = srm_call_status_FAILURE; return -1; } // Check status and wait with back off logic if necessary(Internal_error) reqstatp = rep.srmAbortFilesResponse->returnStatus; internal_context.current_status = back_off_logic(context,srmfunc,&internal_context,reqstatp); repfs = rep.srmAbortFilesResponse->arrayOfFileStatuses; }while (internal_context.current_status == srm_call_status_INTERNAL_ERROR); switch (internal_context.current_status) { case srm_call_status_SUCCESS: case srm_call_status_FAILURE: if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { errno = srm_call_err(context,reqstatp,srmfunc); return (-1); }else { errno = 0; internal_context.current_status = srm_call_status_SUCCESS; ret = copy_filestatuses(reqstatp,statuses,repfs,srmfunc); } break; case srm_call_status_TIMEOUT: // add timeout management for backoff logic errno = ETIMEDOUT; ret = -1; break; default: ret = -1; break; } return (ret); } int srmv2_abort_request(struct srm_context *context,char *token) { const char srmfunc[] = "AbortRequest"; struct srm2__srmAbortRequestRequest abortreq; struct srm2__srmAbortRequestResponse_ abortrep; int result; srm_context_soap_init(context); memset (&abortreq, 0, sizeof(abortreq)); if (token == NULL) { // No token supplied errno = EINVAL; return (-1); }else { abortreq.requestToken = token; result = call_function.call_srm2__srmAbortRequest (context->soap, context->srm_endpoint, srmfunc, &abortreq, &abortrep); if (result != 0) { // Soap call failure errno = srm_soap_call_err(context, srmfunc); }else { if (abortrep.srmAbortRequestResponse == NULL || abortrep.srmAbortRequestResponse->returnStatus == NULL || abortrep.srmAbortRequestResponse->returnStatus->statusCode != SRM_USCORESUCCESS) { errno = EINVAL; return (-1); } } } return result; } srm-ifce-v1.24.7/src/srmv2_data_transfer_functions.h000066400000000000000000000050211465215307000224770ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef _SRMV2_DATA_TRANSFER_FUNCTIONS_ #define _SRMV2_DATA_TRANSFER_FUNCTIONS_ #include "srm_ifce_internal.h" int srmv2_status_of_put_request_async_internal(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output, struct srm_internal_context *internal_context); int srmv2_prepare_to_put_async_internal(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output, struct srm_internal_context *internal_context); int srmv2_prepare_to_get_async_internal(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output, struct srm_internal_context *internal_context); int srmv2_status_of_get_request_async_internal(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output, struct srm_internal_context *internal_context); int srmv2_status_of_bring_online_async_internal (struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output, struct srm_internal_context *internal_context); int srmv2_bring_online_async_internal (struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output, struct srm_internal_context *internal_context); int srmv2_release_files(struct srm_context *context, struct srm_releasefiles_input *input, struct srmv2_filestatus **statuses); int srmv2_put_done(struct srm_context *context, struct srm_putdone_input *input, struct srmv2_filestatus **statuses); int srmv2_abort_files(struct srm_context *context, struct srm_abort_files_input *input,struct srmv2_filestatus **statuses); int srmv2_abort_request(struct srm_context *context,char *token); #endif srm-ifce-v1.24.7/src/srmv2_directory_functions.c000066400000000000000000000464251465215307000216760ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include "srm_ifce_internal.h" #include "srm_soap.h" // Utility functions int srmv2_check_srm_root(const char* surl); int srmv2_rm(struct srm_context *context,struct srm_rm_input *input,struct srm_rm_output *output); int srmv2_rmdir(struct srm_context *context,struct srm_rmdir_input *input,struct srm_rmdir_output *output); int srmv2_mkdir(struct srm_context *context,struct srm_mkdir_input *input); // Asynchronous srm ls call void srm_ls_output_destroy(struct srm_ls_output *output) { if (output == NULL) { return; } srm_srm2__TReturnStatus_delete(output->retstatus); output->retstatus = NULL; free(output->token); output->token = NULL; srm_srmv2_mdfilestatus_delete(output->statuses, output->statuses_num); output->statuses = NULL; } int srmv2_ls_async_internal(struct srm_context *context, struct srm_ls_input *input,struct srm_ls_output *output,struct srm_internal_context *internal_context) { int ret; enum xsd__boolean trueoption = true_; const char srmfunc[] = "Ls"; struct srm2__srmLsRequest req; struct srm2__srmLsResponse_ rep; struct srm2__ArrayOfTMetaDataPathDetail *repfs = NULL; srm_context_soap_init(context); /* Basic sanity checks */ if (input->offset && *input->offset < 0) { errno = EINVAL; srm_errmsg (context, "[SRM][srmv2_ls_async_internal][] Negative offset value is illegal."); return -1; } if (input->count < 0) { errno = EINVAL; srm_errmsg (context, "[SRM][srmv2_ls_async_internal][] Negative count value is illegal."); return -1; } memset(output,0,sizeof(*output)); memset (&req, 0, sizeof(req)); if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.fullDetailedList = &trueoption; req.numOfLevels = &(input->numlevels); if (input->offset && *input->offset > 0) { req.offset = input->offset; } if (input->count > 0) { req.count = &(input->count); } req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = (char **)input->surls; do { // Gsoap call soap_call_srm2__srmLs ret = call_function.call_srm2__srmLs(context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmLsResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,rep.srmLsResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context->current_status = srm_call_status_FAILURE; return -1; } // Check status and wait with back off logic if necessary(Internal_error) internal_context->current_status = back_off_logic(context,srmfunc,internal_context,output->retstatus); }while (internal_context->current_status == srm_call_status_INTERNAL_ERROR); switch (internal_context->current_status) { case srm_call_status_QUEUED: if (copy_string(&output->token,rep.srmLsResponse->requestToken)) { internal_context->current_status = srm_call_status_FAILURE; return -1; } break; case srm_call_status_SUCCESS: case srm_call_status_FAILURE: // Copy file structure to another pointer for easier manipulation repfs = rep.srmLsResponse->details; // Check if file structure ok if (!repfs || repfs->__sizepathDetailArray <= 0 || !repfs->pathDetailArray) { // file list empty error internal_context->current_status = srm_call_status_FAILURE; errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; }else { internal_context->current_status = srm_call_status_SUCCESS; // Everything is fine copy file structure and check if copy went ok ret = copy_mdfilestatuses(output->retstatus, &output->statuses,repfs); if (ret == -1) { errno = srm_call_err(context,output->retstatus,srmfunc); internal_context->current_status = srm_call_status_FAILURE; }else { output->statuses_num = repfs->__sizepathDetailArray; if (ret == 1 && input->offset && output->retstatus->statusCode == SRM_USCORETOO_USCOREMANY_USCORERESULTS && repfs->pathDetailArray[0] != NULL && repfs->pathDetailArray[0]->arrayOfSubPaths != NULL) { // offset is only supported for a single directory listing *input->offset += repfs->pathDetailArray[0]->arrayOfSubPaths->__sizepathDetailArray; }else if (input->offset) { *input->offset = 0; } } } break; case srm_call_status_TIMEOUT: errno = ETIMEDOUT; ret = -1; break; default: errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } return ret; } int srmv2_status_of_ls_request_async_internal(struct srm_context *context, struct srm_ls_input *input, struct srm_ls_output *output, struct srm_internal_context *internal_context) { const char srmfunc[] = "StatusOfLsRequest"; struct srm2__srmStatusOfLsRequestResponse_ srep; struct srm2__srmStatusOfLsRequestRequest sreq; struct srm2__ArrayOfTMetaDataPathDetail *repfs = NULL; int ret; srm_context_soap_init(context); // wait for files ready memset (&sreq, 0, sizeof(sreq)); sreq.requestToken = output->token; output->retstatus = NULL; output->statuses = NULL; internal_context->current_status = srm_call_status_FAILURE; do { ret = call_function.call_srm2__srmStatusOfLsRequest (context->soap, context->srm_endpoint, srmfunc, &sreq, &srep); // If no response break with failure if ((srep.srmStatusOfLsRequestResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,srep.srmStatusOfLsRequestResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context->current_status = srm_call_status_FAILURE; return -1; } // Check status and wait with back off logic if necessary(Internal_error) internal_context->current_status = back_off_logic(context,srmfunc,internal_context,output->retstatus ); repfs = srep.srmStatusOfLsRequestResponse->details; }while (internal_context->current_status == srm_call_status_INTERNAL_ERROR); // If success switch (internal_context->current_status) { case srm_call_status_SUCCESS: case srm_call_status_FAILURE: // Check if file structure ok if (!repfs || repfs->__sizepathDetailArray <= 0 || !repfs->pathDetailArray) { // file list empty error errno = srm_call_err(context,output->retstatus,srmfunc); internal_context->current_status = srm_call_status_FAILURE; ret = -1; }else { internal_context->current_status = srm_call_status_SUCCESS; // Everything is fine copy file structure and check if copy went ok ret = copy_mdfilestatuses(output->retstatus, &output->statuses,repfs ); if (ret == -1) { errno = srm_call_err(context,output->retstatus,srmfunc); internal_context->current_status = srm_call_status_FAILURE; }else { output->statuses_num = repfs->__sizepathDetailArray; if (ret == 1 && input->offset && output->retstatus->statusCode == SRM_USCORETOO_USCOREMANY_USCORERESULTS && repfs->pathDetailArray[0] != NULL && repfs->pathDetailArray[0]->arrayOfSubPaths != NULL) { // offset is only supported for a single directory listing *input->offset += repfs->pathDetailArray[0]->arrayOfSubPaths->__sizepathDetailArray; }else if (input->offset) { *input->offset = 0; } } } break; case srm_call_status_QUEUED: break; case srm_call_status_TIMEOUT: errno = ETIMEDOUT; ret = -1; break; default: errno = srm_call_err(context,output->retstatus,srmfunc); ret = -1; break; } return (ret); } int srmv2_rm(struct srm_context *context,struct srm_rm_input *input,struct srm_rm_output *output) { struct srm2__srmRmResponse_ rep; struct srm2__ArrayOfTSURLReturnStatus *repfs; struct srm2__srmRmRequest req; //struct srm2__TReturnStatus *reqstatp; const char srmfunc[] = "srmRm"; struct srm_internal_context internal_context; int i,n,ret; srm_context_soap_init(context); back_off_logic_init(context,&internal_context); memset (&req, 0, sizeof(req)); memset(output,0,sizeof(*output)); // NOTE: only one file in the array if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = (char **) input->surls; // issue "srmRm" request do { // Gsoap call ret = call_function.call_srm2__srmRm (context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmRmResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,rep.srmRmResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context.current_status = srm_call_status_FAILURE; return -1; } // Check status and wait with back off logic if necessary(Internal_error) internal_context.current_status = back_off_logic(context,srmfunc,&internal_context,output->retstatus); }while (internal_context.current_status == srm_call_status_INTERNAL_ERROR); if(internal_context.current_status == srm_call_status_TIMEOUT){ errno = ETIMEDOUT; return (-1); } repfs = rep.srmRmResponse->arrayOfFileStatuses; if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { errno = srm_call_err(context,output->retstatus,srmfunc); return (-1); } n = repfs->__sizestatusArray; if ((output->statuses = (struct srmv2_filestatus*) calloc (n, sizeof (struct srmv2_filestatus))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < n; ++i) { if (!repfs->statusArray[i]) continue; if (repfs->statusArray[i]->surl) (output->statuses)[i].surl = strdup (repfs->statusArray[i]->surl); if (repfs->statusArray[i]->status) { (output->statuses)[i].status = statuscode_and_msg_to_errno( repfs->statusArray[i]->status->statusCode, repfs->statusArray[i]->status->explanation); srm_print_explanation(&((output->statuses)[i].explanation), repfs->statusArray[i]->status,srmfunc); } } errno = 0; return (n); } //srmv2_rmdir (const char *surl, const char *srm_endpoint, int recursive, //struct srmv2_filestatus **statuses, char *errbuf, int errbufsz, int timeout) int srmv2_rmdir(struct srm_context *context,struct srm_rmdir_input *input,struct srm_rmdir_output *output) { int ret; struct srm2__srmRmdirResponse_ rep; struct srm2__srmRmdirRequest req; enum xsd__boolean trueoption = true_; struct srm_internal_context internal_context; const char srmfunc[] = "srmRmdir"; srm_context_soap_init(context); back_off_logic_init(context,&internal_context); memset (&req, 0, sizeof(req)); memset(output,0,sizeof(*output)); req.SURL = (char *) input->surl; if (input->recursive) { req.recursive = &trueoption; } // issue "srmRmdir" request do { // Gsoap call ret = call_function.call_srm2__srmRmdir(context->soap, context->srm_endpoint, srmfunc, &req, &rep); // If no response break with failure if ((rep.srmRmdirResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,rep.srmRmdirResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); internal_context.current_status = srm_call_status_FAILURE; return -1; } // Check status and wait with back off logic if necessary(Internal_error) internal_context.current_status = back_off_logic(context,srmfunc,&internal_context,output->retstatus); }while (internal_context.current_status == srm_call_status_INTERNAL_ERROR); if(internal_context.current_status == srm_call_status_TIMEOUT){ errno = ETIMEDOUT; return (-1); } if ((output->statuses = (struct srmv2_filestatus*) calloc (1, sizeof (struct srmv2_filestatus))) == NULL) { errno = ENOMEM; return (-1); } output->statuses[0].surl = strdup (input->surl); output->statuses[0].status = statuscode2errno (output->retstatus->statusCode); if (output->statuses[0].status) { srm_print_explanation(&((output->statuses)[0].explanation),output->retstatus,srmfunc); } errno = 0; return (1); //deleted one folder } /* tries to create all directories in 'dest_file' */ int srmv2_mkdir(struct srm_context *context,struct srm_mkdir_input *input) { char* file = NULL; int ret = -1; int sav_errno = 0; char *p, *endp; struct srm2__srmMkdirResponse_ rep; struct srm2__srmMkdirRequest req; struct srm2__TReturnStatus *repstatp; const char srmfunc[] = "Mkdir"; srm_context_soap_init(context); memset (&req, 0, sizeof (struct srm2__srmMkdirRequest)); memset (&rep, 0, sizeof (struct srm2__srmMkdirResponse_)); file = srm_util_normalize_surl(input->dir_name); p = endp = strrchr (file, '/'); // 1st cycle, trying to create directories ascendingly, until success do { /* Do not try to create the root directory... */ if (srmv2_check_srm_root(file)) { break; } *p = 0; req.SURL = file; if (call_function.call_srm2__srmMkdir (context->soap, context->srm_endpoint, srmfunc, &req, &rep)) { errno = srm_soap_call_err(context, srmfunc); goto CLEANUP_AND_RETURN; } if (rep.srmMkdirResponse == NULL) { srm_errmsg (context, "[SRM][srmv2_makedirp][EINVAL] %s: Invalid response from the server", input->dir_name); errno = EINVAL; goto CLEANUP_AND_RETURN; } repstatp = rep.srmMkdirResponse->returnStatus; sav_errno = statuscode2errno (repstatp->statusCode); if (sav_errno != 0 && sav_errno != EEXIST && sav_errno != ENOENT) { srm_print_error_status_additional(context,repstatp,srmfunc,input->dir_name); errno = sav_errno; goto CLEANUP_AND_RETURN; } } while (sav_errno == ENOENT && (p = strrchr (file, '/')) != NULL); if (p == NULL) { // should never happen, failure must appear in soap call srm_errmsg (context, "[SRM][srmv2_makedirp][EINVAL] %s: Invalid SURL", input->dir_name); errno = EINVAL; goto CLEANUP_AND_RETURN; } // 2nd cycle, creating directories descendingly as of the one created by previous cycle *p = '/'; sav_errno = 0; while (sav_errno == 0 && p < endp && (p = strchr (p + 1, 0)) != NULL) { req.SURL = file; if (call_function.call_srm2__srmMkdir(context->soap, context->srm_endpoint, srmfunc, &req, &rep)) { errno = srm_soap_call_err(context, srmfunc); errno = ECOMM; goto CLEANUP_AND_RETURN; } repstatp = NULL; if (rep.srmMkdirResponse == NULL || (repstatp = rep.srmMkdirResponse->returnStatus) == NULL || statuscode2errno (repstatp->statusCode) != 0) { errno = srm_call_err(context,repstatp,srmfunc); goto CLEANUP_AND_RETURN; } *p = '/'; } errno = 0; ret = 0; CLEANUP_AND_RETURN: free(file); return ret; } int srmv2_mv(struct srm_context *context, struct srm_mv_input *input) { struct srm2__srmMvRequest request; struct srm2__srmMvResponse_ response; const char srmfunc[] = "Mv"; int ret; request.authorizationID = NULL; request.fromSURL = input->from; request.toSURL = input->to; request.storageSystemInfo = NULL; memset(&response, 0, sizeof(response)); srm_context_soap_init(context); ret = call_function.call_srm2__srmMv(context->soap, context->srm_endpoint, srmfunc, &request, &response); if (ret) { errno = srm_soap_call_err(context, srmfunc); return -1; } if (response.srmMvResponse->returnStatus == NULL || statuscode2errno(response.srmMvResponse->returnStatus->statusCode) != 0) { errno = srm_call_err(context, response.srmMvResponse->returnStatus, srmfunc); } return (errno)?-1:0; } int srmv2_extend_file_lifetime(struct srm_context *context, struct srm_extendfilelifetime_input *input, struct srm_extendfilelifetime_output *output) { int ret; struct srm2__ArrayOfTSURLLifetimeReturnStatus *repfs; struct srm2__srmExtendFileLifeTimeResponse_ rep; struct srm2__srmExtendFileLifeTimeRequest req; const char srmfunc[] = "ExtendFileLifeTime"; srm_context_soap_init(context); /* issue "extendfilelifetime" request */ memset (&req, 0, sizeof(req)); memset(output,0,sizeof(*output)); if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.authorizationID = NULL; req.requestToken = input->reqtoken; req.newFileLifeTime = NULL; req.newPinLifeTime = &input->pintime; req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = input->surls; if ((ret = call_function.call_srm2__srmExtendFileLifeTime (context->soap, context->srm_endpoint, srmfunc, &req, &rep))) { errno = srm_soap_call_err(context, srmfunc); return (-1); } if ((rep.srmExtendFileLifeTimeResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,rep.srmExtendFileLifeTimeResponse->returnStatus)) { errno = srm_call_err(context,output->retstatus,srmfunc); return (-1); } /* return file statuses */ repfs = rep.srmExtendFileLifeTimeResponse->arrayOfFileStatuses; if (!repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { errno = srm_call_err(context,output->retstatus,srmfunc); return (-1); } errno = 0; ret = copy_pinfilestatuses_extendlifetime(output->retstatus, &output->filestatuses, repfs, srmfunc); return (ret); } int srmv2_check_srm_root(const char* surl) { int ret = 0; static regex_t re; static int is_compiled = 0; static const char* regexp = "^srm://[^/]*/$"; #define SRMV1_CHECK_SRM_ROOT_NMATCH 1 regmatch_t match[SRMV1_CHECK_SRM_ROOT_NMATCH]; if (surl == NULL) { return 0; } if (!is_compiled) { int comp_res = regcomp(&re, regexp, REG_ICASE); assert(comp_res == 0); is_compiled = 1; } if (0 == regexec(&re, surl, SRMV1_CHECK_SRM_ROOT_NMATCH, match, 0)) { ret = 1; } return ret; #undef SRMV1_CHECK_SRM_ROOT_NMATCH } srm-ifce-v1.24.7/src/srmv2_directory_functions.h000066400000000000000000000045651465215307000217020ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef _SRMV2_DIRECTORY_FUNCTIONS_H_ #define _SRMV2_DIRECTORY_FUNCTIONS_H_ #include "srm_ifce_internal.h" // Utility functions int srmv2_check_srm_root(const char* surl); int srmv2_rm(struct srm_context *context,struct srm_rm_input *input,struct srm_rm_output *output); int srmv2_rmdir(struct srm_context *context,struct srm_rmdir_input *input,struct srm_rmdir_output *output); int srmv2_mkdir(struct srm_context *context,struct srm_mkdir_input *input); int srmv2_ls_async_internal(struct srm_context *context, struct srm_ls_input *input,struct srm_ls_output *output,struct srm_internal_context *internal_context); int srmv2_status_of_ls_request_async_internal(struct srm_context *context, struct srm_ls_input *input, struct srm_ls_output *output, struct srm_internal_context *internal_context); int srmv2_rm(struct srm_context *context,struct srm_rm_input *input,struct srm_rm_output *output); //srmv2_rmdir (const char *surl, const char *srm_endpoint, int recursive, //struct srmv2_filestatus **statuses, char *errbuf, int errbufsz, int timeout) int srmv2_rmdir(struct srm_context *context,struct srm_rmdir_input *input,struct srm_rmdir_output *output); /* tries to create all directories in 'dest_file' */ int srmv2_mkdir(struct srm_context *context,struct srm_mkdir_input *input); int srmv2_extend_file_lifetime(struct srm_context *context, struct srm_extendfilelifetime_input *input, struct srm_extendfilelifetime_output *output); int srmv2_check_srm_root(const char* surl); int srmv2_mv(struct srm_context *context, struct srm_mv_input *input); #endif srm-ifce-v1.24.7/src/srmv2_discovery_functions.c000066400000000000000000000062421465215307000216720ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include "srm_soap.h" #include "srm_util.h" #include "srm_dependencies.h" int srmv2_ping(struct srm_context *context,struct srm_ping_output *output) { const char srmfunc[] = "Ping"; struct srm2__srmPingRequest req; struct srm2__srmPingResponse_ rep; int result; srm_context_soap_init(context); memset (&req, 0, sizeof(req)); result = call_function.call_srm2__srmPing (context->soap, context->srm_endpoint, srmfunc, &req, &rep); if (result != 0) { // Soap call failure errno = srm_soap_call_err(context, srmfunc); result = -1; }else { if (rep.srmPingResponse == NULL || copy_string(&output->versioninfo,rep.srmPingResponse->versionInfo)) { errno = EINVAL; return -1; } } return result; } int srmv2_xping(struct srm_context *context, struct srm_xping_output *output) { const char srmfunc[] = "XPing"; struct srm2__srmPingRequest req; struct srm2__srmPingResponse_ rep; int result, i = 0; srm_context_soap_init(context); memset (&req, 0, sizeof(req)); result = call_function.call_srm2__srmPing (context->soap, context->srm_endpoint, srmfunc, &req, &rep); if (result != 0) { // Soap call failure errno = srm_soap_call_err(context, srmfunc); result = -1; }else { if (rep.srmPingResponse == NULL) { errno = EINVAL; return -1; } if (copy_string(&output->versioninfo, rep.srmPingResponse->versionInfo) < 0) { errno = EINVAL; return -1; } if (rep.srmPingResponse->otherInfo) { output->n_extra = rep.srmPingResponse->otherInfo->__sizeextraInfoArray; output->extra = calloc(output->n_extra, sizeof(struct srm_key_value)); if (!output->extra) { free(output->versioninfo); errno = EINVAL; return -1; } for (i = 0; i < output->n_extra; ++i) { if (copy_string(&output->extra[i].key, rep.srmPingResponse->otherInfo->extraInfoArray[i]->key) < 0) goto xping_abort; if (copy_string(&output->extra[i].value, rep.srmPingResponse->otherInfo->extraInfoArray[i]->value) < 0) goto xping_abort; } } else { output->n_extra = 0; output->extra = NULL; } result = 0; } return result; xping_abort: while (i > 0) { free(output->extra[i].key); free(output->extra[i].value); --i; } free(output->extra); free(output->versioninfo); return -1; } srm-ifce-v1.24.7/src/srmv2_discovery_functions.h000066400000000000000000000020031465215307000216660ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef _SRMV2_DISCOVERY_FUNCTIONS_ #define _SRMV2_DISCOVERY_FUNCTIONS_ #include "srm_ifce_internal.h" int srmv2_ping(struct srm_context *context,struct srm_ping_output *output); int srmv2_xping(struct srm_context *context, struct srm_xping_output *output); #endif srm-ifce-v1.24.7/src/srmv2_permission_functions.c000066400000000000000000000163031465215307000220520ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "srmv2_permission_functions.h" #include "srm_soap.h" int srmv2_set_permission(struct srm_context *context, struct srm_setpermission_input *input) { int result = 0,i; const char srmfunc[] = "SetPermission"; struct srm2__srmSetPermissionRequest req; struct srm2__srmSetPermissionResponse_ rep; enum srm2__TPermissionMode otherPermission; enum srm2__TPermissionMode ownerPermission; srm_context_soap_init(context); memset (&req, 0, sizeof(req)); if ((req.arrayOfGroupPermissions = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfTGroupPermission))) == NULL || (req.arrayOfGroupPermissions->groupPermissionArray = soap_malloc (context->soap, input->group_permissions_count* sizeof(struct srm2__TGroupPermission *))) == NULL || (req.arrayOfUserPermissions = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfTUserPermission))) == NULL || (req.arrayOfUserPermissions->userPermissionArray = soap_malloc (context->soap,input->user_permissions_count* sizeof(struct srm2__TUserPermission*))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.arrayOfGroupPermissions->__sizegroupPermissionArray = input->group_permissions_count; req.arrayOfUserPermissions->__sizeuserPermissionArray = input->user_permissions_count; for (i = 0; i < input->group_permissions_count; i++) { if ((req.arrayOfGroupPermissions->groupPermissionArray[i] = soap_malloc (context->soap, sizeof(struct srm2__TGroupPermission))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } memset (req.arrayOfGroupPermissions->groupPermissionArray[i], 0, sizeof(struct srm2__TGroupPermission)); req.arrayOfGroupPermissions->groupPermissionArray[i]->groupID = (char *)input->group_permissions[i].name_id; req.arrayOfGroupPermissions->groupPermissionArray[i]->mode = input->group_permissions[i].mode; } for (i = 0; i < input->user_permissions_count; i++) { if ((req.arrayOfUserPermissions->userPermissionArray[i] = soap_malloc (context->soap, sizeof(struct srm2__TUserPermission))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } memset (req.arrayOfUserPermissions->userPermissionArray[i], 0, sizeof(struct srm2__TUserPermission)); req.arrayOfUserPermissions->userPermissionArray[i]->userID = (char *)input->user_permissions[i].name_id; req.arrayOfUserPermissions->userPermissionArray[i]->mode = input->user_permissions[i].mode; } req.SURL = input->surl; req.storageSystemInfo = NULL; req.authorizationID = NULL; otherPermission = (enum srm2__TPermissionMode)input->other_permission; ownerPermission = (enum srm2__TPermissionMode)input->owner_permission; req.otherPermission = &otherPermission; req.ownerPermission = &ownerPermission; req.permissionType = input->permission_type; result = call_function.call_srm2__srmSetPermission (context->soap, context->srm_endpoint, srmfunc, &req, &rep); if (result != 0|| rep.srmSetPermissionResponse== NULL || rep.srmSetPermissionResponse->returnStatus == NULL) { // Soap call failure errno = srm_soap_call_err(context, srmfunc); result = -1; }else { // check response if (rep.srmSetPermissionResponse->returnStatus->statusCode != SRM_USCORESUCCESS) { errno = statuscode2errno(rep.srmSetPermissionResponse->returnStatus->statusCode); return (-1); } } return result; } int srmv2_get_permission(struct srm_context *context, struct srm_getpermission_input *input, struct srm_getpermission_output *output) { const char srmfunc[] = "GetPermission"; struct srm2__srmGetPermissionRequest req; struct srm2__srmGetPermissionResponse_ rep; struct srm2__ArrayOfTPermissionReturn *repperm; int result = 0; srm_context_soap_init(context); memset (&req, 0, sizeof(req)); memset(output,0,sizeof(*output)); if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = (char **)input->surls; req.authorizationID = NULL; req.storageSystemInfo = NULL; result = call_function.call_srm2__srmGetPermission (context->soap, context->srm_endpoint, srmfunc, &req, &rep); // check response if (result != 0 || rep.srmGetPermissionResponse == NULL || copy_returnstatus(&output->retstatus,rep.srmGetPermissionResponse->returnStatus)) { // Soap call failure errno = srm_soap_call_err(context, srmfunc); result = -1; }else { repperm = rep.srmGetPermissionResponse->arrayOfPermissionReturns; if (output->retstatus->statusCode == SRM_USCORESUCCESS || output->retstatus->statusCode == SRM_USCOREPARTIAL_USCORESUCCESS) { result = copy_filepermissions(output->retstatus, &output->permissions, repperm); }else { errno = srm_call_err(context,output->retstatus,srmfunc); result = -1; } } return result; } int srmv2_check_permission(struct srm_context *context, struct srm_checkpermission_input *input, struct srmv2_filestatus **statuses) { int ret; struct srm2__srmCheckPermissionResponse_ rep; struct srm2__ArrayOfTSURLPermissionReturn *repfs; struct srm2__srmCheckPermissionRequest req; struct srm2__TReturnStatus *reqstatp; const char srmfunc[] = "CheckPermission"; srm_context_soap_init(context); memset (&req, 0, sizeof(req)); /* NOTE: only one SURL in the array */ if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = (char **) input->surls; if (call_function.call_srm2__srmCheckPermission (context->soap, context->srm_endpoint, srmfunc, &req, &rep) != 0) { errno = srm_soap_call_err(context, srmfunc); return (-1); } if (rep.srmCheckPermissionResponse == NULL || (reqstatp = rep.srmCheckPermissionResponse->returnStatus) == NULL) { srm_errmsg (context, "[SRM][%s][] %s: ",srmfunc, context->srm_endpoint); errno = ECOMM; return (-1); } repfs = rep.srmCheckPermissionResponse->arrayOfPermissions; if (!repfs || repfs->__sizesurlPermissionArray < 1 || !repfs->surlPermissionArray) { errno = srm_soap_call_err(context, srmfunc); return (-1); } ret = copy_permissionfilestatuses(reqstatp, statuses, repfs, srmfunc, input->amode); return (ret); } srm-ifce-v1.24.7/src/srmv2_permission_functions.h000066400000000000000000000023621465215307000220570ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef _SRMV2_PERMISSION_FUNCTIONS_ #define _SRMV2_PERMISSION_FUNCTIONS_ #include "srm_ifce_internal.h" int srmv2_set_permission(struct srm_context *context, struct srm_setpermission_input *input); int srmv2_get_permission(struct srm_context *context, struct srm_getpermission_input *input, struct srm_getpermission_output *output); int srmv2_check_permission(struct srm_context *context, struct srm_checkpermission_input *input, struct srmv2_filestatus **statuses); #endif srm-ifce-v1.24.7/src/srmv2_space_management_functions.c000066400000000000000000000337341465215307000231600ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include "srmv2_space_management_functions.h" int srmv2_getspacemd (struct srm_context *context, struct srm_getspacemd_input *input,struct srm_spacemd **spaces) { int i; struct srm2__srmGetSpaceMetaDataResponse_ tknrep; struct srm2__srmGetSpaceMetaDataRequest tknreq; struct srm2__TReturnStatus *tknrepstatp = NULL; struct srm2__ArrayOfTMetaDataSpace *tknrepp; const char srmfunc[] = "GetSpaceMetaData"; srm_context_soap_init(context); if (input->nbtokens < 1 || input->spacetokens == NULL || context->srm_endpoint == NULL || spaces == NULL) { srm_errmsg (context, "[SRM][srmv2_getspacemd][EINVAL] Invalid arguments"); errno = EINVAL; return (-1); } if (input->spacetokens[input->nbtokens] != NULL) { srm_errmsg (context, "[SRM][srmv2_getspacemd][EINVAL] Invalid space token number"); errno = EINVAL; return (-1); } memset (&tknreq, 0, sizeof(tknreq)); if ((tknreq.arrayOfSpaceTokens = soap_malloc (context->soap, input->nbtokens * sizeof(struct srm2__ArrayOfString))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } tknreq.arrayOfSpaceTokens->__sizestringArray = input->nbtokens; tknreq.arrayOfSpaceTokens->stringArray = input->spacetokens; if (call_function.call_srm2__srmGetSpaceMetaData(context->soap, context->srm_endpoint, srmfunc, &tknreq, &tknrep) != 0) { errno = srm_soap_call_err(context, srmfunc); return (-1); } if (tknrep.srmGetSpaceMetaDataResponse == NULL || (tknrepstatp = tknrep.srmGetSpaceMetaDataResponse->returnStatus) == NULL) { errno = srm_call_err(context,tknrepstatp,srmfunc); return (-1); } if (tknrepstatp->statusCode != SRM_USCORESUCCESS) { errno = srm_print_error_status(context,tknrepstatp,srmfunc); return (-1); } tknrepp = tknrep.srmGetSpaceMetaDataResponse->arrayOfSpaceDetails; if (!tknrepp) { srm_errmsg (context, "[%s][%s][] %s: ", err_msg_begin,srmfunc, context->srm_endpoint); errno = ECOMM; return (-1); } if (tknrepp->__sizespaceDataArray < 1 || !tknrepp->spaceDataArray) { srm_errmsg (context, "[%s][%s][] %s: no valid space tokens", err_msg_begin,srmfunc, context->srm_endpoint); errno = EINVAL; return (-1); } if ((*spaces = (struct srm_spacemd *) calloc (input->nbtokens, sizeof (struct srm_spacemd))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < input->nbtokens; i++) { if (!tknrepp->spaceDataArray[i] || !tknrepp->spaceDataArray[i]->spaceToken) continue; if (tknrepp->spaceDataArray[i]->status && tknrepp->spaceDataArray[i]->status->statusCode != SRM_USCORESUCCESS) { errno = srm_call_err(context,tknrepp->spaceDataArray[i]->status,srmfunc); return (-1); } (*spaces)[i].spacetoken = strdup (tknrepp->spaceDataArray[i]->spaceToken); if (tknrepp->spaceDataArray[i]->owner) (*spaces)[i].owner = strdup (tknrepp->spaceDataArray[i]->owner); if (tknrepp->spaceDataArray[i]->totalSize) (*spaces)[i].totalsize = (SRM_LONG64) *(tknrepp->spaceDataArray[i]->totalSize); if (tknrepp->spaceDataArray[i]->guaranteedSize) (*spaces)[i].guaranteedsize = (SRM_LONG64) *(tknrepp->spaceDataArray[i]->guaranteedSize); if (tknrepp->spaceDataArray[i]->unusedSize) (*spaces)[i].unusedsize = (SRM_LONG64) *(tknrepp->spaceDataArray[i]->unusedSize); if (tknrepp->spaceDataArray[i]->lifetimeAssigned) (*spaces)[i].lifetimeassigned = *(tknrepp->spaceDataArray[i]->lifetimeAssigned); if (tknrepp->spaceDataArray[i]->lifetimeLeft) (*spaces)[i].lifetimeleft = *(tknrepp->spaceDataArray[i]->lifetimeLeft); if (tknrepp->spaceDataArray[i]->retentionPolicyInfo) { switch (tknrepp->spaceDataArray[i]->retentionPolicyInfo->retentionPolicy) { case REPLICA: (*spaces)[i].retentionpolicy = GFAL_POLICY_REPLICA; break; case OUTPUT: (*spaces)[i].retentionpolicy = GFAL_POLICY_OUTPUT; break; case CUSTODIAL: (*spaces)[i].retentionpolicy = GFAL_POLICY_CUSTODIAL; break; default: (*spaces)[i].retentionpolicy = GFAL_POLICY_UNKNOWN; } if (tknrepp->spaceDataArray[i]->retentionPolicyInfo->accessLatency) { switch (*(tknrepp->spaceDataArray[i]->retentionPolicyInfo->accessLatency)) { case ONLINE: (*spaces)[i].accesslatency = GFAL_LATENCY_ONLINE; break; case NEARLINE: (*spaces)[i].accesslatency = GFAL_LATENCY_NEARLINE; break; default: (*spaces)[i].accesslatency = GFAL_LATENCY_UNKNOWN; } } } } errno = 0; return (0); } // returns space tokens associated to the space description int srmv2_getspacetokens (struct srm_context *context, struct srm_getspacetokens_input *input, struct srm_getspacetokens_output *output) { int i; struct srm2__srmGetSpaceTokensResponse_ tknrep; struct srm2__srmGetSpaceTokensRequest tknreq; struct srm2__TReturnStatus *tknrepstatp = NULL; struct srm2__ArrayOfString *tknrepp; const char srmfunc[] = "GetSpaceTokens"; srm_context_soap_init(context); if (input == NULL || context->srm_endpoint == NULL || output == NULL) { srm_errmsg( context, "[SRM][srmv2_getspacetokens][EINVAL] Invalid arguments"); errno = EINVAL; return (-1); } memset(output,0,sizeof(*output)); memset (&tknreq, 0, sizeof(tknreq)); tknreq.userSpaceTokenDescription = (char *) input->spacetokendesc; if (call_function.call_srm2__srmGetSpaceTokens (context->soap, context->srm_endpoint, srmfunc, &tknreq, &tknrep) != 0) { srm_soap_call_err(context, srmfunc); return (-1); } if (tknrep.srmGetSpaceTokensResponse == NULL || (tknrepstatp = tknrep.srmGetSpaceTokensResponse->returnStatus) == NULL) { errno = srm_call_err(context,tknrepstatp,srmfunc); return (-1); } if (tknrepstatp->statusCode != SRM_USCORESUCCESS) { errno = srm_print_error_status(context,tknrepstatp,srmfunc);; return (-1); } tknrepp = tknrep.srmGetSpaceTokensResponse->arrayOfSpaceTokens; if (!tknrepp) { srm_errmsg (context, "[SE][%s][%s] %s: ", srmfunc, statuscode2errmsg (tknrepstatp->statusCode), context->srm_endpoint); errno = ECOMM; return (-1); } output->nbtokens = tknrepp->__sizestringArray; if (output->nbtokens < 1 || !tknrepp->stringArray) { srm_errmsg (context, "[%s][%s][%s] %s: %s: No such space token descriptor", err_msg_begin,srmfunc, statuscode2errmsg (tknrepstatp->statusCode), context->srm_endpoint,input->spacetokendesc); errno = EINVAL; return (-1); } if ((output->spacetokens = (char **) calloc (output->nbtokens + 1, sizeof (char *))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < output->nbtokens; ++i) output->spacetokens[i] = strdup(tknrepp->stringArray[i]); errno = 0; return (0); } // returns best space token char* srmv2_getbestspacetoken (struct srm_context *context, struct srm_getbestspacetokens_input *input) { struct srm_getspacetokens_input getspacetoken_input; struct srm_getspacetokens_output getspacetoken_output; struct srm_getspacemd_input getspacemd_input; int sav_errno = 0; int i, ret, numtoken = -1; SRM_LONG64 unusedsize = -1; char **spacetokens = NULL; struct srm_spacemd *spacemd = NULL; char *spacetoken = NULL; getspacetoken_input.spacetokendesc = input->spacetokendesc; ret = srmv2_getspacetokens(context,&getspacetoken_input,&getspacetoken_output); if (ret < 0 || getspacetoken_output.spacetokens == NULL || getspacetoken_output.nbtokens < 1) { errno = ret == 0 ? ENOMEM : errno; return (NULL); } if (getspacetoken_output.nbtokens == 1) { errno = 0; spacetoken = getspacetoken_output.spacetokens[0]; free (getspacetoken_output.spacetokens); return (spacetoken); } getspacemd_input.nbtokens = getspacetoken_output.nbtokens; getspacemd_input.spacetokens = getspacetoken_output.spacetokens; ret = srmv2_getspacemd (context,&getspacemd_input,&spacemd); if (ret < 0 || spacemd == NULL) { sav_errno = ret == 0 ? ENOMEM : errno; for (i = 0; i < getspacetoken_output.nbtokens; ++i) if (getspacetoken_output.spacetokens[i]) free (getspacetoken_output.spacetokens[i]); free (getspacetoken_output.spacetokens); errno = sav_errno; srm_spacemd_free (getspacetoken_output.nbtokens, spacemd); return (NULL); } // Get the spacetoken with the least free space, but a bit more than needed for (i = 0; i < getspacetoken_output.nbtokens; ++i) { if (getspacetoken_output.spacetokens[i]) free (getspacetoken_output.spacetokens[i]); if (spacemd[i].unusedsize < input->neededsize + SRM_SIZE_MARGIN) continue; if (numtoken < 0 || spacemd[i].unusedsize < unusedsize) { numtoken = i; unusedsize = spacemd[i].unusedsize; } } if (numtoken < 0) { // no suitable space token srm_errmsg (context,"[SRM][srmv2_getbestspacetoken][EINVAL] %s: no associated space token with enough free space", input->spacetokendesc); errno = EINVAL; srm_spacemd_free (getspacetoken_output.nbtokens, spacemd); return (NULL); } spacetoken = spacemd[numtoken].spacetoken; spacemd[numtoken].spacetoken = NULL; // prevent it to be freed srm_spacemd_free (getspacetoken_output.nbtokens, spacemd); free (spacetokens); errno = 0; return (spacetoken); } // returns space tokens associated to the space description int srmv2_reservespace(struct srm_context *context, struct srm_reservespace_input *input, struct srm_reservespace_output *output) { struct srm2__srmReserveSpaceResponse_ rep; struct srm2__srmReserveSpaceRequest req; struct srm2__TRetentionPolicyInfo retentionPolicy; const char srmfunc[] = "ReserveSpace"; srm_context_soap_init(context); if (input->spacetokendescriptor == NULL) { srm_errmsg( context, "[SRM][%s][EINVAL] Invalid arguments",srmfunc); errno = EINVAL; return (-1); } memset(output,0,sizeof(*output)); memset (&req, 0, sizeof(req)); req.userSpaceTokenDescription = input->spacetokendescriptor; req.desiredSizeOfTotalSpace = NULL; req.desiredSizeOfGuaranteedSpace = input->desired_size; retentionPolicy.accessLatency = NULL; retentionPolicy.retentionPolicy = 0; req.retentionPolicyInfo = &retentionPolicy; req.desiredLifetimeOfReservedSpace = &input->desired_lifetime; if (call_function.call_srm2__srmReserveSpace(context->soap, context->srm_endpoint, srmfunc, &req, &rep) != 0) { errno = srm_soap_call_err(context, srmfunc); return (-1); } if (copy_string(&output->spacetoken,rep.srmReserveSpaceResponse->spaceToken)) { errno = srm_soap_call_err(context, srmfunc); return (-1); } if (output->spacetoken != NULL) { //printf("Reserved Space token: %s \n",output->spacetoken); } errno = 0; return (0); } int srmv2_releasespace(struct srm_context *context, char *spacetoken) { struct srm2__srmReleaseSpaceResponse_ rep; struct srm2__srmReleaseSpaceRequest req; const char srmfunc[] = "ReserveSpace"; srm_context_soap_init(context); if (spacetoken == NULL) { srm_errmsg( context, "[SRM][%s][EINVAL] Invalid arguments",srmfunc); errno = EINVAL; return (-1); } memset (&req, 0, sizeof(req)); req.spaceToken = spacetoken; if (call_function.call_srm2__srmReleaseSpace(context->soap, context->srm_endpoint, srmfunc, &req, &rep) != 0) { errno = srm_soap_call_err(context, srmfunc); return (-1); } errno = 0; return (0); } // returns space tokens associated to the space description int srmv2_purgefromspace(struct srm_context *context, struct srm_purgefromspace_input *input, struct srm_purgefromspace_output *output) { int n,i,ret; struct srm2__srmPurgeFromSpaceResponse_ rep; struct srm2__srmPurgeFromSpaceRequest req; struct srm2__ArrayOfTSURLReturnStatus *repfs; const char srmfunc[] = "PurgeFromSpace"; srm_context_soap_init(context); if (input->spacetoken == NULL) { srm_errmsg( context, "[SRM][%s][EINVAL] Invalid arguments",srmfunc); errno = EINVAL; return (-1); } memset(output,0,sizeof(*output)); memset (&req, 0, sizeof(req)); if ((req.arrayOfSURLs = soap_malloc (context->soap, sizeof(struct srm2__ArrayOfAnyURI))) == NULL) { srm_errmsg (context, "[SRM][soap_malloc][] error"); errno = ENOMEM; return (-1); } req.arrayOfSURLs->__sizeurlArray = input->nbfiles; req.arrayOfSURLs->urlArray = (char **)input->surls; req.spaceToken = input->spacetoken; if ((ret = call_function.call_srm2__srmPurgeFromSpace(context->soap, context->srm_endpoint, srmfunc, &req, &rep))) { errno = srm_soap_call_err(context, srmfunc); return (-1); } if ((rep.srmPurgeFromSpaceResponse == NULL)||(ret!=0)|| copy_returnstatus(&output->retstatus,rep.srmPurgeFromSpaceResponse->returnStatus)) { errno = srm_soap_call_err(context, srmfunc); return -1; } repfs = rep.srmPurgeFromSpaceResponse->arrayOfFileStatuses; if (output->retstatus->statusCode != SRM_USCORESUCCESS || !repfs || repfs->__sizestatusArray < 1 || !repfs->statusArray) { errno = srm_call_err(context,output->retstatus,srmfunc); return (-1); } n = repfs->__sizestatusArray; if ((output->statuses = (struct srmv2_filestatus*) calloc (n, sizeof (struct srmv2_filestatus))) == NULL) { errno = ENOMEM; return (-1); } for (i = 0; i < n; ++i) { if (!repfs->statusArray[i]) continue; if (repfs->statusArray[i]->surl) (output->statuses)[i].surl = strdup (repfs->statusArray[i]->surl); if (repfs->statusArray[i]->status) { (output->statuses)[i].status = statuscode2errno(repfs->statusArray[i]->status->statusCode); srm_print_explanation(&((output->statuses)[i].explanation), repfs->statusArray[i]->status,srmfunc); } } errno = 0; return (n); } srm-ifce-v1.24.7/src/srmv2_space_management_functions.h000066400000000000000000000034211465215307000231530ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef _SRMV2_SPACE_MANAGEMENT_FUNCTIONS_ #define _SRMV2_SPACE_MANAGEMENT_FUNCTIONS_ #include "srm_ifce_internal.h" int srmv2_getspacemd (struct srm_context *context, struct srm_getspacemd_input *input,struct srm_spacemd **spaces); // returns space tokens associated to the space description int srmv2_getspacetokens (struct srm_context *context, struct srm_getspacetokens_input *input, struct srm_getspacetokens_output *output); // returns best space token char* srmv2_getbestspacetoken (struct srm_context *context, struct srm_getbestspacetokens_input *input); // returns space tokens associated to the space description int srmv2_reservespace(struct srm_context *context, struct srm_reservespace_input *input, struct srm_reservespace_output *output); int srmv2_releasespace(struct srm_context *context, char *spacetoken); int srmv2_purgefromspace(struct srm_context *context, struct srm_purgefromspace_input *input, struct srm_purgefromspace_output *output); #endif srm-ifce-v1.24.7/src/srmv2_sync_wrapper.c000066400000000000000000000117011465215307000203030ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include "gfal_srm_ifce.h" #include "srmv2_sync_wrapper.h" int srmv2_ls_sync(struct srm_context *context,struct srm_ls_input *input,struct srm_ls_output *output) { struct srm_internal_context internal_context; int result; char * req_token; // Setup the timeout back_off_logic_init(context,&internal_context); // Call srm ls output->token = NULL; result = srmv2_ls_async_internal(context,input,output,&internal_context); internal_context.attempt = 1; req_token = output->token; // if ls was queued start polling statusOfLsRequest while ((internal_context.current_status == srm_call_status_QUEUED)&&(result >= 0)) { result = srmv2_status_of_ls_request_async_internal(context,input,output,&internal_context); if (internal_context.current_status == srm_call_status_TIMEOUT) { srmv2_abort_request(context, req_token); return -1; } // ls status of request } if (internal_context.current_status != srm_call_status_SUCCESS) { return -1; } return result; } int srmv2_prepare_to_put_sync(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output) { struct srm_internal_context internal_context; int result; // Setup the timeout back_off_logic_init(context,&internal_context); // request output->token = NULL; result = srmv2_prepare_to_put_async_internal(context,input,output,&internal_context); internal_context.attempt = 1; // if put was queued start polling statusOfPutRequest while ((internal_context.current_status == srm_call_status_QUEUED)&&(result >= 0)) { //srm_srmv2_pinfilestatus_delete(output->filestatuses, result); // srm_srm2__TReturnStatus_delete(output->retstatus); result = srmv2_status_of_put_request_async_internal(context,input,output,&internal_context); if (internal_context.current_status == srm_call_status_TIMEOUT) { srmv2_abort_request(context,output->token); errno = ETIMEDOUT; return -1; } } if (internal_context.current_status != srm_call_status_SUCCESS) { return -1; } return result; } int srmv2_prepare_to_get_sync(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output) { struct srm_internal_context internal_context; int result; // Setup the timeout back_off_logic_init(context,&internal_context); // request output->token = NULL; result = srmv2_prepare_to_get_async_internal(context,input,output,&internal_context); internal_context.attempt = 1; // if put was queued start polling statusOfPutRequest while ((internal_context.current_status == srm_call_status_QUEUED)&&(result >= 0)) { // srm_srmv2_pinfilestatus_delete(output->filestatuses, result); // srm_srm2__TReturnStatus_delete(output->retstatus); result = srmv2_status_of_get_request_async_internal(context,input,output,&internal_context); if (internal_context.current_status == srm_call_status_TIMEOUT) { srmv2_abort_request(context,output->token); errno = ETIMEDOUT; return -1; } } if (internal_context.current_status != srm_call_status_SUCCESS) { return -1; } return result; } int srmv2_bring_online_sync(struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output) { struct srm_internal_context internal_context; int result; // Setup the timeout back_off_logic_init(context,&internal_context); // request output->token = NULL; result = srmv2_bring_online_async_internal(context,input,output,&internal_context); internal_context.attempt = 1; // if put was queued start polling statusOfPutRequest while ((internal_context.current_status == srm_call_status_QUEUED)&&(result >= 0)) { //srm_srmv2_pinfilestatus_delete(output->filestatuses, result); // srm_srm2__TReturnStatus_delete(output->retstatus); result = srmv2_status_of_bring_online_async_internal(context,input,output,&internal_context); if ((internal_context.current_status != srm_call_status_SUCCESS) &&(internal_context.current_status != srm_call_status_QUEUED) &&(result<0)) { srmv2_abort_request(context,output->token); return -1; } } if (internal_context.current_status != srm_call_status_SUCCESS) { return -1; } return result; } srm-ifce-v1.24.7/src/srmv2_sync_wrapper.h000066400000000000000000000025701465215307000203140ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef _SRMV2_SYNC_WRAPPER_H_ #define _SRMV2_SYNC_WRAPPER_H_ #include "srm_ifce_internal.h" int srmv2_ls_sync(struct srm_context *context,struct srm_ls_input *input,struct srm_ls_output *output); int srmv2_prepare_to_put_sync(struct srm_context *context, struct srm_preparetoput_input *input, struct srm_preparetoput_output *output); int srmv2_prepare_to_get_sync(struct srm_context *context, struct srm_preparetoget_input *input, struct srm_preparetoget_output *output); int srmv2_bring_online_sync(struct srm_context *context, struct srm_bringonline_input *input, struct srm_bringonline_output *output); #endif srm-ifce-v1.24.7/src/time_utils.h000066400000000000000000000062741465215307000166320ustar00rootroot00000000000000/* * Copyright (c) CERN 2013-2015 * * Copyright (c) Members of the EMI Collaboration. 2010-2013 * See http://www.eu-emi.eu/partners for details on the copyright * holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #ifndef _TIME_UTILS_H #define _TIME_UTILS_H /** similar to timeradd, timercmp, etc... function but for timerspec */ #define timespec_cmp(a, b, CMP) \ (((a)->tv_sec == (b)->tv_sec) ? \ ((a)->tv_nsec CMP (b)->tv_nsec) : \ ((a)->tv_sec CMP (b)->tv_sec)) #define timespec_add(a, b, result) \ do { \ (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \ (result)->tv_nsec = (a)->tv_nsec + (b)->tv_nsec; \ if ((result)->tv_nsec > 1000000000) { \ ++(result)->tv_sec; \ (result)->tv_nsec -= 1000000000; \ } \ } while (0) #define timespec_sub(a, b, result) \ do { \ (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ (result)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \ if ((result)->tv_nsec < 0) { \ --(result)->tv_sec; \ (result)->tv_nsec += 1000000000; \ } \ } while (0) #define timespec_clear(a) \ do { \ (a)->tv_sec = 0; \ (a)->tv_nsec = 0; \ } while (0) #define timespec_copy(result,b) \ do { \ (result)->tv_sec =(b)->tv_sec; \ (result)->tv_nsec = (b)->tv_nsec; \ } while (0) #define timespec_isset(a) \ ( !((a)->tv_sec == 0 && (a)->tv_nsec == 0) ) #endif srm-ifce-v1.24.7/src/typemap-srmv1.dat000077500000000000000000000005711465215307000175170ustar00rootroot00000000000000srm1 = "http://tempuri.org/diskCacheV111.srm.server.SRMServerV1" srmNs = "http://srm.1.0.ns" srmDiskCache = "http://www.themindelectric.com/package/diskCacheV111.srm/" srmWrappers = "http://www.themindelectric.com/wrappers/" srmJava = "http://www.themindelectric.com/package/java.lang/" srmPackage = "http://www.themindelectric.com/package/" xsd__dateTime = | char * | char * srm-ifce-v1.24.7/src/typemap-srmv2.dat000077500000000000000000000001241465215307000175120ustar00rootroot00000000000000srm2 = http://srm.lbl.gov/StorageResourceManager xsd__dateTime = | char * | char * srm-ifce-v1.24.7/test/000077500000000000000000000000001465215307000144625ustar00rootroot00000000000000srm-ifce-v1.24.7/test/execute_tests.sh000077500000000000000000000032631465215307000177110ustar00rootroot00000000000000#! /bin/bash # Copyright (c) Members of the EGEE Collaboration. 2010. # See http://www.eu-egee.org/partners/ for details on the copyright holders. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Execute test suites (unit and regression tests). # Authors: Todor Manev IT-GT CERN SCRIPT=$(readlink -f $0) SCRIPTPATH=`dirname $SCRIPT` #if [ $(uname -m) == "x86_64" ]; then # LIB_FOLDER_TYPE=lib64 #else # LIB_FOLDER_TYPE=lib #fi #if [ -n "$1" ]; then # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$1 #fi sudo updatedb ccheck_path=`locate libcheck.so.0 | head -1 | sed 's/libcheck.so.0//'` cgsi_path=`locate libcgsi_plugin_gsoap_2.7.so.1 | head -1 | sed 's/libcgsi_plugin_gsoap_2.7.so.1//'` export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ccheck_path:$cgsi_path function execute_test { local testdir=$SCRIPTPATH/$1 echo -e "\nExecuting test suite \"$1\"\n" pushd $testdir &> /dev/null ./execute_tests.sh local res=$? popd &> /dev/null if [ $res != 0 ] ; then echo echo -e "\nA test in \"$testdir\" failed.\n" exit 1 fi echo -e "\nAll tests in \"$testdir\" passed.\n" } execute_test unit #execute_test regression #execute_test certification_tests srm-ifce-v1.24.7/test/unit/000077500000000000000000000000001465215307000154415ustar00rootroot00000000000000srm-ifce-v1.24.7/test/unit/execute_tests.sh000077500000000000000000000022621465215307000206660ustar00rootroot00000000000000#! /bin/bash # Copyright (c) Members of the EGEE Collaboration. 2004. # See http://www.eu-egee.org/partners/ for details on the copyright holders. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Execute the unit tests # Author:Todor Manev CERN IT-GT SCRIPT=$(readlink -f $0) SCRIPTPATH=`dirname $SCRIPT` BUILD_DIR=$SCRIPTPATH/../../build #script is in /test/unit ccheck_path=`locate libcheck.so.0 | head -1 | sed 's/libcheck.so.0//'` cgsi_path=`locate libcgsi_plugin_gsoap_2.7.so.1 | head -1 | sed 's/libcgsi_plugin_gsoap_2.7.so.1//'` export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ccheck_path:$cgsi_path pushd $BUILD_DIR/src &> /dev/null ./gfal_srm_ifce_unittest res=$? popd &> /dev/null exit $res