368 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			368 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html>
 | |
| <!-- Created by GNU Texinfo 7.0.1, https://www.gnu.org/software/texinfo/ -->
 | |
| <head>
 | |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | |
| <title>FFmpeg Automated Testing Environment</title>
 | |
| 
 | |
| <meta name="description" content="FFmpeg Automated Testing Environment">
 | |
| <meta name="keywords" content="FFmpeg Automated Testing Environment">
 | |
| <meta name="resource-type" content="document">
 | |
| <meta name="distribution" content="global">
 | |
| <meta name="Generator" content="makeinfo">
 | |
| <meta name="viewport" content="width=device-width,initial-scale=1">
 | |
| 
 | |
| <link href="#Top" rel="start" title="Top">
 | |
| <link href="#SEC_Contents" rel="contents" title="Table of Contents">
 | |
| <style type="text/css">
 | |
| <!--
 | |
| div.example {margin-left: 3.2em}
 | |
| ul.mark-bullet {list-style-type: disc}
 | |
| ul.toc-numbered-mark {list-style: none}
 | |
| -->
 | |
| </style>
 | |
| 
 | |
| 
 | |
| </head>
 | |
| 
 | |
| <body lang="en">
 | |
| 
 | |
| 
 | |
| <div class="top-level-extent" id="Top">
 | |
| <a class="top" id="SEC_Top"></a>
 | |
| 
 | |
| <div class="element-contents" id="SEC_Contents">
 | |
| <h2 class="contents-heading">Table of Contents</h2>
 | |
| 
 | |
| <div class="contents">
 | |
| 
 | |
| <ul class="toc-numbered-mark">
 | |
|   <li><a id="toc-Introduction" href="#Introduction">1 Introduction</a></li>
 | |
|   <li><a id="toc-Using-FATE-from-your-FFmpeg-source-directory" href="#Using-FATE-from-your-FFmpeg-source-directory">2 Using FATE from your FFmpeg source directory</a></li>
 | |
|   <li><a id="toc-Submitting-the-results-to-the-FFmpeg-result-aggregation-server" href="#Submitting-the-results-to-the-FFmpeg-result-aggregation-server">3 Submitting the results to the FFmpeg result aggregation server</a></li>
 | |
|   <li><a id="toc-Uploading-new-samples-to-the-fate-suite" href="#Uploading-new-samples-to-the-fate-suite">4 Uploading new samples to the fate suite</a></li>
 | |
|   <li><a id="toc-FATE-makefile-targets-and-variables" href="#FATE-makefile-targets-and-variables">5 FATE makefile targets and variables</a>
 | |
|   <ul class="toc-numbered-mark">
 | |
|     <li><a id="toc-Makefile-targets" href="#Makefile-targets">5.1 Makefile targets</a></li>
 | |
|     <li><a id="toc-Makefile-variables" href="#Makefile-variables">5.2 Makefile variables</a></li>
 | |
|     <li><a id="toc-Examples" href="#Examples">5.3 Examples</a></li>
 | |
|   </ul></li>
 | |
| </ul>
 | |
| </div>
 | |
| </div>
 | |
| <div class="chapter-level-extent" id="Introduction">
 | |
| <h2 class="chapter">1 Introduction</h2>
 | |
| 
 | |
| <p>FATE is an extended regression suite on the client-side and a means
 | |
| for results aggregation and presentation on the server-side.
 | |
| </p>
 | |
| <p>The first part of this document explains how you can use FATE from
 | |
| your FFmpeg source directory to test your ffmpeg binary. The second
 | |
| part describes how you can run FATE to submit the results to FFmpeg’s
 | |
| FATE server.
 | |
| </p>
 | |
| <p>In any way you can have a look at the publicly viewable FATE results
 | |
| by visiting this website:
 | |
| </p>
 | |
| <p><a class="url" href="http://fate.ffmpeg.org/">http://fate.ffmpeg.org/</a>
 | |
