@ -300,32 +300,33 @@ class ServiceConfigEnd2endTest : public ::testing::Test {
}
struct ServerData {
int port_ ;
const int port_ ;
std : : unique_ptr < Server > server_ ;
MyTestServiceImpl service_ ;
std : : unique_ptr < std : : thread > thread_ ;
bool server_ready_ = false ;
bool started_ = false ;
explicit ServerData ( int port = 0 ) {
port_ = port > 0 ? port : grpc_pick_unused_port_or_die ( ) ;
}
grpc : : internal : : Mutex mu_ ;
grpc : : internal : : CondVar cond_ ;
bool server_ready_ ABSL_GUARDED_BY ( mu_ ) = false ;
bool started_ ABSL_GUARDED_BY ( mu_ ) = false ;
explicit ServerData ( int port = 0 )
: port_ ( port > 0 ? port : grpc_pick_unused_port_or_die ( ) ) { }
void Start ( const std : : string & server_host ) {
gpr_log ( GPR_INFO , " starting server on port %d " , port_ ) ;
grpc : : internal : : MutexLock lock ( & mu_ ) ;
started_ = true ;
grpc : : internal : : Mutex mu ;
grpc : : internal : : MutexLock lock ( & mu ) ;
grpc : : internal : : CondVar cond ;
thread_ = absl : : make_unique < std : : thread > (
std : : bind ( & ServerData : : Serve , this , server_host , & mu , & cond ) ) ;
grpc : : internal : : WaitUntil ( & cond , & mu , [ this ] { return server_ready_ ; } ) ;
std : : bind ( & ServerData : : Serve , this , server_host ) ) ;
while ( ! server_ready_ ) {
cond_ . Wait ( & mu_ ) ;
}
server_ready_ = false ;
gpr_log ( GPR_INFO , " server startup complete " ) ;
}
void Serve ( const std : : string & server_host , grpc : : internal : : Mutex * mu ,
grpc : : internal : : CondVar * cond ) {
void Serve ( const std : : string & server_host ) {
std : : ostringstream server_address ;
server_address < < server_host < < " : " < < port_ ;
ServerBuilder builder ;
@ -334,12 +335,13 @@ class ServiceConfigEnd2endTest : public ::testing::Test {
builder . AddListeningPort ( server_address . str ( ) , std : : move ( creds ) ) ;
builder . RegisterService ( & service_ ) ;
server_ = builder . BuildAndStart ( ) ;
grpc : : internal : : MutexLock lock ( mu ) ;
grpc : : internal : : MutexLock lock ( & mu_ ) ;
server_ready_ = true ;
cond - > Signal ( ) ;
cond_ . Signal ( ) ;
}
void Shutdown ( ) {
grpc : : internal : : MutexLock lock ( & mu_ ) ;
if ( ! started_ ) return ;
server_ - > Shutdown ( grpc_timeout_milliseconds_to_deadline ( 0 ) ) ;
thread_ - > join ( ) ;