| #!/bin/sh |
| # |
| # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| testfile=/tmp/testfile.$$ |
| resultfile=/tmp/result.$$ |
| failed=0 |
| export FAKEGUDEV_DEVICES |
| |
| echo "TEST: /dev/fake does not appear in test program output" |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| |
| EOF |
| ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /dev/fake does not appear in test program output \ |
| with library preloaded" |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /dev/null does appear in test program output" |
| cat > ${testfile} <<EOF |
| Path '/dev/null' |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| ./gudev-exercise /dev/null > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| echo "TEST: =mem,null finds /dev/null " |
| cat > ${testfile} <<EOF |
| Subsystem 'mem', Name 'null' |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| ./gudev-exercise =mem,null > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| echo "TEST: /sys/devices/virtual/mem/null does appear in test program output" |
| cat > ${testfile} <<EOF |
| Sysfs path '/sys/devices/virtual/mem/null' |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| ./gudev-exercise /sys/devices/virtual/mem/null > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /dev/null does appear in test program output with library preloaded" |
| cat > ${testfile} <<EOF |
| Path '/dev/null' |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/null > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /sys/devices/virtual/mem/null appears with library loaded" |
| cat > ${testfile} <<EOF |
| Sysfs path '/sys/devices/virtual/mem/null' |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so \ |
| ./gudev-exercise /sys/devices/virtual/mem/null > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: =mem,null finds /dev/null with library preloaded" |
| cat > ${testfile} <<EOF |
| Subsystem 'mem', Name 'null' |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise =mem,null > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /dev/fake does appear when specified in FAKEGUDEV_DEVICES" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /dev/null appears when /dev/fake is specified in FAKEGUDEV_DEVICES" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake |
| cat > ${testfile} <<EOF |
| Path '/dev/null' |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/null > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Device name appears" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:name=fakedevice |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: fakedevice |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Devtype appears" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:devtype=faketype |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: faketype |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Driver appears" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:driver=fakedriver |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: fakedriver |
| Subsystem: (null) |
| Sysfs path: (null) |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Subsystem appears" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:subsystem=fakesub |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: fakesub |
| Sysfs path: (null) |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Search for fake device by subsystem and name works" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:subsystem=fakesub:name=fakedevice |
| cat > ${testfile} <<EOF |
| Subsystem 'fakesub', Name 'fakedevice' |
| Name: fakedevice |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: fakesub |
| Sysfs path: (null) |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so \ |
| ./gudev-exercise =fakesub,fakedevice > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Sysfs path appears" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:sysfs_path=/sys/devices/virtual/fake |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: /sys/devices/virtual/fake |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Property appears" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:property_FOO=BAR |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| Property FOO: BAR |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| # Warning: This test depends on property order, which isn't guaranteed |
| # either by gudev or by the override library |
| echo "TEST: Several properties appear" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:\ |
| property_FOO=BAR:property_BAR=BAZ:property_BAZ=QUUX |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| Property BAZ: QUUX |
| Property BAR: BAZ |
| Property FOO: BAR |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Property appears when queried repeatedly (test caching)" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:property_FOO=BAR |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| Property FOO: BAR |
| |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| Property FOO: BAR |
| |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| Property FOO: BAR |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so \ |
| ./gudev-exercise /dev/fake /dev/fake /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /dev/fake2 does not appear when only /dev/fake is specified" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| |
| Path '/dev/fake2' |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so \ |
| ./gudev-exercise /dev/fake /dev/fake2 > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /dev/fake2 and /dev/fake both appear when specified" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:device_file=/dev/fake2 |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| |
| Path '/dev/fake2' |
| Name: (null) |
| Device file: /dev/fake2 |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so \ |
| ./gudev-exercise /dev/fake /dev/fake2 > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| echo "TEST: /dev/fake appears as parent of /dev/fake2" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:device_file=/dev/fake2:parent=/dev/fake |
| cat > ${testfile} <<EOF |
| Path '/dev/fake2' |
| Name: (null) |
| Device file: /dev/fake2 |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| Parent device: |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake2 > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: Real device /dev/null appears as parent of /dev/fake" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:parent=/dev/null |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: (null) |
| Parent device: |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /sys/devices/fake does not appear when not specified" |
| cat > ${testfile} <<EOF |
| Sysfs path '/sys/devices/fake' |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /sys/devices/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| echo "TEST: /sys/devices/fake does appear when specified" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:sysfs_path=/sys/devices/fake |
| cat > ${testfile} <<EOF |
| Sysfs path '/sys/devices/fake' |
| Name: (null) |
| Device file: /dev/fake |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: (null) |
| Sysfs path: /sys/devices/fake |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /sys/devices/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| # Test sysfs attributes |
| |
| echo "TEST: All at once" |
| FAKEGUDEV_DEVICES=device_file=/dev/fake:name=fakedevice:devtype=faketype:\ |
| driver=fakedriver:subsystem=fakesub:sysfs_path=/sys/devices/virtual/fake:\ |
| property_FOO=BAR:property_BAR=BAZ:property_BAZ=QUUX:parent=/dev/null: |
| cat > ${testfile} <<EOF |
| Path '/dev/fake' |
| Name: fakedevice |
| Device file: /dev/fake |
| Devtype: faketype |
| Driver: fakedriver |
| Subsystem: fakesub |
| Sysfs path: /sys/devices/virtual/fake |
| Property BAZ: QUUX |
| Property BAR: BAZ |
| Property FOO: BAR |
| Parent device: |
| Name: null |
| Device file: /dev/null |
| Devtype: (null) |
| Driver: (null) |
| Subsystem: mem |
| Sysfs path: /sys/devices/virtual/mem/null |
| Property UDEV_LOG: 3 |
| Property DEVPATH: /devices/virtual/mem/null |
| Property MAJOR: 1 |
| Property MINOR: 3 |
| Property DEVNAME: /dev/null |
| Property DEVMODE: 0666 |
| Property SUBSYSTEM: mem |
| Property DEVLINKS: /dev/char/1:3 |
| |
| EOF |
| LD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake > ${resultfile} |
| diff -u ${testfile} ${resultfile} |
| if [ $? -ne 0 ]; then echo "FAILED"; failed=1; fi |
| |
| |
| exit ${failed} |