| </p>
 | |
| <p>This is especially recommended for all people contributing source
 | |
| code to FFmpeg, as it can be seen if some test on some platform broke
 | |
| with their recent contribution. This usually happens on the platforms
 | |
| the developers could not test on.
 | |
| </p>
 | |
| <p>The second part of this document describes how you can run FATE to
 | |
| submit your results to FFmpeg’s FATE server. If you want to submit your
 | |
| results be sure to check that your combination of CPU, OS and compiler
 | |
| is not already listed on the above mentioned website.
 | |
| </p>
 | |
| <p>In the third part you can find a comprehensive listing of FATE makefile
 | |
| targets and variables.
 | |
| </p>
 | |
| 
 | |
| </div>
 | |
| <div class="chapter-level-extent" id="Using-FATE-from-your-FFmpeg-source-directory">
 | |
| <h2 class="chapter">2 Using FATE from your FFmpeg source directory</h2>
 | |
| 
 | |
| <p>If you want to run FATE on your machine you need to have the samples
 | |
| in place. You can get the samples via the build target fate-rsync.
 | |
| Use this command from the top-level source directory:
 | |
| </p>
 | |
| <div class="example">
 | |
| <pre class="example-preformatted">make fate-rsync SAMPLES=fate-suite/
 | |
| make fate       SAMPLES=fate-suite/
 | |
| </pre></div>
 | |
| 
 | |
| <p>The above commands set the samples location by passing a makefile
 | |
| variable via command line. It is also possible to set the samples
 | |
| location at source configuration time by invoking configure with
 | |
| <samp class="option">--samples=<path to the samples directory></samp>. Afterwards you can
 | |
| invoke the makefile targets without setting the <var class="var">SAMPLES</var> makefile
 | |
| variable. This is illustrated by the following commands:
 | |
| </p>
 | |
| <div class="example">
 | |
| <pre class="example-preformatted">./configure --samples=fate-suite/
 | |
| make fate-rsync
 | |
| make fate
 | |
| </pre></div>
 | |
| 
 | |
| <p>Yet another way to tell FATE about the location of the sample
 | |
| directory is by making sure the environment variable FATE_SAMPLES
 | |
| contains the path to your samples directory. This can be achieved
 | |
| by e.g. putting that variable in your shell profile or by setting
 | |
| it in your interactive session.
 | |
| </p>
 | |
| <div class="example">
 | |
| <pre class="example-preformatted">FATE_SAMPLES=fate-suite/ make fate
 | |
| </pre></div>
 | |
| 
 | |
| <div class="float">
 | |
| <p>Do not put a ’~’ character in the samples path to indicate a home
 | |
| directory. Because of shell nuances, this will cause FATE to fail.
 | |
| </p><div class="type-number-float"><p><strong class="strong">NOTE
 | |
| </strong></p></div></div>
 | |
| <p>To get the complete list of tests, run the command:
 | |
| </p><div class="example">
 | |
| <pre class="example-preformatted">make fate-list
 | |
| </pre></div>
 | |
| 
 | |
| <p>You can specify a subset of tests to run by specifying the
 | |
| corresponding elements from the list with the <code class="code">fate-</code> prefix,
 | |
| e.g. as in:
 | |
| </p><div class="example">
 | |
| <pre class="example-preformatted">make fate-ffprobe_compact fate-ffprobe_xml
 | |
| </pre></div>
 | |
| 
 | |
| <p>This makes it easier to run a few tests in case of failure without
 | |
| running the complete test suite.
 | |
| </p>
 | |
| <p>To use a custom wrapper to run the test, pass <samp class="option">--target-exec</samp> to
 | |
| <code class="command">configure</code> or set the <var class="var">TARGET_EXEC</var> Make variable.
 | |
| </p>
 | |
| 
 | |
| </div>
 | |
