summaryrefslogtreecommitdiffstats
path: root/src/jaegertracing/thrift/test/rb/integration/TestServer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'src/jaegertracing/thrift/test/rb/integration/TestServer.rb')
-rwxr-xr-xsrc/jaegertracing/thrift/test/rb/integration/TestServer.rb188
1 files changed, 188 insertions, 0 deletions
diff --git a/src/jaegertracing/thrift/test/rb/integration/TestServer.rb b/src/jaegertracing/thrift/test/rb/integration/TestServer.rb
new file mode 100755
index 000000000..7caf6a8cb
--- /dev/null
+++ b/src/jaegertracing/thrift/test/rb/integration/TestServer.rb
@@ -0,0 +1,188 @@
+#!/usr/bin/env ruby
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+$:.push File.dirname(__FILE__) + '/..'
+
+require 'test_helper'
+require 'thrift'
+require 'thrift_test'
+require 'thrift_test_types'
+
+class SimpleHandler
+ [:testVoid, :testString, :testBool, :testByte, :testI32, :testI64, :testDouble, :testBinary,
+ :testStruct, :testMap, :testStringMap, :testSet, :testList, :testNest, :testEnum, :testTypedef,
+ :testEnum, :testTypedef, :testMultiException].each do |meth|
+
+ define_method(meth) do |thing|
+ p meth
+ p thing
+ thing
+ end
+
+ end
+
+ def testVoid()
+ end
+
+ def testInsanity(thing)
+ return {
+ 1 => {
+ 2 => thing,
+ 3 => thing
+ },
+ 2 => {
+ 6 => Thrift::Test::Insanity::new()
+ }
+ }
+ end
+
+ def testMapMap(thing)
+ return {
+ -4 => {
+ -4 => -4,
+ -3 => -3,
+ -2 => -2,
+ -1 => -1,
+ },
+ 4 => {
+ 4 => 4,
+ 3 => 3,
+ 2 => 2,
+ 1 => 1,
+ }
+ }
+ end
+
+ def testMulti(arg0, arg1, arg2, arg3, arg4, arg5)
+ return Thrift::Test::Xtruct.new({
+ 'string_thing' => 'Hello2',
+ 'byte_thing' => arg0,
+ 'i32_thing' => arg1,
+ 'i64_thing' => arg2,
+ })
+ end
+
+ def testException(thing)
+ if thing == "Xception"
+ raise Thrift::Test::Xception, :errorCode => 1001, :message => thing
+ elsif thing == "TException"
+ raise Thrift::Exception, :message => thing
+ else
+ # no-op
+ end
+ end
+
+ def testMultiException(arg0, arg1)
+ if arg0 == "Xception2"
+ raise Thrift::Test::Xception2, :errorCode => 2002, :struct_thing => ::Thrift::Test::Xtruct.new({ :string_thing => 'This is an Xception2' })
+ elsif arg0 == "Xception"
+ raise Thrift::Test::Xception, :errorCode => 1001, :message => 'This is an Xception'
+ else
+ return ::Thrift::Test::Xtruct.new({'string_thing' => arg1})
+ end
+ end
+
+ def testOneway(arg0)
+ sleep(arg0)
+ end
+
+end
+
+domain_socket = nil
+port = 9090
+protocol = "binary"
+@protocolFactory = nil
+ssl = false
+transport = "buffered"
+@transportFactory = nil
+
+ARGV.each do|a|
+ if a == "--help"
+ puts "Allowed options:"
+ puts "\t -h [ --help ] \t produce help message"
+ puts "\t--domain-socket arg (=) \t Unix domain socket path"
+ puts "\t--port arg (=9090) \t Port number to listen \t not valid with domain-socket"
+ puts "\t--protocol arg (=binary) \t protocol: accel, binary, compact, json"
+ puts "\t--ssl \t use ssl \t not valid with domain-socket"
+ puts "\t--transport arg (=buffered) transport: buffered, framed, http"
+ exit
+ elsif a.start_with?("--domain-socket")
+ domain_socket = a.split("=")[1]
+ elsif a.start_with?("--protocol")
+ protocol = a.split("=")[1]
+ elsif a == "--ssl"
+ ssl = true
+ elsif a.start_with?("--transport")
+ transport = a.split("=")[1]
+ elsif a.start_with?("--port")
+ port = a.split("=")[1].to_i
+ end
+end
+
+if protocol == "binary" || protocol.to_s.strip.empty?
+ @protocolFactory = Thrift::BinaryProtocolFactory.new
+elsif protocol == "compact"
+ @protocolFactory = Thrift::CompactProtocolFactory.new
+elsif protocol == "json"
+ @protocolFactory = Thrift::JsonProtocolFactory.new
+elsif protocol == "accel"
+ @protocolFactory = Thrift::BinaryProtocolAcceleratedFactory.new
+else
+ raise 'Unknown protocol type'
+end
+
+if transport == "buffered" || transport.to_s.strip.empty?
+ @transportFactory = Thrift::BufferedTransportFactory.new
+elsif transport == "framed"
+ @transportFactory = Thrift::FramedTransportFactory.new
+else
+ raise 'Unknown transport type'
+end
+
+@handler = SimpleHandler.new
+@processor = Thrift::Test::ThriftTest::Processor.new(@handler)
+@transport = nil
+if domain_socket.to_s.strip.empty?
+ if ssl
+ # the working directory for ruby crosstest is test/rb/gen-rb
+ keysDir = File.join(File.dirname(File.dirname(Dir.pwd)), "keys")
+ ctx = OpenSSL::SSL::SSLContext.new
+ ctx.ca_file = File.join(keysDir, "CA.pem")
+ ctx.cert = OpenSSL::X509::Certificate.new(File.open(File.join(keysDir, "server.crt")))
+ ctx.cert_store = OpenSSL::X509::Store.new
+ ctx.cert_store.add_file(File.join(keysDir, 'client.pem'))
+ ctx.key = OpenSSL::PKey::RSA.new(File.open(File.join(keysDir, "server.key")))
+ ctx.options = OpenSSL::SSL::OP_NO_SSLv2 | OpenSSL::SSL::OP_NO_SSLv3
+ ctx.ssl_version = :SSLv23
+ ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
+ @transport = Thrift::SSLServerSocket.new(nil, port, ctx)
+ else
+ @transport = Thrift::ServerSocket.new(port)
+ end
+else
+ @transport = Thrift::UNIXServerSocket.new(domain_socket)
+end
+
+@server = Thrift::ThreadedServer.new(@processor, @transport, @transportFactory, @protocolFactory)
+
+puts "Starting TestServer #{@server.to_s}"
+@server.serve
+puts "done."