Esempio n. 1
0
 def testSubmitHostEvents_changeDeferredFunction(self):
   """Tests that tasks execute the latest deferred function implementation."""
   MockDefer.deferred_ran = None
   request = {'host_events': [snapshot_event]}
   # Sending 3 requests and run each with a different version
   self.testapp.post_json('/_ah/api/HostEventApi.SubmitHostEvents', request)
   self.testapp.post_json('/_ah/api/HostEventApi.SubmitHostEvents', request)
   self.testapp.post_json('/_ah/api/HostEventApi.SubmitHostEvents', request)
   tasks = self.mock_task_scheduler.GetTasks(
       queue_names=host_event.HOST_EVENT_QUEUE_NDB)
   self.assertEqual(len(tasks), 3)
   task_scheduler.RunCallableTask(tasks[0].payload)
   self.assertIsNone(MockDefer.deferred_ran)
   host_event_api.HostEventApi._ProcessHostEventWithNDB = (
       MockDefer.ProcessHostEventA)
   task_scheduler.RunCallableTask(tasks[1].payload)
   self.assertEqual('A', MockDefer.deferred_ran)
   host_event_api.HostEventApi._ProcessHostEventWithNDB = (
       MockDefer.ProcessHostEventB)
   task_scheduler.RunCallableTask(tasks[2].payload)
   self.assertEqual('B', MockDefer.deferred_ran)
Esempio n. 2
0
 def testSubmitHostEvents_hostStateChangedEvent(self):
   request = {'host_events': [host_state_event]}
   self.testapp.post_json('/_ah/api/HostEventApi.SubmitHostEvents', request)
   tasks = self.mock_task_scheduler.GetTasks(
       queue_names=host_event.HOST_EVENT_QUEUE_NDB)
   self.assertEqual(len(tasks), 1)
   host_event_api.HostEventApi._ProcessHostEventWithNDB = (
       MockDefer.ProcessHostEventA)
   task_scheduler.RunCallableTask(tasks[0].payload)
   event = host_event.HostEvent(**MockDefer.events[0])
   self.assertEqual('HOST_STATE_CHANGED', event.type)
   self.assertEqual('KILLING', event.host_state)
    def testAddCallableTask(self):
        task_scheduler.AddCallableTask(Callable, 123, foo=bytearray(100))

        self.mock_add.assert_called_once_with(
            queue_name=task_scheduler.DEFAULT_CALLABLE_TASK_QUEUE,
            payload=mock.ANY,
            target=None,
            task_name=None,
            eta=None)
        payload = self.mock_add.call_args[1]['payload']
        # Small payload is executed directly
        self.assertEqual(Callable, pickle.loads(payload)[0])

        task_scheduler.RunCallableTask(payload)
        self.assertEqual(mock.call(123, foo=bytearray(100)),
                         _object.last_callable_call)
    def testAddCallableTask_withLargePayloadAndTransaction(self):
        @ndb.transactional()
        def Func():
            task_scheduler.AddCallableTask(Callable,
                                           123,
                                           foo=bytearray(100 * 1024))

        Func()

        self.mock_add.assert_called_once_with(
            queue_name=task_scheduler.DEFAULT_CALLABLE_TASK_QUEUE,
            payload=mock.ANY,
            target=None,
            task_name=mock.ANY,  # Handled transactionally and given a name
            eta=None)
        payload = self.mock_add.call_args[1]['payload']
        task_scheduler.RunCallableTask(payload)
        self.assertEqual(mock.call(123, foo=bytearray(100 * 1024)),
                         _object.last_callable_call)
    def testAddCallableTask_withLargePayload(self):
        task_scheduler.AddCallableTask(Callable,
                                       123,
                                       foo=bytearray(100 * 1024))

        self.mock_add.assert_called_once_with(
            queue_name=task_scheduler.DEFAULT_CALLABLE_TASK_QUEUE,
            payload=mock.ANY,
            target=None,
            task_name=None,
            eta=None)
        payload = self.mock_add.call_args[1]['payload']
        # Large payload is stored in datastore
        self.assertEqual(task_scheduler._RunCallableTaskFromDatastore,
                         pickle.loads(payload)[0])

        task_scheduler.RunCallableTask(payload)
        self.assertEqual(mock.call(123, foo=bytearray(100 * 1024)),
                         _object.last_callable_call)
Esempio n. 6
0
  def testSubmitHostEvents(self):
    request = {'host_events': [snapshot_event]}
    # Verify that there aren't any entities persisted before the API call
    hosts = datastore_entities.HostInfo.query().fetch()
    self.assertEqual(0, len(hosts))
    devices = datastore_entities.DeviceInfo.query().fetch()
    self.assertEqual(0, len(devices))
    self.testapp.post_json('/_ah/api/HostEventApi.SubmitHostEvents', request)

    tasks = self.mock_task_scheduler.GetTasks(
        queue_names=host_event.HOST_EVENT_QUEUE_NDB)
    self.assertEqual(len(tasks), 1)
    task_scheduler.RunCallableTask(tasks[0].payload)
    # Verify host info in datastore.
    hosts = datastore_entities.HostInfo.query().fetch()
    timestamp = datetime.datetime.utcfromtimestamp(int(snapshot_event['time']))
    self.assertEqual(1, len(hosts))
    self.assertEqual(snapshot_event['hostname'], hosts[0].hostname)
    self.assertEqual(snapshot_event['lab_name'], hosts[0].lab_name)
    self.assertEqual(snapshot_event['cluster'], hosts[0].physical_cluster)
    self.assertEqual(timestamp, hosts[0].timestamp)
    devices = datastore_entities.DeviceInfo.query().fetch()
    self.assertEqual(2, len(devices))