testSuite/scripts/run.py (130 lines of code) (raw):

from test_blob_download import * from test_upload_block_blob import * from test_upload_page_blob import * from test_blobfs_upload_sharedkey import * from test_blobfs_download_sharedkey import * from test_blob_piping import * from test_blob_sync import * from test_service_to_service_copy import * from test_google_cloud_storage_copy import * import glob, os import configparser import platform import sys import unittest import re def parse_config_file_set_env(): config = configparser.RawConfigParser() files_read = config.read('../test_suite_config.ini') if len(files_read) != 1: raise Exception("Failed to find/open test_suite_config.ini file") # get the platform type since config file has property for platform respectively. os_type = platform.system() os_type = os_type.upper() # check if the config are defined for current os type. platform_list = config.sections() try: platform_list.index(os_type) except: raise Exception("not able to find the config defined for ostype " + os_type) # set all the environment variables # TEST_DIRECTORY_PATH is the location where test_data folder will be created and test files will be created further. # set the environment variable TEST_DIRECTORY_PATH os.environ['TEST_DIRECTORY_PATH'] = config[os_type]['TEST_DIRECTORY_PATH'] # AZCOPY_EXECUTABLE_PATH is the location of the azcopy executable # azcopy executable will be copied to test data folder. # set the environment variables os.environ['AZCOPY_EXECUTABLE_PATH'] = config[os_type]['AZCOPY_EXECUTABLE_PATH'] # TEST_SUITE_EXECUTABLE_LOCATION is the location of the test suite executable # test suite executable will be copied to test data folder. # set the environment variable TEST_SUITE_EXECUTABLE_LOCATION os.environ['TEST_SUITE_EXECUTABLE_LOCATION'] = config[os_type]['TEST_SUITE_EXECUTABLE_LOCATION'] # CONTAINER_SAS_URL is the shared access signature of the container # where test data will be uploaded to and downloaded from. os.environ['CONTAINER_SAS_URL'] = config['CREDENTIALS']['CONTAINER_SAS_URL'] # container whose storage account has been configured properly for the interactive testing user. os.environ['CONTAINER_OAUTH_URL'] = config['CREDENTIALS']['CONTAINER_OAUTH_URL'] # container which should be same to CONTAINER_OAUTH_URL, while with SAS for validation purpose. os.environ['CONTAINER_OAUTH_VALIDATE_SAS_URL'] = config['CREDENTIALS']['CONTAINER_OAUTH_VALIDATE_SAS_URL'] # share_sas_url is the URL with SAS of the share where test data will be uploaded to and downloaded from. os.environ['SHARE_SAS_URL'] = config['CREDENTIALS']['SHARE_SAS_URL'] # container sas of the premium storage account. os.environ['PREMIUM_CONTAINER_SAS_URL'] = config['CREDENTIALS']['PREMIUM_CONTAINER_SAS_URL'] # set the account name for blob fs service operation os.environ['ACCOUNT_NAME'] = config['CREDENTIALS']['ACCOUNT_NAME'] # set the account key for blob fs service operation os.environ['ACCOUNT_KEY'] = config['CREDENTIALS']['ACCOUNT_KEY'] # set the filesystem url in the environment os.environ['FILESYSTEM_URL'] = config['CREDENTIALS']['FILESYSTEM_URL'] os.environ['FILESYSTEM_SAS_URL'] = config['CREDENTIALS']['FILESYSTEM_SAS_URL'] # set env var for service-2-service copy source blob account os.environ['S2S_SRC_BLOB_ACCOUNT_SAS_URL'] = config['CREDENTIALS']['S2S_SRC_BLOB_ACCOUNT_SAS_URL'] # set env var for service-2-service copy destination blob account os.environ['S2S_DST_BLOB_ACCOUNT_SAS_URL'] = config['CREDENTIALS']['S2S_DST_BLOB_ACCOUNT_SAS_URL'] # set env var for service-2-service copy source file account os.environ['S2S_SRC_FILE_ACCOUNT_SAS_URL'] = config['CREDENTIALS']['S2S_SRC_FILE_ACCOUNT_SAS_URL'] # set env var for service-2-service copy source s3 and gcp os.environ['S2S_SRC_S3_SERVICE_URL'] = config['CREDENTIALS']['S2S_SRC_S3_SERVICE_URL'] os.environ['S2S_SRC_GCP_SERVICE_URL'] = config['CREDENTIALS']['S2S_SRC_GCP_SERVICE_URL'] os.environ['AWS_ACCESS_KEY_ID'] = config['CREDENTIALS']['AWS_ACCESS_KEY_ID'] os.environ['AWS_SECRET_ACCESS_KEY'] = config['CREDENTIALS']['AWS_SECRET_ACCESS_KEY'] os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = config['CREDENTIALS']['GOOGLE_APPLICATION_CREDENTIALS'] os.environ['GOOGLE_CLOUD_PROJECT'] = config['CREDENTIALS']['GOOGLE_CLOUD_PROJECT'] os.environ['OAUTH_AAD_ENDPOINT'] = config['CREDENTIALS']['OAUTH_AAD_ENDPOINT'] os.environ['S3_TESTS_OFF'] = config['CREDENTIALS']['S3_TESTS_OFF'] os.environ['GCP_TESTS_OFF'] = config['CREDENTIALS']['GCP_TESTS_OFF'] def check_env_not_exist(key): if os.environ.get(key, '-1') == '-1': print('Environment variable: ' + key + ' not set.') return True return False def get_env_logged(key): value = os.environ.get(key) if value is None: print(key + " = None") else: print(key + " = " + re.sub("(?i)(?P<key>sig[ \t]*[:=][ \t]*)(?P<value>[^& ,;\t\n\r]+)", "sig=REDACTED", value)) return value def init(): # Check the environment variables. # If they are not set, then parse the config file and set # environment variables. If any of the env variable is not set # test_config_file is parsed and env variables are reset. if check_env_not_exist('TEST_DIRECTORY_PATH') or check_env_not_exist('AZCOPY_EXECUTABLE_PATH') or \ check_env_not_exist('TEST_SUITE_EXECUTABLE_LOCATION') or check_env_not_exist('CONTAINER_SAS_URL') or \ check_env_not_exist('CONTAINER_OAUTH_URL') or check_env_not_exist('CONTAINER_OAUTH_VALIDATE_SAS_URL') or \ check_env_not_exist('SHARE_SAS_URL') or check_env_not_exist('PREMIUM_CONTAINER_SAS_URL') or \ check_env_not_exist('FILESYSTEM_URL') or check_env_not_exist('FILESYSTEM_SAS_URL') or \ check_env_not_exist('ACCOUNT_NAME') or check_env_not_exist('ACCOUNT_KEY') or \ check_env_not_exist('S2S_SRC_BLOB_ACCOUNT_SAS_URL') or check_env_not_exist('S2S_DST_BLOB_ACCOUNT_SAS_URL') \ or check_env_not_exist('S2S_SRC_FILE_ACCOUNT_SAS_URL') or check_env_not_exist('S2S_SRC_S3_SERVICE_URL') or check_env_not_exist('S2S_SRC_GCP_SERVICE_URL'): parse_config_file_set_env() # Get the environment variables value # test_dir_path is the location where test_data folder will be created and test files will be created further. test_dir_path = get_env_logged('TEST_DIRECTORY_PATH') # azcopy_exec_location is the location of the azcopy executable # azcopy executable will be copied to test data folder. azcopy_exec_location = get_env_logged('AZCOPY_EXECUTABLE_PATH') # test_suite_exec_location is the location of the test suite executable # test suite executable will be copied to test data folder. test_suite_exec_location = get_env_logged('TEST_SUITE_EXECUTABLE_LOCATION') # container_sas is the shared access signature of the container # where test data will be uploaded to and downloaded from. container_sas = get_env_logged('CONTAINER_SAS_URL') # container_oauth is container for oauth testing. container_oauth = get_env_logged('CONTAINER_OAUTH_URL') # container_oauth_validate is the URL with SAS for oauth validation. container_oauth_validate = get_env_logged('CONTAINER_OAUTH_VALIDATE_SAS_URL') # share_sas_url is the URL with SAS of the share where test data will be uploaded to and downloaded from. share_sas_url = get_env_logged('SHARE_SAS_URL') # container sas of the premium storage account. premium_container_sas = get_env_logged('PREMIUM_CONTAINER_SAS_URL') # get the filesystem url filesystem_url = get_env_logged('FILESYSTEM_URL') filesystem_sas_url = get_env_logged('FILESYSTEM_SAS_URL') # get the s2s copy src URLs s2s_src_blob_account_url = get_env_logged('S2S_SRC_BLOB_ACCOUNT_SAS_URL') s2s_src_file_account_url = get_env_logged('S2S_SRC_FILE_ACCOUNT_SAS_URL') s2s_src_s3_service_url = get_env_logged('S2S_SRC_S3_SERVICE_URL') s2s_src_gcp_service_url = get_env_logged('S2S_SRC_GCP_SERVICE_URL') # get the s2s copy dest account URLs s2s_dst_blob_account_url = get_env_logged('S2S_DST_BLOB_ACCOUNT_SAS_URL') get_env_logged("ACCOUNT_NAME") # do NOT log ACCOUNT_KEY # don't log, it will just get redacted by DevOps logging system: get_env_logged("AWS_ACCESS_KEY_ID") # do NOT log AWS_SECRET_ACCESS_KEY get_env_logged("OAUTH_AAD_ENDPOINT") # don't log, it will just get redacted by DevOps logging system: get_env_logged("OAUTH_TENANT_ID") get_env_logged("S3_TESTS_OFF") get_env_logged("GCP_TESTS_OFF") # deleting the log files. cleanup() if not util.initialize_test_suite(test_dir_path, container_sas, container_oauth, container_oauth_validate, share_sas_url, premium_container_sas, filesystem_url, filesystem_sas_url, s2s_src_blob_account_url, s2s_src_file_account_url, s2s_src_s3_service_url, s2s_src_gcp_service_url, s2s_dst_blob_account_url, azcopy_exec_location, test_suite_exec_location): print("failed to initialize the test suite with given user input") return else: test_dir_path += "\\test_data" def cleanup(): # delete the log files for f in glob.glob('*.log'): try: os.remove(f) except OSError: pass def main(): print("Smoke tests starting...") init() test_class_to_run = [BlobPipingTests, Blob_Sync_User_Scenario, Block_Upload_User_Scenarios, Blob_Download_User_Scenario, PageBlob_Upload_User_Scenarios, BlobFs_Upload_ShareKey_User_Scenarios, BlobFs_Download_SharedKey_User_Scenarios, Service_2_Service_Copy_User_Scenario, Google_Cloud_Storage_Copy_User_Scenario] suites_list = [] loader = unittest.TestLoader() for test_class in test_class_to_run: suite = loader.loadTestsFromTestCase(test_class) suites_list.append(suite) big_suite = unittest.TestSuite(suites_list) runner = unittest.TextTestRunner(verbosity=2) results = runner.run(big_suite) if results.wasSuccessful() is False: sys.exit(1) # suite = unittest.TestLoader().loadTestsFromTestCase(Block_Upload_User_Scenarios) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(Blob_Download_User_Scenario) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(PageBlob_Upload_User_Scenarios) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(BlobFs_Upload_OAuth_User_Scenarios) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(BlobFs_Download_OAuth_User_Scenarios) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(Azcopy_Operation_User_Scenario) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(FileShare_Download_User_Scenario) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(FileShare_Upload_User_Scenario) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(BlobFs_Upload_ShareKey_User_Scenarios) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(BlobFs_Download_SharedKey_User_Scenarios) # unittest.TextTestRunner(verbosity=2).run(suite) # # suite = unittest.TestLoader().loadTestsFromTestCase(Service_2_Service_Copy_User_Scenario) # unittest.TextTestRunner(verbosity=2).run(suite) cleanup() if __name__ == '__main__': main()