Fix a microsecond format of isoformat()

isoformat() omits the microsecond from the format when the microsecond is 0.
Therefore, use strftime('%Y-%m-%dT%H:%M:%S.%f') instead.

Related Change-Id: Id6e8645362fe70b1427d45d5b44048fe47aba0f7
Closes-Bug: #1478418

Change-Id: I27059fa3476ceb51033534cc60d40047d88390d7
This commit is contained in:
fumihiko kakuma 2015-07-27 10:11:18 +09:00
parent e95bc6f5be
commit e9322c8f65
4 changed files with 33 additions and 7 deletions

View File

@ -80,7 +80,7 @@ class PluginReportStateAPI(object):
agent_state['uuid'] = uuidutils.generate_uuid()
kwargs = {
'agent_state': {'agent_state': agent_state},
'time': datetime.utcnow().isoformat(),
'time': datetime.utcnow().strftime(constants.ISO8601_TIME_FORMAT),
}
method = cctxt.call if use_call else cctxt.cast
return method(context, 'report_state', **kwargs)

View File

@ -183,3 +183,6 @@ RPC_NAMESPACE_STATE = None
DEFAULT_NETWORK_MTU = 0
ROUTER_MARK_MASK = "0xffff"
# Time format
ISO8601_TIME_FORMAT = '%Y-%m-%dT%H:%M:%S.%f'

View File

@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import mock
from oslo_context import context as oslo_context
import oslo_messaging
@ -101,6 +102,26 @@ class AgentPluginReportState(base.BaseTestCase):
{'agent_state': expected_agent_state})
self.assertIsInstance(mock_cast.call_args[1]['time'], str)
def test_plugin_report_state_microsecond_is_0(self):
topic = 'test'
expected_time = datetime.datetime(2015, 7, 27, 15, 33, 30, 0)
expected_time_str = '2015-07-27T15:33:30.000000'
expected_agent_state = {'agent': 'test'}
with mock.patch('neutron.agent.rpc.datetime') as mock_datetime:
reportStateAPI = rpc.PluginReportStateAPI(topic)
mock_datetime.utcnow.return_value = expected_time
with mock.patch.object(reportStateAPI.client, 'call'), \
mock.patch.object(reportStateAPI.client, 'cast'
) as mock_cast, \
mock.patch.object(reportStateAPI.client, 'prepare'
) as mock_prepare:
mock_prepare.return_value = reportStateAPI.client
ctxt = oslo_context.RequestContext('fake_user',
'fake_project')
reportStateAPI.report_state(ctxt, expected_agent_state)
self.assertEqual(expected_time_str,
mock_cast.call_args[1]['time'])
class AgentRPCMethods(base.BaseTestCase):

View File

@ -106,12 +106,14 @@ class AgentDBTestMixIn(object):
lbaas_hostb = copy.deepcopy(lbaas_hosta)
lbaas_hostb['host'] = LBAAS_HOSTB
callback = agents_db.AgentExtRpcCallback()
callback.report_state(self.adminContext,
agent_state={'agent_state': lbaas_hosta},
time=datetime.utcnow().isoformat())
callback.report_state(self.adminContext,
agent_state={'agent_state': lbaas_hostb},
time=datetime.utcnow().isoformat())
callback.report_state(
self.adminContext,
agent_state={'agent_state': lbaas_hosta},
time=datetime.utcnow().strftime(constants.ISO8601_TIME_FORMAT))
callback.report_state(
self.adminContext,
agent_state={'agent_state': lbaas_hostb},
time=datetime.utcnow().strftime(constants.ISO8601_TIME_FORMAT))
res += [lbaas_hosta, lbaas_hostb]
return res