|  | /* | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * Various helpers used by more than a single test. | 
|  | */ | 
|  | module test_utils; | 
|  |  | 
|  | import std.parallelism : TaskPool; | 
|  | import thrift.protocol.base; | 
|  | import thrift.protocol.processor; | 
|  | import thrift.server.base; | 
|  | import thrift.server.nonblocking; | 
|  | import thrift.server.simple; | 
|  | import thrift.server.taskpool; | 
|  | import thrift.server.threaded; | 
|  | import thrift.server.transport.socket; | 
|  | import thrift.transport.base; | 
|  | import thrift.transport.buffered; | 
|  | import thrift.transport.framed; | 
|  | import thrift.transport.http; | 
|  | import thrift.transport.zlib; | 
|  |  | 
|  | // This is a likely victim of @@BUG4744@@ when used with command argument | 
|  | // parsing. | 
|  | enum ServerType { | 
|  | simple, | 
|  | nonblocking, | 
|  | pooledNonblocking, | 
|  | taskpool, | 
|  | threaded | 
|  | } | 
|  |  | 
|  | TServer createServer(ServerType type, size_t taskPoolSize, size_t numIOThreads, | 
|  | TProcessor processor, TServerSocket serverTransport, | 
|  | TTransportFactory transportFactory, TProtocolFactory protocolFactory) | 
|  | { | 
|  | final switch (type) { | 
|  | case ServerType.simple: | 
|  | return new TSimpleServer(processor, serverTransport, | 
|  | transportFactory, protocolFactory); | 
|  | case ServerType.nonblocking: | 
|  | auto nb = new TNonblockingServer(processor, serverTransport.port, | 
|  | transportFactory, protocolFactory); | 
|  | nb.numIOThreads = numIOThreads; | 
|  | return nb; | 
|  | case ServerType.pooledNonblocking: | 
|  | auto nb = new TNonblockingServer(processor, serverTransport.port, | 
|  | transportFactory, protocolFactory, new TaskPool(taskPoolSize)); | 
|  | nb.numIOThreads = numIOThreads; | 
|  | return nb; | 
|  | case ServerType.taskpool: | 
|  | auto tps = new TTaskPoolServer(processor, serverTransport, | 
|  | transportFactory, protocolFactory); | 
|  | tps.taskPool = new TaskPool(taskPoolSize); | 
|  | return tps; | 
|  | case ServerType.threaded: | 
|  | return new TThreadedServer(processor, serverTransport, | 
|  | transportFactory, protocolFactory); | 
|  | } | 
|  | } | 
|  |  | 
|  | enum TransportType { | 
|  | buffered, | 
|  | framed, | 
|  | http, | 
|  | zlib, | 
|  | raw | 
|  | } | 
|  |  | 
|  | TTransportFactory createTransportFactory(TransportType type) { | 
|  | final switch (type) { | 
|  | case TransportType.buffered: | 
|  | return new TBufferedTransportFactory; | 
|  | case TransportType.framed: | 
|  | return new TFramedTransportFactory; | 
|  | case TransportType.http: | 
|  | return new TServerHttpTransportFactory; | 
|  | case TransportType.zlib: | 
|  | return new TZlibTransportFactory; | 
|  | case TransportType.raw: | 
|  | return new TTransportFactory; | 
|  | } | 
|  | } |