class_docstr: Test class for the AppIntegration
class_docstr_tok: ["Test","class","for","the","AppIntegration"]
docstr: App Integration - Gather, Success
code: def test_gather_success(self, time_mock, log_mock):
      """App Integration - Gather, Success"""
      time_mock.time.side_effect = [100.0, 300.0]
      with patch.object(
          AppIntegration, "_gather_logs"
      ) as subclass_gather_mock:
          subclass_gather_mock.return_value = [
              "log01",
              "log02",
              "log03",
          ]
          self._app._gather()
          assert_equal(self._app._gathered_log_count, 3)
          log_mock.assert_called_with(
              "[%s] Function executed in %.4f seconds.",
              "_gather",
              200.0,
          )
  
imports: import os
  from botocore.exceptions import ClientError
  from mock import call, Mock, patch
  from moto import mock_ssm
  from nose.tools import assert_equal, assert_false, assert_is_instance, assert_is_none, assert_true, raises
  import requests
  from requests.exceptions import ConnectTimeout
  from streamalert.apps import StreamAlertApp
  from streamalert.apps.app_base import AppIntegration, safe_timeout, _report_time
  from streamalert.apps._apps.duo import DuoAuthApp
  from streamalert.apps.exceptions import AppException
  from tests.unit.streamalert.apps.test_helpers import get_event, put_mock_params
  from tests.unit.streamalert.shared.test_config import get_mock_lambda_context
label_desc: Use image node_id 22 for calling the TestAppIntegration obj's underlying member method code with example usage: obj.test_gather_success(time_mock, log_mock) without return types