| <div class="chapter-level-extent" id="Submitting-the-results-to-the-FFmpeg-result-aggregation-server">
 | |
| <h2 class="chapter">3 Submitting the results to the FFmpeg result aggregation server</h2>
 | |
| 
 | |
| <p>To submit your results to the server you should run fate through the
 | |
| shell script <samp class="file">tests/fate.sh</samp> from the FFmpeg sources. This script needs
 | |
| to be invoked with a configuration file as its first argument.
 | |
| </p>
 | |
| <div class="example">
 | |
| <pre class="example-preformatted">tests/fate.sh /path/to/fate_config
 | |
| </pre></div>
 | |
| 
 | |
| <p>A configuration file template with comments describing the individual
 | |
| configuration variables can be found at <samp class="file">doc/fate_config.sh.template</samp>.
 | |
| </p>
 | |
| <p>The mentioned configuration template is also available here:
 | |
| </p><pre class="verbatim">slot=                                    # some unique identifier
 | |
| repo=git://source.ffmpeg.org/ffmpeg.git  # the source repository
 | |
| #branch=release/2.6                       # the branch to test
 | |
| samples=                                 # path to samples directory
 | |
| workdir=                                 # directory in which to do all the work
 | |
| #fate_recv="ssh -T fate@fate.ffmpeg.org" # command to submit report
 | |
| comment=                                 # optional description
 | |
| build_only=     # set to "yes" for a compile-only instance that skips tests
 | |
| ignore_tests=
 | |
| 
 | |
| # the following are optional and map to configure options
 | |
| arch=
 | |
| cpu=
 | |
| cross_prefix=
 | |
| as=
 | |
| cc=
 | |
| ld=
 | |
| target_os=
 | |
| sysroot=
 | |
| target_exec=
 | |
| target_path=
 | |
| target_samples=
 | |
| extra_cflags=
 | |
| extra_ldflags=
 | |
| extra_libs=
 | |
| extra_conf=     # extra configure options not covered above
 | |
| 
 | |
| #make=          # name of GNU make if not 'make'
 | |
| makeopts=       # extra options passed to 'make'
 | |
| #makeopts_fate= # extra options passed to 'make' when running tests,
 | |
|                 # defaulting to makeopts above if this is not set
 | |
| #tar=           # command to create a tar archive from its arguments on stdout,
 | |
|                 # defaults to 'tar c'
 | |
| </pre>
 | |
| <p>Create a configuration that suits your needs, based on the configuration
 | |
| template. The <code class="env">slot</code> configuration variable can be any string that is not
 | |
| yet used, but it is suggested that you name it adhering to the following
 | |
| pattern ‘<samp class="samp"><var class="var">arch</var>-<var class="var">os</var>-<var class="var">compiler</var>-<var class="var">compiler version</var></samp>’. The
 | |
| configuration file itself will be sourced in a shell script, therefore all
 | |
| shell features may be used. This enables you to setup the environment as you
 | |
| need it for your build.
 | |
| </p>
 | |
| <p>For your first test runs the <code class="env">fate_recv</code> variable should be empty or
 | |
| commented out. This will run everything as normal except that it will omit
 | |
| the submission of the results to the server. The following files should be
 | |
| present in $workdir as specified in the configuration file:
 | |
| </p>
 | |
| <ul class="itemize mark-bullet">
 | |
| <li>configure.log
 | |
|     </li><li>compile.log
 | |
|     </li><li>test.log
 | |
|     </li><li>report
 | |
|     </li><li>version
 | |
| </li></ul>
 | |
| 
 | |
| <p>When you have everything working properly you can create an SSH key pair
 | |
| and send the public key to the FATE server administrator who can be contacted
 | |
| at the email address <a class="email" href="mailto:fate-admin@ffmpeg.org">fate-admin@ffmpeg.org</a>.
 | |
| </p>
 | |
| <p>Configure your SSH client to use public key authentication with that key
 | |
