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