diff options
Diffstat (limited to 'meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh')
-rwxr-xr-x | meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh b/meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh new file mode 100755 index 000000000..e5894338b --- /dev/null +++ b/meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh @@ -0,0 +1,295 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +TEMPDIRS="" +TEMPFILES="" +# Script under test +SUT=$PWD/usb_network.sh + +TEST_STATUS="OK" + +test_setup() { + echo -n "Testing $1 ..." + FAKE_CONFIGFS=$(mktemp -d) + TEMPDIRS="${TEMPDIRS} ${FAKE_CONFIGFS}" + FAKE_GADGETFS=$FAKE_CONFIGFS/usb_gadget + mkdir -p "$FAKE_GADGETFS" +} + +test_teardown() { + echo ${TEST_STATUS} + if test -n "$TEMPDIRS"; then + rm -rf ${TEMPDIRS} + fi + if test -n "$TEMPFILES"; then + rm -f $TEMPFILES + fi +} + +test_fail() { + echo -n " $@ " >&2 + TEST_STATUS="FAIL" + + test_teardown + exit 1 +} + +check_file_content() { + local filename="$1" + local expected_content="$2" + + if ! test -f "${filename}"; then + test_fail "File ${filename} does not exist!" + fi + + local actual_content=$(cat ${filename}) + if [[ $expected_content != $actual_content ]]; then + test_fail "Expected ${expected_content}, got ${actual_content}" + fi +} + +test_gadget_creation_with_defaults() { + local extra_args=() + local gadget_dir="$1" + if [[ $gadget_dir == "" ]]; then + gadget_dir="g1"; + else + extra_args=(${extra_args} --gadget-dir-name "${gadget_dir}") + fi + local product_name="Souvenier BMC" + local product_id="0xcafe" + local host_mac="ab:cd:ef:10:11:12" + local dev_mac="12:11:10:ef:cd:ab" + local bind_device="f80002000.udc" + CONFIGFS_HOME=${FAKE_CONFIGFS} ${SUT} --product-id "${product_id}" \ + --product-name "${product_name}" \ + --host-mac "${host_mac}" \ + --dev-mac "${dev_mac}" \ + --bind-device "${bind_device}" \ + ${extra_args[@]} + + if test $? -ne 0; then + test_fail "${SUT} failed" + fi + + if ! test -d "${FAKE_GADGETFS}/${gadget_dir}"; then + test_fail "Gadget was not created!" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idVendor "0x18d1" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idProduct "${product_id}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/manufacturer "Google" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/product "${product_name}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/MaxPower "100" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/strings/0x409/configuration "ECM" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0/dev_addr "${dev_mac}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0/host_addr "${host_mac}" + + if ! test -d ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0; then + test_fail "Function directory was not created" + fi + + local func_link="${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/ecm.usb0" + if ! test -L "${func_link}"; then + test_fail "Symlink to the function was not created in the config" + fi + + local link_dest=$(realpath ${func_link}) + if [[ $link_dest != ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0 ]]; then + test_fail "Symlink points to the wrong file/dir" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/UDC "${bind_device}" +} + +test_gadget_creation_with_override() { + mkdir -p ${FAKE_GADGETFS}/g1/{strings,configs,functions} + touch ${FAKE_GADGETFS}/g1/{idVendor,idProduct} + + test_gadget_creation_with_defaults +} + +test_gadget_stopping() { + local extra_args=() + local gadget_dir="$1" + local iface_name="$2" + if [[ $gadget_dir == "" ]]; then + gadget_dir="g1"; + else + extra_args=(${extra_args} --gadget-dir-name "${gadget_dir}") + fi + + if [[ $iface_name == "" ]]; then + iface_name="usb0"; + else + extra_args=(${extra_args} --iface-name "${iface_name}") + fi + + CONFIGFS_HOME=${FAKE_CONFIGFS} ${SUT} ${extra_args[@]} stop + + if test -d "${FAKE_GADGETFS}/${gadget_dir}"; then + test_fail "Gadget was not removed!" + fi +} + +test_gadget_creation_no_macs() { + local gadget_dir="g1"; + local product_name="Souvenier BMC" + local product_id="0xcafe" + local bind_device="f80002000.udc" + CONFIGFS_HOME=${FAKE_CONFIGFS} ${SUT} --product-id "${product_id}" \ + --product-name "${product_name}" \ + --bind-device "${bind_device}" + + if test $? -ne 0; then + test_fail "${SUT} failed" + fi + + if ! test -d "${FAKE_GADGETFS}/${gadget_dir}"; then + test_fail "Gadget was not created!" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idVendor "0x18d1" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idProduct "${product_id}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/manufacturer "Google" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/product "${product_name}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/MaxPower "100" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/strings/0x409/configuration "ECM" + + if test -e ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0/dev_addr; then + test_fail "dev_addr should not be set" + fi + + if test -e ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0/host_addr; then + test_fail "host_addr should not be set" + fi + + local func_link="${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/ecm.usb0" + if ! test -L "${func_link}"; then + test_fail "Symlink to the function was not created in the config" + fi + + local link_dest=$(realpath ${func_link}) + if [[ $link_dest != ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0 ]]; then + test_fail "Symlink points to the wrong file/dir" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/UDC "${bind_device}" +} + +test_gadget_creation_alt_iface() { + local gadget_dir="g1"; + local product_name="Souvenier BMC" + local product_id="0xcafe" + local bind_device="f80002000.udc" + local iface_name="iface0" + CONFIGFS_HOME=${FAKE_CONFIGFS} ${SUT} --product-id "${product_id}" \ + --product-name "${product_name}" \ + --bind-device "${bind_device}" \ + --iface-name "${iface_name}" + + if test $? -ne 0; then + test_fail "${SUT} failed" + fi + + if ! test -d "${FAKE_GADGETFS}/${gadget_dir}"; then + test_fail "Gadget was not created!" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idVendor "0x18d1" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idProduct "${product_id}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/manufacturer "Google" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/product "${product_name}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/MaxPower "100" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/strings/0x409/configuration "ECM" + + if ! test -d ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.${iface_name}; then + test_fail "Function directory was not created" + fi + + if test -e ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.${iface_name}/dev_addr; then + test_fail "dev_addr should not be set" + fi + + if test -e ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.${iface_name}/host_addr; then + test_fail "host_addr should not be set" + fi + + local func_link="${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/ecm.${iface_name}" + if ! test -L "${func_link}"; then + test_fail "Symlink to the function was not created in the config" + fi + + local link_dest=$(realpath ${func_link}) + if [[ $link_dest != ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.${iface_name} ]]; then + test_fail "Symlink points to the wrong file/dir" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/UDC "${bind_device}" +} + + +# ------------------------------------------------------------------- +test_setup "Device Creation" + +test_gadget_creation_with_defaults + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Device Creation With Override" + +test_gadget_creation_with_override + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Test Device Stop" + +test_gadget_creation_with_defaults +test_gadget_stopping + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Device Creation/Stopping, Alternative Name" + +test_gadget_creation_with_defaults "gAlt" +test_gadget_stopping "gAlt" + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Device Creation without MAC Addrs" + +test_gadget_creation_no_macs + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Device Creation/Stopping, Alternative Interface" + +test_gadget_creation_alt_iface + +test_teardown +# ------------------------------------------------------------------- + +echo "SUCCESS!" |