1*fd71220bSRobert Mustacchi#!/usr/bin/ksh 2*fd71220bSRobert Mustacchi# 3*fd71220bSRobert Mustacchi# 4*fd71220bSRobert Mustacchi# This file and its contents are supplied under the terms of the 5*fd71220bSRobert Mustacchi# Common Development and Distribution License ("CDDL"), version 1.0. 6*fd71220bSRobert Mustacchi# You may only use this file in accordance with the terms of version 7*fd71220bSRobert Mustacchi# 1.0 of the CDDL. 8*fd71220bSRobert Mustacchi# 9*fd71220bSRobert Mustacchi# A full copy of the text of the CDDL should have accompanied this 10*fd71220bSRobert Mustacchi# source. A copy of the CDDL is also available via the Internet at 11*fd71220bSRobert Mustacchi# http://www.illumos.org/license/CDDL. 12*fd71220bSRobert Mustacchi# 13*fd71220bSRobert Mustacchi 14*fd71220bSRobert Mustacchi# 15*fd71220bSRobert Mustacchi# Copyright 2022 Oxide Computer Company 16*fd71220bSRobert Mustacchi# 17*fd71220bSRobert Mustacchi 18*fd71220bSRobert Mustacchi# 19*fd71220bSRobert Mustacchi# Set up the environment with a standard locale and debugging tools to 20*fd71220bSRobert Mustacchi# help us catch failures. 21*fd71220bSRobert Mustacchi# 22*fd71220bSRobert Mustacchiexport LC_ALL=C.UTF-8 23*fd71220bSRobert Mustacchiexport LD_PRELOAD=libumem.so 24*fd71220bSRobert Mustacchiexport UMEM_DEBUG=default 25*fd71220bSRobert Mustacchiunalias -a 26*fd71220bSRobert Mustacchiset -o pipefail 27*fd71220bSRobert Mustacchi 28*fd71220bSRobert Mustacchigt_prog=/usr/sbin/gpioadm 29*fd71220bSRobert Mustacchigt_arg0=$(basename $0) 30*fd71220bSRobert Mustacchigt_data="$(dirname $0)/data" 31*fd71220bSRobert Mustacchigt_exit=0 32*fd71220bSRobert Mustacchigt_tmpfile="/tmp/gpioadm_test.$$" 33*fd71220bSRobert Mustacchigt_dpio0="gpioadmtestsim00" 34*fd71220bSRobert Mustacchigt_dpio1="gpioadmtestsim10" 35*fd71220bSRobert Mustacchigt_dpio2="gpioadmtestsim21" 36*fd71220bSRobert Mustacchi 37*fd71220bSRobert Mustacchiwarn() 38*fd71220bSRobert Mustacchi{ 39*fd71220bSRobert Mustacchi typeset msg="$*" 40*fd71220bSRobert Mustacchi [[ -z "$msg" ]] && msg="failed" 41*fd71220bSRobert Mustacchi echo "TEST FAILED: $msg" >&2 42*fd71220bSRobert Mustacchi gt_exit=1 43*fd71220bSRobert Mustacchi} 44*fd71220bSRobert Mustacchi 45*fd71220bSRobert Mustacchifatal() 46*fd71220bSRobert Mustacchi{ 47*fd71220bSRobert Mustacchi typeset msg="$*" 48*fd71220bSRobert Mustacchi [[ -z "$msg" ]] && msg="failed" 49*fd71220bSRobert Mustacchi echo "$sc_arg0: $msg" >&2 50*fd71220bSRobert Mustacchi exit 1 51*fd71220bSRobert Mustacchi} 52*fd71220bSRobert Mustacchi 53*fd71220bSRobert Mustacchicleanup() 54*fd71220bSRobert Mustacchi{ 55*fd71220bSRobert Mustacchi rm -f "$gt_tmpfile" 56*fd71220bSRobert Mustacchi} 57*fd71220bSRobert Mustacchi 58*fd71220bSRobert Mustacchi# 59*fd71220bSRobert Mustacchi# This is an invocation of gpioadm that we want to verify runs 60*fd71220bSRobert Mustacchi# successfully. We do not care about it's output, only that it exits 0. 61*fd71220bSRobert Mustacchi# 62*fd71220bSRobert Mustacchiexpect_success() 63*fd71220bSRobert Mustacchi{ 64*fd71220bSRobert Mustacchi if ! $gt_prog $@ >/dev/null; then 65*fd71220bSRobert Mustacchi warn "failed to run $@" 66*fd71220bSRobert Mustacchi fi 67*fd71220bSRobert Mustacchi} 68*fd71220bSRobert Mustacchi 69*fd71220bSRobert Mustacchi# 70*fd71220bSRobert Mustacchi# This is an invocation of gpioadm that we want to verify exits 71*fd71220bSRobert Mustacchi# non-zero. We do not care if it is a failure or due to usage. 72*fd71220bSRobert Mustacchi# 73*fd71220bSRobert Mustacchigpioadm_err() 74*fd71220bSRobert Mustacchi{ 75*fd71220bSRobert Mustacchi typeset reason="$1" 76*fd71220bSRobert Mustacchi shift 77*fd71220bSRobert Mustacchi 78*fd71220bSRobert Mustacchi if $gt_prog $@ 2>/dev/null 1>/dev/null; then 79*fd71220bSRobert Mustacchi warn "should have failed with args "$@", but passed" 80*fd71220bSRobert Mustacchi return 81*fd71220bSRobert Mustacchi fi 82*fd71220bSRobert Mustacchi 83*fd71220bSRobert Mustacchi printf "TEST PASSED: $reason: %s\n" "$*" 84*fd71220bSRobert Mustacchi} 85*fd71220bSRobert Mustacchi 86*fd71220bSRobert Mustacchi# 87*fd71220bSRobert Mustacchi# This is a case where we expect gpioadm to exit sucessfully, but we 88*fd71220bSRobert Mustacchi# want to check its exit data against a known value. 89*fd71220bSRobert Mustacchi# 90*fd71220bSRobert Mustacchicheck_output() 91*fd71220bSRobert Mustacchi{ 92*fd71220bSRobert Mustacchi typeset outfile="$gt_data/$1" 93*fd71220bSRobert Mustacchi shift 94*fd71220bSRobert Mustacchi 95*fd71220bSRobert Mustacchi if ! $gt_prog $@ > $gt_tmpfile 2>&1; then 96*fd71220bSRobert Mustacchi warn "$@: exited non-zero" 97*fd71220bSRobert Mustacchi fi 98*fd71220bSRobert Mustacchi 99*fd71220bSRobert Mustacchi if ! diff $outfile $gt_tmpfile; then 100*fd71220bSRobert Mustacchi warn "$@: output mismatched" 101*fd71220bSRobert Mustacchi else 102*fd71220bSRobert Mustacchi printf "TEST PASSED: %s\n" "$*" 103*fd71220bSRobert Mustacchi fi 104*fd71220bSRobert Mustacchi} 105*fd71220bSRobert Mustacchi 106*fd71220bSRobert Mustacchicheck_dpio_link() 107*fd71220bSRobert Mustacchi{ 108*fd71220bSRobert Mustacchi typeset dpio="$1" 109*fd71220bSRobert Mustacchi 110*fd71220bSRobert Mustacchi if [[ ! -L "/dev/dpio/$dpio" ]]; then 111*fd71220bSRobert Mustacchi warn "missing /dev link for $dpio" 112*fd71220bSRobert Mustacchi else 113*fd71220bSRobert Mustacchi printf "TEST PASSED /dev link for %s present\n" "$dpio" 114*fd71220bSRobert Mustacchi fi 115*fd71220bSRobert Mustacchi} 116*fd71220bSRobert Mustacchi 117*fd71220bSRobert Mustacchi# 118*fd71220bSRobert Mustacchi# This gets a specific GPIO's attribute value and confirm it's what we 119*fd71220bSRobert Mustacchi# expect. 120*fd71220bSRobert Mustacchi# 121*fd71220bSRobert Mustacchicheck_attr_field() 122*fd71220bSRobert Mustacchi{ 123*fd71220bSRobert Mustacchi typeset gpio="$1" 124*fd71220bSRobert Mustacchi typeset attr="$2" 125*fd71220bSRobert Mustacchi typeset exp="$3" 126*fd71220bSRobert Mustacchi typeset field="$4" 127*fd71220bSRobert Mustacchi typeset out= 128*fd71220bSRobert Mustacchi 129*fd71220bSRobert Mustacchi out=$($gt_prog gpio attr get -p -o $field $gpio $attr) 130*fd71220bSRobert Mustacchi if (( $? != 0 )); then 131*fd71220bSRobert Mustacchi warn "failed to gpio attr get $gpio $attr" 132*fd71220bSRobert Mustacchi return 133*fd71220bSRobert Mustacchi fi 134*fd71220bSRobert Mustacchi 135*fd71220bSRobert Mustacchi if [[ "$out" != "$exp" ]]; then 136*fd71220bSRobert Mustacchi warn "$gpio $attr has $field $out, expected $exp" 137*fd71220bSRobert Mustacchi else 138*fd71220bSRobert Mustacchi printf "TEST PASSED: %s %s has expected %s %s\n" "$gpio" \ 139*fd71220bSRobert Mustacchi "$attr" "$field" "$exp" 140*fd71220bSRobert Mustacchi fi 141*fd71220bSRobert Mustacchi} 142*fd71220bSRobert Mustacchi 143*fd71220bSRobert Mustacchicheck_attr_val() 144*fd71220bSRobert Mustacchi{ 145*fd71220bSRobert Mustacchi check_attr_field $1 $2 $3 "value" 146*fd71220bSRobert Mustacchi} 147*fd71220bSRobert Mustacchi 148*fd71220bSRobert Mustacchiif [[ -n $GPIOADM ]]; then 149*fd71220bSRobert Mustacchi gt_prog=$GPIOADM 150*fd71220bSRobert Mustacchifi 151*fd71220bSRobert Mustacchi 152*fd71220bSRobert Mustacchitrap 'cleanup' EXIT 153*fd71220bSRobert Mustacchi 154*fd71220bSRobert Mustacchi# 155*fd71220bSRobert Mustacchi# These are a series of programs we expect to fail due to invalid 156*fd71220bSRobert Mustacchi# arguments and other variants that don't require state to be built up. 157*fd71220bSRobert Mustacchi# These are all basically bad flags, commands, or filters that don't 158*fd71220bSRobert Mustacchi# match. Other tests in the gpio test suite will go and verify the more 159*fd71220bSRobert Mustacchi# fine grained errors against libxpio directly. 160*fd71220bSRobert Mustacchi# 161*fd71220bSRobert Mustacchigpioadm_err "bad command" foo 162*fd71220bSRobert Mustacchigpioadm_err "bad command" foo bar 163*fd71220bSRobert Mustacchigpioadm_err "incomplete command" controller 164*fd71220bSRobert Mustacchigpioadm_err "bad command" controller nope 165*fd71220bSRobert Mustacchigpioadm_err "bad command" controller wry 166*fd71220bSRobert Mustacchigpioadm_err "bad flags" controller list -b 167*fd71220bSRobert Mustacchigpioadm_err "parse without fields" controller list -p 168*fd71220bSRobert Mustacchigpioadm_err "bad field" controller list -p -o itsatrap 169*fd71220bSRobert Mustacchigpioadm_err "bad field" controller list -o itsatrap 170*fd71220bSRobert Mustacchigpioadm_err "bad field" controller list -p -o controller,itsatrap 171*fd71220bSRobert Mustacchigpioadm_err "unmatched filter" controller list this/doesnt/exist 172*fd71220bSRobert Mustacchigpioadm_err "incomplete command" gpio 173*fd71220bSRobert Mustacchigpioadm_err "bad command" gpio celes 174*fd71220bSRobert Mustacchigpioadm_err "bad command" gpio celes terra 175*fd71220bSRobert Mustacchigpioadm_err "bad flags" gpio list -r 176*fd71220bSRobert Mustacchigpioadm_err "bad flags" gpio list -7 177*fd71220bSRobert Mustacchigpioadm_err "parse without fields" gpio list -p 178*fd71220bSRobert Mustacchigpioadm_err "bad field" gpio list -p -o 12345 179*fd71220bSRobert Mustacchigpioadm_err "bad field" gpio list -o 12345 180*fd71220bSRobert Mustacchigpioadm_err "bad field" gpio list -p -o name,12345 181*fd71220bSRobert Mustacchigpioadm_err "unmatched filter" gpio list life/hopes/dreams 182*fd71220bSRobert Mustacchigpioadm_err "unmatched filter" gpio list where do they come from 183*fd71220bSRobert Mustacchigpioadm_err "match more than one with -1" gpio list -1 184*fd71220bSRobert Mustacchigpioadm_err "match more than one with -1" gpio list -1 gpio_sim0 185*fd71220bSRobert Mustacchigpioadm_err "match more than one with -1" gpio list -1 gpio_sim0 gpio_sim1 186*fd71220bSRobert Mustacchigpioadm_err "match more than one with -1" gpio list -1 */open-drain 187*fd71220bSRobert Mustacchigpioadm_err "match more than one with -1" gpio list -1 \ 188*fd71220bSRobert Mustacchi gpio_sim0/periodic-500ms gpio_sim1/1v8 189*fd71220bSRobert Mustacchigpioadm_err "incomplete command" gpio attr 190*fd71220bSRobert Mustacchigpioadm_err "bad command" gpio attr where are they going 191*fd71220bSRobert Mustacchigpioadm_err "missing controller/gpio" gpio attr get 192*fd71220bSRobert Mustacchigpioadm_err "bad controller/gpio" gpio attr get null 193*fd71220bSRobert Mustacchigpioadm_err "bad controller/gpio" gpio attr get gpio_sim/3 194*fd71220bSRobert Mustacchigpioadm_err "bad controller/gpio" gpio attr get gpio_sim0/kefka 195*fd71220bSRobert Mustacchigpioadm_err "parse without fields" gpio attr get gpio_sim0/3 -p 196*fd71220bSRobert Mustacchigpioadm_err "bad flags" gpio attr get -p gpio_sim0/3 197*fd71220bSRobert Mustacchigpioadm_err "bad flags" gpio attr get -x gpio_sim0/3 198*fd71220bSRobert Mustacchigpioadm_err "bad fields" gpio attr get -p -o frodo gpio_sim1/2 199*fd71220bSRobert Mustacchigpioadm_err "bad fields" gpio attr get -o sam gpio_sim1/2 200*fd71220bSRobert Mustacchigpioadm_err "bad fields" gpio attr get -p -o sim:input,frodo gpio_sim1/2 201*fd71220bSRobert Mustacchigpioadm_err "bad filter" gpio attr get gpio_sim0/3 dusk 202*fd71220bSRobert Mustacchigpioadm_err "bad filter" gpio attr get gpio_sim0/3 sim:pull muysterious 203*fd71220bSRobert Mustacchigpioadm_err "missing controller/gpio" gpio attr set 204*fd71220bSRobert Mustacchigpioadm_err "bad controller/gpio" gpio attr set gandalf 205*fd71220bSRobert Mustacchigpioadm_err "bad controller/gpio" gpio attr set gpio_sim/1 206*fd71220bSRobert Mustacchigpioadm_err "bad controller/gpio" gpio attr set gpio_sim0/gimli 207*fd71220bSRobert Mustacchigpioadm_err "missing attributes" gpio attr set gpio_sim0/1 208*fd71220bSRobert Mustacchigpioadm_err "bad flags" gpio attr set -x gpio_sim0/4 sim:output=low 209*fd71220bSRobert Mustacchigpioadm_err "bad attribute string" gpio attr set gpio_sim0/1 foo 210*fd71220bSRobert Mustacchigpioadm_err "bad attribute string" gpio attr set gpio_sim0/1 foo= 211*fd71220bSRobert Mustacchigpioadm_err "bad attribute value" gpio attr set gpio_sim0/1 sim:speed=random 212*fd71220bSRobert Mustacchigpioadm_err "bad attribute value" gpio attr set gpio_sim0/1 sim:input=0x42 213*fd71220bSRobert Mustacchigpioadm_err "incomplete command" dpio 214*fd71220bSRobert Mustacchigpioadm_err "bad command" dpio alchemy 215*fd71220bSRobert Mustacchigpioadm_err "bad flags" dpio list -m 216*fd71220bSRobert Mustacchigpioadm_err "parse without fields" dpio list -p 217*fd71220bSRobert Mustacchigpioadm_err "bad field" dpio list -p -o sabin 218*fd71220bSRobert Mustacchigpioadm_err "bad field" dpio list -o edgar 219*fd71220bSRobert Mustacchigpioadm_err "bad field" dpio list -p -o edgar,sabin,controller 220*fd71220bSRobert Mustacchigpioadm_err "unmatched filter" dpio list locke/esper 221*fd71220bSRobert Mustacchigpioadm_err "missing operands" dpio define 222*fd71220bSRobert Mustacchigpioadm_err "missing dpio" dpio define cloud 223*fd71220bSRobert Mustacchigpioadm_err "missing dpio" dpio define tifa/ 224*fd71220bSRobert Mustacchigpioadm_err "missing dpio" dpio define sepiroth/7 225*fd71220bSRobert Mustacchigpioadm_err "bad controller" dpio define cloud buster 226*fd71220bSRobert Mustacchigpioadm_err "bad controller" dpio define tifa/ 7th 227*fd71220bSRobert Mustacchigpioadm_err "bad controller" dpio define sepiroth/7 reunion 228*fd71220bSRobert Mustacchigpioadm_err "bad controller" dpio define rufus/8 hq 229*fd71220bSRobert Mustacchigpioadm_err "bad flags" dpio define -7 rufus/8 hq 230*fd71220bSRobert Mustacchigpioadm_err "missing controller/gpio" dpio undefine 231*fd71220bSRobert Mustacchigpioadm_err "bad controller/gpio" dpio undefine red13/ 232*fd71220bSRobert Mustacchigpioadm_err "bad controller/gpio" dpio undefine cid/2 233*fd71220bSRobert Mustacchigpioadm_err "bad dpio name" dpio define gpio_sim/1 '-trap' 234*fd71220bSRobert Mustacchigpioadm_err "bad dpio name" dpio define gpio_sim/1 '+foobar' 235*fd71220bSRobert Mustacchigpioadm_err "bad dpio name" dpio define gpio_sim/1 '$nope' 236*fd71220bSRobert Mustacchigpioadm_err "bad dpio name" dpio define gpio_sim/1 '~sorry' 237*fd71220bSRobert Mustacchigpioadm_err "bad dpio name" dpio define gpio_sim/1 \ 238*fd71220bSRobert Mustacchi 'thisisanamethatisactuallytoolongibelieve' 239*fd71220bSRobert Mustacchigpioadm_err "bad dpio name" dpio define gpio_sim/1 'unsup()12#d' 240*fd71220bSRobert Mustacchi 241*fd71220bSRobert Mustacchi# 242*fd71220bSRobert Mustacchi# For the next set of tests we verify expected output from the various 243*fd71220bSRobert Mustacchi# listing operations with the goal of verifying that field selection, 244*fd71220bSRobert Mustacchi# parseability, omitting the header, and filtering is all working. Note, 245*fd71220bSRobert Mustacchi# we explicitly never use an unfiltered top-level list operation as we 246*fd71220bSRobert Mustacchi# have to assume that there will be something else on the system other 247*fd71220bSRobert Mustacchi# than the gpio_sim controllers that we create. 248*fd71220bSRobert Mustacchi# 249*fd71220bSRobert Mustacchicheck_output "ctrl-list.out" controller list -o \ 250*fd71220bSRobert Mustacchi controller,ngpios,ndpios,provider,path gpio_sim0 gpio_sim1 gpio_sim2 251*fd71220bSRobert Mustacchicheck_output "ctrl-list-H.out" controller list -H -o \ 252*fd71220bSRobert Mustacchi controller,ngpios,ndpios,provider,path gpio_sim0 gpio_sim1 gpio_sim2 253*fd71220bSRobert Mustacchicheck_output "ctrl-list-p.out" controller list -p -o \ 254*fd71220bSRobert Mustacchi controller,ngpios,ndpios,provider,path gpio_sim0 gpio_sim1 gpio_sim2 255*fd71220bSRobert Mustacchicheck_output "ctrl-list-sim1.out" controller list -o \ 256*fd71220bSRobert Mustacchi controller,ngpios,provider gpio_sim1 257*fd71220bSRobert Mustacchicheck_output "ctrl-list-H-sim1.out" controller list -H -o \ 258*fd71220bSRobert Mustacchi controller,ngpios,provider gpio_sim1 259*fd71220bSRobert Mustacchicheck_output "ctrl-list-p-sim1.out" controller list -p -o \ 260*fd71220bSRobert Mustacchi controller,ngpios,provider gpio_sim1 261*fd71220bSRobert Mustacchicheck_output "gpio-period500.out" gpio list */periodic-500ms 262*fd71220bSRobert Mustacchicheck_output "gpio-period500-H.out" gpio list -H */periodic-500ms 263*fd71220bSRobert Mustacchicheck_output "gpio-period500-o.out" gpio list -o controller */periodic-500ms 264*fd71220bSRobert Mustacchicheck_output "gpio-period500-p.out" gpio list -p -o controller */periodic-500ms 265*fd71220bSRobert Mustacchicheck_output "gpio-sim0.out" gpio list gpio_sim0 266*fd71220bSRobert Mustacchicheck_output "gpio-sim0-H.out" gpio list -H gpio_sim0 267*fd71220bSRobert Mustacchicheck_output "gpio-sim0-o.out" gpio list -o controller gpio_sim0 268*fd71220bSRobert Mustacchicheck_output "gpio-sim0-p.out" gpio list -p -o controller gpio_sim0 269*fd71220bSRobert Mustacchicheck_output "gpio-sim01.out" gpio list gpio_sim0 gpio_sim1 270*fd71220bSRobert Mustacchicheck_output "gpio-sim01-H.out" gpio list -H gpio_sim0 gpio_sim1 271*fd71220bSRobert Mustacchicheck_output "gpio-sim01-o.out" gpio list -o controller gpio_sim0 gpio_sim1 272*fd71220bSRobert Mustacchicheck_output "gpio-sim01-p.out" gpio list -p -o controller gpio_sim0 gpio_sim1 273*fd71220bSRobert Mustacchicheck_output "attr-g0_0.out" gpio attr get gpio_sim0/0 274*fd71220bSRobert Mustacchicheck_output "attr-g0_0-H.out" gpio attr get -H gpio_sim0/0 275*fd71220bSRobert Mustacchicheck_output "attr-g0_0-o.out" gpio attr get -o attr,value,raw,possible \ 276*fd71220bSRobert Mustacchi gpio_sim0/0 277*fd71220bSRobert Mustacchicheck_output "attr-g0_0-Ho.out" gpio attr get -H -o attr,value,raw,possible \ 278*fd71220bSRobert Mustacchi gpio_sim0/0 279*fd71220bSRobert Mustacchicheck_output "attr-g0_0-p.out" gpio attr get -p -o attr,value,raw,possible \ 280*fd71220bSRobert Mustacchi gpio_sim0/0 281*fd71220bSRobert Mustacchicheck_output "attr-g0_0_filt.out" gpio attr get -o attr,value gpio_sim0/0 \ 282*fd71220bSRobert Mustacchi name sim:pull sim:voltage 283*fd71220bSRobert Mustacchicheck_output "attr-g0_0_filt-p.out" gpio attr get -p -o attr,value gpio_sim0/0 \ 284*fd71220bSRobert Mustacchi name sim:pull sim:voltage 285*fd71220bSRobert Mustacchi# 286*fd71220bSRobert Mustacchi# Repeat the above with the actual GPIO name 287*fd71220bSRobert Mustacchi# 288*fd71220bSRobert Mustacchicheck_output "attr-g0_0.out" gpio attr get gpio_sim0/1v8 289*fd71220bSRobert Mustacchicheck_output "attr-g0_0-H.out" gpio attr get -H gpio_sim0/1v8 290*fd71220bSRobert Mustacchicheck_output "attr-g0_0-o.out" gpio attr get -o attr,value,raw,possible \ 291*fd71220bSRobert Mustacchi gpio_sim0/1v8 292*fd71220bSRobert Mustacchicheck_output "attr-g0_0-Ho.out" gpio attr get -H -o attr,value,raw,possible \ 293*fd71220bSRobert Mustacchi gpio_sim0/1v8 294*fd71220bSRobert Mustacchicheck_output "attr-g0_0-p.out" gpio attr get -p -o attr,value,raw,possible \ 295*fd71220bSRobert Mustacchi gpio_sim0/1v8 296*fd71220bSRobert Mustacchicheck_output "attr-g0_0_filt.out" gpio attr get -o attr,value gpio_sim0/1v8 \ 297*fd71220bSRobert Mustacchi name sim:pull sim:voltage 298*fd71220bSRobert Mustacchicheck_output "attr-g0_0_filt-p.out" gpio attr get -p -o attr,value \ 299*fd71220bSRobert Mustacchi gpio_sim0/1v8 name sim:pull sim:voltage 300*fd71220bSRobert Mustacchi 301*fd71220bSRobert Mustacchi# 302*fd71220bSRobert Mustacchi# To test DPIOs listing we need to actually go through and create a few 303*fd71220bSRobert Mustacchi# DPIOs. However, we also need to make sure that we leave the test with 304*fd71220bSRobert Mustacchi# these destroyed so we don't interfere with any other tests. 305*fd71220bSRobert Mustacchi# 306*fd71220bSRobert Mustacchiexpect_success dpio define gpio_sim0/0 "$gt_dpio0" 307*fd71220bSRobert Mustacchiexpect_success dpio define -r -w gpio_sim1/0 "$gt_dpio1" 308*fd71220bSRobert Mustacchiexpect_success dpio define -r -K gpio_sim2/3v3 "$gt_dpio2" 309*fd71220bSRobert Mustacchi 310*fd71220bSRobert Mustacchicheck_output "ctrl-list-dpio-p.out" controller list -p -o controller,ndpios \ 311*fd71220bSRobert Mustacchi gpio_sim0 gpio_sim1 gpio_sim2 312*fd71220bSRobert Mustacchi 313*fd71220bSRobert Mustacchicheck_output "dpio.out" dpio list "$gt_dpio0" "$gt_dpio1" "$gt_dpio2" 314*fd71220bSRobert Mustacchicheck_output "dpio-H.out" dpio list -H "$gt_dpio0" "$gt_dpio1" "$gt_dpio2" 315*fd71220bSRobert Mustacchicheck_output "dpio-o.out" dpio list -o dpio,caps,flags,controller,gpionum \ 316*fd71220bSRobert Mustacchi "$gt_dpio0" "$gt_dpio1" "$gt_dpio2" 317*fd71220bSRobert Mustacchicheck_output "dpio-Ho.out" dpio list -H -o dpio,caps,flags,controller,gpionum \ 318*fd71220bSRobert Mustacchi "$gt_dpio0" "$gt_dpio1" "$gt_dpio2" 319*fd71220bSRobert Mustacchicheck_output "dpio-p.out" dpio list -p -o dpio,caps,flags,controller,gpionum \ 320*fd71220bSRobert Mustacchi "$gt_dpio0" "$gt_dpio1" "$gt_dpio2" 321*fd71220bSRobert Mustacchi 322*fd71220bSRobert Mustacchi# 323*fd71220bSRobert Mustacchi# Make sure the symlinks are installed correctly 324*fd71220bSRobert Mustacchi# 325*fd71220bSRobert Mustacchicheck_dpio_link "$gt_dpio0" 326*fd71220bSRobert Mustacchicheck_dpio_link "$gt_dpio1" 327*fd71220bSRobert Mustacchicheck_dpio_link "$gt_dpio2" 328*fd71220bSRobert Mustacchi 329*fd71220bSRobert Mustacchiexpect_success dpio undefine gpio_sim0/0 330*fd71220bSRobert Mustacchiexpect_success dpio undefine gpio_sim1/0 331*fd71220bSRobert Mustacchiexpect_success dpio undefine gpio_sim2/3v3 332*fd71220bSRobert Mustacchi 333*fd71220bSRobert Mustacchi# 334*fd71220bSRobert Mustacchi# Different gpio_sim gpios have different possible values and different 335*fd71220bSRobert Mustacchi# defaults. Make sure that we actually see different possible values for 336*fd71220bSRobert Mustacchi# the same attribute on different gpios and that it's not all the same. 337*fd71220bSRobert Mustacchi# Mix up the use of IDs and names. 338*fd71220bSRobert Mustacchi# 339*fd71220bSRobert Mustacchicheck_attr_val gpio_sim1/1 name 3v3 340*fd71220bSRobert Mustacchicheck_attr_val gpio_sim1/5 name open-drain 341*fd71220bSRobert Mustacchicheck_attr_field gpio_sim1/3v3 sim:voltage 3.3V possible 342*fd71220bSRobert Mustacchicheck_attr_field gpio_sim1/2 sim:voltage 12.0V possible 343*fd71220bSRobert Mustacchicheck_attr_field gpio_sim1/open-drain sim:voltage 1.8V possible 344*fd71220bSRobert Mustacchicheck_attr_field gpio_sim1/3 sim:pull disabled,23k-down,5k-up,40k-up possible 345*fd71220bSRobert Mustacchicheck_attr_field gpio_sim1/0 sim:output disabled,low,high possible 346*fd71220bSRobert Mustacchicheck_attr_field gpio_sim1/5 sim:output disabled,low possible 347*fd71220bSRobert Mustacchicheck_attr_field gpio_sim1/5 sim:pull "disabled,down,up,up|down" possible 348*fd71220bSRobert Mustacchi 349*fd71220bSRobert Mustacchi# 350*fd71220bSRobert Mustacchi# Change around a few gpio sim attributes to make sure basic attribute 351*fd71220bSRobert Mustacchi# maniuplation works and then change them back. 352*fd71220bSRobert Mustacchi# 353*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:output low 354*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:pull 23k-down 355*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:input low 356*fd71220bSRobert Mustacchiexpect_success gpio attr set gpio_sim0/3 sim:output=disabled sim:pull=40k-up 357*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:output disabled 358*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:pull 40k-up 359*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:input high 360*fd71220bSRobert Mustacchiexpect_success gpio attr set gpio_sim0/3 sim:output=low sim:pull=23k-down 361*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:output low 362*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:pull 23k-down 363*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/3 sim:input low 364*fd71220bSRobert Mustacchi 365*fd71220bSRobert Mustacchi# 366*fd71220bSRobert Mustacchi# Repeat with the name instead of the ID. 367*fd71220bSRobert Mustacchi# 368*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:output low 369*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:pull 23k-down 370*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:input low 371*fd71220bSRobert Mustacchiexpect_success gpio attr set gpio_sim0/54V sim:output=disabled sim:pull=40k-up 372*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:output disabled 373*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:pull 40k-up 374*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:input high 375*fd71220bSRobert Mustacchiexpect_success gpio attr set gpio_sim0/54V sim:output=low sim:pull=23k-down 376*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:output low 377*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:pull 23k-down 378*fd71220bSRobert Mustacchicheck_attr_val gpio_sim0/54V sim:input low 379*fd71220bSRobert Mustacchi 380*fd71220bSRobert Mustacchiif (( gt_exit == 0 )); then 381*fd71220bSRobert Mustacchi printf "All tests passed successfully!\n" 382*fd71220bSRobert Mustacchifi 383