diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
commit | 19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch) | |
tree | 42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/jaegertracing/thrift/test/rb/integration/TestServer.rb | |
parent | Initial commit. (diff) | |
download | ceph-upstream.tar.xz ceph-upstream.zip |
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-x | src/jaegertracing/thrift/test/rb/integration/TestServer.rb | 188 |
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." |