############################################################################## # Copyright (c) 2004, The Regents of the University of California. # Produced at the Lawrence Livermore National Laboratory. # Written by Tim Harsch # UCRL-CODE-155918 # All rights reserved. # # This file is part of Schedule::DRMAAc. For details, see CPAN # Please also read LICENSE.txt which is found in this source distribution. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License (as published by the # Free Software Foundation) version 2, dated June 1991. # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY # OF MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the terms and conditions of the GNU General Public License for more # details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################## # $Id: 04_standard_attrs.t,v 1.2 2004/04/27 20:50:36 harsch Exp $ ############################################################################## use Schedule::DRMAAc qw/ :all /; use strict; use constant TESTS => 17; use Test::More tests => TESTS; sub mydiag( $ $ ; $ ); my $remote_cmd = "/bin/sleep"; my( $error, $diagnosis ); my @vals = drmaa_strerror( 0 ); ok( @vals == 1, "drmaa_strerror returned " . scalar(@vals) . " of 1 args" ); @vals = ( $error, $diagnosis ) = drmaa_init( undef ); ok( @vals == 2, "drmaa_init returned " . scalar(@vals) . " of 2 args" ); ok( $error == $DRMAA_ERRNO_SUCCESS, "drmaa_init error?" ) or mydiag( $error, $diagnosis ); my $jt; @vals = ( $error, $jt, $diagnosis ) = drmaa_allocate_job_template(); ok( @vals == 3, "drmaa_init returned " . scalar(@vals) . " of 3 args" ); ok( $error == $DRMAA_ERRNO_SUCCESS, "drmaa_allocate_job_template error?" ) or mydiag( $error, $diagnosis ); @vals = ( $error, $diagnosis ) = drmaa_set_attribute( $jt, $DRMAA_REMOTE_COMMAND, $remote_cmd ); ok( @vals == 2, "drmaa_set_attribute returned " . scalar(@vals) . " of 2 args" ); ok( $error == $DRMAA_ERRNO_SUCCESS, "drmaa_set_attribute error?" ) or mydiag( $error, $diagnosis ); my $value; @vals = ( $error, $value, $diagnosis ) = drmaa_get_attribute( $jt, $DRMAA_REMOTE_COMMAND ); ok( @vals == 3, "drmaa_get_attribute returned " . scalar(@vals) . " of 3 args" ); ok( $error == $DRMAA_ERRNO_SUCCESS, "drmaa_get_attribute error?" ) or mydiag( $error, $diagnosis ); is( $value, $remote_cmd, "DRM return the same value as we set?" ); my $names; @vals = ( $error, $names, $diagnosis) = drmaa_get_attribute_names(); ok( @vals == 3, "drmaa_get_attribute_names returned " . scalar(@vals) . " of 3 args" ); ok( $error == $DRMAA_ERRNO_SUCCESS, "drmaa_get_attribute_names error?" ) or mydiag( $error, $diagnosis ); my( $retval, $name ); @vals = ( $retval, $name ) = drmaa_get_next_attr_name( $names ); ok( @vals == 2, "drmaa_get_next_attr_name returned " . scalar(@vals) . " of 2 args" ); ok( $error == $DRMAA_ERRNO_SUCCESS, "drmaa_get_next_attr_name error?" ) or mydiag( $error, $diagnosis ); my @names = ( $name ); while( my( $retval, $name ) = drmaa_get_next_attr_name( $names ) ) { last if $retval != $DRMAA_ERRNO_SUCCESS; push @names, $name; # record all DRM attrs } # end while my %legit_std_attrs = ( # 1 mandatory, 2 optional $DRMAA_REMOTE_COMMAND => 1, $DRMAA_JS_STATE => 1, $DRMAA_WD => 1, $DRMAA_JOB_CATEGORY => 1, $DRMAA_NATIVE_SPECIFICATION => 1, $DRMAA_BLOCK_EMAIL => 1, $DRMAA_START_TIME => 1, $DRMAA_JOB_NAME => 1, $DRMAA_INPUT_PATH => 1, $DRMAA_OUTPUT_PATH => 1, $DRMAA_ERROR_PATH => 1, $DRMAA_JOIN_FILES => 1, $DRMAA_TRANSFER_FILES => 2, $DRMAA_DEADLINE_TIME => 2, $DRMAA_WCT_HLIMIT => 2, $DRMAA_WCT_SLIMIT => 2, $DRMAA_DURATION_HLIMIT => 2, $DRMAA_DURATION_SLIMIT => 2, ); my $all_std_defined = 0; my $all_opt_defined = 0; foreach my $attr ( @names ) { if( defined $legit_std_attrs{$name} ) { $all_std_defined++ if $legit_std_attrs{$name} == 1; $all_opt_defined++ if $legit_std_attrs{$name} == 2; } # end if\ } # end foreach is( $all_std_defined, scalar( grep{ $legit_std_attrs{$_} == 1} keys %legit_std_attrs), "DRM returned enough mandatory standard attributes?" ); ok( $all_opt_defined >= 0, "DRM returned $all_opt_defined of " . scalar( grep{ $legit_std_attrs{$_} == 2} keys %legit_std_attrs) . " possible optional attributes" ); @vals = drmaa_release_attr_names( $names ); ok( @vals == 0, "drmaa_release_attr_names returned " . scalar(@vals) . " of 0 args" ); sub mydiag( $ $ ; $ ) { my $msg = "error: " . drmaa_strerror( $_[0] ) . "\n" . "diagnosis: " . $_[1]; $msg .= $_[2] if defined $_[2]; diag( $msg ); } # end sub 1; # Ancient Druid Custom