13d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong#!/bin/bash
23d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong
32ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong# Run hidl-gen against interfaces in errors/ to ensure it detects as many
42ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong# errors as possible.
53d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong
62ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongif [ ! -d system/tools/hidl/test/errors/ ]; then
72ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    echo "Where is system/tools/hidl/test/errors?";
82ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    exit 1;
93d5587cdf1c52e73473299004021f5f422c42e1aYifan Hongfi
103d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong
113d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong# TODO(b/33276472)
122ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongif [ ! -d system/libhidl/transport ]; then
132ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    echo "Where is system/libhidl/transport?";
142ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    exit 1;
153d5587cdf1c52e73473299004021f5f422c42e1aYifan Hongfi
163d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong
172ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongif [[ "$@" == *"-h"* ]]; then
182ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    echo "$0 [-h|-u|-a]"
193d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong    echo "    (No options)  Run and diff against expected output"
203d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong    echo "    -u            Update expected output"
213d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong    echo "    -a            Run and show actual output"
223d5587cdf1c52e73473299004021f5f422c42e1aYifan Hong    echo "    -h            Show help text"
232ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    exit 1
243d5587cdf1c52e73473299004021f5f422c42e1aYifan Hongfi
252ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong
262ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongif [[ "$@" == *"-u"* ]]; then update_files=true; fi
272ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongif [[ "$@" == *"-a"* ]]; then show_output=true; fi
282ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong
292ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongfunction check() {
302ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    local "${@}"
312ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    COMMAND="hidl-gen -Lc++ -rtests:system/tools/hidl/test -randroid.hidl:system/libhidl/transport -o /tmp $package"
322ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong
332ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    if [ $show_output ]; then
342ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        echo "Running: $COMMAND"
352ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        $COMMAND
362ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        echo
372ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        return
382ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    fi
392ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong
402ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    if [[ ! -z "$contains" ]]; then
412ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        if [ $update_files ]; then
422ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong            # no files to update
432ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong            return
442ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        fi
452ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        $COMMAND 2>&1 | grep "$contains" -q
462ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        if [ $? -eq 0 ]; then
472ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong            echo "Success for $package."
482ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        else
492ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong            echo "Fail for $package; output doesn't contain '$contains'"
502ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        fi
512ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        return
522ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    fi
532ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong
542ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    EXPECTED="system/tools/hidl/test/$filename"
552ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    if [ $update_files ]; then
562ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        $COMMAND 2>$EXPECTED;
572ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        echo "Updated $filename."
582ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    else
592ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        $COMMAND 2>&1 | diff $EXPECTED -
602ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        if [ $? -eq 0 ]; then
612ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong            echo "Success for $package."
622ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong        fi
632ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    fi
642ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong}
652ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong
662ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongcheck package="tests.errors.syntax@1.0" filename="errors/syntax.output"
672ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong
682ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongcheck package="tests.errors.versioning@2.2" \
692ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    contains="Cannot enforce minor version uprevs for tests.errors.versioning@2.2"
702ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong
712ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hongcheck package="tests.errors.versioning@3.3" \
722ef6b39949680840b2acffa2a46edc0fe8f01d0fYifan Hong    contains="Cannot enforce minor version uprevs for tests.errors.versioning@3.3"
73