summaryrefslogtreecommitdiff
path: root/meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh')
-rwxr-xr-xmeta-google/recipes-google/networking/google-usb-network/usb_network_test.sh295
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!"