tests: QAPI schema parser tests
The parser handles erroneous input badly. To be improved shortly. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-id: 1374939721-7876-2-git-send-email-armbru@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
55d5d04884
commit
98626572f1
2
configure
vendored
2
configure
vendored
@ -4502,7 +4502,7 @@ if [ "$dtc_internal" = "yes" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# build tree in object directory in case the source is not in the current directory
|
# build tree in object directory in case the source is not in the current directory
|
||||||
DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos"
|
DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema"
|
||||||
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
|
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
|
||||||
DIRS="$DIRS roms/seabios roms/vgabios"
|
DIRS="$DIRS roms/seabios roms/vgabios"
|
||||||
DIRS="$DIRS qapi-generated"
|
DIRS="$DIRS qapi-generated"
|
||||||
|
@ -83,6 +83,14 @@ gcov-files-arm-y += hw/tmp105.c
|
|||||||
check-qtest-ppc-y += tests/boot-order-test$(EXESUF)
|
check-qtest-ppc-y += tests/boot-order-test$(EXESUF)
|
||||||
check-qtest-ppc64-y += tests/boot-order-test$(EXESUF)
|
check-qtest-ppc64-y += tests/boot-order-test$(EXESUF)
|
||||||
|
|
||||||
|
check-qapi-schema-y := $(addprefix tests/qapi-schema/, \
|
||||||
|
comments.json empty.json funny-char.json indented-expr.json \
|
||||||
|
missing-colon.json missing-comma-list.json \
|
||||||
|
missing-comma-object.json non-objects.json \
|
||||||
|
quoted-structural-chars.json \
|
||||||
|
trailing-comma-list.json trailing-comma-object.json \
|
||||||
|
unclosed-list.json unclosed-object.json unclosed-string.json)
|
||||||
|
|
||||||
GENERATED_HEADERS += tests/test-qapi-types.h tests/test-qapi-visit.h tests/test-qmp-commands.h
|
GENERATED_HEADERS += tests/test-qapi-types.h tests/test-qapi-visit.h tests/test-qmp-commands.h
|
||||||
|
|
||||||
test-obj-y = tests/check-qint.o tests/check-qstring.o tests/check-qdict.o \
|
test-obj-y = tests/check-qint.o tests/check-qstring.o tests/check-qdict.o \
|
||||||
@ -171,6 +179,7 @@ check-help:
|
|||||||
@echo " make check-qtest-TARGET Run qtest tests for given target"
|
@echo " make check-qtest-TARGET Run qtest tests for given target"
|
||||||
@echo " make check-qtest Run qtest tests"
|
@echo " make check-qtest Run qtest tests"
|
||||||
@echo " make check-unit Run qobject tests"
|
@echo " make check-unit Run qobject tests"
|
||||||
|
@echo " make check-qapi-schema Run QAPI schema tests"
|
||||||
@echo " make check-block Run block tests"
|
@echo " make check-block Run block tests"
|
||||||
@echo " make check-report.html Generates an HTML test report"
|
@echo " make check-report.html Generates an HTML test report"
|
||||||
@echo
|
@echo
|
||||||
@ -233,13 +242,24 @@ check-report.html: check-report.xml
|
|||||||
check-tests/qemu-iotests-quick.sh: tests/qemu-iotests-quick.sh qemu-img$(EXESUF) qemu-io$(EXESUF)
|
check-tests/qemu-iotests-quick.sh: tests/qemu-iotests-quick.sh qemu-img$(EXESUF) qemu-io$(EXESUF)
|
||||||
$<
|
$<
|
||||||
|
|
||||||
|
.PHONY: check-tests/test-qapi.py
|
||||||
|
check-tests/test-qapi.py: tests/test-qapi.py
|
||||||
|
|
||||||
|
.PHONY: $(patsubst %, check-%, $(check-qapi-schema-y))
|
||||||
|
$(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json
|
||||||
|
$(call quiet-command, PYTHONPATH=$(SRC_PATH)/scripts $(PYTHON) $(SRC_PATH)/tests/qapi-schema/test-qapi.py <$^ >$*.out 2>$*.err; echo $$? >$*.exit, " TEST $*.out")
|
||||||
|
@diff -q $(SRC_PATH)/$*.out $*.out
|
||||||
|
@diff -q $(SRC_PATH)/$*.err $*.err
|
||||||
|
@diff -q $(SRC_PATH)/$*.exit $*.exit
|
||||||
|
|
||||||
# Consolidated targets
|
# Consolidated targets
|
||||||
|
|
||||||
.PHONY: check-qtest check-unit check
|
.PHONY: check-qapi-schema check-qtest check-unit check
|
||||||
|
check-qapi-schema: $(patsubst %,check-%, $(check-qapi-schema-y))
|
||||||
check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS))
|
check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS))
|
||||||
check-unit: $(patsubst %,check-%, $(check-unit-y))
|
check-unit: $(patsubst %,check-%, $(check-unit-y))
|
||||||
check-block: $(patsubst %,check-%, $(check-block-y))
|
check-block: $(patsubst %,check-%, $(check-block-y))
|
||||||
check: check-unit check-qtest
|
check: check-qapi-schema check-unit check-qtest
|
||||||
|
|
||||||
-include $(wildcard tests/*.d)
|
-include $(wildcard tests/*.d)
|
||||||
-include $(wildcard tests/libqos/*.d)
|
-include $(wildcard tests/libqos/*.d)
|
||||||
|
0
tests/qapi-schema/comments.err
Normal file
0
tests/qapi-schema/comments.err
Normal file
1
tests/qapi-schema/comments.exit
Normal file
1
tests/qapi-schema/comments.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
4
tests/qapi-schema/comments.json
Normal file
4
tests/qapi-schema/comments.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Unindented comment
|
||||||
|
{ 'enum': 'Status', # Comment to the right of code
|
||||||
|
# Indented comment
|
||||||
|
'data': [ 'good', 'bad', 'ugly' ] }
|
3
tests/qapi-schema/comments.out
Normal file
3
tests/qapi-schema/comments.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])]
|
||||||
|
['Status']
|
||||||
|
[]
|
0
tests/qapi-schema/empty.err
Normal file
0
tests/qapi-schema/empty.err
Normal file
1
tests/qapi-schema/empty.exit
Normal file
1
tests/qapi-schema/empty.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
0
tests/qapi-schema/empty.json
Normal file
0
tests/qapi-schema/empty.json
Normal file
3
tests/qapi-schema/empty.out
Normal file
3
tests/qapi-schema/empty.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[]
|
||||||
|
[]
|
||||||
|
[]
|
0
tests/qapi-schema/funny-char.err
Normal file
0
tests/qapi-schema/funny-char.err
Normal file
1
tests/qapi-schema/funny-char.exit
Normal file
1
tests/qapi-schema/funny-char.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
2
tests/qapi-schema/funny-char.json
Normal file
2
tests/qapi-schema/funny-char.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ 'enum': 'Status',
|
||||||
|
'data': [ 'good', 'bad', 'ugly' ]; }
|
3
tests/qapi-schema/funny-char.out
Normal file
3
tests/qapi-schema/funny-char.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])]
|
||||||
|
['Status']
|
||||||
|
[]
|
0
tests/qapi-schema/indented-expr.err
Normal file
0
tests/qapi-schema/indented-expr.err
Normal file
1
tests/qapi-schema/indented-expr.exit
Normal file
1
tests/qapi-schema/indented-expr.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
2
tests/qapi-schema/indented-expr.json
Normal file
2
tests/qapi-schema/indented-expr.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ 'id' : 'eins' }
|
||||||
|
{ 'id' : 'zwei' }
|
3
tests/qapi-schema/indented-expr.out
Normal file
3
tests/qapi-schema/indented-expr.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('id', 'eins')])]
|
||||||
|
[]
|
||||||
|
[]
|
0
tests/qapi-schema/missing-colon.err
Normal file
0
tests/qapi-schema/missing-colon.err
Normal file
1
tests/qapi-schema/missing-colon.exit
Normal file
1
tests/qapi-schema/missing-colon.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
2
tests/qapi-schema/missing-colon.json
Normal file
2
tests/qapi-schema/missing-colon.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ 'enum' 'Status',
|
||||||
|
'data': [ 'good', 'bad', 'ugly' ] }
|
3
tests/qapi-schema/missing-colon.out
Normal file
3
tests/qapi-schema/missing-colon.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('enum', ','), ('data', ['good', 'bad', 'ugly'])])]
|
||||||
|
[',']
|
||||||
|
[]
|
0
tests/qapi-schema/missing-comma-list.err
Normal file
0
tests/qapi-schema/missing-comma-list.err
Normal file
1
tests/qapi-schema/missing-comma-list.exit
Normal file
1
tests/qapi-schema/missing-comma-list.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
2
tests/qapi-schema/missing-comma-list.json
Normal file
2
tests/qapi-schema/missing-comma-list.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ 'enum': 'Status',
|
||||||
|
'data': [ 'good' 'bad', 'ugly' ] }
|
3
tests/qapi-schema/missing-comma-list.out
Normal file
3
tests/qapi-schema/missing-comma-list.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])]
|
||||||
|
['Status']
|
||||||
|
[]
|
0
tests/qapi-schema/missing-comma-object.err
Normal file
0
tests/qapi-schema/missing-comma-object.err
Normal file
1
tests/qapi-schema/missing-comma-object.exit
Normal file
1
tests/qapi-schema/missing-comma-object.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
2
tests/qapi-schema/missing-comma-object.json
Normal file
2
tests/qapi-schema/missing-comma-object.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ 'enum': 'Status'
|
||||||
|
'data': [ 'good', 'bad', 'ugly' ] }
|
3
tests/qapi-schema/missing-comma-object.out
Normal file
3
tests/qapi-schema/missing-comma-object.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])]
|
||||||
|
['Status']
|
||||||
|
[]
|
1
tests/qapi-schema/non-objects.err
Normal file
1
tests/qapi-schema/non-objects.err
Normal file
@ -0,0 +1 @@
|
|||||||
|
Crashed: <type 'exceptions.AttributeError'>
|
1
tests/qapi-schema/non-objects.exit
Normal file
1
tests/qapi-schema/non-objects.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
2
tests/qapi-schema/non-objects.json
Normal file
2
tests/qapi-schema/non-objects.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
'string'
|
||||||
|
[ ]
|
0
tests/qapi-schema/non-objects.out
Normal file
0
tests/qapi-schema/non-objects.out
Normal file
0
tests/qapi-schema/quoted-structural-chars.err
Normal file
0
tests/qapi-schema/quoted-structural-chars.err
Normal file
1
tests/qapi-schema/quoted-structural-chars.exit
Normal file
1
tests/qapi-schema/quoted-structural-chars.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
1
tests/qapi-schema/quoted-structural-chars.json
Normal file
1
tests/qapi-schema/quoted-structural-chars.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
'{' 'key1' ':' 'value1' ',' 'key2' ':' '[' ']' '}'
|
3
tests/qapi-schema/quoted-structural-chars.out
Normal file
3
tests/qapi-schema/quoted-structural-chars.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('key1', 'value1'), ('key2', [])])]
|
||||||
|
[]
|
||||||
|
[]
|
25
tests/qapi-schema/test-qapi.py
Normal file
25
tests/qapi-schema/test-qapi.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#
|
||||||
|
# QAPI parser test harness
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013 Red Hat Inc.
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# Markus Armbruster <armbru@redhat.com>
|
||||||
|
#
|
||||||
|
# This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||||
|
# See the COPYING file in the top-level directory.
|
||||||
|
#
|
||||||
|
|
||||||
|
from qapi import *
|
||||||
|
from pprint import pprint
|
||||||
|
import sys
|
||||||
|
|
||||||
|
try:
|
||||||
|
exprs = parse_schema(sys.stdin)
|
||||||
|
except:
|
||||||
|
print >>sys.stderr, "Crashed:", sys.exc_info()[0]
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
pprint(exprs)
|
||||||
|
pprint(enum_types)
|
||||||
|
pprint(struct_types)
|
0
tests/qapi-schema/trailing-comma-list.err
Normal file
0
tests/qapi-schema/trailing-comma-list.err
Normal file
1
tests/qapi-schema/trailing-comma-list.exit
Normal file
1
tests/qapi-schema/trailing-comma-list.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
2
tests/qapi-schema/trailing-comma-list.json
Normal file
2
tests/qapi-schema/trailing-comma-list.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ 'enum': 'Status',
|
||||||
|
'data': [ 'good', 'bad', 'ugly', ] }
|
3
tests/qapi-schema/trailing-comma-list.out
Normal file
3
tests/qapi-schema/trailing-comma-list.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])]
|
||||||
|
['Status']
|
||||||
|
[]
|
0
tests/qapi-schema/trailing-comma-object.err
Normal file
0
tests/qapi-schema/trailing-comma-object.err
Normal file
1
tests/qapi-schema/trailing-comma-object.exit
Normal file
1
tests/qapi-schema/trailing-comma-object.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
2
tests/qapi-schema/trailing-comma-object.json
Normal file
2
tests/qapi-schema/trailing-comma-object.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ 'enum': 'Status',
|
||||||
|
'data': [ 'good', 'bad', 'ugly' ], }
|
3
tests/qapi-schema/trailing-comma-object.out
Normal file
3
tests/qapi-schema/trailing-comma-object.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[OrderedDict([('enum', 'Status'), ('data', ['good', 'bad', 'ugly'])])]
|
||||||
|
['Status']
|
||||||
|
[]
|
1
tests/qapi-schema/unclosed-list.err
Normal file
1
tests/qapi-schema/unclosed-list.err
Normal file
@ -0,0 +1 @@
|
|||||||
|
Crashed: <type 'exceptions.IndexError'>
|
1
tests/qapi-schema/unclosed-list.exit
Normal file
1
tests/qapi-schema/unclosed-list.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
1
tests/qapi-schema/unclosed-list.json
Normal file
1
tests/qapi-schema/unclosed-list.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{ 'key': [ 'value' }
|
0
tests/qapi-schema/unclosed-list.out
Normal file
0
tests/qapi-schema/unclosed-list.out
Normal file
1
tests/qapi-schema/unclosed-object.err
Normal file
1
tests/qapi-schema/unclosed-object.err
Normal file
@ -0,0 +1 @@
|
|||||||
|
Crashed: <type 'exceptions.IndexError'>
|
1
tests/qapi-schema/unclosed-object.exit
Normal file
1
tests/qapi-schema/unclosed-object.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
1
tests/qapi-schema/unclosed-object.json
Normal file
1
tests/qapi-schema/unclosed-object.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{ 'key': [ 'value' ]
|
0
tests/qapi-schema/unclosed-object.out
Normal file
0
tests/qapi-schema/unclosed-object.out
Normal file
1
tests/qapi-schema/unclosed-string.err
Normal file
1
tests/qapi-schema/unclosed-string.err
Normal file
@ -0,0 +1 @@
|
|||||||
|
Crashed: <type 'exceptions.Exception'>
|
1
tests/qapi-schema/unclosed-string.exit
Normal file
1
tests/qapi-schema/unclosed-string.exit
Normal file
@ -0,0 +1 @@
|
|||||||
|
1
|
2
tests/qapi-schema/unclosed-string.json
Normal file
2
tests/qapi-schema/unclosed-string.json
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{ 'text': 'lorem ips
|
||||||
|
}
|
0
tests/qapi-schema/unclosed-string.out
Normal file
0
tests/qapi-schema/unclosed-string.out
Normal file
Loading…
Reference in New Issue
Block a user