xref: /aosp_15_r20/external/autotest/client/deps/fakegudev/src/test-gudev.sh (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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