docstr: LookupTables - Drivers - S3 Driver - Adapter - AWS Error
docstr_tok: ["LookupTables","-","Drivers","-","S3","Driver","-","Adapter","-","AWS","Error"]
code: def test_upload_with_error():
      """LookupTables - Drivers - S3 Driver - Adapter - AWS Error"""
      driver = S3Driver(
          {"bucket": "bucket", "key": "key", "compression": "gzip"}
      )
      boto_s3_client = MagicMock(name="Boto3Client")
      boto_s3_client.Bucket.return_value.put_object.side_effect = (
          botocore.exceptions.ClientError(
              {"Error": {"Message": "uh oh"}}, "operation_name"
          )
      )
      adapter = S3Adapter(driver, boto_s3_client, "bucket", "key")
  
      assert_raises(LookupTablesCommitError, adapter.upload, "asdf")
  
imports: from datetime import datetime
  import json
  import zlib
  import botocore
  from botocore.exceptions import ReadTimeoutError
  from mock import patch, ANY, MagicMock
  from moto import mock_s3
  from nose.tools import assert_equal, assert_raises
  from streamalert.shared.config import load_config
  from streamalert.shared.lookup_tables.driver_s3 import S3Driver, Compression, S3Adapter
  from streamalert.shared.lookup_tables.drivers_factory import construct_persistence_driver
  from streamalert.shared.lookup_tables.errors import LookupTablesCommitError, LookupTablesInitializationError
  from tests.unit.helpers.aws_mocks import put_mock_s3_object
label_desc: Use image node_id 1 for calling the TestS3Adapter obj's underlying member method code with example usage: obj.test_upload_with_error() without return types