| when connecting to the FATE server. Also do not forget to check the identity
 | |
| of the server and to accept its host key. This can usually be achieved by
 | |
| running your SSH client manually and killing it after you accepted the key.
 | |
| The FATE server’s fingerprint is:
 | |
| </p>
 | |
| <dl class="table">
 | |
| <dt>‘<samp class="samp">RSA</samp>’</dt>
 | |
| <dd><p>d3:f1:83:97:a4:75:2b:a6:fb:d6:e8:aa:81:93:97:51
 | |
| </p></dd>
 | |
| <dt>‘<samp class="samp">ECDSA</samp>’</dt>
 | |
| <dd><p>76:9f:68:32:04:1e:d5:d4:ec:47:3f:dc:fc:18:17:86
 | |
| </p></dd>
 | |
| </dl>
 | |
| 
 | |
| <p>If you have problems connecting to the FATE server, it may help to try out
 | |
| the <code class="command">ssh</code> command with one or more <samp class="option">-v</samp> options. You should
 | |
| get detailed output concerning your SSH configuration and the authentication
 | |
| process.
 | |
| </p>
 | |
| <p>The only thing left is to automate the execution of the fate.sh script and
 | |
| the synchronisation of the samples directory.
 | |
| </p>
 | |
| </div>
 | |
| <div class="chapter-level-extent" id="Uploading-new-samples-to-the-fate-suite">
 | |
| <h2 class="chapter">4 Uploading new samples to the fate suite</h2>
 | |
| 
 | |
| <p>If you need a sample uploaded send a mail to samples-request.
 | |
| </p>
 | |
| <p>This is for developers who have an account on the fate suite server.
 | |
| If you upload new samples, please make sure they are as small as possible,
 | |
| space on each client, network bandwidth and so on benefit from smaller test cases.
 | |
| Also keep in mind older checkouts use existing sample files, that means in
 | |
| practice generally do not replace, remove or overwrite files as it likely would
 | |
| break older checkouts or releases.
 | |
| Also all needed samples for a commit should be uploaded, ideally 24
 | |
| hours, before the push.
 | |
| If you need an account for frequently uploading samples or you wish to help
 | |
| others by doing that send a mail to ffmpeg-devel.
 | |
| </p>
 | |
| <div class="example">
 | |
| <pre class="example-preformatted">#First update your local samples copy:
 | |
| rsync -vauL --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X fate-suite.ffmpeg.org:/home/samples/fate-suite/ ~/fate-suite
 | |
| 
 | |
| #Then do a dry run checking what would be uploaded:
 | |
| rsync -vanL --no-g --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X ~/fate-suite/ fate-suite.ffmpeg.org:/home/samples/fate-suite
 | |
| 
 | |
| #Upload the files:
 | |
| rsync -vaL  --no-g --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X ~/fate-suite/ fate-suite.ffmpeg.org:/home/samples/fate-suite
 | |
| </pre></div>
 | |
| 
 | |
| 
 | |
| </div>
 | |
| <div class="chapter-level-extent" id="FATE-makefile-targets-and-variables">
 | |
| <h2 class="chapter">5 FATE makefile targets and variables</h2>
 | |
| 
 | |
| <ul class="mini-toc">
 | |
| <li><a href="#Makefile-targets" accesskey="1">Makefile targets</a></li>
 | |
| <li><a href="#Makefile-variables" accesskey="2">Makefile variables</a></li>
 | |
| <li><a href="#Examples" accesskey="3">Examples</a></li>
 | |
| </ul>
 | |
| <div class="section-level-extent" id="Makefile-targets">
 | |
| <h3 class="section">5.1 Makefile targets</h3>
 | |
| 
 | |
| <dl class="table">
 | |
| <dt><samp class="option">fate-rsync</samp></dt>
 | |
| <dd><p>Download/synchronize sample files to the configured samples directory.
 | |
| </p>
 | |
