Fix client tests

This commit is contained in:
nsubiron 2017-11-20 19:42:24 +01:00
parent cebbb4bcbe
commit b8cd04e11b
6 changed files with 59 additions and 51 deletions

View File

@ -42,7 +42,8 @@
"settings":
{
"tab_size": 2,
"translate_tabs_to_spaces": true
"translate_tabs_to_spaces": true,
"trim_trailing_white_space_on_save": true
},
"build_systems":
[

View File

@ -8,6 +8,7 @@
import os
import struct
import time
from contextlib import contextmanager
@ -37,7 +38,6 @@ class CarlaClient(object):
self._current_settings = None
# Controls the state, if an episode is already started.
self._is_episode_requested = False
# Variable to control the latest episode where the it started
def connect(self):
self._world_client.connect()
@ -50,34 +50,11 @@ class CarlaClient(object):
def connected(self):
return self._world_client.connected()
def _request_new_episode(self, carla_settings):
"""Request a new episode. Internal function to
request information about a new episode episode that
is going to start. It also prepare the client for
reset by disconnecting stream and control clients.
"""
# Disconnect agent clients.
self._stream_client.disconnect()
self._control_client.disconnect()
# Send new episode request.
pb_message = carla_protocol.RequestNewEpisode()
pb_message.ini_file = str(carla_settings)
self._world_client.write(pb_message.SerializeToString())
# Read scene description.
data = self._world_client.read()
if not data:
raise RuntimeError('failed to read data from server')
pb_message = carla_protocol.SceneDescription()
pb_message.ParseFromString(data)
if len(pb_message.player_start_spots) < 1:
raise RuntimeError("received 0 player start spots")
self._is_episode_requested =True
return pb_message
def load_settings(self, carla_settings):
""" Abstraction to new episode request. carla_settings object must be convertible to
a str holding a CarlaSettings.ini. Loads new settings to the server.
"""
Load new settings and request a new episode based on these settings to
the server. carla_settings object must be convertible to a str holding a
CarlaSettings.ini.
Returns a protobuf object holding the scene description.
"""
@ -86,18 +63,19 @@ class CarlaClient(object):
def start_episode(self, player_start_index):
"""Start the new episode at the player start given by the
"""
Start the new episode at the player start given by the
player_start_index. The list of player starts is retrieved by
load_settings().
"load_settings". Requests a new episode based on the last settings
loaded by "load_settings".
This function waits until the server answers with an EpisodeReady.
"""
if self._current_settings == None:
if self._current_settings is None:
raise RuntimeError('no settings loaded, cannot start episode')
# if no new settings are loaded, request new episode with previous
if not self._is_episode_requested:
if not self._is_episode_requested:
self._request_new_episode(self._current_settings)
try:
@ -120,9 +98,10 @@ class CarlaClient(object):
self._is_episode_requested = False
def read_measurements(self):
"""Read measuremnts of current frame. The episode must be started.
Return the protobuf object with the measurements followed by the raw
data with the images.
"""
Read measuremnts of current frame. The episode must be started. Return
the protobuf object with the measurements followed by the raw data with
the images.
"""
# Read measurements.
data = self._stream_client.read()
@ -147,6 +126,30 @@ class CarlaClient(object):
pb_message.reverse = kwargs.get('reverse', False)
self._control_client.write(pb_message.SerializeToString())
def _request_new_episode(self, carla_settings):
"""
Request a new episode. Internal function to request information about a
new episode episode that is going to start. It also prepare the client
for reset by disconnecting stream and control clients.
"""
# Disconnect agent clients.
self._stream_client.disconnect()
self._control_client.disconnect()
# Send new episode request.
pb_message = carla_protocol.RequestNewEpisode()
pb_message.ini_file = str(carla_settings)
self._world_client.write(pb_message.SerializeToString())
# Read scene description.
data = self._world_client.read()
if not data:
raise RuntimeError('failed to read data from server')
pb_message = carla_protocol.SceneDescription()
pb_message.ParseFromString(data)
if len(pb_message.player_start_spots) < 1:
raise RuntimeError("received 0 player start spots")
self._is_episode_requested = True
return pb_message
class CarlaImage(object):
@staticmethod

View File

@ -128,7 +128,7 @@ class CarlaClientConsole(cmd.Cmd):
self.control = _Control()
if not self.client.connected():
self.client.connect()
self.client.request_new_episode(self.settings)
self.client.load_settings(self.settings)
self.client.start_episode(0)
logging.info('new episode started')
except Exception as exception:

View File

@ -45,7 +45,7 @@ def run_carla_client(args):
logging.debug('sending CarlaSettings:\n%s', settings)
logging.info('new episode requested')
scene = client.request_new_episode(settings)
scene = client.load_settings(settings)
number_of_player_starts = len(scene.player_start_spots)
player_start = random.randint(0, max(0, number_of_player_starts - 1))

View File

@ -23,6 +23,7 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '.'))
import carla
from carla.tcp import TCPConnectionError
from carla.util import StopWatch
from unit_tests import CarlaServerTest
@ -99,14 +100,20 @@ def run_test(test, args):
logging.error('exception instantiating %r: %s', test.name, exception)
return False
log_test(RUN, test.name)
try:
timer = StopWatch()
result = test.run()
timer.stop()
except Exception as exception:
timer.stop()
logging.error('exception: %s', exception)
result = False
while True:
try:
timer = StopWatch()
result = test.run()
timer.stop()
break
except TCPConnectionError as error:
logging.error(error)
time.sleep(1)
except Exception as exception:
timer.stop()
logging.exception('exception: %s', exception)
result = False
break
log_test(OK if result else FAILED, '%s (%d ms)', test.name, timer.milliseconds())
return result
@ -118,9 +125,6 @@ def do_the_tests(args):
failed = []
log_test(SEP0, 'Running %d tests.', len(tests))
for test in tests:
if succeeded or failed:
logging.info('waiting for the server to be ready again')
time.sleep(7)
if run_test(test, args):
succeeded.append(test)
else:

View File

@ -25,7 +25,7 @@ class _BasicTestBase(unit_tests.CarlaServerTest):
carla_settings.randomize_weather()
logging.debug('sending CarlaSettings:\n%s', carla_settings)
logging.info('new episode requested')
scene = client.request_new_episode(carla_settings)
scene = client.load_settings(carla_settings)
number_of_player_starts = len(scene.player_start_spots)
player_start = random.randint(0, max(0, number_of_player_starts - 1))
logging.info(