DPM Test Plan
Product Description and Version
DPM 1.8.2-3
https://svnweb.cern.ch/trac/lcgdm/wiki/Dpm/Admin/ReferenceCard
Unit tests
This product does not use unit tests
Deployment tests
Install from scratch and upgrade from last production version
System tests
DPM Nodes Testing
Configurations for certification tests
To test the different aspects of the services running on the
DPM nodes the following minimal deployments could be used:
Configuration scenario 1
Configuration scenario 2
Rationale
Configuration scenario 1 has three dpm_disks (the combined head node plus two standalone dpm_disk nodes) and can be used to test the disk pool management routines (add/remove filesystems and pools, draining of both filesystems and whole disk servers when pools are spanning multiple servers) dpm replication and space allocation within different pools. It also covers the case when the standard DPNS_BASEDIR is used and
DPM-HTTP is being deployed on a combined head node (which differs from the one when the head node is not used as a disk server).
The purpose of
Configuration scenario 2 is to cover the case when DPNS_BASEDIR is not the standard one, DPNS is deployed on a dedicated machine, the head node is not configured as a disk server and the
DPM-HTTP's purpose there is only request redirection to the disk servers.
Additional information and comments
The usual certification usecase involves testing of both 32-bit and 64-bit
DPM (head|disk) nodes. This doubles the configuration scenarios described above. However for these four deployments disk1.cern.ch and disk2.cern.ch could be reused by cleaning the stored files and reconfiguring the node (assuming one of them is 32-bit dpm_disk and the other - 64-bit).
DPNS service tests
This section covers the following command line utilities for interaction with the DPNS server.
/opt/lcg/bin/dpns-chgrp
/opt/lcg/bin/dpns-chmod
/opt/lcg/bin/dpns-chown
/opt/lcg/bin/dpns-entergrpmap
/opt/lcg/bin/dpns-enterusrmap
/opt/lcg/bin/dpns-getacl
/opt/lcg/bin/dpns-listgrpmap
/opt/lcg/bin/dpns-listusrmap
/opt/lcg/bin/dpns-ln
/opt/lcg/bin/dpns-ls
/opt/lcg/bin/dpns-mkdir
/opt/lcg/bin/dpns-modifygrpmap
/opt/lcg/bin/dpns-modifyusrmap
/opt/lcg/bin/dpns-ping
/opt/lcg/bin/dpns-rename
/opt/lcg/bin/dpns-rm
/opt/lcg/bin/dpns-rmgrpmap
/opt/lcg/bin/dpns-rmusrmap
/opt/lcg/bin/dpns-setacl
List catalog contents
Normal workflow and Pass/Fail Criteria
Create a predefined structure consisting of files, directories and symbolic links and check the output of dpns-ls for the contents of a specific directory and of the whole subtree (recursive list). The dpns-ls request should be performed with both absolute path and relative to the location specified in the DPNS_HOME environment variable, in short and long listing mode [-l]. Test the [-i] option (print the file uniqueid), [-c] option (use time of last metadata modification) and [-u] option (use last access time).
Test passes if dpns-ls exits with code 0 and the reported structure matches the original.
Erroneous workflow and Pass/Fail Criteria
Test dpns-ls using a wrong absolute and relative paths, wrong DPNS_HOME path. The command should print an error and exit with code 1.
Create DPNS file entry
Normal workflow and Pass/Fail Criteria
- Use dpns_creat to register a new entry in the DPM name service. The test passes if a subsequent call to dpns-ls lists the newly created entry, the access permissions match the ones specified in the creation call, the owner user is the caller and the owner group is the caller's group.
- Use dpns_creatx to register a new entry in the DPM name service, requesting the S_ISGID bit set via the mode parameter. The test passes if a subsequent call to "dpns-ls -i" lists the newly created entry, the file id returned by dpns-ls matches the one returned in *file_uniqueid and the access permissions match the ones specified in the creation call, the owner user is the caller and the owner group is the owner of the parent entry.
Erroneous workflow and Pass/Fail Criteria
- Create a directory using a non-existent parent. -1 should be returned and serrno should be set to ENOENT
- Create an entry in a directory where the access is denied. -1 should be returned and serrno should be set to EACCESS
- Create an entry that already exists. -1 should be returned and serrno should be set to EEXIST
- Create an entry which is a name of an existing directory. -1 should be returned and serrno should be set to EISDIR
- Create an entry using a parent which is not a directory. -1 should be returned and serrno should be set to ENOTDIR.
Create DPNS directory entry
Normal workflow and Pass/Fail Criteria
- Use dpns-mkdir to create a new directory into a container where the access is allowed. The test passes if dpns-ls lists the newly created entry and its access mode is set to 777.
- Use dpns-mkdir to create a new directory in a non-existing container using the "-p" option and requesting a non-default access mode via the -m parameter. The test passes if dpns-mkdir exits with code 0 and dpns-ls lists the newly created entry as expected.
Erroneous workflow and Pass/Fail Criteria
- Request a directory creation using a path that has a component which is not a directory. dpns-mkdir should exit with code 1 and print an error
Change user/group ownership for a file/directory
Normal workflow and Pass/Fail Criteria
- Call dpns-chown to set a new user owner for a DPNS entry as an DPM administrator using a user name (string representation) of an existing user
- Call dpns-chown to set a new user owner for a DPNS entry as an DPM administrator using numeric user identifier of an existing user
- Call dpns-chown and dpns-chgrp to set a new group owner for a DPNS entry as an DPM administrator using numeric group identifier of an existing group
- Call dpns-chown and dpns-chgrp to set a new group owner for a DPNS entry as an DPM administrator using numeric group identifier of an existing group
- Call dpns-chown and dpns-chgrp to set a new group owner for a DPNS entry as a regular user that is member of the same group which is the group owner of the entry.
- Use the "-h" option to test the access control configuration for symbolic links
- Test recursive manipulation of access control properties ("-R" option).
Tests pass if the dpns- calls exit with code 0 and dpns-getacl and dpns-ls return the newly set user/group owners.
Erroneous workflow and Pass/Fail Criteria
- Call dpns-chown/dpns-chgrp for a non-existing to set a new user owner as a regular user.
- Call dpns-chown to set a new user owner as a regular user.
- Call dpns-chown and dpns-chgrp to set a new group owner for a DPNS entry as a regular user that is not a member of the group which is the group owner of the entry.
Tests pass if the commands exit with code 1 and print an appropriate error message.
List access control list for a file/directory
Normal workflow and Pass/Fail Criteria
- Use dpns-getacl to obtain the user owner, group owner and access permissions for a file. The test passes if the command prints those and exits with code 0.
- Use dpns-getacl to obtain the user owner, group owner and access permissions and default access permissions for a directory. The test passes if the command prints those and exits with code 0.
- Test the "-a" and "-d" options for displaying only the access ACL or default ACL respectively.
Erroneous workflow and Pass/Fail Criteria
- Execute dpns-getacl against a non-existing file/directory. The command should exit with code 1 and print an error message to the standard error.
Modify access control list for a file/directory
Normal workflow and Pass/Fail Criteria
- Use "dpns-setacl -m" to add an ACL for an additional user or group
- Use "dpns-setacl -s" to completely reset the access control list for a DPNS object with a new one, which contains an entry for a registered user and for a group by using full string names.
- Use "dpns-setacl -s" to completely reset the access control list for a DPNS object with a new one, which contains an entry for a registered user and for a group by using numeric identifiers.
- Use "dpns-setacl -d" to remove all entries in the ACL for an object.
The test passes if the command exits with code 0 and a subsequent call to dpns-getacl returns the expected ACE set. For the case where numeric identifiers are used, the correct association should be verifiable with dpns-listusrmap and dpns-listgrpmap.
- Change the default ACL for a directory and then create file and directory children. The test passes if the command exits with code 0 and the standard access permissions of the children match the ones in the default ACE of the parent and dpns-umask does not affect this inheritance.
Erroneous workflow and Pass/Fail Criteria
- Test dpns-setacl against incorrect input, attempt to alter the ACL for an entry that does not exists or to which the access is not allowed to the performing user.
Create link
Normal workflow and Pass/Fail Criteria
Use "dpns-ln -s" to create a symbolic link in the DPNS namespace. Both links to existing and non-existing DPNS entries should be addable. The test passes if the command exits with code 0 and the newly created link is listed by "dpns-ls -l". Verify that the value of DPNS_HOST is honored.
Erroneous workflow and Pass/Fail Criteria
Try to create an entry in a location that does not exist or the access is not allowed. Appropriate error message should be returned and the command should exit with code 0.
Rename file/directory
Normal workflow and Pass/Fail Criteria
- Use dpns-rename to alter the name of a DPNS entry.
- Use dpns-rename to move an entry to a different location with or without changing its name.
This should be performed on a file, directory and symbolic link. The test passes if the command exits with code 0, dpns-ls shows the object with its new name at the new location and the entry is no longer in the list of children of its old parent. dpns_getreplica should be performed before and after the dpns-rename operation and the list of the replicas returned should be the same.
Erroneous workflow and Pass/Fail Criteria
- Use dpns-rename to change the name of the entry to one which already exists or to change the name of an entry to which the access in not allowed.
- Use dpns-rename to move an entry to a location where the access is not allowed or to a non-exiting hierarchy.
Delete file/directory
Normal workflow and Pass/Fail Criteria
- Use dpns-rm to remove an existing empty directory, symbolic link or file without registered replicas.
- Use "dpns-rm -r" to remove recursively a DPNS sub-tree
- Test the "-i" option for interactive removal and "-f" for not triggering an error for non-existing entries
- Use dpns-rm to remove a non-existing entry using the "-f" option. No error message should be printed by the command.
- Verify that entries directly under a protected directory are never deleted.
The command should exit with code 0 and the changes should be verifiable with dpns-ls.
Erroneous workflow and Pass/Fail Criteria
- Use dpns-rm to remove a non-existing entry without using the "-f" option.
- Use dpns-rm to remove a file which has existing replicas
- Use dpns-rm to remove an object to which the access is denied
- Use dpns-rm without the recursive processing option against a non-empty directory
Proper error message should be printed and the command should exit with code 0.
Usermap and groupmap manipulations
Normal workflow and Pass/Fail Criteria
- Use dpns-enterusrmap and dpns-entergrpmap to define a new mapping. Check the command with and without specifying the uid/gid (as administrator)
- Use dpns-listusrmap and dpns-listgrpmap to list all mappings. Use "dpns-listusrmap --uid" and "dpns-listgrpmap --gid" to list the newly defines mappings by uid/gid. Use "dpns-listusrmap --user" and "dpns-listgrpmap -group" to list the newly defines mappings by name. (as administrator)
- Use dpns-rmusrmap and dpns-rmgrpmap to remove an already defined mapping by uid/gid or by name. (as administrator)
- Use dpns-listusrmap and dpns-listgrpmap by specifying a uid, gid, username or groupname (as a regular user)
The commands should exit with code 0.
Erroneous workflow and Pass/Fail Criteria
- Execute dpns-enterusrmap and dpns-entergrpmap with a value for --user or --group which is already mapped.
- Execute all command as a regular user, except listing of a specific entry (access should be denied)
The commands should exit with code 1 and print an appropriate error message.
Ping the DPNS server
Use dpns-ping to verify the DPNS server is alive. Check that the command honors the DPNS_HOSTNAME variable when the "-h" option is not used.
DPM Service certification
SRM service certification
SRM endpoints certification is performed with the S2 testsuite. Both the basic tests and the usecase tests are supposed to be run.
Native DPM interface testing
RFIOD service (on a DPM server) and RFIO client tests
Create a directory in the DPM server namespace
Normal workflow and Pass/Fail Criteria
Use the rfmkdir command to create a directory on the
DPM server. The DPM_HOST should be set and the access to the destination location (which starts with "/dpm") should be allowed.
rfmkdir should exit with return value 0 and after setting the DPNS_HOST variable to the name of the host running the DPNS service for this
DPM server, dpns-ls should see the new directory.
This test should also test the "-p" option (creation of all the non-existing parent directories) and the "-m" option (set the access mode). The access mode should be verified successfully with dpns-ls.
Erroneous workflow and Pass/Fail Criteria
- Perform the creation without the option "-p" and use a non-existing parent. rfmkdir should print and error message and exit with value 1.
- Perform the creation with an invalid access mode (-m option). rfmkdir should print and error message and exit with value 2.
Remove a file/directory
Normal workflow and Pass/Fail Criteria
Use the rfrm to remove both an existing permanent and volatile files and directory located on a
DPM node. rfrm should exit with code 0. The success of the operation should be successfully verified using dpns-ls after setting the DPNS_HOST variable to the name of the name server for the
DPM service in use.
The test should cover recursive removal (the "-r" option).
Erroneous workflow and Pass/Fail Criteria
- Execute rfrm for an existing file/directory to which the access is not allowed. A proper error message should be displayed and the command should exit with code 1.
- Execute rfrm with a nonexistent file/directory. A proper error message should be displayed and the command should exit with code 2.
Copy a file to a DPM server
Normal workflow and Pass/Fail Criteria
- Set the DPM_HOST variable and use the rfcp command to copy a file to that DPM Server by using a destination path staring with /dpm in a directory where the access is allowed. The test passes if the file is copied successfully and registered as a volatile file on the corresponding DPM instance. rfcp should exit with code 0.
- Execute rfcp with a destination that follows the host:/location syntax (the specified host runs rfiod and the access to /location is allowed to the identify used). rfcp should copy the file to the specified directory and exit with code 0.
This test should also check the "-s" (copy only the specified amount of bytes) and "-v2" (use RFIO V.2 protocol) options.
Erroneous workflow and Pass/Fail Criteria
List directory contents
Normal workflow and Pass/Fail Criteria
Use the rfdir command to list the contents of an existing file/directory located on a
DPM server. The DPM_HOST variable should be set and the location starting with "/dpm". The command should exit with code 0.
Erroneous workflow and Pass/Fail Criteria
- Perform the test for a location that does not exist. The command should print a proper error message and exit with code 2.
Rename a file/directory
Normal workflow and Pass/Fail Criteria
Use rfrename to rename an existing entry in the
DPM namespace. The command should exit with code 0 and the result should be verifiable with dpns-ls.
Erroneous workflow and Pass/Fail Criteria
- Execute rfrename with wrong source or target name. The command should print an error and exit with code 1.
- Execute rfrename for and object to which the access is not allowed. The command should print an error and exit with code 2.
Change access mode for a file/directory
Normal workflow and Pass/Fail Criteria
Use rfchmod to change the mode for an existing file/directory to which the access is allowed. The result should be verifiable via the DPNS service and rfchmod should exit with code 0.
Erroneous workflow and Pass/Fail Criteria
- Execute rfchmod with wrong source or target name. The command should print an error and exit with code 1.
- Execute rfchmod for and object to which the access is not allowed. The command should print an error and exit with code 2.
Remote file concatenation
Normal workflow and Pass/Fail Criteria
Use rfcat to concatenate a list of existing files located on a
DPM server to the standard output. The command should exit with code 0.
Erroneous workflow and Pass/Fail Criteria
Execute rfcat for files that does not exist or to which the access is not allowed. rfcat should print an error message and exit with code 1.
Print filesystem information
Normal workflow and Pass/Fail Criteria
Use rfdf to print information for the filesystems where a list of files are located. Local files and remote files ( host:/location syntax ) should be checked.
The values for blocksize, total blocks, free blocks , total inodes and free inodes and be printed to the standard output. The command should exit with code 0.
Erroneous workflow and Pass/Fail Criteria
If a file does not exist the command should print an error and exit with code 1.
Print file/directory information
Normal workflow and Pass/Fail Criteria
Use rfstat to print information for a file/directory. The output should contain:
Device : 0
Inode number : 6
Nb blocks : 0
Protection : drwxrwxr-x (40775)
Hard Links : 7
Uid : 0 (root)
Gid : 101 (UNKNOWN)
Size (bytes) : 0
Last access : Mon Oct 12 01:26:28 2009
Last modify : Mon Oct 12 00:57:31 2009
Last stat. mod. : Mon Oct 12 00:57:31 2009
Erroneous workflow and Pass/Fail Criteria
If a file does not exist the command should print an error and exit with code 1.
GSIFTP service tests
HTTP access
Disk Pool and Filesystems operations
DPM Pool creation
Normal workflow and Pass/Fail Criteria
Use dpm-addpool to create a new pool. Scenarios to be checked:
- create a pool by specifying only the mandatory parameters: pool name and default file size
- create a pool using custom non-default values for default life time, default pin time, threshold for garbage collection initiation, threshold for garbage collection deactivation, groups which are allowed to access to pool, maximum lifetime, maximum pin time, retention policy and space type.
Test passes if dpm-addpool exits with code 0 and dpm-qryconf reports effective values for the specified parameters as expected.
Erroneous workflow and Pass/Fail Criteria
- Create a pool using unacceptable values for a the command parameters. The test passes if a proper error message is written to the standard error and the exit code is set to 1.
- Try to create a pool that already exists.
Adding a new DPM filesystem
Normal workflow and Pass/Fail Criteria
Use dpm-addfs to add new file systems located on the head node and on a disk node. Statuses "DISABLED" and "READ ONLY" should be tested. If dpm-addfs exits with code 0 and subsequent call to dpm-qryconf lists the newly created filesystem in the specified
DPM pool with the correct status set - then the test passes.
Erroneous workflow and Pass/Fail Criteria
- Adding a file system to a non-existent pool
- Adding an already used filesystem to the same pool or a different one
- Using an invalid value for status
dpm-addfs should print an error and exit with code 1.
Pool removal
Normal workflow and Pass/Fail Criteria
Use dpm-rmpool to test the removal of a pool from a
DPM node. If the pool contains no file systems, the command should exit with code 0 successfully destroy the pool.
Erroneous workflow and Pass/Fail Criteria
- Test removal of a non-empty pool. The test passes if a proper error message is printed and the command exits with code 1.
- Test removal of a non-existing pool. The test passes if a proper error message is printed and the command exits with code 1.
Filesystem removal
Normal workflow and Pass/Fail Criteria
Use dpm-rmfs to test the removal of a filesystem from a
DPM pool. The command should exit with code 0 and dpm-qryconf should not list the file system as part of the pool.
Erroneous workflow and Pass/Fail Criteria
Test removal of a file system from a non-existing pool or non-existing filesystem. The test passes if a proper error message is printed and the command exits with code 1.
Registration of an external file in the DPM name server
Normal workflow and Pass/Fail Criteria
Use dpm-register to test the registration of an external file in the
DPM name server, specifying the file size, access mode and ownership. The test passes if the command exits with code 0 and subsequent call to dpns-ls lists the object with the expected file properties.
Erroneous workflow and Pass/Fail Criteria
- Test the command with illegal parameter values.
- Try to register a file which already exists in the catalog
Remove an externally registered file
Normal workflow and Pass/Fail Criteria
- Use the "-i" option of dpns-ls to find out the unique id of the file
- Use the dpns_delreplica DPNS API call to remove the replica registration
- Use dpns-rm to remove the entry in the namespace
Erroneous workflow and Pass/Fail Criteria
Call to dpns-rm without removing the replica first: an error that the file exists should be printed and dpns-rm should exit with code 1.
Space reservation
Normal workflow and Pass/Fail Criteria
Scenarios to be tested:
- Access control cases
- Space reservation using a non-VOMS proxy, no DPM groups authorizations requested: dpm-reservespace called without using -group or -gid options. The test passes if dpm-reservespace exits with code 0 and subsequent call to dpm-getspacemd successfully lists the reservation and only the requestor is authorized to access the space.
- Space reservation using a non-VOMS proxy or no proxy at all, identity has admin privileges (admin scenario running on the head node or trusted disk nodes; host identity used), no DPM groups authorizations requested: dpm-reservespace called without using -group or -gid options. The test passes if dpm-reservespace exits with code 0 and subsequent call to dpm-getspacemd successfully lists the reservation and anyone is allowed to access the reserved space.
- Space reservation requested by a user with admin privileges, DPM groups authorizations requested (may contain FQANs with a role): The test passes if dpm-reservespace exits with code 0 and subsequent call to dpm-getspacemd successfully lists the reservation and all listed groups are granted access the reserved space. (prior to dpm-reservespace use dpns-addgrpmap to add some new groups)
- Space reservation using a VOMS or non-VOMS proxy, DPM groups authorizations requested, requestor is a member of the groups (may contain also FQANs with a role): dpm-reservespace called using -group or -gid options. The test passes if dpm-reservespace exits with code 0 and subsequent call to dpm-getspacemd successfully lists the reservation and all requested groups are authorized to access the space.
- Space reservation using a VOMS proxy, no DPM groups authorizations requested: The test passes if dpm-reservespace exits with code 0 and subsequent call to dpm-getspacemd successfully lists the reservation and the first FQAN from the VOMS proxy is granted access to the space.
- Space reservation using a VOMS proxy, DPM groups authorizations requested (FQAN may contain a role), requestor has admin privileges: dpm-reservespace called using -group or -gid options. The test passes if dpm-reservespace exits with code 0 and subsequent call to dpm-getspacemd successfully lists the reservation and all requested groups are authorized to access the space.
Erroneous workflow and Pass/Fail Criteria
- Space reservation using a non-VOMS proxy, DPM groups requested, requestor is not a member of the groups and has no admin privileges: Test passes if dpm-reservespace exits with code 1 and prints the error message "dpm-reservespace: Permission denied"
- Space reservation using a VOMS proxy, DPM groups requested, requestor is not a member of the groups and has no admin privileges: Test passes if dpm-reservespace exits with code 1 and prints the error message "dpm-reservespace: Permission denied"
- Request guaranteed space size which is larger than the available in the pool.
Update space reservations
Normal workflow and Pass/Fail Criteria
- Use dpm-updatespace to update the properties of space already reserved. This includes space lifetime, groups allowed to access the space, guaranteed space size. Test passes if dpm-updatespace exits with code 0 and dpm-getspacemd successfully returns the updated properties of the space.
Erroneous workflow and Pass/Fail Criteria
- Perform an update for a space token which does not exist
- Perform an update requesting space size which is bigger than the free space available in the pool that hosts the space.
- Perform an update requesting access for a group which does not exist
Release space reservations
Normal workflow and Pass/Fail Criteria
- Request a release for a space using the token identifier or token description for a space that does not contain pinned files. The command should exit with code 0 and a subsequent call to dpm-getspacemd should confirm the space was released.
- Request a release (without the --force option) for a space using the token identifier or token description for a space that contains pinned files. The command should print a message explaining the operation could not be completed.
- Request a release using the --force option of dpm-releasespace using the token identifier or token description for a space that contains pinned files. The command should be able to release the reserved space.
Erroneous workflow and Pass/Fail Criteria
- Request a release for a space that does not exist.
Obtain information about space reservations
Normal workflow and Pass/Fail Criteria
- Use dpm-getspacetokens to obtain a list of all space token identifiers of space reservations in use. The command should print one GUID per line and exit with code 0.
- Use dpm-getspacemd to obtain information for a specific space (by specifying a value for the --space_token parameter or --token_desc parameter). The command should print the name of the pool hosting the space, the name of the groups allowed to access the space, the guaranteed size, the free size in the space, the lifetime and retention policy and exit with code 0.
Erroneous workflow and Pass/Fail Criteria
- Test dpm-getspacemd against invalid input.
File replication
Normal workflow and Pass/Fail Criteria
- Use dpm-replicate to request a replica creation for a file by giving a SURL. Since the default file_type for the replica is volatile, at lease one active filesystem that allows the storage of volatile files and has no replica of the current file is needed.
- Use dpm-replicate to request a volatile replica creation for a permanent file by using a PFN and limited lifetime (expressed in years (y), months (suffix m), days (suffix d), hours (suffix h) or seconds (no suffix)). Same requirement as in the previous case is in place.
- Use dpm-replicate to request a permanent replica creation for a volatile file by using a PFN and infinite lifetime (--lifetime "Inf"). Similar requirement as in the first case but for permanent files is in place.
- Use "dpm-replicate --spacetoken" to request a replica creation for a one-replica file which has already a different spacetoken assigned. Similar requirement as in the first case is in place with the restriction that the allowed filesystems are between the ones which are part of the pool where the spacetoken resides.
- Use "dpm-replicate --spacetoken" to request a replica creation for a file which has no spacetoken assigned. Similar requirement as in the first case is in place with the restriction that the allowed filesystems are between the ones which are part of the pool where the spacetoken resides.
Test passes if dpm-replicate exits with code 0 and the existence of the new replica can be verified with a call to dpns_getreplica (for the first three cases) and with a call to dpns_getrepset (for the last two cases) and the replica properties (type, lifetime and spacetoken) are as expected.
Erroneous workflow and Pass/Fail Criteria
- Use dpm-replicate with invalid parameter values: non-existent SURL/PFN, invalid values for file_type, lifetime or invalid spacetoken.
- Use dpm-replicate with incompatible values for file_type and lifetime ( permanent file with limited lifetime or volatile file with infinite lifetime ).
- Try to replicate a file which cannot be replicated because there are no filesystem candidates (spacetoken restrictions, file_type restrictions)
- Try to replicate a file which cannot be replicated because there are filesystem candidates but they are all inactive
dpm-replicate should print an appropriate error message and exit with code 1. dpns_getreplica should be used to confirm no metadata is registered in the database.
Filesystems, nodes and pools draining
Normal workflow and Pass/Fail Criteria
Scenario 1: Given that there is enough space/pools available on the
DPM server to fully drain a specific pool/server/fs:
- Use "dpm-drain --poolname" to request pool draining
- Use "dpm-drain --poolname --server" to request draining of the filesystems located on a specific server and part of a specific pool
- Use "dpm-drain --server" to drain all filesystems located on a specific server which can be part of different pools.
- Use "dpm-drain --server --fs" to request draining of a specific filesystem located on a specific server
- Execute drain with group filtering (drain only files that belong to a specific group) and limit the drain up to a given free space.
Tests pass if the status of the file systems drained is set to RDONLY (unless their original status was already RDONLY or DISABLED) and dpm-drain successfully creates replicas to a location out of the drain targets and erases the files being replicated from the original location. Volatile files with expired lifetime should not be replicated. The lifetime of replicated volatile files should be at least the remaining lifetime of the originals. Pinned files should not be processed and dpm-drain should print a message.
For the last case - only files belonging to the specified group should be replicated.
Scenario 2: Pool which has space tokens defined and replicas using those space tokens exist. File systems which are not drain targets and are part of the same pool exist (the replicas can be created there).
- Test that dpm-drain will keep the space token for the created replicas of the files being removed. Test passes if objects are not moved out of space token.
Scenario 3: Pool which has space tokens defined and replicas using those space tokens exist. File systems which are not drain targets and are part of the same pool does not exist (there is no place where the replicas can be created). Test passes if dpm-drain reports the impossibility to replicate the files which are part of the space token.
Scenario 4: Pool which stores volatile files. File systems which are not drain targets exist and can store volatile files but the maximum lifetime specified in their policy is less that the remaining lifetime of the objects which are to be replicated during the drain process. Test passes if those objects are not moved and dpm-drain prints a message that explains the problem.
Erroneous workflow and Pass/Fail Criteria
- Try to drain a non-existent pool/filesystem/server. Test invalid values for free space, gid, group names.
Information system checks
SRM enpoints publishing
On the
DPM nodes, SRM 1.1 and SRM 2.2 are enabled by default and should be publish in the resource
BDII as:
dn: GlueServiceUniqueID=httpg://hostname:8443/srm/managerv1,mds-vo-name=resource,o=grid
dn: GlueServiceUniqueID=httpg://hostname:8446/srm/managerv2,mds-vo-name=resource,o=grid
Pool and static spaces information publishing
Information about every configured pool and static space (space reserved by the
DPM administrator) should be published in the
BDII.
The correctness of the following attributes should be verified:
GlueSATotalOnlineSize
GlueSAUsedOnlineSize
GlueSAFreeOnlineSize
GlueSAReservedOnlineSize
GlueSARetentionPolicy
GlueSAAccessLatency
GlueSAExpirationMode
GlueSAPolicyFileLifeTime
GlueSAType
GlueSAStateAvailableSpace
GlueSAStateUsedSpace
GlueSAAccessControlBaseRule
GlueSAPolicyMaxData
GlueSAPolicyMaxPinDuration
These properties should be changed with dpm-modifypool or dpm-modifyspace and then successful
BDII update should be assured.
DPM Clients Testing
Regression tests
bug #45814 (DPM: information provider can incorrectly report space token usage as 0)
Bug description: dpm-listspaces reports wrong used space for space tokens. The wrong value gets published in
BDII as well.
This regression test reserves space with "dpm-reservespace". Then copies a file to that space with lcg-cp and inspects the output of "dpm-listspaces -g". The test passes if the LDAP entry representing the reserved space is found and the value of
GlueSAStateUsedSpace is as expected.
bug #45711 (DPM space token information provider fails if a space token does not have a group assigned)
Bug description:
DPM GIP fails to publish information about a space reservation unless group(s) are explicitly assigned.
The test reserves space with dpm-reservespace without using the --gid or --group options and then checks the output of "dpm-listspaces -g" for a LDAP entry representing the reserved space
bug #40273 ([DPM-client] dpm-drain migrates data out of spacetoken / pool)
Bug description: When dpm-drain replicates files which belong to a space, the replicas fall out of that space (the spacetoken is not preserved for the replicas).
This regression test runs on both the UI and the
DPM nodes (for executing privileged commands). "ssh -c" is used to send remote commands to the
DPM Head node. Also, some of the test code is written in C and uses the
DPM API. The shell wrapper uses gcc to compile the source and link to the
DPM libraries.
The test runs in the context of a specific VO (the value of the
VO
variable in dpm-trusted.sh). At least two
DPM pools have to be configured and accessible to the VO in order to execute the test.
First the python API is used to obtain information about the available pools and the test tries to locate at lease two matching the above requirement. dpm-reservespace is used to reserve space in the first pool. A permanent file is copied there with lcg-cp. Then the script finds out the dpm_disk that stores our file and the list of other dpm_disks in the pool. It to put them in READONLY mode and then drains the disk storing the new file. dpm-drain is supposed to fail. Replication of this file to other pools (we know there is at least one which our VO can access) should not succeed because this will put the replica out of the spacetoken.
bug #40500 (DPM: multiple groups on spaces)
This is a new feature - it should be possible to reserve space and make it accessible to multiple groups. The test used dpm-reservespace and dpm-modifyspace to initially reserve
DPM pool space and grant access to two different VOs. A VOMS proxy for the first VO is used to verify access is granted. Then the second VO is denied access to the space. New voms proxy is created (for the second VO) and the access control enforcement is verified. In the end the test switches back to the first identity and check again that the first VO still has access to the space.
bug #40553 ([DPM]: dpm-drain should replicate non expired volatile files)
Bug description: dpm-drain does not create replicas for volatile files which lifetime has not expired yet (instead such files are deleted from the pool being drained)
The test uses dpm_put, globus_url_copy and dpm_put_done to place a volatile file in a
DPM pool with lifetime set to MAX_LIFETIME. Then starts the drain procedure. After its completion it checks whether the file still exists by requesting a prepare to get with lcg-gt.
bug #40927 ([DPM] To remove file entries on some conditions)
Bug description: After "put request abort" and "put request timeout" or during expired volatile file garbage collection, the
DPM server does not remove the DPNS entries for these files. The test reproduces such conditions and checks whether the DPNS entry is removed.
bug #31041 ({lfc,dpns}-get{usr,grp}map is missing)
The test checks whether lfc-listusrmap, lfc-listgrpmap, dpns-listusrmap, dpns-listgrpmap command line tools are available and behave as expected.