On Tue, Oct 12, 2010 at 8:40 PM,  <ro...@bufferoverflow.ch> wrote:
> ThriftTest.thrift and existing TestServer and Clients are not that important
> for me, but they already contains some tests with Base Types and additional
> in deep tests with mapmap etc. It might be a starting point.

It might, but my fear was if I were to change anything in ThriftTest
(or any of the existing tests) I risked breaking bindings I have no
way to test currently.

> One thing I like to avoid is tons of .thrift files with similar
> functionality inside test...=> difficult to maintain. If it makes sense, to
> add new ones, why not.

Agreed.

> It might be worth to create a Ticket or TestSuite Wiki Page.
> So we can do brainstroming and/or define the TestSuite and the IDL files.
> e.g.
>
> - SimpleTypes.thrift (i16, i32)
> - StringTypes.thrfit (utf-8, etc.)
> - ComplexTypes.thrift
> - Exceptions.Thrift
> - ...
>
> what can we reuse from today's IDL files? which IDL files will become
> obsolete?

I'd like to get a good grip on where we want to go first, to help
decide what we can reuse.

> after defining the TestSuite in detail we can start implement that for the
> different Languages and do interoperability tests, score card, etc.

Agreed.

> another important topic might be recommendations like using that
> datatype/feature results in incompatibility with blabla

Yep; plenty of similar nice-to-haves fall out from a good test suite :)

Thanks for the feedback Roger, much appreciated!

