xref: /illumos-gate/usr/src/test/i2c-tests/tests/i2cadm/common.ksh (revision 0cbe48189888d02563dba9c90132ac391ba233b6)
1*0cbe4818SRobert Mustacchi#
2*0cbe4818SRobert Mustacchi# This file and its contents are supplied under the terms of the
3*0cbe4818SRobert Mustacchi# Common Development and Distribution License ("CDDL"), version 1.0.
4*0cbe4818SRobert Mustacchi# You may only use this file in accordance with the terms of version
5*0cbe4818SRobert Mustacchi# 1.0 of the CDDL.
6*0cbe4818SRobert Mustacchi#
7*0cbe4818SRobert Mustacchi# A full copy of the text of the CDDL should have accompanied this
8*0cbe4818SRobert Mustacchi# source.  A copy of the CDDL is also available via the Internet at
9*0cbe4818SRobert Mustacchi# http://www.illumos.org/license/CDDL.
10*0cbe4818SRobert Mustacchi#
11*0cbe4818SRobert Mustacchi
12*0cbe4818SRobert Mustacchi#
13*0cbe4818SRobert Mustacchi# Copyright 2025 Oxide Computer Company
14*0cbe4818SRobert Mustacchi#
15*0cbe4818SRobert Mustacchi
16*0cbe4818SRobert Mustacchi#
17*0cbe4818SRobert Mustacchi# Common utility functions and data for I2C related tests, setup, and clean up.
18*0cbe4818SRobert Mustacchi#
19*0cbe4818SRobert Mustacchi
20*0cbe4818SRobert Mustacchi#
21*0cbe4818SRobert Mustacchi# Common environment and behavior settings.
22*0cbe4818SRobert Mustacchi#
23*0cbe4818SRobert Mustacchiexport LANG=C.UTF-8
24*0cbe4818SRobert Mustacchiexport LD_PRELOAD=libumem.so
25*0cbe4818SRobert Mustacchiexport UMEM_DEBUG=default
26*0cbe4818SRobert Mustacchiunalias -a
27*0cbe4818SRobert Mustacchiset -o errexit
28*0cbe4818SRobert Mustacchi
29*0cbe4818SRobert Mustacchi#
30*0cbe4818SRobert Mustacchi# Access to our program.
31*0cbe4818SRobert Mustacchi#
32*0cbe4818SRobert MustacchiI2CADM=${ISCADM:-/usr/sbin/i2cadm}
33*0cbe4818SRobert Mustacchi
34*0cbe4818SRobert Mustacchi#
35*0cbe4818SRobert Mustacchi# List of our known controllers.
36*0cbe4818SRobert Mustacchi#
37*0cbe4818SRobert MustacchiI2C_CTRLS=(i2csim0 smbussim1)
38*0cbe4818SRobert Mustacchi
39*0cbe4818SRobert Mustacchi#
40*0cbe4818SRobert Mustacchi# Common exit status to use.
41*0cbe4818SRobert Mustacchi#
42*0cbe4818SRobert Mustacchii2c_exit=0
43*0cbe4818SRobert Mustacchi
44*0cbe4818SRobert Mustacchifunction fatal
45*0cbe4818SRobert Mustacchi{
46*0cbe4818SRobert Mustacchi	typeset msg="$*"
47*0cbe4818SRobert Mustacchi	echo "TEST FAILED: $msg" >&2
48*0cbe4818SRobert Mustacchi	exit 1
49*0cbe4818SRobert Mustacchi}
50*0cbe4818SRobert Mustacchi
51*0cbe4818SRobert Mustacchifunction warn
52*0cbe4818SRobert Mustacchi{
53*0cbe4818SRobert Mustacchi	typeset msg="$*"
54*0cbe4818SRobert Mustacchi	echo "TEST FAILED: $msg" >&2
55*0cbe4818SRobert Mustacchi	i2c_exit=1
56*0cbe4818SRobert Mustacchi}
57*0cbe4818SRobert Mustacchi
58*0cbe4818SRobert Mustacchi#
59*0cbe4818SRobert Mustacchi# Given a path, clean up all I2C devices that match that path.
60*0cbe4818SRobert Mustacchi#
61*0cbe4818SRobert Mustacchifunction i2c_cleanup_path
62*0cbe4818SRobert Mustacchi{
63*0cbe4818SRobert Mustacchi	typeset path="$1"
64*0cbe4818SRobert Mustacchi
65*0cbe4818SRobert Mustacchi	for dev in $(i2cadm device list -Hpo path $path | sort -r); do
66*0cbe4818SRobert Mustacchi		if ! i2cadm device remove $dev; then
67*0cbe4818SRobert Mustacchi			fatal "failed to remove $dev"
68*0cbe4818SRobert Mustacchi		fi
69*0cbe4818SRobert Mustacchi	done
70*0cbe4818SRobert Mustacchi}
71*0cbe4818SRobert Mustacchi
72*0cbe4818SRobert Mustacchi#
73*0cbe4818SRobert Mustacchi# Clean up all devices that may have been created in the kernel on our simulated
74*0cbe4818SRobert Mustacchi# controllers.
75*0cbe4818SRobert Mustacchi#
76*0cbe4818SRobert Mustacchifunction i2c_cleanup_devs
77*0cbe4818SRobert Mustacchi{
78*0cbe4818SRobert Mustacchi	for i in ${!I2C_CTRLS[*]}; do
79*0cbe4818SRobert Mustacchi		i2c_cleanup_path "${I2C_CTRLS[$i]}"
80*0cbe4818SRobert Mustacchi	done
81*0cbe4818SRobert Mustacchi}
82*0cbe4818SRobert Mustacchi
83*0cbe4818SRobert Mustacchifunction i2cadm_fail
84*0cbe4818SRobert Mustacchi{
85*0cbe4818SRobert Mustacchi	typeset ret=
86*0cbe4818SRobert Mustacchi	"$I2CADM" $@ 1>/dev/null 2>/dev/null
87*0cbe4818SRobert Mustacchi	ret=$?
88*0cbe4818SRobert Mustacchi
89*0cbe4818SRobert Mustacchi	if (( ret == 0 )); then
90*0cbe4818SRobert Mustacchi		warn "should have failed with args $@, but passed"
91*0cbe4818SRobert Mustacchi	elif (( ret != 1 && ret != 2 )); then
92*0cbe4818SRobert Mustacchi		warn "args $@ failed with status $ret, expected 1 or 2"
93*0cbe4818SRobert Mustacchi	else
94*0cbe4818SRobert Mustacchi		printf "TEST PASSED: program failed (exited %u): %s\n" "$ret" \
95*0cbe4818SRobert Mustacchi		    "$*"
96*0cbe4818SRobert Mustacchi	fi
97*0cbe4818SRobert Mustacchi}
98*0cbe4818SRobert Mustacchi
99*0cbe4818SRobert Mustacchifunction i2cadm_pass
100*0cbe4818SRobert Mustacchi{
101*0cbe4818SRobert Mustacchi	typeset ret=
102*0cbe4818SRobert Mustacchi	"$I2CADM" $@ 1>/dev/null 2>/dev/null
103*0cbe4818SRobert Mustacchi	ret=$?
104*0cbe4818SRobert Mustacchi	if (( ret != 0 )); then
105*0cbe4818SRobert Mustacchi		warn "$@ failed with status $?, but expected success"
106*0cbe4818SRobert Mustacchi		return
107*0cbe4818SRobert Mustacchi	fi
108*0cbe4818SRobert Mustacchi
109*0cbe4818SRobert Mustacchi	printf "TEST PASSED: %s ran successfully\n" "$*"
110*0cbe4818SRobert Mustacchi}
111*0cbe4818SRobert Mustacchi
112*0cbe4818SRobert Mustacchi#
113*0cbe4818SRobert Mustacchi# Checks to see if the output of a command matches what we expect. This is
114*0cbe4818SRobert Mustacchi# expected to be used with the parseable ofmt output.
115*0cbe4818SRobert Mustacchi#
116*0cbe4818SRobert Mustacchifunction i2cadm_check_output
117*0cbe4818SRobert Mustacchi{
118*0cbe4818SRobert Mustacchi	typeset exp="$1"
119*0cbe4818SRobert Mustacchi	typeset out=
120*0cbe4818SRobert Mustacchi	typeset ret=
121*0cbe4818SRobert Mustacchi	shift
122*0cbe4818SRobert Mustacchi
123*0cbe4818SRobert Mustacchi	out=$("$I2CADM" $@ 2>/dev/null)
124*0cbe4818SRobert Mustacchi	ret=$?
125*0cbe4818SRobert Mustacchi	if (( ret != 0 )); then
126*0cbe4818SRobert Mustacchi		warn "$@ failed with status $ret, but expected success"
127*0cbe4818SRobert Mustacchi		return
128*0cbe4818SRobert Mustacchi	fi
129*0cbe4818SRobert Mustacchi
130*0cbe4818SRobert Mustacchi	if [[ "$out" != "$exp" ]]; then
131*0cbe4818SRobert Mustacchi		warn "$@ had unexpected output ($out), expected: $exp"
132*0cbe4818SRobert Mustacchi		return
133*0cbe4818SRobert Mustacchi	fi
134*0cbe4818SRobert Mustacchi
135*0cbe4818SRobert Mustacchi	printf "TEST PASSED: output from %s matched expected value: %s\n" "$*" \
136*0cbe4818SRobert Mustacchi	    "$exp"
137*0cbe4818SRobert Mustacchi}
138