1*9c5db199SXin Li#!/bin/bash 2*9c5db199SXin Li# 3*9c5db199SXin Li# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 4*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 5*9c5db199SXin Li# found in the LICENSE file. 6*9c5db199SXin Li 7*9c5db199SXin Linull_output=`mktemp` 8*9c5db199SXin Liactual_output=`mktemp` 9*9c5db199SXin Liexpected_output=`mktemp` 10*9c5db199SXin Lifailed=0 11*9c5db199SXin Liexport FAKEGUDEV_DEVICES 12*9c5db199SXin Li 13*9c5db199SXin Lifunction test_output() { 14*9c5db199SXin Li diff -u --ignore-all-space --ignore-blank-lines ${expected_output} \ 15*9c5db199SXin Li ${actual_output} 16*9c5db199SXin Li if [ $? -ne 0 ] 17*9c5db199SXin Li then 18*9c5db199SXin Li echo FAILED 19*9c5db199SXin Li failed=$(( failed + 1 )) 20*9c5db199SXin Li fi 21*9c5db199SXin Li} 22*9c5db199SXin Li 23*9c5db199SXin Lifunction run_test() { 24*9c5db199SXin Li if [ $# -eq 1 ] 25*9c5db199SXin Li then 26*9c5db199SXin Li FAKEGUDEV_DEVICES= 27*9c5db199SXin Li else 28*9c5db199SXin Li FAKEGUDEV_DEVICES=$2 29*9c5db199SXin Li fi 30*9c5db199SXin Li LD_PRELOAD=./libfakegudev.so ./gudev-exercise $1 > ${actual_output} 31*9c5db199SXin Li test_output 32*9c5db199SXin Li} 33*9c5db199SXin Li 34*9c5db199SXin Lifunction generate_output_file() { 35*9c5db199SXin Li # If two arguments supplied, second device is the parent of the first. 36*9c5db199SXin Li cat $1 > ${expected_output} 37*9c5db199SXin Li if [ $# -eq 2 ] 38*9c5db199SXin Li then 39*9c5db199SXin Li echo Parent device:>> ${expected_output} 40*9c5db199SXin Li cat $2 >> ${expected_output} 41*9c5db199SXin Li fi 42*9c5db199SXin Li} 43*9c5db199SXin Li 44*9c5db199SXin Li./gudev-exercise /dev/null > ${null_output} 45*9c5db199SXin Li 46*9c5db199SXin Li 47*9c5db199SXin Liecho "TEST: /dev/fake does not appear in test program output" 48*9c5db199SXin Ligenerate_output_file test_files/empty.output 49*9c5db199SXin Lirun_test /dev/fake 50*9c5db199SXin Li 51*9c5db199SXin Liecho "TEST: /dev/null appears in test program output" 52*9c5db199SXin Ligenerate_output_file ${null_output} 53*9c5db199SXin Lirun_test /dev/null 54*9c5db199SXin Li 55*9c5db199SXin Liecho "TEST: =mem,null finds /dev/null " 56*9c5db199SXin Ligenerate_output_file ${null_output} 57*9c5db199SXin Lirun_test =mem,null 58*9c5db199SXin Li 59*9c5db199SXin Liecho "TEST: /sys/devices/virtual/mem/null appears in test program output" 60*9c5db199SXin Ligenerate_output_file ${null_output} 61*9c5db199SXin Lirun_test /sys/devices/virtual/mem/null 62*9c5db199SXin Li 63*9c5db199SXin Li 64*9c5db199SXin Liecho "TEST: /dev/fake appears when specified in FAKEGUDEV_DEVICES" 65*9c5db199SXin Ligenerate_output_file test_files/fake.output 66*9c5db199SXin Lirun_test /dev/fake test_files/fake.dat 67*9c5db199SXin Li 68*9c5db199SXin Liecho "TEST: /dev/null appears when /dev/fake is specified in FAKEGUDEV_DEVICES" 69*9c5db199SXin Ligenerate_output_file ${null_output} 70*9c5db199SXin Lirun_test /dev/null test_files/fake.dat 71*9c5db199SXin Li 72*9c5db199SXin Liecho "TEST: Device name appears" 73*9c5db199SXin Ligenerate_output_file test_files/fake_name.output 74*9c5db199SXin Lirun_test /dev/fake test_files/fake_name.dat 75*9c5db199SXin Li 76*9c5db199SXin Liecho "TEST: Driver appears" 77*9c5db199SXin Ligenerate_output_file test_files/fake_driver.output 78*9c5db199SXin Lirun_test /dev/fake test_files/fake_driver.dat 79*9c5db199SXin Li 80*9c5db199SXin Liecho "TEST: Subsystem appears" 81*9c5db199SXin Ligenerate_output_file test_files/fake_subsystem.output 82*9c5db199SXin Lirun_test /dev/fake test_files/fake_subsystem.dat 83*9c5db199SXin Li 84*9c5db199SXin Liecho "TEST: Property appears" 85*9c5db199SXin Ligenerate_output_file test_files/fake_property_foo.output 86*9c5db199SXin Lirun_test /dev/fake test_files/fake_property_foo.dat 87*9c5db199SXin Li 88*9c5db199SXin Liecho "TEST: Several properties appear" 89*9c5db199SXin Ligenerate_output_file test_files/fake_properties.output 90*9c5db199SXin Lirun_test /dev/fake test_files/fake_properties.dat 91*9c5db199SXin Li 92*9c5db199SXin Liecho "TEST: /dev/fake2 does not appear when only /dev/fake is specified" 93*9c5db199SXin Ligenerate_output_file test_files/empty.output 94*9c5db199SXin Lirun_test /dev/fake2 test_files/fake.dat 95*9c5db199SXin Li 96*9c5db199SXin Liecho "TEST: /dev/fake2 and /dev/fake both appear when specified" 97*9c5db199SXin Ligenerate_output_file test_files/fake.output 98*9c5db199SXin Lirun_test /dev/fake test_files/fake_and_fake2.dat 99*9c5db199SXin Ligenerate_output_file test_files/fake2.output 100*9c5db199SXin Lirun_test /dev/fake2 test_files/fake_and_fake2.dat 101*9c5db199SXin Li 102*9c5db199SXin Liecho "TEST: /dev/fake appears as parent of /dev/fake2" 103*9c5db199SXin Ligenerate_output_file test_files/fake2.output test_files/fake.output 104*9c5db199SXin Lirun_test /dev/fake2 test_files/fake2_parent_fake.dat 105*9c5db199SXin Li 106*9c5db199SXin Liecho "TEST: Real device /dev/null appears as parent of /dev/fake" 107*9c5db199SXin Ligenerate_output_file test_files/fake.output ${null_output} 108*9c5db199SXin Lirun_test /dev/fake test_files/fake_parent_null.dat 109*9c5db199SXin Li 110*9c5db199SXin Liecho "TEST: /sys/devices/fake fully fledged" 111*9c5db199SXin Ligenerate_output_file test_files/fake_full.output ${null_output} 112*9c5db199SXin Lirun_test /dev/fake test_files/fake_full.dat 113*9c5db199SXin Li 114*9c5db199SXin Liecho "TEST: Search for fake device by subsystem and name works" 115*9c5db199SXin Ligenerate_output_file test_files/fake_full.output ${null_output} 116*9c5db199SXin Lirun_test '=fakesub,fakedevice' test_files/fake_full.dat 117*9c5db199SXin Li 118*9c5db199SXin Liecho "TEST: Search for fake device by sysfs path works" 119*9c5db199SXin Ligenerate_output_file test_files/fake_full.output ${null_output} 120*9c5db199SXin Lirun_test /sys/devices/virtual/fake test_files/fake_full.dat 121*9c5db199SXin Li 122*9c5db199SXin Li# Can't use handy functions for this test :( 123*9c5db199SXin Liecho "TEST: Property appears when queried repeatedly (test caching)" 124*9c5db199SXin Licat test_files/fake.output > ${expected_output} 125*9c5db199SXin Licat test_files/fake.output >> ${expected_output} 126*9c5db199SXin Licat test_files/fake.output >> ${expected_output} 127*9c5db199SXin LiFAKEGUDEV_DEVICES=test_files/fake.dat 128*9c5db199SXin LiLD_PRELOAD=./libfakegudev.so ./gudev-exercise /dev/fake /dev/fake /dev/fake > \ 129*9c5db199SXin Li ${actual_output} 130*9c5db199SXin Litest_output 131*9c5db199SXin Li 132*9c5db199SXin Li 133*9c5db199SXin Liecho 134*9c5db199SXin Liecho 135*9c5db199SXin Liecho Total errors: ${failed} 136