Modified: websites/staging/thrift/trunk/content/lib/php.html
==============================================================================
--- websites/staging/thrift/trunk/content/lib/php.html (original)
+++ websites/staging/thrift/trunk/content/lib/php.html Sat Sep 26 12:54:26 2015
@@ -73,18 +73,29 @@
</div>
<div class="container">
- <h1 id="using-thrift-with-php">Using Thrift with PHP</h1>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="using-thrift-with-php">Using Thrift with PHP<a class="headerlink"
href="#using-thrift-with-php" title="Permanent link">¶</a></h1>
<p>Thrift requires PHP 5. Thrift makes as few assumptions about your PHP
environment as possible while trying to make some more advanced PHP
features (i.e. APC cacheing using asbolute path URLs) as simple as
possible.</p>
<p>To use Thrift in your PHP codebase, take the following steps:</p>
-<h1 id="1-copy-all-of-thriftlibphplib-into-your-php-codebase">1) Copy all of
thrift/lib/php/lib into your PHP codebase</h1>
-<h1 id="2-configure-symfony-autoloader-or-whatever-you-usually-use">2)
Configure Symfony Autoloader (or whatever you usually use)</h1>
+<h1 id="1-copy-all-of-thriftlibphplib-into-your-php-codebase">1) Copy all of
thrift/lib/php/lib into your PHP codebase<a class="headerlink"
href="#1-copy-all-of-thriftlibphplib-into-your-php-codebase" title="Permanent
link">¶</a></h1>
+<h1 id="2-configure-symfony-autoloader-or-whatever-you-usually-use">2)
Configure Symfony Autoloader (or whatever you usually use)<a class="headerlink"
href="#2-configure-symfony-autoloader-or-whatever-you-usually-use"
title="Permanent link">¶</a></h1>
<p>After that, you have to manually include the Thrift package
created by the compiler:</p>
<p>require_once 'packages/Service/Service.php';
require_once 'packages/Service/Types.php';</p>
-<h1 id="dependencies">Dependencies</h1>
+<h1 id="dependencies">Dependencies<a class="headerlink" href="#dependencies"
title="Permanent link">¶</a></h1>
<p>PHP_INT_SIZE</p>
<p>This built-in signals whether your architecture is 32 or 64 bit and is
used by the TBinaryProtocol to properly use pack() and unpack() to
Modified: websites/staging/thrift/trunk/content/lib/py.html
==============================================================================
--- websites/staging/thrift/trunk/content/lib/py.html (original)
+++ websites/staging/thrift/trunk/content/lib/py.html Sat Sep 26 12:54:26 2015
@@ -73,7 +73,18 @@
</div>
<div class="container">
- <h1 id="using-thrift-with-python">Using Thrift with Python</h1>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="using-thrift-with-python">Using Thrift with Python<a
class="headerlink" href="#using-thrift-with-python" title="Permanent
link">¶</a></h1>
<p>Thrift is provided as a set of Python packages. The top level package is
thrift, and there are subpackages for the protocol, transport, and server
code. Each package contains modules using standard Thrift naming conventions
Modified: websites/staging/thrift/trunk/content/lib/rb.html
==============================================================================
--- websites/staging/thrift/trunk/content/lib/rb.html (original)
+++ websites/staging/thrift/trunk/content/lib/rb.html Sat Sep 26 12:54:26 2015
@@ -73,7 +73,18 @@
</div>
<div class="container">
- <p>== DESCRIPTION:</p>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<p>== DESCRIPTION:</p>
<p>Thrift is a strongly-typed language-agnostic RPC system.
This library is the ruby implementation for both clients and servers.</p>
<p>== INSTALL:</p>
Modified: websites/staging/thrift/trunk/content/lib/st.html
==============================================================================
--- websites/staging/thrift/trunk/content/lib/st.html (original)
+++ websites/staging/thrift/trunk/content/lib/st.html Sat Sep 26 12:54:26 2015
@@ -73,7 +73,18 @@
</div>
<div class="container">
- <h1 id="library">Library</h1>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="library">Library<a class="headerlink" href="#library" title="Permanent
link">¶</a></h1>
<p>To get started, just file in thrift.st with Squeak, run thrift -st
on the tutorial .thrift files (and file in the resulting code), and
then:</p>
Modified: websites/staging/thrift/trunk/content/mailing.html
==============================================================================
--- websites/staging/thrift/trunk/content/mailing.html (original)
+++ websites/staging/thrift/trunk/content/mailing.html Sat Sep 26 12:54:26 2015
@@ -73,23 +73,34 @@
</div>
<div class="container">
- <p>In accordance with the principles of the Apache Software
Foundation, Thrift encourages a collaborative and community-based development
environment.</p>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<p>In accordance with the principles of the Apache Software Foundation, Thrift
encourages a collaborative and community-based development environment.</p>
<p>All project discussion is carried out publicly, on the following archived
lists.</p>
<hr />
-<h3 id="user-mailing-list">User Mailing List</h3>
+<h3 id="user-mailing-list">User Mailing List<a class="headerlink"
href="#user-mailing-list" title="Permanent link">¶</a></h3>
<p>If you use Apache Thrift, please subscribe to the Thrift user mailing list.
This list is for questions about Thrift and announcements from the team
relevant to all users</p>
<p><a href="mailto:[email protected]">Subscribe</a> | <a
href="mailto:[email protected]">Unsubscribe</a> | <a
href="http://mail-archives.apache.org/mod_mbox/thrift-user">View Archives</a> |
<a href="http://mail-archives.apache.org/mod_mbox/incubator-thrift-user">View
Archives (Incubator)</a></p>
<hr />
-<h3 id="developers-mailing-list">Developers Mailing List</h3>
+<h3 id="developers-mailing-list">Developers Mailing List<a class="headerlink"
href="#developers-mailing-list" title="Permanent link">¶</a></h3>
<p>If you would like to contribute to Apache Thrift, subscribe to the Thrift
developer mailing list.</p>
<p><a href="mailto:[email protected]">Subscribe</a> | <a
href="mailto:[email protected]">Unsubscribe</a> | <a
href="http://mail-archives.apache.org/mod_mbox/thrift-dev">View Archives</a> |
<a href="http://mail-archives.apache.org/mod_mbox/incubator-thrift-dev">View
Archives (Incubator)</a></p>
<hr />
-<h3 id="commits-mailing-list">Commits Mailing List</h3>
+<h3 id="commits-mailing-list">Commits Mailing List<a class="headerlink"
href="#commits-mailing-list" title="Permanent link">¶</a></h3>
<p>This list receives notifications about all code changes made to Apache
Thrift.</p>
<p><a href="mailto:[email protected]">Subscribe</a> | <a
href="mailto:[email protected]">Unsubscribe</a> | <a
href="http://mail-archives.apache.org/mod_mbox/thrift-commits">View
Archives</a> | <a
href="http://mail-archives.apache.org/mod_mbox/incubator-thrift-commits">View
Archives (Incubator)</a></p>
<hr />
<p>Note: subscription is required to post to all lists.</p>
-<h3 id="irc">IRC</h3>
+<h3 id="irc">IRC<a class="headerlink" href="#irc" title="Permanent
link">¶</a></h3>
<p>Many of the Apache Thrift developers and community members hang out in the
#thrift channel on irc.freenode.net.</p>
<p>If you are new to IRC, you can use a client such as <a
href="http://www.xchat.org">xchat</a> or <a
href="http://www.irssi.org">Irssi</a> or a <a
href="http://webchat.freenode.net/?channels=#thrift">web-based client</a>.</p>
</div>
Modified: websites/staging/thrift/trunk/content/sitemap.html
==============================================================================
--- websites/staging/thrift/trunk/content/sitemap.html (original)
+++ websites/staging/thrift/trunk/content/sitemap.html Sat Sep 26 12:54:26 2015
@@ -73,7 +73,18 @@
</div>
<div class="container">
- <ul>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<ul>
<li><a href="/">Home</a><ul>
<li><a href="/about">About</a></li>
<li><a href="/developers">Developers</a></li>
Modified: websites/staging/thrift/trunk/content/test/ThriftTest.html
==============================================================================
--- websites/staging/thrift/trunk/content/test/ThriftTest.html (original)
+++ websites/staging/thrift/trunk/content/test/ThriftTest.html Sat Sep 26
12:54:26 2015
@@ -73,7 +73,30 @@
</div>
<div class="container">
- <table class="codehilitetable"><tr><td class="linenos"><div
class="linenodiv"><pre> 1
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+
+<table class="codehilitetable"><tr><td class="linenos"><div
class="linenodiv"><pre> 1
2
3
4
@@ -458,7 +481,21 @@
383
384
385
-386</pre></div></td><td class="code"><div class="codehilite"><pre>/*
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400</pre></div></td><td class="code"><div class="codehilite"><pre>/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -604,6 +641,13 @@ service ThriftTest
string testString(1: string thing),
/**
+ * Prints 'testBool("%s")' where '%s' with thing
as 'true' or 'false'
+ * @param bool thing - the bool data to print
+ * @return bool - returns the bool 'thing'
+ */
+ bool testBool(1: bool thing),
+
+ /**
* Prints 'testByte("%d")' with thing as '%d'
* @param byte thing - the byte to print
* @return byte - returns the byte 'thing'
@@ -632,7 +676,14 @@ service ThriftTest
double testDouble(1: double thing),
/**
- * Prints 'testStruct("{%s}")' where thing has been
formatted into a string of comma seperated values
+ * Prints 'testBinary("%s")' where '%s' is a
hex-formatted string of thing's data
+ * @param binary thing - the binary data to print
+ * @return binary - returns the binary 'thing'
+ */
+ binary testBinary(1: binary thing),
+
+ /**
+ * Prints 'testStruct("{%s}")' where thing has been
formatted into a string of comma separated values
* @param Xtruct thing - the Xtruct to print
* @return Xtruct - returns the Xtruct 'thing'
*/
@@ -647,7 +698,7 @@ service ThriftTest
/**
* Prints 'testMap("{%s")' where thing has been formatted
into a string of 'key => value' pairs
- * seperated by commas and new lines
+ * separated by commas and new lines
* @param map<i32,i32> thing - the map<i32,i32> to print
* @return map<i32,i32> - returns the map<i32,i32>
'thing'
*/
@@ -655,7 +706,7 @@ service ThriftTest
/**
* Prints 'testStringMap("{%s}")' where thing has been
formatted into a string of 'key => value' pairs
- * seperated by commas and new lines
+ * separated by commas and new lines
* @param map<string,string> thing - the map<string,string> to
print
* @return map<string,string> - returns the map<string,string>
'thing'
*/
@@ -663,7 +714,7 @@ service ThriftTest
/**
* Prints 'testSet("{%s}")' where thing has been formatted
into a string of values
- * seperated by commas and new lines
+ * separated by commas and new lines
* @param set<i32> thing - the set<i32> to print
* @return set<i32> - returns the set<i32> 'thing'
*/
@@ -671,7 +722,7 @@ service ThriftTest
/**
* Prints 'testList("{%s}")' where thing has been
formatted into a string of values
- * seperated by commas and new lines
+ * separated by commas and new lines
* @param list<i32> thing - the list<i32> to print
* @return list<i32> - returns the list<i32> 'thing'
*/
Modified: websites/staging/thrift/trunk/content/test/index.html
==============================================================================
--- websites/staging/thrift/trunk/content/test/index.html (original)
+++ websites/staging/thrift/trunk/content/test/index.html Sat Sep 26 12:54:26
2015
@@ -73,43 +73,146 @@
</div>
<div class="container">
- <h1 id="apache-thrift-integration-test-suite">Apache Thrift -
integration test suite</h1>
-<p>This is the cross everything integration test suite for Apache Thrift.
-executed by</p>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="apache-thrift-integration-test-suite">Apache Thrift - integration test
suite<a class="headerlink" href="#apache-thrift-integration-test-suite"
title="Permanent link">¶</a></h1>
+<p>This is the cross everything integration test suite for Apache Thrift.</p>
+<h2 id="run">Run<a class="headerlink" href="#run" title="Permanent
link">¶</a></h2>
+<h3 id="a-using-make">A. Using Make<a class="headerlink" href="#a-using-make"
title="Permanent link">¶</a></h3>
+<p>The test can be executed by:</p>
<div class="codehilite"><pre><span class="n">make</span> <span
class="nb">cross</span>
</pre></div>
-<p>at the moment, this starts the test.sh script which does the real cross test
-with different transports, protocols and languages.</p>
-<p>Unit tests for languages ar usually located under lib/<lang>/test/
-cross language tests acording to <a href="ThriftTest">ThriftTest.thrift</a>
shall be
+<p>This starts the <a href="test">test.py</a> script which does the real cross
test with
+different transports, protocols and languages.</p>
+<p>Note that this skips any language that is not built locally. It also skips
+tests that are known to be failing. If you need more control over which tests
+to run, read following section.</p>
+<h3 id="b-using-test-script-directly">B. Using test script directly<a
class="headerlink" href="#b-using-test-script-directly" title="Permanent
link">¶</a></h3>
+<p>Alternatively, you can invoke <a href="test">test.py</a> directly. You need
to run<code>make
+precross</code> once before executing it for the first time.</p>
+<p>For example, if you changed something in <code>nodejs</code> library and
need to verify
+the patch, you can skip everything except <code>nodejs</code> itself and some
reference
+implementation (currently <code>cpp</code> and <code>java</code> are
recommended) like this:</p>
+<div class="codehilite"><pre><span class="o">./</span><span
class="n">configure</span> <span class="o">--</span><span
class="n">without</span><span class="o">-</span><span class="n">c_glib</span>
<span class="o">-</span><span class="n">without</span><span
class="o">-</span><span class="n">csharp</span> <span class="o">--</span><span
class="n">without</span><span class="o">-</span><span class="n">erlang</span>
<span class="o">--</span><span class="n">without</span><span
class="o">-</span><span class="n">lua</span> <span class="p">...</span>
+<span class="n">make</span> <span class="n">precross</span> <span
class="o">-</span><span class="n">j8</span>
+<span class="n">test</span><span class="o">/</span><span
class="n">test</span><span class="p">.</span><span class="n">py</span> <span
class="o">--</span><span class="n">server</span> <span
class="n">cpp</span><span class="p">,</span><span class="n">java</span> <span
class="o">--</span><span class="n">client</span> <span class="n">nodejs</span>
+<span class="n">test</span><span class="o">/</span><span
class="n">test</span><span class="p">.</span><span class="n">py</span> <span
class="o">--</span><span class="n">server</span> <span class="n">nodejs</span>
<span class="o">--</span><span class="n">client</span> <span
class="n">cpp</span><span class="p">,</span><span class="n">java</span>
+</pre></div>
+
+
+<h2 id="test-case-definition-file">Test case definition file<a
class="headerlink" href="#test-case-definition-file" title="Permanent
link">¶</a></h2>
+<p>The cross test cases are defined in <a href="tests">tests.json</a>.
+The root element is collection of test target definitions.
+Each test target definition looks like this:</p>
+<div class="codehilite"><pre><span class="p">{</span>
+ "<span class="n">name</span>"<span class="p">:</span> "<span
class="n">somelib</span>"<span class="p">,</span>
+
+ "<span class="n">client</span>"<span class="p">:</span> <span
class="p">{</span>
+ "<span class="n">command</span>"<span class="p">:</span> <span
class="p">[</span>"<span
class="n">somelib_client_executable</span>"<span class="p">],</span>
+ "<span class="n">workdir</span>"<span class="p">:</span>
"<span class="n">somelib</span><span class="o">/</span><span
class="n">bin</span>"<span class="p">,</span>
+ "<span class="n">protocols</span>"<span class="p">:</span> <span
class="p">[</span>"<span class="n">binary</span>"<span
class="p">],</span>
+ "<span class="n">transports</span>"<span class="p">:</span>
<span class="p">[</span>"<span class="n">buffered</span>"<span
class="p">],</span>
+ "<span class="n">sockets</span>"<span class="p">:</span> <span
class="p">[</span>"<span class="n">ip</span>"<span class="p">],</span>
+ <span class="p">},</span>
+ "<span class="n">server</span>"<span class="p">:</span> <span
class="p">{</span>
+ "<span class="n">command</span>"<span class="p">:</span> <span
class="p">[</span>"<span
class="n">somelib_server_executable</span>"<span class="p">],</span>
+ "<span class="n">workdir</span>"<span class="p">:</span>
"<span class="n">somelib</span><span class="o">/</span><span
class="n">bin</span>"<span class="p">,</span>
+ "<span class="n">protocols</span>"<span class="p">:</span> <span
class="p">[</span>"<span class="n">binary</span>"<span
class="p">],</span>
+ "<span class="n">transports</span>"<span class="p">:</span>
<span class="p">[</span>"<span class="n">buffered</span>"<span
class="p">],</span>
+ "<span class="n">sockets</span>"<span class="p">:</span> <span
class="p">[</span>"<span class="n">ip</span>"<span class="p">,</span>
"<span class="n">ip</span><span class="o">-</span><span
class="n">ssl</span>"<span class="p">],</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>Either client or server definition or both should be present.</p>
+<p>Parameters that are common to both <code>client</code> and
<code>server</code> can be put to target
+definition root:</p>
+<div class="codehilite"><pre><span class="p">{</span>
+ "<span class="n">name</span>"<span class="p">:</span> "<span
class="n">somelib</span>"<span class="p">,</span>
+
+ "<span class="n">workdir</span>"<span class="p">:</span>
"<span class="n">somelib</span><span class="o">/</span><span
class="n">bin</span>"<span class="p">,</span>
+ "<span class="n">protocols</span>"<span class="p">:</span> <span
class="p">[</span>"<span class="n">binary</span>"<span
class="p">],</span>
+ "<span class="n">transports</span>"<span class="p">:</span> <span
class="p">[</span>"<span class="n">buffered</span>"<span
class="p">],</span>
+ "<span class="n">sockets</span>"<span class="p">:</span> <span
class="p">[</span>"<span class="n">ip</span>"<span class="p">],</span>
+
+ "<span class="n">client</span>"<span class="p">:</span> <span
class="p">{</span> "<span class="n">command</span>"<span
class="p">:</span> <span class="p">[</span>"<span
class="n">somelib_client_executable</span>"<span class="p">]</span> <span
class="p">},</span>
+ "<span class="n">server</span>"<span class="p">:</span> <span
class="p">{</span>
+ "<span class="n">command</span>"<span class="p">:</span> <span
class="p">[</span>"<span
class="n">somelib_server_executable</span>"<span class="p">],</span>
+ "<span class="n">sockets</span>"<span class="p">:</span> <span
class="p">[</span>"<span class="n">ip</span><span class="o">-</span><span
class="n">ssl</span>"<span class="p">]</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>For the complete list of supported keys and their effect, see source code
+comment at the opt of <a
href="crossrunner/collect">crossrunner/collect.py</a>.</p>
+<h2 id="list-of-known-failures">List of known failures<a class="headerlink"
href="#list-of-known-failures" title="Permanent link">¶</a></h2>
+<p>Since many cross tests currently fail (mainly due to partial incompatibility
+around exception handling), the test script specifically report for "not known
+before" failures.</p>
+<p>For this purpose, test cases known to (occasionally) fail are listed in
+<code>known_failures_<platform>.json</code> where
<code><platform></code> matches with python
+<code>platform.system()</code> string.</p>
+<p>Currently, only Linux version is included.</p>
+<p>FYI, the file is initially generated by</p>
+<div class="codehilite"><pre><span class="n">test</span><span
class="o">/</span><span class="n">test</span><span class="p">.</span><span
class="n">py</span> <span class="o">--</span><span class="n">update</span><span
class="o">-</span><span class="n">expected</span><span class="o">-</span><span
class="n">failures</span><span class="p">=</span><span
class="n">overwrite</span>
+</pre></div>
+
+
+<p>after a full test run, then repeatedly</p>
+<div class="codehilite"><pre><span class="n">test</span><span
class="o">/</span><span class="n">test</span><span class="p">.</span><span
class="n">py</span> <span class="o">--</span><span class="n">skip</span><span
class="o">-</span><span class="n">known</span><span class="o">-</span><span
class="n">failures</span>
+<span class="n">test</span><span class="o">/</span><span
class="n">test</span><span class="p">.</span><span class="n">py</span> <span
class="o">--</span><span class="n">update</span><span class="o">-</span><span
class="n">expected</span><span class="o">-</span><span
class="n">failures</span><span class="p">=</span><span class="n">merge</span>
+</pre></div>
+
+
+<p>to update the known failures, run</p>
+<div class="codehilite"><pre><span class="n">make</span> <span
class="n">fail</span>
+</pre></div>
+
+
+<h2 id="test-executable-specification">Test executable specification<a
class="headerlink" href="#test-executable-specification" title="Permanent
link">¶</a></h2>
+<h3 id="command-line-parameters">Command line parameters<a class="headerlink"
href="#command-line-parameters" title="Permanent link">¶</a></h3>
+<p>Unit tests for languages are usually located under lib/<lang>/test/
+cross language tests according to <a href="ThriftTest">ThriftTest.thrift</a>
shall be
provided for every language including executables with the following command
-line interface for servers:</p>
+line interface:</p>
+<p><strong>Server command line interface:</strong></p>
<div class="codehilite"><pre>$ <span class="o">./</span><span
class="n">cpp</span><span class="o">/</span><span class="n">TestServer</span>
<span class="o">-</span><span class="n">h</span>
<span class="n">Allowed</span> <span class="n">options</span><span
class="p">:</span>
<span class="o">-</span><span class="n">h</span> <span class="p">[</span>
<span class="o">--</span><span class="n">help</span> <span class="p">]</span>
<span class="n">produce</span> <span class="n">help</span> <span
class="n">message</span>
<span class="o">--</span><span class="n">port</span> <span
class="n">arg</span> <span class="p">(=</span>9090<span class="p">)</span>
<span class="n">Port</span> <span class="n">number</span> <span
class="n">to</span> <span class="n">listen</span>
<span class="o">--</span><span class="n">domain</span><span
class="o">-</span><span class="n">socket</span> <span class="n">arg</span>
<span class="n">Unix</span> <span class="n">Domain</span> <span
class="n">Socket</span> <span class="p">(</span><span class="n">e</span><span
class="p">.</span><span class="n">g</span><span class="p">.</span> <span
class="o">/</span><span class="n">tmp</span><span class="o">/</span><span
class="n">ThriftTest</span><span class="p">.</span><span
class="n">thrift</span><span class="p">)</span>
<span class="o">--</span><span class="n">named</span><span
class="o">-</span><span class="n">pipe</span> <span class="n">arg</span>
<span class="n">Windows</span> <span class="n">Named</span> <span
class="n">Pipe</span> <span class="p">(</span><span class="n">e</span><span
class="p">.</span><span class="n">g</span><span class="p">.</span> <span
class="n">MyThriftPipe</span><span class="p">)</span>
- <span class="o">--</span><span class="n">server</span><span
class="o">-</span><span class="n">type</span> <span class="n">arg</span> <span
class="p">(=</span><span class="n">simple</span><span class="p">)</span> <span
class="n">type</span> <span class="n">of</span> <span
class="n">server</span><span class="p">,</span> "<span
class="n">simple</span>"<span class="p">,</span> "<span
class="n">thread</span><span class="o">-</span><span
class="n">pool</span>"<span class="p">,</span>
+ <span class="o">--</span><span class="n">server</span><span
class="o">-</span><span class="n">type</span> <span class="n">arg</span> <span
class="p">(=</span><span class="n">simple</span><span class="p">)</span> <span
class="n">type</span> <span class="n">of</span> <span
class="n">server</span><span class="p">,</span> "<span
class="n">simple</span>"<span class="p">,</span> "<span
class="n">thread</span><span class="o">-</span><span
class="n">pool</span>"<span class="p">,</span>
"<span class="n">threaded</span>"<span
class="p">,</span> <span class="n">or</span> "<span
class="n">nonblocking</span>"
<span class="o">--</span><span class="n">transport</span> <span
class="n">arg</span> <span class="p">(=</span><span
class="n">buffered</span><span class="p">)</span> <span
class="n">transport</span><span class="p">:</span> <span
class="n">buffered</span><span class="p">,</span> <span
class="n">framed</span><span class="p">,</span> <span
class="n">http</span><span class="p">,</span> <span class="n">anonpipe</span>
<span class="o">--</span><span class="n">protocol</span> <span
class="n">arg</span> <span class="p">(=</span><span
class="n">binary</span><span class="p">)</span> <span
class="n">protocol</span><span class="p">:</span> <span
class="n">binary</span><span class="p">,</span> <span
class="n">compact</span><span class="p">,</span> <span class="n">json</span>
<span class="o">--</span><span class="n">ssl</span>
<span class="n">Encrypted</span> <span class="n">Transport</span> <span
class="n">using</span> <span class="n">SSL</span>
<span class="o">--</span><span class="n">processor</span><span
class="o">-</span><span class="k">events</span> <span
class="n">processor</span><span class="o">-</span><span class="k">events</span>
- <span class="o">-</span><span class="n">n</span> <span class="p">[</span>
<span class="o">--</span><span class="n">workers</span> <span
class="p">]</span> <span class="n">arg</span> <span class="p">(=</span>4<span
class="p">)</span> <span class="n">Number</span> <span class="n">of</span>
<span class="n">thread</span> <span class="n">pools</span> <span
class="n">workers</span><span class="p">.</span> <span class="n">Only</span>
<span class="n">valid</span> <span class="k">for</span>
+ <span class="o">-</span><span class="n">n</span> <span class="p">[</span>
<span class="o">--</span><span class="n">workers</span> <span
class="p">]</span> <span class="n">arg</span> <span class="p">(=</span>4<span
class="p">)</span> <span class="n">Number</span> <span class="n">of</span>
<span class="n">thread</span> <span class="n">pools</span> <span
class="n">workers</span><span class="p">.</span> <span class="n">Only</span>
<span class="n">valid</span> <span class="k">for</span>
<span class="n">thread</span><span
class="o">-</span><span class="n">pool</span> <span class="n">server</span>
<span class="n">type</span>
</pre></div>
-<p>and this for clients:</p>
+<p><strong>Client command line interface:</strong></p>
<div class="codehilite"><pre>$ <span class="o">./</span><span
class="n">cpp</span><span class="o">/</span><span class="n">TestClient</span>
<span class="o">-</span><span class="n">h</span>
<span class="n">Allowed</span> <span class="n">options</span><span
class="p">:</span>
<span class="o">-</span><span class="n">h</span> <span class="p">[</span>
<span class="o">--</span><span class="n">help</span> <span class="p">]</span>
<span class="n">produce</span> <span class="n">help</span> <span
class="n">message</span>
<span class="o">--</span><span class="n">host</span> <span
class="n">arg</span> <span class="p">(=</span><span
class="n">localhost</span><span class="p">)</span> <span
class="n">Host</span> <span class="n">to</span> <span class="n">connect</span>
<span class="o">--</span><span class="n">port</span> <span
class="n">arg</span> <span class="p">(=</span>9090<span class="p">)</span>
<span class="n">Port</span> <span class="n">number</span> <span
class="n">to</span> <span class="n">connect</span>
- <span class="o">--</span><span class="n">domain</span><span
class="o">-</span><span class="n">socket</span> <span class="n">arg</span>
<span class="n">Domain</span> <span class="n">Socket</span> <span
class="p">(</span><span class="n">e</span><span class="p">.</span><span
class="n">g</span><span class="p">.</span> <span class="o">/</span><span
class="n">tmp</span><span class="o">/</span><span
class="n">ThriftTest</span><span class="p">.</span><span
class="n">thrift</span><span class="p">),</span>
+ <span class="o">--</span><span class="n">domain</span><span
class="o">-</span><span class="n">socket</span> <span class="n">arg</span>
<span class="n">Domain</span> <span class="n">Socket</span> <span
class="p">(</span><span class="n">e</span><span class="p">.</span><span
class="n">g</span><span class="p">.</span> <span class="o">/</span><span
class="n">tmp</span><span class="o">/</span><span
class="n">ThriftTest</span><span class="p">.</span><span
class="n">thrift</span><span class="p">),</span>
<span class="n">instead</span> <span
class="n">of</span> <span class="n">host</span> <span class="n">and</span>
<span class="n">port</span>
<span class="o">--</span><span class="n">named</span><span
class="o">-</span><span class="n">pipe</span> <span class="n">arg</span>
<span class="n">Windows</span> <span class="n">Named</span> <span
class="n">Pipe</span> <span class="p">(</span><span class="n">e</span><span
class="p">.</span><span class="n">g</span><span class="p">.</span> <span
class="n">MyThriftPipe</span><span class="p">)</span>
<span class="o">--</span><span class="n">anon</span><span
class="o">-</span><span class="n">pipes</span> <span class="n">hRead</span>
<span class="n">hWrite</span> <span class="n">Windows</span> <span
class="n">Anonymous</span> <span class="n">Pipes</span> <span
class="n">pair</span> <span class="p">(</span><span
class="n">handles</span><span class="p">)</span>
@@ -123,8 +226,9 @@ line interface for servers:</p>
<p>If you have executed the <strong>make check</strong> or <strong>make
cross</strong> then you will be able to browse
<a href="gen-html/ThriftTest">gen-html/ThriftTest.html</a> with the test
documentation.</p>
-<p>The return code (exit code) shall be 0 on success, or an integer in the
range 1 - 255 on errors.
-In order to signal failed tests, the return code shall be composed from these
bits to indicate
+<h3 id="return-code">Return code<a class="headerlink" href="#return-code"
title="Permanent link">¶</a></h3>
+<p>The return code (exit code) shall be 0 on success, or an integer in the
range 1 - 255 on errors.
+In order to signal failed tests, the return code shall be composed from these
bits to indicate
failing tests:</p>
<div class="codehilite"><pre> <span class="c">#define TEST_BASETYPES 1
// 0000 0001</span>
<span class="c">#define TEST_STRUCTS 2 // 0000 0010</span>
@@ -135,12 +239,12 @@ failing tests:</p>
<p>Tests that have not been executed at all count as errors.</p>
-<h3 id="example">Example:</h3>
-<p>During tests, the test client notices that some of the Struct tests fail.
-Furthermore, due to some other problem none of the Exception tests is
executed.
-Therefore, the test client returns the code <code>10 = 2 | 8</code>,
indicating the failure
-of both test 2 (TEST_STRUCTS) and test 8 (TEST_EXCEPTIONS). </p>
-<h2 id="ssl">SSL</h2>
+<p><strong>Example:</strong></p>
+<p>During tests, the test client notices that some of the Struct tests fail.
+Furthermore, due to some other problem none of the Exception tests is executed.
+Therefore, the test client returns the code <code>10 = 2 | 8</code>,
indicating the failure
+of both test 2 (TEST_STRUCTS) and test 8 (TEST_EXCEPTIONS).</p>
+<h2 id="ssl">SSL<a class="headerlink" href="#ssl" title="Permanent
link">¶</a></h2>
<p>Test Keys and Certificates are provided in multiple formats under the
following
directory <a href="keys">test/keys</a></p>
<p class='snippet_footer'>
Modified: websites/staging/thrift/trunk/content/test/keys.html
==============================================================================
--- websites/staging/thrift/trunk/content/test/keys.html (original)
+++ websites/staging/thrift/trunk/content/test/keys.html Sat Sep 26 12:54:26
2015
@@ -73,7 +73,18 @@
</div>
<div class="container">
- <h1 id="test-keys-and-certificates">Test Keys and Certificates</h1>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<h1 id="test-keys-and-certificates">Test Keys and Certificates<a
class="headerlink" href="#test-keys-and-certificates" title="Permanent
link">¶</a></h1>
<p>This folder is dedicated to test keys and certificates provided in multiple
formats.
Primary use are unit test suites and cross language tests.</p>
<div class="codehilite"><pre><span class="n">test</span><span
class="o">/</span><span class="n">keys</span>
@@ -81,8 +92,8 @@ Primary use are unit test suites and cro
<p><strong>The files in this directory must never be used on production
systems.</strong></p>
-<h2 id="ssl-keys-and-certificates">SSL Keys and Certificates</h2>
-<h2 id="create-certificates">create certificates</h2>
+<h2 id="ssl-keys-and-certificates">SSL Keys and Certificates<a
class="headerlink" href="#ssl-keys-and-certificates" title="Permanent
link">¶</a></h2>
+<h2 id="create-certificates">create certificates<a class="headerlink"
href="#create-certificates" title="Permanent link">¶</a></h2>
<p>we use the following parameters for test key and certificate creation</p>
<div class="codehilite"><pre><span class="n">C</span><span
class="p">=</span><span class="n">US</span><span class="p">,</span>
<span class="n">ST</span><span class="p">=</span><span
class="n">Maryland</span><span class="p">,</span>
@@ -93,7 +104,7 @@ Primary use are unit test suites and cro
</pre></div>
-<h3 id="create-self-signed-server-key-and-certificate">create self-signed
server key and certificate</h3>
+<h3 id="create-self-signed-server-key-and-certificate">create self-signed
server key and certificate<a class="headerlink"
href="#create-self-signed-server-key-and-certificate" title="Permanent
link">¶</a></h3>
<div class="codehilite"><pre><span class="n">openssl</span> <span
class="n">req</span> <span class="o">-</span><span class="n">new</span> <span
class="o">-</span><span class="n">x509</span> <span class="o">-</span><span
class="n">nodes</span> <span class="o">-</span><span class="n">days</span>
3000 <span class="o">-</span><span class="n">out</span> <span
class="n">server</span><span class="p">.</span><span class="n">crt</span> <span
class="o">-</span><span class="n">keyout</span> <span
class="n">server</span><span class="p">.</span><span class="n">key</span>
<span class="n">openssl</span> <span class="n">x509</span> <span
class="o">-</span><span class="n">in</span> <span class="n">server</span><span
class="p">.</span><span class="n">crt</span> <span class="o">-</span><span
class="n">text</span> <span class="o">></span> <span
class="n">CA</span><span class="p">.</span><span class="n">pem</span>
<span class="nb">cat</span> <span class="n">server</span><span
class="p">.</span><span class="n">crt</span> <span class="n">server</span><span
class="p">.</span><span class="n">key</span> <span class="o">></span> <span
class="n">server</span><span class="p">.</span><span class="n">pem</span>
@@ -105,7 +116,7 @@ Primary use are unit test suites and cro
</pre></div>
-<h3 id="create-client-key-and-certificate">create client key and
certificate</h3>
+<h3 id="create-client-key-and-certificate">create client key and certificate<a
class="headerlink" href="#create-client-key-and-certificate" title="Permanent
link">¶</a></h3>
<div class="codehilite"><pre><span class="n">openssl</span> <span
class="n">genrsa</span> <span class="o">-</span><span class="n">out</span>
<span class="n">client</span><span class="p">.</span><span class="n">key</span>
</pre></div>
@@ -130,7 +141,7 @@ Primary use are unit test suites and cro
</pre></div>
-<h2 id="java-key-and-certificate-import">Java key and certificate import</h2>
+<h2 id="java-key-and-certificate-import">Java key and certificate import<a
class="headerlink" href="#java-key-and-certificate-import" title="Permanent
link">¶</a></h2>
<p>Java Test Environment uses key and trust store password
<strong>thrift</strong></p>
<p>list keystore entries</p>
<div class="codehilite"><pre><span class="n">keytool</span> <span
class="o">-</span><span class="n">list</span> <span class="o">-</span><span
class="n">storepass</span> <span class="n">thrift</span> <span
class="o">-</span><span class="n">keystore</span> <span class="p">.</span><span
class="o">./</span><span class="p">.</span><span class="o">./</span><span
class="n">lib</span><span class="o">/</span><span class="n">java</span><span
class="o">/</span><span class="n">test</span><span class="o">/</span><span
class="p">.</span><span class="n">keystore</span>
@@ -157,7 +168,7 @@ Primary use are unit test suites and cro
</pre></div>
-<h1 id="test-ssl-server-and-clients">Test SSL server and clients</h1>
+<h1 id="test-ssl-server-and-clients">Test SSL server and clients<a
class="headerlink" href="#test-ssl-server-and-clients" title="Permanent
link">¶</a></h1>
<div class="codehilite"><pre><span class="n">openssl</span> <span
class="n">s_client</span> <span class="o">-</span><span
class="n">connect</span> <span class="n">localhost</span><span
class="p">:</span>9090
<span class="n">openssl</span> <span class="n">s_server</span> <span
class="o">-</span><span class="n">accept</span> 9090 <span
class="o">-</span><span class="n">www</span>
</pre></div>
Modified: websites/staging/thrift/trunk/content/tutorial/as3.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/as3.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/as3.html Sat Sep 26 12:54:26
2015
@@ -73,9 +73,20 @@
</div>
<div class="container">
- <h2 id="actionscript-30-tutorial">Actionscript 3.0 Tutorial</h2>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<h2 id="actionscript-30-tutorial">Actionscript 3.0 Tutorial<a
class="headerlink" href="#actionscript-30-tutorial" title="Permanent
link">¶</a></h2>
<hr />
-<h3 id="introduction">Introduction</h3>
+<h3 id="introduction">Introduction<a class="headerlink" href="#introduction"
title="Permanent link">¶</a></h3>
<p>All Apache Thrift tutorials require that you have:</p>
<ol>
<li>Built and installed the Apache Thrift Compiler and Libraries, see <a
href="/docs/BuildingFromSource">Building from source</a> for more details.</li>
@@ -90,10 +101,21 @@
<p>Followed all prerequisites listed below.</p>
</li>
</ol>
-<h3 id="prerequisites">Prerequisites</h3>
-<h3 id="client">Client</h3>
+<h3 id="prerequisites">Prerequisites<a class="headerlink"
href="#prerequisites" title="Permanent link">¶</a></h3>
+<h3 id="client">Client<a class="headerlink" href="#client" title="Permanent
link">¶</a></h3>
<p>To initialize client you can use code similar to:</p>
-<p><div class="codehilite"><pre> <span class="kd">private</span> <span
class="n">function</span> <span class="nf">initConnection</span><span
class="o">():</span><span class="kt">void</span> <span class="o">{</span>
+<p><style type="text/css">
+/<em> The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css
</em>/
+/<em>
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ </em>/
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover >
.headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover
> .headerlink, dt:hover > .elementid-permalink { visibility: visible
}</style>
+<div class="codehilite"><pre> <span class="kd">private</span> <span
class="n">function</span> <span class="nf">initConnection</span><span
class="o">():</span><span class="kt">void</span> <span class="o">{</span>
<span class="n">mTransport</span> <span class="o">=</span> <span
class="k">new</span> <span class="n">TSocket</span><span
class="o">(</span><span class="s">"127.0.0.1"</span><span
class="o">,</span> <span class="mi">9090</span><span class="o">);</span> <span
class="c1">// we connect to server</span>
<span class="n">mTransport</span><span class="o">.</span><span
class="na">open</span><span class="o">();</span>
<span class="c1">// initialize protocol:</span>
@@ -105,12 +127,12 @@
This snippet was generated by Apache Thrift's <strong>source tree
docs</strong>:
<a
href="http://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob;f=tutorial/as3/src/CalculatorUI.as;hb=HEAD"</a>tutorial/as3/src/CalculatorUI.as</a>
</p></p>
-<h3 id="server">Server</h3>
+<h3 id="server">Server<a class="headerlink" href="#server" title="Permanent
link">¶</a></h3>
<p>The example client above can be tested against a java tutorial server.</p>
-<h3 id="additional-information">Additional Information</h3>
+<h3 id="additional-information">Additional Information<a class="headerlink"
href="#additional-information" title="Permanent link">¶</a></h3>
<p>You might find server failing due to out of memory exception. This might
happen because of flash crossdomain policy. See
next passage on how to fix this.</p>
-<h3 id="flash-crossdomain-policy">Flash crossdomain policy</h3>
+<h3 id="flash-crossdomain-policy">Flash crossdomain policy<a
class="headerlink" href="#flash-crossdomain-policy" title="Permanent
link">¶</a></h3>
<p>Flash does not allow movies to connect to arbitrary servers. This is done
for security reasons. To override this
restriction, however, servers' owners can create special file - crossdomain
xml file, which lists the rules according to
which some flash movies can connect to the server.</p>
@@ -119,7 +141,18 @@ which some flash movies can connect to t
Also, you can find a simple python/perl server script to serve this file
there. For same host, you can serve
crossdomain.xml from any port. So, you can start your RPC servers on ports
9090 and 9091, and serve polisy file from
port 9092. To tell flash about this, you can use code from tutorial file:</p>
-<p><div class="codehilite"><pre> <span class="kd">private</span> <span
class="n">function</span> <span class="nf">initSecurity</span><span
class="o">():</span><span class="kt">void</span> <span class="o">{</span>
+<p><style type="text/css">
+/<em> The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css
</em>/
+/<em>
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ </em>/
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover >
.headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover
> .headerlink, dt:hover > .elementid-permalink { visibility: visible
}</style>
+<div class="codehilite"><pre> <span class="kd">private</span> <span
class="n">function</span> <span class="nf">initSecurity</span><span
class="o">():</span><span class="kt">void</span> <span class="o">{</span>
<span class="n">Security</span><span class="o">.</span><span
class="na">loadPolicyFile</span><span class="o">(</span><span
class="s">"xmlsocket://127.0.0.1:9092"</span><span class="o">);</span>
<span class="o">}</span>
</pre></div>
Modified: websites/staging/thrift/trunk/content/tutorial/c_glib.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/c_glib.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/c_glib.html Sat Sep 26
12:54:26 2015
@@ -73,9 +73,20 @@
</div>
<div class="container">
- <h2 id="c_glib-tutorial">c_glib Tutorial</h2>
+ <style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+<h2 id="c_glib-tutorial">c_glib Tutorial<a class="headerlink"
href="#c_glib-tutorial" title="Permanent link">¶</a></h2>
<hr />
-<h3 id="introduction">Introduction</h3>
+<h3 id="introduction">Introduction<a class="headerlink" href="#introduction"
title="Permanent link">¶</a></h3>
<p>All Apache Thrift tutorials require that you have:</p>
<ol>
<li>Built and installed the Apache Thrift Compiler and Libraries, see <a
href="/docs/BuildingFromSource">Building from source</a> for more details.</li>
@@ -90,7 +101,19 @@
<p>Followed all prerequisites listed below.</p>
</li>
</ol>
-<h3 id="client">Client</h3>
+<h3 id="client">Client<a class="headerlink" href="#client" title="Permanent
link">¶</a></h3>
+<style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+
<div class="codehilite"><pre><span class="cp">#include <stdio.h></span>
<span class="cp">#include <glib-object.h></span>
@@ -269,7 +292,19 @@
<a
href="http://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob;f=tutorial/c_glib/c_glib_client.c;hb=HEAD"</a>tutorial/c_glib/c_glib_client.c</a>
</p>
-<h3 id="server">Server</h3>
+<h3 id="server">Server<a class="headerlink" href="#server" title="Permanent
link">¶</a></h3>
+<style type="text/css">
+/* The following code is added by mdx_elementid.py
+ It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+ visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink,
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink,
dt:hover > .elementid-permalink { visibility: visible }</style>
+
<div class="codehilite"><pre><span class="cp">#include
<glib-object.h></span>
<span class="cp">#include <signal.h></span>
<span class="cp">#include <stdio.h></span>
@@ -353,7 +388,7 @@
<span class="n">G_DEFINE_TYPE</span> <span class="p">(</span><span
class="n">TutorialCalculatorHandler</span><span class="p">,</span>
<span class="n">tutorial_calculator_handler</span><span
class="p">,</span>
- <span class="n">TYPE_CALCULATOR_HANDLER</span><span
class="p">);</span>
+ <span class="n">TYPE_CALCULATOR_HANDLER</span><span
class="p">)</span>
<span class="cm">/* Each of a handler's methods accepts at least two
parameters: A</span>
<span class="cm"> pointer to the service-interface implementation (the
handler object</span>
@@ -365,7 +400,7 @@
<span class="cm"> set. (Methods should not return FALSE without first
setting the</span>
<span class="cm"> error parameter.) */</span>
<span class="k">static</span> <span class="n">gboolean</span>
-<span class="nf">tutorial_calculator_handler_ping</span> <span
class="p">(</span><span class="n">CalculatorIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
+<span class="n">tutorial_calculator_handler_ping</span> <span
class="p">(</span><span class="n">CalculatorIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
<span class="n">GError</span> <span
class="o">**</span><span class="n">error</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">THRIFT_UNUSED_VAR</span> <span class="p">(</span><span
class="n">iface</span><span class="p">);</span>
@@ -389,7 +424,7 @@
<span class="cm"> list *_return will point to a pre-allocated data structure
that</span>
<span class="cm"> does not need to be re-allocated and should not be
destroyed. */</span>
<span class="k">static</span> <span class="n">gboolean</span>
-<span class="nf">tutorial_calculator_handler_add</span> <span
class="p">(</span><span class="n">CalculatorIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
+<span class="n">tutorial_calculator_handler_add</span> <span
class="p">(</span><span class="n">CalculatorIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
<span class="n">gint32</span> <span
class="o">*</span><span class="n">_return</span><span class="p">,</span>
<span class="k">const</span> <span
class="n">gint32</span> <span class="n">num1</span><span class="p">,</span>
<span class="k">const</span> <span
class="n">gint32</span> <span class="n">num2</span><span class="p">,</span>
@@ -419,15 +454,13 @@
<span class="cm"> Unlike return values, exception objects are never
pre-created; this</span>
<span class="cm"> is always the responsibility of the handler method.
*/</span>
<span class="k">static</span> <span class="n">gboolean</span>
-<span class="nf">tutorial_calculator_handler_calculate</span> <span
class="p">(</span><span class="n">CalculatorIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
+<span class="n">tutorial_calculator_handler_calculate</span> <span
class="p">(</span><span class="n">CalculatorIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
<span class="n">gint32</span>
<span class="o">*</span><span class="n">_return</span><span class="p">,</span>
<span class="k">const</span> <span
class="n">gint32</span> <span class="n">logid</span><span
class="p">,</span>
<span class="k">const</span> <span
class="n">Work</span> <span class="o">*</span><span
class="n">w</span><span class="p">,</span>
<span class="n">InvalidOperation</span>
<span class="o">**</span><span class="n">ouch</span><span class="p">,</span>
<span class="n">GError</span>
<span class="o">**</span><span class="n">error</span><span class="p">)</span>
<span class="p">{</span>
- <span class="n">THRIFT_UNUSED_VAR</span> <span class="p">(</span><span
class="n">error</span><span class="p">);</span>
-
<span class="n">TutorialCalculatorHandler</span> <span
class="o">*</span><span class="n">self</span><span class="p">;</span>
<span class="n">gint</span> <span class="o">*</span><span
class="n">log_key</span><span class="p">;</span>
@@ -439,6 +472,8 @@
<span class="n">Operation</span> <span class="n">op</span><span
class="p">;</span>
<span class="n">gboolean</span> <span class="n">result</span> <span
class="o">=</span> <span class="n">TRUE</span><span class="p">;</span>
+ <span class="n">THRIFT_UNUSED_VAR</span> <span class="p">(</span><span
class="n">error</span><span class="p">);</span>
+
<span class="n">g_return_val_if_fail</span> <span class="p">(</span><span
class="n">IS_TUTORIAL_CALCULATOR_HANDLER</span> <span class="p">(</span><span
class="n">iface</span><span class="p">),</span>
<span class="n">FALSE</span><span class="p">);</span>
<span class="n">self</span> <span class="o">=</span> <span
class="n">TUTORIAL_CALCULATOR_HANDLER</span> <span class="p">(</span><span
class="n">iface</span><span class="p">);</span>
@@ -528,7 +563,7 @@
<span class="cm">/* A one-way method has the same signature as an equivalent,
regular</span>
<span class="cm"> method that returns no value. */</span>
<span class="k">static</span> <span class="n">gboolean</span>
-<span class="nf">tutorial_calculator_handler_zip</span> <span
class="p">(</span><span class="n">CalculatorIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
+<span class="n">tutorial_calculator_handler_zip</span> <span
class="p">(</span><span class="n">CalculatorIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
<span class="n">GError</span> <span
class="o">**</span><span class="n">error</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">THRIFT_UNUSED_VAR</span> <span class="p">(</span><span
class="n">iface</span><span class="p">);</span>
@@ -548,19 +583,19 @@
<span class="cm"> Here we provide an implementation for the getStruct method
from the</span>
<span class="cm"> parent service. */</span>
<span class="k">static</span> <span class="n">gboolean</span>
-<span class="nf">tutorial_calculator_handler_get_struct</span> <span
class="p">(</span><span class="n">SharedServiceIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
+<span class="n">tutorial_calculator_handler_get_struct</span> <span
class="p">(</span><span class="n">SharedServiceIf</span> <span
class="o">*</span><span class="n">iface</span><span class="p">,</span>
<span class="n">SharedStruct</span>
<span class="o">**</span><span class="n">_return</span><span class="p">,</span>
<span class="k">const</span> <span
class="n">gint32</span> <span class="n">key32</span><span
class="p">,</span>
<span class="n">GError</span>
<span class="o">**</span><span class="n">error</span><span class="p">)</span>
<span class="p">{</span>
- <span class="n">THRIFT_UNUSED_VAR</span> <span class="p">(</span><span
class="n">error</span><span class="p">);</span>
-
<span class="n">gint</span> <span class="n">key</span> <span
class="o">=</span> <span class="p">(</span><span class="n">gint</span><span
class="p">)</span><span class="n">key32</span><span class="p">;</span>
<span class="n">TutorialCalculatorHandler</span> <span
class="o">*</span><span class="n">self</span><span class="p">;</span>
<span class="n">SharedStruct</span> <span class="o">*</span><span
class="n">log_struct</span><span class="p">;</span>
<span class="n">gint</span> <span class="n">log_key</span><span
class="p">;</span>
<span class="n">gchar</span> <span class="o">*</span><span
class="n">log_value</span><span class="p">;</span>
+ <span class="n">THRIFT_UNUSED_VAR</span> <span class="p">(</span><span
class="n">error</span><span class="p">);</span>
+
<span class="n">g_return_val_if_fail</span> <span class="p">(</span><span
class="n">IS_TUTORIAL_CALCULATOR_HANDLER</span> <span class="p">(</span><span
class="n">iface</span><span class="p">),</span>
<span class="n">FALSE</span><span class="p">);</span>
<span class="n">self</span> <span class="o">=</span> <span
class="n">TUTORIAL_CALCULATOR_HANDLER</span> <span class="p">(</span><span
class="n">iface</span><span class="p">);</span>
@@ -598,7 +633,7 @@
<span class="cm">/* TutorialCalculatorHandler's instance finalizer
(destructor) */</span>
<span class="k">static</span> <span class="kt">void</span>
-<span class="nf">tutorial_calculator_handler_finalize</span> <span
class="p">(</span><span class="n">GObject</span> <span class="o">*</span><span
class="n">object</span><span class="p">)</span>
+<span class="n">tutorial_calculator_handler_finalize</span> <span
class="p">(</span><span class="n">GObject</span> <span class="o">*</span><span
class="n">object</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">TutorialCalculatorHandler</span> <span
class="o">*</span><span class="n">self</span> <span class="o">=</span>
<span class="n">TUTORIAL_CALCULATOR_HANDLER</span> <span
class="p">(</span><span class="n">object</span><span class="p">);</span>
@@ -614,7 +649,7 @@
<span class="cm">/* TutorialCalculatorHandler's instance initializer
(constructor) */</span>
<span class="k">static</span> <span class="kt">void</span>
-<span class="nf">tutorial_calculator_handler_init</span> <span
class="p">(</span><span class="n">TutorialCalculatorHandler</span> <span
class="o">*</span><span class="n">self</span><span class="p">)</span>
+<span class="n">tutorial_calculator_handler_init</span> <span
class="p">(</span><span class="n">TutorialCalculatorHandler</span> <span
class="o">*</span><span class="n">self</span><span class="p">)</span>
<span class="p">{</span>
<span class="cm">/* Create our calculation-log hash table */</span>
<span class="n">self</span><span class="o">-></span><span
class="n">log</span> <span class="o">=</span> <span
class="n">g_hash_table_new_full</span> <span class="p">(</span><span
class="n">g_int_hash</span><span class="p">,</span>
@@ -625,7 +660,7 @@
<span class="cm">/* TutorialCalculatorHandler's class initializer */</span>
<span class="k">static</span> <span class="kt">void</span>
-<span class="nf">tutorial_calculator_handler_class_init</span> <span
class="p">(</span><span class="n">TutorialCalculatorHandlerClass</span> <span
class="o">*</span><span class="n">klass</span><span class="p">)</span>
+<span class="n">tutorial_calculator_handler_class_init</span> <span
class="p">(</span><span class="n">TutorialCalculatorHandlerClass</span> <span
class="o">*</span><span class="n">klass</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">GObjectClass</span> <span class="o">*</span><span
class="n">gobject_class</span> <span class="o">=</span> <span
class="n">G_OBJECT_CLASS</span> <span class="p">(</span><span
class="n">klass</span><span class="p">);</span>
<span class="n">SharedServiceHandlerClass</span> <span
class="o">*</span><span class="n">shared_service_handler_class</span> <span
class="o">=</span>
@@ -693,7 +728,7 @@
<span class="k">struct</span> <span class="n">sigaction</span> <span
class="n">sigint_action</span><span class="p">;</span>
- <span class="n">GError</span> <span class="o">*</span><span
class="n">error</span><span class="p">;</span>
+ <span class="n">GError</span> <span class="o">*</span><span
class="n">error</span> <span class="o">=</span> <span
class="nb">NULL</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">exit_status</span> <span
class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="cp">#if (!GLIB_CHECK_VERSION (2, 36, 0))</span>