blob: 62a26715d07c993c0004200dfde4a4591dbcdc4e [file] [log] [blame]
Nobuaki Sukegawa378b7272016-01-03 17:04:50 +09001#!/usr/bin/env python
2
3import argparse
4import socket
5import sys
6
7from util import add_common_args
8from local_thrift import thrift
9from thrift.Thrift import TMessageType, TType
10from thrift.transport.TSocket import TSocket
11from thrift.transport.TTransport import TBufferedTransport, TFramedTransport
12from thrift.protocol.TBinaryProtocol import TBinaryProtocol
Nobuaki Sukegawa95c628e2016-01-24 01:03:28 +090013from thrift.protocol.TCompactProtocol import TCompactProtocol
14
15
16def test_void(proto):
17 proto.writeMessageBegin('testVoid', TMessageType.CALL, 3)
18 proto.writeStructBegin('testVoid_args')
19 proto.writeFieldStop()
20 proto.writeStructEnd()
21 proto.writeMessageEnd()
22 proto.trans.flush()
23
24 _, mtype, _ = proto.readMessageBegin()
25 assert mtype == TMessageType.REPLY
26 proto.readStructBegin()
27 _, ftype, _ = proto.readFieldBegin()
28 assert ftype == TType.STOP
29 proto.readStructEnd()
30 proto.readMessageEnd()
Nobuaki Sukegawa378b7272016-01-03 17:04:50 +090031
32
33# THeader stack should accept binary protocol with optionally framed transport
34def main(argv):
35 p = argparse.ArgumentParser()
36 add_common_args(p)
37 # Since THeaderTransport acts as framed transport when detected frame, we
38 # cannot use --transport=framed as it would result in 2 layered frames.
39 p.add_argument('--override-transport')
Nobuaki Sukegawa95c628e2016-01-24 01:03:28 +090040 p.add_argument('--override-protocol')
Nobuaki Sukegawa378b7272016-01-03 17:04:50 +090041 args = p.parse_args()
42 assert args.protocol == 'header'
43 assert args.transport == 'buffered'
44 assert not args.ssl
45
46 sock = TSocket(args.host, args.port, socket_family=socket.AF_INET)
47 if not args.override_transport or args.override_transport == 'buffered':
48 trans = TBufferedTransport(sock)
49 elif args.override_transport == 'framed':
Nobuaki Sukegawa95c628e2016-01-24 01:03:28 +090050 print('TFRAMED')
Nobuaki Sukegawa378b7272016-01-03 17:04:50 +090051 trans = TFramedTransport(sock)
52 else:
53 raise ValueError('invalid transport')
54 trans.open()
Nobuaki Sukegawa378b7272016-01-03 17:04:50 +090055
Nobuaki Sukegawa95c628e2016-01-24 01:03:28 +090056 if not args.override_protocol or args.override_protocol == 'binary':
57 proto = TBinaryProtocol(trans)
58 elif args.override_protocol == 'compact':
59 proto = TCompactProtocol(trans)
60 else:
61 raise ValueError('invalid transport')
62
63 test_void(proto)
64 test_void(proto)
Nobuaki Sukegawa378b7272016-01-03 17:04:50 +090065
66 trans.close()
67
68
69if __name__ == '__main__':
70 sys.exit(main(sys.argv[1:]))