thrift 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +235 -17
  3. data/benchmark/benchmark.rb +23 -8
  4. data/benchmark/client.rb +50 -6
  5. data/benchmark/server.rb +46 -7
  6. data/benchmark/thin_server.rb +2 -0
  7. data/ext/binary_protocol_accelerated.c +154 -42
  8. data/ext/bytes.c +14 -0
  9. data/ext/compact_protocol.c +138 -45
  10. data/ext/constants.h +12 -0
  11. data/ext/extconf.rb +17 -8
  12. data/ext/memory_buffer.c +44 -7
  13. data/ext/protocol.c +29 -0
  14. data/ext/protocol.h +35 -0
  15. data/ext/struct.c +48 -17
  16. data/ext/thrift_native.c +28 -3
  17. data/lib/thrift/bytes.rb +70 -100
  18. data/lib/thrift/client.rb +54 -13
  19. data/lib/thrift/exceptions.rb +6 -5
  20. data/lib/thrift/multiplexed_processor.rb +20 -10
  21. data/lib/thrift/processor.rb +7 -6
  22. data/lib/thrift/protocol/base_protocol.rb +52 -21
  23. data/lib/thrift/protocol/binary_protocol.rb +65 -20
  24. data/lib/thrift/protocol/binary_protocol_accelerated.rb +6 -5
  25. data/lib/thrift/protocol/compact_protocol.rb +76 -41
  26. data/lib/thrift/protocol/header_protocol.rb +321 -0
  27. data/lib/thrift/protocol/json_protocol.rb +44 -27
  28. data/lib/thrift/protocol/multiplexed_protocol.rb +6 -5
  29. data/lib/thrift/protocol/protocol_decorator.rb +13 -4
  30. data/lib/thrift/serializer/deserializer.rb +6 -5
  31. data/lib/thrift/serializer/serializer.rb +5 -5
  32. data/lib/thrift/server/base_server.rb +5 -4
  33. data/lib/thrift/server/mongrel_http_server.rb +7 -6
  34. data/lib/thrift/server/nonblocking_server.rb +35 -9
  35. data/lib/thrift/server/simple_server.rb +13 -5
  36. data/lib/thrift/server/thin_http_server.rb +4 -3
  37. data/lib/thrift/server/thread_pool_server.rb +7 -6
  38. data/lib/thrift/server/threaded_server.rb +13 -5
  39. data/lib/thrift/struct.rb +12 -11
  40. data/lib/thrift/struct_union.rb +14 -9
  41. data/lib/thrift/thrift_native.rb +3 -2
  42. data/lib/thrift/transport/base_server_transport.rb +8 -5
  43. data/lib/thrift/transport/base_transport.rb +18 -14
  44. data/lib/thrift/transport/buffered_transport.rb +7 -6
  45. data/lib/thrift/transport/framed_transport.rb +8 -7
  46. data/lib/thrift/transport/header_transport.rb +562 -0
  47. data/lib/thrift/transport/http_client_transport.rb +2 -1
  48. data/lib/thrift/transport/io_stream_transport.rb +4 -3
  49. data/lib/thrift/transport/memory_buffer_transport.rb +13 -6
  50. data/lib/thrift/transport/server_socket.rb +14 -8
  51. data/lib/thrift/transport/socket.rb +126 -60
  52. data/lib/thrift/transport/ssl_server_socket.rb +4 -3
  53. data/lib/thrift/transport/ssl_socket.rb +45 -13
  54. data/lib/thrift/transport/unix_server_socket.rb +9 -5
  55. data/lib/thrift/transport/unix_socket.rb +7 -6
  56. data/lib/thrift/types.rb +10 -6
  57. data/lib/thrift/union.rb +15 -8
  58. data/lib/thrift/uuid.rb +50 -0
  59. data/lib/thrift.rb +4 -1
  60. data/spec/ThriftSpec.thrift +21 -1
  61. data/spec/base_protocol_spec.rb +21 -2
  62. data/spec/base_transport_spec.rb +48 -8
  63. data/spec/binary_protocol_accelerated_spec.rb +1 -0
  64. data/spec/binary_protocol_spec.rb +1 -2
  65. data/spec/binary_protocol_spec_shared.rb +206 -155
  66. data/spec/bytes_spec.rb +71 -114
  67. data/spec/client_spec.rb +86 -19
  68. data/spec/compact_protocol_spec.rb +153 -16
  69. data/spec/constants_demo_spec.rb +102 -0
  70. data/spec/exception_spec.rb +1 -1
  71. data/spec/flat_spec.rb +1 -0
  72. data/spec/header_protocol_spec.rb +476 -0
  73. data/spec/header_transport_spec.rb +431 -0
  74. data/spec/http_client_spec.rb +5 -6
  75. data/spec/json_protocol_spec.rb +69 -47
  76. data/spec/multiplexed_processor_spec.rb +75 -0
  77. data/spec/namespaced_spec.rb +1 -1
  78. data/spec/nonblocking_server_spec.rb +174 -8
  79. data/spec/processor_spec.rb +1 -1
  80. data/spec/recursion_depth_spec.rb +223 -0
  81. data/spec/serializer_spec.rb +1 -1
  82. data/spec/server_socket_spec.rb +38 -1
  83. data/spec/server_spec.rb +60 -9
  84. data/spec/socket_spec.rb +119 -13
  85. data/spec/socket_spec_shared.rb +73 -9
  86. data/spec/spec_helper.rb +2 -1
  87. data/spec/ssl_server_socket_spec.rb +52 -1
  88. data/spec/ssl_socket_spec.rb +181 -11
  89. data/spec/struct_nested_containers_spec.rb +2 -2
  90. data/spec/struct_spec.rb +114 -9
  91. data/spec/support/header_protocol_helper.rb +55 -0
  92. data/spec/thin_http_server_spec.rb +4 -18
  93. data/spec/types_spec.rb +26 -26
  94. data/spec/union_spec.rb +70 -11
  95. data/spec/unix_socket_spec.rb +17 -2
  96. data/spec/uuid_validation_spec.rb +239 -0
  97. data/test/fuzz/Makefile +779 -0
  98. data/test/fuzz/Makefile.am +173 -0
  99. data/test/fuzz/Makefile.in +775 -0
  100. data/test/fuzz/README.md +149 -0
  101. data/test/fuzz/fuzz_common.rb +96 -0
  102. data/{lib/thrift/core_ext.rb → test/fuzz/fuzz_parse_binary_protocol.rb} +4 -4
  103. data/{lib/thrift/core_ext/fixnum.rb → test/fuzz/fuzz_parse_binary_protocol_accelerated.rb} +7 -13
  104. data/test/fuzz/fuzz_parse_binary_protocol_accelerated_harness.rb +23 -0
  105. data/test/fuzz/fuzz_parse_binary_protocol_harness.rb +23 -0
  106. data/test/fuzz/fuzz_parse_compact_protocol.rb +23 -0
  107. data/test/fuzz/fuzz_parse_compact_protocol_harness.rb +23 -0
  108. data/test/fuzz/fuzz_parse_json_protocol.rb +23 -0
  109. data/test/fuzz/fuzz_parse_json_protocol_harness.rb +23 -0
  110. data/test/fuzz/fuzz_roundtrip_binary_protocol.rb +23 -0
  111. data/test/fuzz/fuzz_roundtrip_binary_protocol_accelerated.rb +23 -0
  112. data/test/fuzz/fuzz_roundtrip_binary_protocol_accelerated_harness.rb +23 -0
  113. data/test/fuzz/fuzz_roundtrip_binary_protocol_harness.rb +23 -0
  114. data/test/fuzz/fuzz_roundtrip_compact_protocol.rb +23 -0
  115. data/test/fuzz/fuzz_roundtrip_compact_protocol_harness.rb +23 -0
  116. data/test/fuzz/fuzz_roundtrip_json_protocol.rb +23 -0
  117. data/test/fuzz/fuzz_roundtrip_json_protocol_harness.rb +23 -0
  118. data/test/fuzz/fuzz_tracer.rb +29 -0
  119. metadata +105 -70
