1 #
   2 # CDDL HEADER START
   3 #
   4 # The contents of this file are subject to the terms of the
   5 # Common Development and Distribution License (the "License").
   6 # You may not use this file except in compliance with the License.
   7 #
   8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9 # or http://www.opensolaris.org/os/licensing.
  10 # See the License for the specific language governing permissions
  11 # and limitations under the License.
  12 #
  13 # When distributing Covered Code, include this CDDL HEADER in each
  14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15 # If applicable, add the following below this CDDL HEADER, with the
  16 # fields enclosed by brackets "[]" replaced with your own identifying
  17 # information: Portions Copyright [yyyy] [name of copyright owner]
  18 #
  19 # CDDL HEADER END
  20 #
  21 
  22 #
  23 # Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  24 #
  25 
  26 # a function that takes a file, then creates and verifies
  27 # an xattr on that file. The xattr_contents is the file
  28 # that should appear in the xattr namespace.
  29 
  30 function create_xattr
  31 {       # filename xattr_name xattr_contents
  32         typeset FILE=$1
  33         typeset XATTR_NAME=$2
  34         typeset XATTR_CONTENTS=$3
  35 
  36         # read any empty xattr dir on that file
  37         cti_execute_cmd "runat $FILE ls"
  38 
  39         # create the xattr
  40         cti_execute FAIL "runat $FILE cp $XATTR_CONTENTS $XATTR_NAME"
  41         if [[ $? != 0 ]]; then
  42                 cti_fail "FAIL:In function create_xattr: "\
  43                         "create xattr-of-$FILE failed unexpectedly"
  44                 return
  45         fi
  46 
  47         verify_xattr $FILE $XATTR_NAME $XATTR_CONTENTS
  48 }
  49 
  50 # a function that compares the a single xattr between two files
  51 # and checks to see if their contents are identical
  52 
  53 function compare_xattrs
  54 {       # filename1 filename2 xattr_name
  55         typeset FILE1=$1
  56         typeset FILE2=$2
  57         typeset XATTR_NAME=$3
  58 
  59         cti_execute_cmd "runat $FILE1 cat $XATTR_NAME > /tmp/file1.$$"
  60         cti_execute_cmd "runat $FILE2 cat $XATTR_NAME > /tmp/file2.$$"
  61         cti_execute_cmd "diff /tmp/file1.$$ /tmp/file2.$$ \
  62                 >> /tmp/diffout.$$ 2>&1"
  63         if [[ $? != 0 ]]; then
  64                 cti_fail "FAIL:In function compare_xattrs: "\
  65                         "compare xattr-of-$FILE1 with xattr-of-$FILE2 "\
  66                         "failed unexpectedly"
  67                 cti_report "diff xattrs-of-$FILE1 xattrs-of-$FILE2 "\
  68                         "printed you can see the file /tmp/diffout.$$"
  69                 return
  70         else
  71                 cti_report "PASS:In function compare_xattrs: "\
  72                         "compare xattr-of-$FILE1 with xattr-of-$FILE2 "\
  73                         "succeeded as expected"
  74         fi
  75 
  76         cti_execute_cmd "rm /tmp/file1.$$ /tmp/file2.$$"
  77         if [[ $? != 0 ]]; then
  78                 cti_fail "FAIL:In function compare_xattrs: "\
  79                         "rm temp file: /tmp/file1.$$ /tmp/file2.$$ "\
  80                         "failed unexpectedly"
  81                 return
  82         else
  83                 cti_report "PASS:In function compare_xattrs: "\
  84                         "rm temp file: /tmp/file1.$$ /tmp/file2.$$ "\
  85                         "succeeded as expected"
  86         fi
  87 }
  88 
  89 # verify xattr exists and has content matching xattr_contents
  90 
  91 function verify_xattr
  92 {       # filename xattr_name xattr_contents
  93         typeset FILE=$1
  94         typeset XATTR_NAME=$2
  95         typeset XATTR_CONTENTS=$3
  96 
  97         cti_execute_cmd "runat $FILE diff $XATTR_NAME $XATTR_CONTENTS"
  98         if [[ $? != 0 ]]; then
  99                 cti_fail "FAIL:In function verify_xattr: "\
 100                         "verify xattr-of-$FILE failed unexpectedly"
 101                 return
 102         fi
 103 }
 104 
 105 function delete_xattr
 106 {       # filename xattr_name
 107         typeset FILE=$1
 108         typeset XATTR_NAME=$2
 109 
 110         # delete the xattr
 111         cti_execute_cmd "runat $FILE rm $XATTR_NAME"
 112         if [[ $? != 0 ]]; then
 113                 cti_fail "FAIL:In function delete_xattr: "\
 114                         "delete xattr-of-$FILE failed unexpectedly"
 115                 return
 116         else
 117                 cti_report "PASS:In function delete_xattr: "\
 118                         "delete xattr-of-$FILE succeeded as expected"
 119         fi
 120 
 121         # make sure it's gone (ls should fail)
 122         cti_execute PASS "runat $FILE ls $XATTR_NAME"
 123         if [[ $? == 0 ]]; then
 124                 cti_fail "FAIL:In function delete_xattr: "\
 125                         "$FILE has xattr named $XATTR_NAME unexpectedly"
 126                 return
 127         else
 128                 cti_report "PASS:In function delete_xattr: "\
 129                         "$FILE does not have xattr named "\
 130                         "$XATTR_NAME as expected"
 131         fi
 132 
 133 }
 134 
 135 # not sure about this : really this should be testing write/append
 136 
 137 function verify_write_xattr
 138 {       # filename xattr_name
 139         typeset FILE=$1
 140         typeset XATTR_NAME=$2
 141 
 142         cti_execute_cmd "runat $FILE dd if=/etc/passwd of=$XATTR_NAME"
 143         if [[ $? != 0 ]]; then
 144                 cti_fail "FAIL:In function verify_write_xattr: "\
 145                         "create xattr-of-$FILE named $XATTR_NAME "\
 146                         "failed unexpectedly"
 147                 return
 148         else
 149         cti_report "PASS:In function verify_write_xattr: "\
 150                 "create xattr-of-$FILE named $XATTR_NAME succeeded"
 151         fi
 152 
 153         cti_execute_cmd "runat $FILE cat $XATTR_NAME \
 154                 > /tmp/$XATTR_NAME.$$ 2>&1"
 155         if [[ $? != 0 ]]; then
 156                 cti_fail "FAIL:In function verify_write_xattr: "\
 157                         "cat xattr-of-$FILE named $XATTR_NAME "\
 158                         "failed unexpectedly"
 159                 return
 160         else
 161                 cti_report "PASS:In function verify_write_xattr: "\
 162                         "cat xattr-of-$FILE named $XATTR_NAME succeeded"
 163         fi
 164 
 165         cti_execute_cmd "dd if=/etc/passwd of=/tmp/passwd_dd.$$"
 166         cti_execute_cmd "diff /tmp/passwd_dd.$$ /tmp/$XATTR_NAME.$$"
 167         if [[ $? != 0 ]]; then
 168                 cti_fail "FAIL:In function verify_write_xattr: "\
 169                         "diff xattr-of-$FILE named $XATTR_NAME failed"
 170                 return
 171         else
 172                 cti_report "PASS:In function verify_write_xattr: "\
 173                         "diff xattr-of-$FILE named $XATTR_NAME succeeded"
 174         fi
 175 
 176         cti_execute_cmd "rm /tmp/passwd_dd.$$ /tmp/$XATTR_NAME.$$"
 177 }
 178 
 179 # this function is to create the expected output
 180 
 181 function create_expected_output
 182 {       # expected_output_file  contents_of_the_output
 183         typeset FILE=$1
 184         shift
 185         if [[ -e $FILE ]]; then
 186                 cti_execute_cmd "rm $FILE"
 187         fi
 188 
 189         for line in $@
 190         do
 191                 cti_execute_cmd "echo $line >> $FILE"
 192         done
 193  }