| </dd>
 | |
| <dt><samp class="option">fate-list</samp></dt>
 | |
| <dd><p>Will list all fate/regression test targets.
 | |
| </p>
 | |
| </dd>
 | |
| <dt><samp class="option">fate</samp></dt>
 | |
| <dd><p>Run the FATE test suite (requires the fate-suite dataset).
 | |
| </p></dd>
 | |
| </dl>
 | |
| 
 | |
| </div>
 | |
| <div class="section-level-extent" id="Makefile-variables">
 | |
| <h3 class="section">5.2 Makefile variables</h3>
 | |
| 
 | |
| <dl class="table">
 | |
| <dt><code class="env">V</code></dt>
 | |
| <dd><p>Verbosity level, can be set to 0, 1 or 2.
 | |
|     </p><ul class="itemize mark-bullet">
 | |
| <li>0: show just the test arguments
 | |
|         </li><li>1: show just the command used in the test
 | |
|         </li><li>2: show everything
 | |
|     </li></ul>
 | |
| 
 | |
| </dd>
 | |
| <dt><code class="env">SAMPLES</code></dt>
 | |
| <dd><p>Specify or override the path to the FATE samples at make time, it has a
 | |
| meaning only while running the regression tests.
 | |
| </p>
 | |
| </dd>
 | |
| <dt><code class="env">THREADS</code></dt>
 | |
| <dd><p>Specify how many threads to use while running regression tests, it is
 | |
| quite useful to detect thread-related regressions.
 | |
| </p>
 | |
| </dd>
 | |
| <dt><code class="env">THREAD_TYPE</code></dt>
 | |
| <dd><p>Specify which threading strategy test, either ‘<samp class="samp">slice</samp>’ or ‘<samp class="samp">frame</samp>’,
 | |
| by default ‘<samp class="samp">slice+frame</samp>’
 | |
| </p>
 | |
| </dd>
 | |
| <dt><code class="env">CPUFLAGS</code></dt>
 | |
| <dd><p>Specify CPU flags.
 | |
| </p>
 | |
| </dd>
 | |
| <dt><code class="env">TARGET_EXEC</code></dt>
 | |
| <dd><p>Specify or override the wrapper used to run the tests.
 | |
| The <code class="env">TARGET_EXEC</code> option provides a way to run FATE wrapped in
 | |
| <code class="command">valgrind</code>, <code class="command">qemu-user</code> or <code class="command">wine</code> or on remote targets
 | |
| through <code class="command">ssh</code>.
 | |
| </p>
 | |
| </dd>
 | |
| <dt><code class="env">GEN</code></dt>
 | |
| <dd><p>Set to ‘<samp class="samp">1</samp>’ to generate the missing or mismatched references.
 | |
| </p>
 | |
| </dd>
 | |
| <dt><code class="env">HWACCEL</code></dt>
 | |
| <dd><p>Specify which hardware acceleration to use while running regression tests,
 | |
| by default ‘<samp class="samp">none</samp>’ is used.
 | |
| </p>
 | |
| </dd>
 | |
| <dt><code class="env">KEEP</code></dt>
 | |
| <dd><p>Set to ‘<samp class="samp">1</samp>’ to keep temp files generated by fate test(s) when test is successful.
 | |
| Default is ‘<samp class="samp">0</samp>’, which removes these files. Files are always kept when a test
 | |
| fails.
 | |
| </p>
 | |
| </dd>
 | |
| </dl>
 | |
| 
 | |
| </div>
 | |
| <div class="section-level-extent" id="Examples">
 | |
| <h3 class="section">5.3 Examples</h3>
 | |
| 
 | |
| <div class="example">
 | |
| <pre class="example-preformatted">make V=1 SAMPLES=/var/fate/samples THREADS=2 CPUFLAGS=mmx fate
 | |
| </pre></div>
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| 
 | |
| </body>
 | |
| </html>
 | 