@@ -0,0 +1,173 @@
1
+ #
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #
19
+
20
+ THRIFT = $(top_builddir)/compiler/cpp/thrift
21
+ FUZZ_RB_ROOT = $(top_srcdir)/lib/rb
22
+ FUZZ_GEN_DIR = $(FUZZ_RB_ROOT)/test/fuzz
23
+ FUZZ_STUBS = \
24
+ $(FUZZ_GEN_DIR)/gen-rb/fuzz_test_constants.rb \
25
+ $(FUZZ_GEN_DIR)/gen-rb/fuzz_test_types.rb
26
+
27
+ FUZZ_RUBY_FILES = \
28
+ $(srcdir)/fuzz_tracer.rb \
29
+ $(srcdir)/fuzz_common.rb \
30
+ $(srcdir)/fuzz_parse_binary_protocol.rb \
31
+ $(srcdir)/fuzz_parse_binary_protocol_harness.rb \
32
+ $(srcdir)/fuzz_parse_binary_protocol_accelerated.rb \
33
+ $(srcdir)/fuzz_parse_binary_protocol_accelerated_harness.rb \
34
+ $(srcdir)/fuzz_parse_compact_protocol.rb \
35
+ $(srcdir)/fuzz_parse_compact_protocol_harness.rb \
36
+ $(srcdir)/fuzz_parse_json_protocol.rb \
37
+ $(srcdir)/fuzz_parse_json_protocol_harness.rb \
38
+ $(srcdir)/fuzz_roundtrip_binary_protocol.rb \
39
+ $(srcdir)/fuzz_roundtrip_binary_protocol_harness.rb \
40
+ $(srcdir)/fuzz_roundtrip_binary_protocol_accelerated.rb \
41
+ $(srcdir)/fuzz_roundtrip_binary_protocol_accelerated_harness.rb \
42
+ $(srcdir)/fuzz_roundtrip_compact_protocol.rb \
43
+ $(srcdir)/fuzz_roundtrip_compact_protocol_harness.rb \
44
+ $(srcdir)/fuzz_roundtrip_json_protocol.rb \
45
+ $(srcdir)/fuzz_roundtrip_json_protocol_harness.rb
46
+
47
+ FUZZ_ASAN_OPTIONS ?= allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0
48
+ FUZZ_CC ?= clang
49
+ FUZZ_CXX ?= clang++
50
+ FUZZ_LDSHARED ?= $(FUZZ_CC) -shared
51
+ FUZZ_LDSHAREDXX ?= $(FUZZ_CXX) -shared
52
+ FUZZ_CFLAGS ?= -fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g
53
+ FUZZ_CXXFLAGS ?= -fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g
54
+ FUZZ_MAKE ?= make
55
+ FUZZ_MAKEFLAGS ?= --environment-overrides V=1
56
+
57
+ check: fuzz-prepare
58
+
59
+ fuzz-prepare: $(FUZZ_STUBS)
60
+ @for script in $(FUZZ_RUBY_FILES); do \
61
+ $(RUBY) -c $$script; \
62
+ done
63
+ cd $(FUZZ_RB_ROOT) && \
64
+ RUBYLIB="lib:test/fuzz/gen-rb" $(RUBY) -e 'require "thrift"; require "fuzz_test_types"; abort("Fuzz::FuzzTest is missing") unless defined?(Fuzz::FuzzTest)'
65
+
66
+ $(THRIFT):
67
+ $(MAKE) -C $(top_builddir)/compiler/cpp all
68
+
69
+ $(FUZZ_STUBS): $(top_srcdir)/test/FuzzTest.thrift $(THRIFT)
70
+ $(MKDIR_P) $(FUZZ_GEN_DIR)
71
+ $(THRIFT) --gen rb -o $(FUZZ_GEN_DIR) $(top_srcdir)/test/FuzzTest.thrift
72
+
73
+ fuzz-build-ext:
74
+ cd $(FUZZ_RB_ROOT)/ext && \
75
+ env MAKE="$(FUZZ_MAKE) $(FUZZ_MAKEFLAGS)" \
76
+ CC="$(FUZZ_CC)" \
77
+ CXX="$(FUZZ_CXX)" \
78
+ LDSHARED="$(FUZZ_LDSHARED)" \
79
+ LDSHAREDXX="$(FUZZ_LDSHAREDXX)" \
80
+ CFLAGS="$(FUZZ_CFLAGS)" \
81
+ CXXFLAGS="$(FUZZ_CXXFLAGS)" \
82
+ $(RUBY) extconf.rb && \
83
+ env MAKE="$(FUZZ_MAKE) $(FUZZ_MAKEFLAGS)" \
84
+ CC="$(FUZZ_CC)" \
85
+ CXX="$(FUZZ_CXX)" \
86
+ LDSHARED="$(FUZZ_LDSHARED)" \
87
+ LDSHAREDXX="$(FUZZ_LDSHAREDXX)" \
88
+ CFLAGS="$(FUZZ_CFLAGS)" \
89
+ CXXFLAGS="$(FUZZ_CXXFLAGS)" \
90
+ $(FUZZ_MAKE) $(FUZZ_MAKEFLAGS) clean all
91
+
92
+ fuzz-run: fuzz-prepare
93
+ @test -n "$(TARGET)" || { echo 'Set TARGET=<fuzz script name>'; exit 1; }
94
+ cd $(FUZZ_RB_ROOT) && \
95
+ ASAN_OPTIONS="$(FUZZ_ASAN_OPTIONS)" \
96
+ LD_PRELOAD=$$($(RUBY) -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
97
+ $(RUBY) test/fuzz/$(TARGET) $(CORPUS) $(FUZZ_ARGS)
98
+
99
+ fuzz-parse-binary:
100
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_parse_binary_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
101
+
102
+ fuzz-parse-binary-accelerated: fuzz-build-ext
103
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_parse_binary_protocol_accelerated.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
104
+
105
+ fuzz-parse-compact:
106
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_parse_compact_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
107
+
108
+ fuzz-parse-json:
109
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_parse_json_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
110
+
111
+ fuzz-roundtrip-binary:
112
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_roundtrip_binary_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
113
+
114
+ fuzz-roundtrip-binary-accelerated: fuzz-build-ext
115
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_roundtrip_binary_protocol_accelerated.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
116
+
117
+ fuzz-roundtrip-compact:
118
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_roundtrip_compact_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
119
+
120
+ fuzz-roundtrip-json:
121
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_roundtrip_json_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
122
+
123
+ fuzz-smoke-parse-binary:
124
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-parse-binary CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
125
+
126
+ fuzz-smoke-parse-binary-accelerated:
127
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-parse-binary-accelerated CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
128
+
129
+ fuzz-smoke-parse-compact:
130
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-parse-compact CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
131
+
132
+ fuzz-smoke-parse-json:
133
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-parse-json CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
134
+
135
+ fuzz-smoke-roundtrip-binary:
136
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-roundtrip-binary CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
137
+
138
+ fuzz-smoke-roundtrip-binary-accelerated:
139
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-roundtrip-binary-accelerated CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
140
+
141
+ fuzz-smoke-roundtrip-compact:
142
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-roundtrip-compact CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
143
+
144
+ fuzz-smoke-roundtrip-json:
145
+ $(MAKE) $(AM_MAKEFLAGS) fuzz-roundtrip-json CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
146
+
147
+ clean-local:
148
+ -$(RM) -r $(FUZZ_GEN_DIR)/gen-rb
149
+
150
+ distdir:
151
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
152
+
153
+ EXTRA_DIST = \
154
+ .gitignore \
155
+ README.md \
156
+ fuzz_common.rb \
157
+ fuzz_tracer.rb \
158
+ fuzz_parse_binary_protocol.rb \
159
+ fuzz_parse_binary_protocol_harness.rb \
160
+ fuzz_parse_binary_protocol_accelerated.rb \
161
+ fuzz_parse_binary_protocol_accelerated_harness.rb \
162
+ fuzz_parse_compact_protocol.rb \
163
+ fuzz_parse_compact_protocol_harness.rb \
164
+ fuzz_parse_json_protocol.rb \
165
+ fuzz_parse_json_protocol_harness.rb \
166
+ fuzz_roundtrip_binary_protocol.rb \
167
+ fuzz_roundtrip_binary_protocol_harness.rb \
168
+ fuzz_roundtrip_binary_protocol_accelerated.rb \
169
+ fuzz_roundtrip_binary_protocol_accelerated_harness.rb \
170
+ fuzz_roundtrip_compact_protocol.rb \
171
+ fuzz_roundtrip_compact_protocol_harness.rb \
172
+ fuzz_roundtrip_json_protocol.rb \
173
+ fuzz_roundtrip_json_protocol_harness.rb