>
> Quoting Christian Lavoie <christian.lav...@gmail.com>:
>
>> On Tue, Oct 12, 2010 at 4:44 PM, Roger Meier (JIRA) <j...@apache.org>
>> wrote:
>>>
>>> I had the following things in mind:
>>>   #  identify the language with the reference implementation (well
>>> defined return values for all test cases) based on ThriftTest.thrift,
>>> probably Java (lib/java/test/org/apache/thrift/server/ServerTestBase.java)
>>> or cpp (test/cpp/src/TestClient.cpp  test/cpp/src/TestServer.cpp)
>>
>> I had part of that discussion with Bryan on IRC -- turns out neither
>> cpp nor Java are complete implementations, so there's no such thing as
>> 'a' reference (yet?). Part of my hope here is to map out the full
>> description of 'who implements what'. That's something I had in mind
>> when I said 'advanced' features and score cards.
>>
>>>   # update the ThriftTest.thrift with details about the required return
>>> values that have to be implemented
>>
>> So, the problem with ThriftTest as it stands is that it's a big mess
>> of large and small things, that not all languages implement on an
>> equal basis. I'm not even sure that all languages _can_ implement it
>> all on an equal basis (see below).
>>
>> I'd like to either prune ThriftTest (or rewrite it with Simple, at
>> some point the distinction between the two will be fairly academic, I
>> suspect) down to something that is the clear minimum requirement for
>> viable bindings. The reason I went with Simple instead of ThriftTest
>> was that I could work without breaking tests for languages I can't
>> even compile on my test machines, yet.
>>
>>>   # update test implementations
>>>   # add some wrapper scripts to automate the cross language tests (as
>>> Christian did)
>>
>> Actually, I'm hoping to get rid of my scripts once I find time to go
>> through the autotools machinery once again; this was just the most
>> expedient way to get the discussion going (and the c++ client bug
>> reported).
>>
>>>   # move language tests into their appropriate library directory
>>> (THRIFT-35)
>>
>> That's orthogonal to doing actual cross-language testing, but I agree
>> needs to happen. It's more awkward once we start doing cross-language
>> testing though.
>>
>>>   # a public test server that supports multiple protocols and transports
>>> could be another enhancement for testing purposes
>>
>> That's a good idea, but entirely orthogonal. Once that's said and
>> done, it shouldn't be too hard to extend Simple as it stands to just
>> run forever.
>>
>>> Today neary every language has already Test Server and Test Clients based
>>> on ThriftTest.thrift , we just have to modify them a bit so that they have
>>> exactly the same behavior. I think it is not worth to add another
>>> SimpleTest.thrift, the target should be extending ThriftTest.thrift.
>>
>> This is where we disagree. I'm far from convinced all language are
>> even capable of implementing a 'perfect enough' copy of the reference
>> bindings. The first case I tripped over was the bit-length of integral
>> types. Java, C++ and Haskell all support precise-lengths integrals...
>> but Java only supports signed types (you can abuse them to represent
>> unsigned values if you try hard enough).
>>
>> Perl doesn't particularly care about length of numbers; Ruby (I don't
>> know ruby very well) seems to only support one size Fixnums (machine
>> size, whatever that is on your machine -- how do we handle this, on
>> some machines Fixnum maps to i32, on others to i64?); Python doesn't
>> support i16 at all, only plain integers and long integers... and I'm
>> not sure if they support byte either (python chars, IIRC are unicode
>> characters, 32 bits long).
>>
>> Unicode is another fun topic -- not all versions of Python are
>> completely unicode clean (though I doubt thrift supports python old
>> enough for that to matter). I'm fairly sure at some point someone will
>> provide bindings for a language where utf-8 support is going to be a
>> major pain (VHDL anyone?) -- JavaScript comes to mind, if memory
>> serves it treats strings as 16-bit chars, which isn't enough for all
>> of unicode.
>>
>> Then we go in complex sets -- PHP doesn't support complex objects
>> (sets, maps, etc) as map keys, but C++, Java and Haskell do no
>> problem. Does that go in ThriftTest or not? It can't, otherwise PHP
>> can't be tested. But if it's not, I can't test C++, Java and Haskell
>> interoperability in its entirety.
>>
>> It's a mess once you get in the details of it, that's why I suggested
>> the score card approach.
>>
>>>
>>>> Test Framework harmonization across all languages
>>>> -------------------------------------------------
>>>>
>>>>                 Key: THRIFT-847
>>>>                 URL: https://issues.apache.org/jira/browse/THRIFT-847
>>>>             Project: Thrift
>>>>          Issue Type: Improvement
>>>>          Components: C# - Library, C++ - Library, Cocoa - Library,
>>>> Erlang - Library, Haskell - Library, Java - Library, JavaScript - Library,
>>>> OCaml - Library, Perl - Library, PHP - Library, Python - Library, Ruby -
>>>> Library, Test Suite
>>>>    Affects Versions: 0.1, 0.2, 0.3
>>>>            Reporter: Roger Meier
>>>>            Assignee: Christian Lavoie
>>>>             Fix For: 0.6
>>>>
>>>>         Attachments: v1-WORK_IN_PROGRESS-unified_tests.tar.gz
>>>>
>>>>
>>>> Today each Language supported by Thrift, have its own unit test, all are
>>>> using the same Thrift IDL's located at the test directory. But the behavior
>>>> of these tests seems to be different from language to language... this 
>>>> makes
>>>> it difficult to do tests and bug fixing across different Languages. e.g.
>>>> * C++ Test and JavaScript Test Server written in Java have different
>>>> responses for the same services
>>>> * C# and Java Test Server have different responses for testException as
>>>> C++
>>>> I propose the following steps:
>>>> * identify the language with the reference implementation (well defined
>>>> return values for all test cases)
>>>> * update the ThriftTest.thrift with details about the required return
>>>> values that have to be implemented
>>>> * update test implementations and move language tests into their
>>>> appropriate library directory (THRIFT-35)
>>>> * a public test server that supports multiple protocols and transports
>>>> could be another enhancement for testing purposes
>>>> I'm ready to help preparing patches, just tell me what you need!
>>>
>>> --
>>> This message is automatically generated by JIRA.
>>> -
>>> You can reply to this email to add a comment to the issue online.
>>>
>>>
>>
>>
>>
>> --
>> Have fun, Christian
>> http://linkedin.christianlavoie.net
>>
>> "I won't let you fall apart."
>>
>>
>>
>
>
>
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
>



-- 
Have fun, Christian
http://linkedin.christianlavoie.net

"I won't let you fall apart."

Reply via email to