summaryrefslogtreecommitdiff
path: root/run/tests
blob: 82441321c83c0040eec7b25648106236de1b4f38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
#
# Run our test suite.

# Private test data; this is stuff that is non-distributable
private=../libdcp-test-private
# Work directory
work=build/test
# Path to dcpinfo tool
dcpinfo=build/tools/dcpinfo

export LD_LIBRARY_PATH=build/src:/home/c.hetherington/lib:$LD_LIBRARY_PATH

# Make sure we have the required tools
for c in xmlsec1 xmldiff xmllint; do
  hash $c 2>/dev/null || { echo >&2 "$c required but not found; aborting"; exit 1; }
done

# Run the unit tests in test/
if [ "$1" == "--debug" ]; then
    shift
    gdb --args $work/tests $private $*
elif [ "$1" == "--valgrind" ]; then
    shift
    valgrind --tool="memcheck" $work/tests $private $*
elif [ "$1" == "--callgrind" ]; then
    shift
    valgrind --tool="callgrind" $work/tests $private $*
else
    # This gives a warning from newer boost versions but doing it
    # as $work/tests $* -- $private fails on older boost versions.
    $work/tests $private $*
    if [ "$?" != "0" ]; then
	echo "FAIL: unit tests"
        exit 1
    fi
fi

# Check a MXF written by the unit tests
diff $work/baz/video1.mxf $work/baz/video2.mxf
if [ "$?" != "0" ]; then
    echo "FAIL: MXFs from recovery incorrect"
    exit 1
fi

# Check the DCP written by dcp_test1
diff -ur test/ref/DCP/dcp_test1 $work/DCP/dcp_test1
if [ "$?" != "0" ]; then
    echo "FAIL: files differ"
    exit 1
fi

# Check the DCP written by dcp_test2
diff -ur test/ref/DCP/dcp_test2 $work/DCP/dcp_test2
if [ "$?" != "0" ]; then
    echo "FAIL: files differ"
    exit 1
fi

# Check the DCP written by dcp_test5
diff -ur test/ref/DCP/dcp_test5 $work/DCP/dcp_test5
if [ "$?" != "0" ]; then
    echo "FAIL: files differ"
    exit 1
fi

# Check the DCP written by dcp_test7
diff -ur test/ref/DCP/dcp_test7 $work/DCP/dcp_test7
if [ "$?" != "0" ]; then
    echo "FAIL: files differ"
    exit 1
fi

# Check the DCP written by encryption_test
diff -ur test/ref/DCP/encryption_test $work/DCP/encryption_test
if [ "$?" != "0" ]; then
    echo "FAIL: files differ"
    exit 1
fi

# Everything beyond this point needs $private to exist
if [ ! -e "$private/info.log" ]; then
    echo ""
    echo "Private data not found: some tests will not run."
    exit 1
fi

# Run dcpinfo on all the DCPs in private/metadata, writing $work/info.log
# This writes details of the CPLs and all subtitle details, so it checks
# if the code is reading subtitle files correctly.
rm -f $work/info.log
for d in `find $private/metadata -mindepth 1 -maxdepth 1 -type d | sort -f -d`; do
    if [ `basename $d` != ".git" ]; then
        $dcpinfo --ignore-missing-assets -s $d >> $work/info.log
        if [ "$?" != "0" ]; then
            echo "FAIL: dcpinfo failed for $d"
            exit 1
        fi
    fi
done

# Check info.log is what it should be
diff -q $work/info.log $private/info.log
if [ "$?" != "0" ]; then
    echo "FAIL: dcpinfo output incorrect"
    exit 1
fi

# Copy $private into build/ then re-write the subtitles of every DCP using
# $work/rewrite_subs.  This tests round-trip of subtitle reading/writing.
# Note that all the subs in $private/metadata are Interop.
rm -f $work/info2.log
rm -rf $work/private
mkdir $work/private
cp -r $private/* $work/private
for d in `find $work/private/metadata -mindepth 1 -maxdepth 1 -type d | sort -f -d`; do
    if [ `basename $d` != ".git" ]; then
        $work/rewrite_subs $d
        $dcpinfo --ignore-missing-assets -s $d >> $work/info2.log
    fi
done

# Fudge the output
sed -i "s/DCP: build\/test/DCP: test/g" $work/info2.log

# And check it
diff -q $work/info2.log $private/info2.log
if [ "$?" != "0" ]; then
    echo "FAIL: dcpinfo output from rewrite incorrect"
    exit 1
fi

# Dump the subs of JourneyToJah... (which has MXF-wrapped SMPTE subtitles)
# and check that they are right
$dcpinfo -s $private/data/JourneyToJah_TLR-1_F_EN-DE-FR_CH_51_2K_LOK_20140225_DGL_SMPTE_OV >> $work/jah.log

# Parse some problematic subs and check that we get it right
run/test/subs_in_out $private/TunaBoat_Icelandic_Reel1_V1_8sec.xml > $work/tuna.xml
diff -q $private/TunaBoat_Icelandic_Reel1_V1_8sec.parsed.xml $work/tuna.xml
if [ "$?" != "0" ]; then
    echo "FAIL: output of parse check 1 invalid"
    exit 1
fi

echo "PASS"