FIDL compatibility test

An integration test for compatability of different FIDL bindings.

The test runner is at //garnet/bin/fidl_compatibility_test and //topaz/bin/fidl_compatibility_test and can be invoked on device with:

run /pkgfs/packages/fidl_compatibility_test/0/test/fidl_compatibility_test

The version in topaz tests more languages than the version in garnet.

The basic logic is along the lines of:

servers = ['go_server', 'cc_server', ...]

for proxy_name in servers:
  for server_name in servers:
    proxy = <connect to proxy>
    struct = <construct complicated struct>
    resp = proxy.EchoStruct(struct, server_name)
    assert_equal(struct, resp)

Servers should implement the service defined in compatibility_test_service.fidl with logic along the lines of:

def EchoStruct(
    Struct value, string forward_to_server, EchoStructCallback callback):
  if value.forward_to_server:
    other_server = <start server with LaunchPad>
    # set forward_to_server to "" to prevent recursion
    other_server.EchoStruct(value, "", callback)
  else:
    callback(value)

The logic for EchoStructNoRetVal() is similar. Instead of waiting for a response directly, the test waits to recieve an EchoEvent(). And instead of calling the client back directly, the server sends the EchoEvent().