brintos

brintos / linux-shallow public Read only

0
0
Text · 3.4 KiB · 1ec90d7 Raw
179 lines · bash
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.03#4# Copyright (c) 2022, 2024 Collabora Ltd5SYSFS_SUPPLIES=/sys/class/power_supply6 7calc() {8	awk "BEGIN { print $* }";9}10 11test_sysfs_prop() {12	PROP="$1"13	VALUE="$2" # optional14 15	PROP_PATH="$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP"16	TEST_NAME="$DEVNAME".sysfs."$PROP"17 18	if [ -z "$VALUE" ]; then19		ktap_test_result "$TEST_NAME" [ -f "$PROP_PATH" ]20	else21		ktap_test_result "$TEST_NAME" grep -q "$VALUE" "$PROP_PATH"22	fi23}24 25to_human_readable_unit() {26	VALUE="$1"27	UNIT="$2"28 29	case "$VALUE" in30		*[!0-9]* ) return ;; # Not a number31	esac32 33	if [ "$UNIT" = "uA" ]; then34		new_unit="mA"35		div=100036	elif [ "$UNIT" = "uV" ]; then37		new_unit="V"38		div=100000039	elif [ "$UNIT" = "uAh" ]; then40		new_unit="Ah"41		div=100000042	elif [ "$UNIT" = "uW" ]; then43		new_unit="mW"44		div=100045	elif [ "$UNIT" = "uWh" ]; then46		new_unit="Wh"47		div=100000048	else49		return50	fi51 52	value_converted=$(calc "$VALUE"/"$div")53	echo "$value_converted" "$new_unit"54}55 56_check_sysfs_prop_available() {57	PROP=$158 59	PROP_PATH="$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP"60	TEST_NAME="$DEVNAME".sysfs."$PROP"61 62	if [ ! -e "$PROP_PATH" ] ; then63		ktap_test_skip "$TEST_NAME"64		return 165	fi66 67	if ! cat "$PROP_PATH" >/dev/null; then68		ktap_print_msg "Failed to read"69		ktap_test_fail "$TEST_NAME"70		return 171	fi72 73	return 074}75 76test_sysfs_prop_optional() {77	PROP=$178	UNIT=$2 # optional79 80	TEST_NAME="$DEVNAME".sysfs."$PROP"81 82	_check_sysfs_prop_available "$PROP" || return83	DATA=$(cat "$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP")84 85	ktap_print_msg "Reported: '$DATA' $UNIT ($(to_human_readable_unit "$DATA" "$UNIT"))"86	ktap_test_pass "$TEST_NAME"87}88 89test_sysfs_prop_optional_range() {90	PROP=$191	MIN=$292	MAX=$393	UNIT=$4 # optional94 95	TEST_NAME="$DEVNAME".sysfs."$PROP"96 97	_check_sysfs_prop_available "$PROP" || return98	DATA=$(cat "$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP")99 100	if [ "$DATA" -lt "$MIN" ] || [ "$DATA" -gt "$MAX" ]; then101		ktap_print_msg "'$DATA' is out of range (min=$MIN, max=$MAX)"102		ktap_test_fail "$TEST_NAME"103	else104		ktap_print_msg "Reported: '$DATA' $UNIT ($(to_human_readable_unit "$DATA" "$UNIT"))"105		ktap_test_pass "$TEST_NAME"106	fi107}108 109test_sysfs_prop_optional_list() {110	PROP=$1111	LIST=$2112 113	TEST_NAME="$DEVNAME".sysfs."$PROP"114 115	_check_sysfs_prop_available "$PROP" || return116	DATA=$(cat "$SYSFS_SUPPLIES"/"$DEVNAME"/"$PROP")117 118	valid=0119 120	OLDIFS=$IFS121	IFS=","122	for item in $LIST; do123		if [ "$DATA" = "$item" ]; then124			valid=1125			break126		fi127	done128	if [ "$valid" -eq 1 ]; then129		ktap_print_msg "Reported: '$DATA'"130		ktap_test_pass "$TEST_NAME"131	else132		ktap_print_msg "'$DATA' is not a valid value for this property"133		ktap_test_fail "$TEST_NAME"134	fi135	IFS=$OLDIFS136}137 138dump_file() {139	FILE="$1"140	while read -r line; do141		ktap_print_msg "$line"142	done < "$FILE"143}144 145__test_uevent_prop() {146	PROP="$1"147	OPTIONAL="$2"148	VALUE="$3" # optional149 150	UEVENT_PATH="$SYSFS_SUPPLIES"/"$DEVNAME"/uevent151	TEST_NAME="$DEVNAME".uevent."$PROP"152 153	if ! grep -q "POWER_SUPPLY_$PROP=" "$UEVENT_PATH"; then154		if [ "$OPTIONAL" -eq 1 ]; then155			ktap_test_skip "$TEST_NAME"156		else157			ktap_print_msg "Missing property"158			ktap_test_fail "$TEST_NAME"159		fi160		return161	fi162 163	if ! grep -q "POWER_SUPPLY_$PROP=$VALUE" "$UEVENT_PATH"; then164		ktap_print_msg "Invalid value for uevent property, dumping..."165		dump_file "$UEVENT_PATH"166		ktap_test_fail "$TEST_NAME"167	else168		ktap_test_pass "$TEST_NAME"169	fi170}171 172test_uevent_prop() {173	__test_uevent_prop "$1" 0 "$2"174}175 176test_uevent_prop_optional() {177	__test_uevent_prop "$1" 1 "$2"178}179