summaryrefslogtreecommitdiff
path: root/test/features/string_limit.py
blob: b4d48acdbc6e66de46b57fd6a29b0a19c3327012 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python

import argparse
import sys

from util import add_common_args, init_protocol
from local_thrift import thrift
from thrift.Thrift import TMessageType, TType


# TODO: generate from ThriftTest.thrift
def test_string(proto, value):
  method_name = 'testString'
  ttype = TType.STRING
  proto.writeMessageBegin(method_name, TMessageType.CALL, 3)
  proto.writeStructBegin(method_name + '_args')
  proto.writeFieldBegin('thing', ttype, 1)
  proto.writeString(value)
  proto.writeFieldEnd()
  proto.writeFieldStop()
  proto.writeStructEnd()
  proto.writeMessageEnd()
  proto.trans.flush()

  _, mtype, _ = proto.readMessageBegin()
  assert mtype == TMessageType.REPLY
  proto.readStructBegin()
  _, ftype, fid = proto.readFieldBegin()
  assert fid == 0
  assert ftype == ttype
  result = proto.readString()
  proto.readFieldEnd()
  _, ftype, _ = proto.readFieldBegin()
  assert ftype == TType.STOP
  proto.readStructEnd()
  proto.readMessageEnd()
  assert value == result


def main(argv):
  p = argparse.ArgumentParser()
  add_common_args(p)
  p.add_argument('--limit', type=int)
  args = p.parse_args()
  proto = init_protocol(args)
  test_string(proto, 'a' * (args.limit - 1))
  test_string(proto, 'a' * (args.limit - 1))
  print('[OK]: limit - 1')
  test_string(proto, 'a' * args.limit)
  test_string(proto, 'a' * args.limit)
  print('[OK]: just limit')
  try:
    test_string(proto, 'a' * (args.limit + 1))
  except:
    print('[OK]: limit + 1')
  else:
    print('[ERROR]: limit + 1')
    assert False

if __name__ == '__main__':
  main(sys.argv[1:])