# import time # import random # import pdb # import threading # import logging # from multiprocessing import Pool, Process # import pytest # from utils.utils import * # import ujson # CONFIG_TIMEOUT = 80 # class TestCacheConfig: # """ # ****************************************************************** # The following cases are used to test `get_config` function # ****************************************************************** # """ # @pytest.fixture(scope="function", autouse=True) # def skip_http_check(self, args): # if args["handler"] == "HTTP": # pytest.skip("skip in http mode") # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def reset_configs(self, connect): # ''' # reset configs so the tests are stable # ''' # relpy = connect.set_config("cache.cache_size", '4GB') # config_value = connect.get_config("cache.cache_size") # assert config_value == '4GB' # #relpy = connect.set_config("cache", "insert_buffer_size", '2GB') # #config_value = connect.get_config("cache", "insert_buffer_size") # #assert config_value == '1073741824' # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_cache_size_invalid_parent_key(self, connect, collection): # ''' # target: get invalid parent key # method: call get_config without parent_key: cache # expected: status not ok # ''' # invalid_configs = ["Cache_config", "cache config", "cache_Config", "cacheconfig"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config(config+str(".cache_size")) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_cache_size_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: cache_size # expected: status not ok # ''' # invalid_configs = ["Cpu_cache_size", "cpu cache_size", "cpucachecapacity"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("cache."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_cache_size_valid(self, connect, collection): # ''' # target: get cache_size # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("cache.cache_size") # assert config_value # # @pytest.mark.tags(CaseLabel.L2) # def test_get_insert_buffer_size_invalid_parent_key(self, connect, collection): # ''' # target: get invalid parent key # method: call get_config without parent_key: cache # expected: status not ok # ''' # invalid_configs = ["Cache_config", "cache config", "cache_Config", "cacheconfig"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config(config+".insert_buffer_size") # # @pytest.mark.tags(CaseLabel.L2) # def test_get_insert_buffer_size_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: insert_buffer_size # expected: status not ok # ''' # invalid_configs = ["Insert_buffer size", "insert buffer_size", "insertbuffersize"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("cache."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_insert_buffer_size_valid(self, connect, collection): # ''' # target: get insert_buffer_size # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("cache.insert_buffer_size") # assert config_value # # @pytest.mark.tags(CaseLabel.L2) # def test_get_preload_collection_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: preload_collection # expected: status not ok # ''' # invalid_configs = ["preloadtable", "preload collection "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("cache."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_preload_collection_valid(self, connect, collection): # ''' # target: get preload_collection # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("cache.preload_collection") # assert config_value == '' # # """ # ****************************************************************** # The following cases are used to test `set_config` function # ****************************************************************** # """ # def get_memory_available(self, connect): # info = connect._cmd("get_system_info") # mem_info = ujson.loads(info) # mem_total = int(mem_info["memory_total"]) # mem_used = int(mem_info["memory_used"]) # logging.getLogger().info(mem_total) # logging.getLogger().info(mem_used) # mem_available = mem_total - mem_used # return int(mem_available / 1024 / 1024 / 1024) # # def get_memory_total(self, connect): # info = connect._cmd("get_system_info") # mem_info = ujson.loads(info) # mem_total = int(mem_info["memory_total"]) # return int(mem_total / 1024 / 1024 / 1024) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_cache_size_invalid_parent_key(self, connect, collection): # ''' # target: set invalid parent key # method: call set_config without parent_key: cache # expected: status not ok # ''' # self.reset_configs(connect) # invalid_configs = ["Cache_config", "cache config", "cache_Config", "cacheconfig"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config(config+".cache_size", '4294967296') # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_cache_invalid_child_key(self, connect, collection): # ''' # target: set invalid child key # method: call set_config with invalid child_key # expected: status not ok # ''' # self.reset_configs(connect) # invalid_configs = ["abc", 1] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config("cache."+config, '4294967296') # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_cache_size_valid(self, connect, collection): # ''' # target: set cache_size # method: call set_config correctly # expected: status ok, set successfully # ''' # self.reset_configs(connect) # relpy = connect.set_config("cache.cache_size", '2147483648') # config_value = connect.get_config("cache.cache_size") # assert config_value == '2GB' # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.tags(CaseLabel.L2) # def test_set_cache_size_valid_multiple_times(self, connect, collection): # ''' # target: set cache_size # method: call set_config correctly and repeatedly # expected: status ok # ''' # self.reset_configs(connect) # for i in range(20): # relpy = connect.set_config("cache.cache_size", '4294967296') # config_value = connect.get_config("cache.cache_size") # assert config_value == '4294967296' # for i in range(20): # relpy = connect.set_config("cache.cache_size", '2147483648') # config_value = connect.get_config("cache.cache_size") # assert config_value == '2147483648' # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.tags(CaseLabel.L2) # def test_set_insert_buffer_size_invalid_parent_key(self, connect, collection): # ''' # target: set invalid parent key # method: call set_config without parent_key: cache # expected: status not ok # ''' # self.reset_configs(connect) # invalid_configs = ["Cache_config", "cache config", "cache_Config", "cacheconfig"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config(config+".insert_buffer_size", '1073741824') # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_insert_buffer_size_valid(self, connect, collection): # ''' # target: set insert_buffer_size # method: call get_config correctly # expected: status ok, set successfully # ''' # self.reset_configs(connect) # relpy = connect.set_config("cache.insert_buffer_size", '2GB') # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.tags(CaseLabel.L2) # def test_set_insert_buffer_size_valid_multiple_times(self, connect, collection): # ''' # target: set insert_buffer_size # method: call get_config correctly and repeatedly # expected: status ok # ''' # self.reset_configs(connect) # for i in range(20): # with pytest.raises(Exception) as e: # relpy = connect.set_config("cache.insert_buffer_size", '1GB') # for i in range(20): # with pytest.raises(Exception) as e: # relpy = connect.set_config("cache.insert_buffer_size", '2GB') # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_cache_out_of_memory_value_A(self, connect, collection): # ''' # target: set cache_size / insert_buffer_size to be out-of-memory # method: call set_config with child values bigger than current system memory # expected: status not ok (cache_size + insert_buffer_size < system memory) # ''' # self.reset_configs(connect) # mem_total = self.get_memory_total(connect) # logging.getLogger().info(mem_total) # with pytest.raises(Exception) as e: # relpy = connect.set_config("cache.cache_size", str(int(mem_total + 1)+'')) # # # # class TestGPUConfig: # """ # ****************************************************************** # The following cases are used to test `get_config` function # ****************************************************************** # """ # @pytest.fixture(scope="function", autouse=True) # def skip_http_check(self, args): # if args["handler"] == "HTTP": # pytest.skip("skip in http mode") # # @pytest.mark.tags(CaseLabel.L2) # def test_get_gpu_search_threshold_invalid_parent_key(self, connect, collection): # ''' # target: get invalid parent key # method: call get_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Engine_config", "engine config"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config(config+".gpu_search_threshold") # # @pytest.mark.tags(CaseLabel.L2) # def test_get_gpu_search_threshold_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: gpu_search_threshold # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_search threshold", "gpusearchthreshold"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("gpu."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_gpu_search_threshold_valid(self, connect, collection): # ''' # target: get gpu_search_threshold # method: call get_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # config_value = connect.get_config("gpu.gpu_search_threshold") # assert config_value # # """ # ****************************************************************** # The following cases are used to test `set_config` function # ****************************************************************** # """ # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_gpu_invalid_child_key(self, connect, collection): # ''' # target: set invalid child key # method: call set_config with invalid child_key # expected: status not ok # ''' # invalid_configs = ["abc", 1] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu."+config, 1000) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_gpu_search_threshold_invalid_parent_key(self, connect, collection): # ''' # target: set invalid parent key # method: call set_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Engine_config", "engine config"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config(config+".gpu_search_threshold", 1000) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_gpu_search_threshold_valid(self, connect, collection): # ''' # target: set gpu_search_threshold # method: call set_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # relpy = connect.set_config("gpu.gpu_search_threshold", 2000) # config_value = connect.get_config("gpu.gpu_search_threshold") # assert config_value == '2000' # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_gpu_invalid_values(self, connect, collection): # ''' # target: set gpu # method: call set_config with invalid child values # expected: status not ok # ''' # for i in [-1, "1000\n", "1000\t", "1000.0", 1000.35]: # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu.use_blas_threshold", i) # if str(connect._cmd("mode")) == "GPU": # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu.gpu_search_threshold", i) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def reset_configs(self, connect): # ''' # reset configs so the tests are stable # ''' # relpy = connect.set_config("gpu.cache_size", 1) # config_value = connect.get_config("gpu.cache_size") # assert config_value == '1' # # #follows can not be changed # #relpy = connect.set_config("gpu", "enable", "true") # #config_value = connect.get_config("gpu", "enable") # #assert config_value == "true" # #relpy = connect.set_config("gpu", "search_devices", "gpu0") # #config_value = connect.get_config("gpu", "search_devices") # #assert config_value == 'gpu0' # #relpy = connect.set_config("gpu", "build_index_devices", "gpu0") # #config_value = connect.get_config("gpu", "build_index_devices") # #assert config_value == 'gpu0' # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_gpu_enable_invalid_parent_key(self, connect, collection): # ''' # target: get invalid parent key # method: call get_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config(config+".enable") # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_gpu_enable_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: enable # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Enab_le", "enab_le ", "disable", "true"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("gpu."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_gpu_enable_valid(self, connect, collection): # ''' # target: get enable status # method: call get_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # config_value = connect.get_config("gpu.enable") # assert config_value == "true" or config_value == "false" # # @pytest.mark.tags(CaseLabel.L2) # def test_get_cache_size_invalid_parent_key(self, connect, collection): # ''' # target: get invalid parent key # method: call get_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config(config+".cache_size") # # @pytest.mark.tags(CaseLabel.L2) # def test_get_cache_size_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: cache_size # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Cache_capacity", "cachecapacity"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("gpu."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_cache_size_valid(self, connect, collection): # ''' # target: get cache_size # method: call get_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # config_value = connect.get_config("gpu.cache_size") # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_search_devices_invalid_parent_key(self, connect, collection): # ''' # target: get invalid parent key # method: call get_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config(config+".search_devices") # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_search_devices_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: search_devices # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Search_resources"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("gpu."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_search_devices_valid(self, connect, collection): # ''' # target: get search_devices # method: call get_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # config_value = connect.get_config("gpu.search_devices") # logging.getLogger().info(config_value) # # @pytest.mark.tags(CaseLabel.L2) # def test_get_build_index_devices_invalid_parent_key(self, connect, collection): # ''' # target: get invalid parent key # method: call get_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config(config+".build_index_devices") # # @pytest.mark.tags(CaseLabel.L2) # def test_get_build_index_devices_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: build_index_devices # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Build_index_resources"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("gpu."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_build_index_devices_valid(self, connect, collection): # ''' # target: get build_index_devices # method: call get_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # config_value = connect.get_config("gpu.build_index_devices") # logging.getLogger().info(config_value) # assert config_value # # """ # ****************************************************************** # The following cases are used to test `set_config` function # ****************************************************************** # """ # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_gpu_enable_invalid_parent_key(self, connect, collection): # ''' # target: set invalid parent key # method: call set_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config(config+".enable", "true") # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_gpu_invalid_child_key(self, connect, collection): # ''' # target: set invalid child key # method: call set_config with invalid child_key # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu."+config, "true") # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_gpu_enable_invalid_values(self, connect, collection): # ''' # target: set "enable" param # method: call set_config with invalid child values # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # for i in [-1, -2, 100]: # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu.enable", i) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_gpu_enable_valid(self, connect, collection): # ''' # target: set "enable" param # method: call set_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # valid_configs = ["off", "False", "0", "nO", "on", "True", 1, "yES"] # for config in valid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu.enable", config) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_cache_size_invalid_parent_key(self, connect, collection): # ''' # target: set invalid parent key # method: call set_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config(config+".cache_size", 2) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_cache_size_valid(self, connect, collection): # ''' # target: set cache_size # method: call set_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # relpy = connect.set_config("gpu.cache_size", 2) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_cache_size_invalid_values(self, connect, collection): # ''' # target: set cache_size # method: call set_config with invalid child values # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # self.reset_configs(connect) # for i in [-1, "1\n", "1\t"]: # logging.getLogger().info(i) # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu", "cache_size", i) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_search_devices_invalid_parent_key(self, connect, collection): # ''' # target: set invalid parent key # method: call set_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config(config, "search_devices", "gpu0") # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_search_devices_valid(self, connect, collection): # ''' # target: set search_devices # method: call set_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu", "search_devices", "gpu0") # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_search_devices_invalid_values(self, connect, collection): # ''' # target: set search_devices # method: call set_config with invalid child values # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # for i in [-1, "10", "gpu-1", "gpu0, gpu1", "gpu22,gpu44","gpu10000","gpu 0","-gpu0"]: # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu", "search_devices", i) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_build_index_devices_invalid_parent_key(self, connect, collection): # ''' # target: set invalid parent key # method: call set_config without parent_key: gpu # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # invalid_configs = ["Gpu_resource_config", "gpu resource config", \ # "gpu_resource"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # relpy = connect.set_config(config, "build_index_devices", "gpu0") # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_build_index_devices_valid(self, connect, collection): # ''' # target: set build_index_devices # method: call set_config correctly # expected: status ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu", "build_index_devices", "gpu0") # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_build_index_devices_invalid_values(self, connect, collection): # ''' # target: set build_index_devices # method: call set_config with invalid child values # expected: status not ok # ''' # if str(connect._cmd("mode")) == "CPU": # pytest.skip("Only support GPU mode") # for i in [-1, "10", "gpu-1", "gpu0, gpu1", "gpu22,gpu44","gpu10000","gpu 0","-gpu0"]: # with pytest.raises(Exception) as e: # relpy = connect.set_config("gpu", "build_index_devices", i) # self.reset_configs(connect) # # # class TestNetworkConfig: # """ # ****************************************************************** # The following cases are used to test `get_config` function # ****************************************************************** # """ # @pytest.fixture(scope="function", autouse=True) # def skip_http_check(self, args): # if args["handler"] == "HTTP": # pytest.skip("skip in http mode") # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_address_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: address # expected: status not ok # ''' # invalid_configs = ["Address", "addresses", "address "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("network."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_address_valid(self, connect, collection): # ''' # target: get address # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("network.bind.address") # # @pytest.mark.tags(CaseLabel.L2) # def test_get_port_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: port # expected: status not ok # ''' # invalid_configs = ["Port", "PORT", "port "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("network."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_port_valid(self, connect, collection): # ''' # target: get port # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("network.http.port") # assert config_value # # @pytest.mark.tags(CaseLabel.L2) # def test_get_http_port_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: http.port # expected: status not ok # ''' # invalid_configs = ["webport", "Web_port", "http port "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("network."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_http_port_valid(self, connect, collection): # ''' # target: get http.port # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("network.http.port") # assert config_value # # """ # ****************************************************************** # The following cases are used to test `set_config` function # ****************************************************************** # """ # def gen_valid_timezones(self): # timezones = [] # for i in range(0, 13): # timezones.append("UTC+" + str(i)) # timezones.append("UTC-" + str(i)) # timezones.extend(["UTC+13", "UTC+14"]) # return timezones # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_network_invalid_child_key(self, connect, collection): # ''' # target: set invalid child key # method: call set_config with invalid child_key # expected: status not ok # ''' # with pytest.raises(Exception) as e: # relpy = connect.set_config("network.child_key", 19530) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_address_valid(self, connect, collection): # ''' # target: set address # method: call set_config correctly # expected: status ok, set successfully # ''' # relpy = connect.set_config("network.bind.address", '0.0.0.0') # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_port_valid(self, connect, collection): # ''' # target: set port # method: call set_config correctly # expected: status ok, set successfully # ''' # for valid_port in [1025, 65534, 12345, "19530"]: # relpy = connect.set_config("network.http.port", valid_port) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_port_invalid(self, connect, collection): # ''' # target: set port # method: call set_config with port number out of range(1024, 65535) # expected: status not ok # ''' # for invalid_port in [1024, 65535, "0", "True", "100000"]: # logging.getLogger().info(invalid_port) # with pytest.raises(Exception) as e: # relpy = connect.set_config("network.http.port", invalid_port) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_http_port_valid(self, connect, collection): # ''' # target: set http.port # method: call set_config correctly # expected: status ok, set successfully # ''' # for valid_http_port in [1025, 65534, "12345", 19121]: # relpy = connect.set_config("network.http.port", valid_http_port) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_http_port_invalid(self, connect, collection): # ''' # target: set http.port # method: call set_config with http.port number out of range(1024, 65535) # expected: status not ok # ''' # for invalid_http_port in [1024, 65535, "0", "True", "1000000"]: # with pytest.raises(Exception) as e: # relpy = connect.set_config("network.http.port", invalid_http_port) # # # class TestGeneralConfig: # """ # ****************************************************************** # The following cases are used to test `get_config` function # ****************************************************************** # """ # @pytest.fixture(scope="function", autouse=True) # def skip_http_check(self, args): # if args["handler"] == "HTTP": # pytest.skip("skip in http mode") # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_meta_uri_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: meta_uri # expected: status not ok # ''' # invalid_configs = ["backend_Url", "backend-url", "meta uri "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("general."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_meta_uri_valid(self, connect, collection): # ''' # target: get meta_uri # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("general.meta_uri") # assert config_value # # @pytest.mark.tags(CaseLabel.L2) # def test_get_timezone_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: timezone # expected: status not ok # ''' # invalid_configs = ["time", "time_zone "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("general."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_timezone_valid(self, connect, collection): # ''' # target: get timezone # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("general.timezone") # assert "UTC" in config_value # # """ # ****************************************************************** # The following cases are used to test `set_config` function # ****************************************************************** # """ # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_timezone_invalid(self, connect, collection): # ''' # target: set timezone # method: call set_config with invalid timezone # expected: status not ok # ''' # for invalid_timezone in ["utc++8", "UTC++8"]: # logging.getLogger().info(invalid_timezone) # with pytest.raises(Exception) as e: # relpy = connect.set_config("general.timezone", invalid_timezone) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_general_invalid_child_key(self, connect, collection): # ''' # target: set invalid child key # method: call set_config with invalid child_key # expected: status not ok # ''' # with pytest.raises(Exception) as e: # relpy = connect.set_config("general.child_key", 1) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_meta_uri_valid(self, connect, collection): # ''' # target: set meta_uri # method: call set_config correctly # expected: status ok, set successfully # ''' # relpy = connect.set_config("general.meta_uri", 'sqlite://:@:/') # # # class TestStorageConfig: # """ # ****************************************************************** # The following cases are used to test `get_config` function # ****************************************************************** # """ # @pytest.fixture(scope="function", autouse=True) # def skip_http_check(self, args): # if args["handler"] == "HTTP": # pytest.skip("skip in http mode") # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_path_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: path # expected: status not ok # ''' # invalid_configs = ["Primary_path", "primarypath", "pa_th "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("storage."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_path_valid(self, connect, collection): # ''' # target: get path # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("storage.path") # assert config_value # # @pytest.mark.tags(CaseLabel.L2) # def test_get_auto_flush_interval_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: auto_flush_interval # expected: status not ok # ''' # invalid_configs = ["autoFlushInterval", "auto_flush", "auto_flush interval "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("storage."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_auto_flush_interval_valid(self, connect, collection): # ''' # target: get auto_flush_interval # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("storage.auto_flush_interval") # # """ # ****************************************************************** # The following cases are used to test `set_config` function # ****************************************************************** # """ # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_storage_invalid_child_key(self, connect, collection): # ''' # target: set invalid child key # method: call set_config with invalid child_key # expected: status not ok # ''' # with pytest.raises(Exception) as e: # relpy = connect.set_config("storage.child_key", "") # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_path_valid(self, connect, collection): # ''' # target: set path # method: call set_config correctly # expected: status ok, set successfully # ''' # relpy = connect.set_config("storage.path", '/var/lib/milvus') # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_auto_flush_interval_valid(self, connect, collection): # ''' # target: set auto_flush_interval # method: call set_config correctly # expected: status ok, set successfully # ''' # for valid_auto_flush_interval in [2, 1]: # logging.getLogger().info(valid_auto_flush_interval) # relpy = connect.set_config("storage.auto_flush_interval", valid_auto_flush_interval) # config_value = connect.get_config("storage.auto_flush_interval") # assert config_value == str(valid_auto_flush_interval) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_auto_flush_interval_invalid(self, connect, collection): # ''' # target: set auto_flush_interval # method: call set_config with invalid auto_flush_interval # expected: status not ok # ''' # for invalid_auto_flush_interval in [-1, "1.5", "invalid", "1+2"]: # with pytest.raises(Exception) as e: # relpy = connect.set_config("storage.auto_flush_interval", invalid_auto_flush_interval) # # # class TestMetricConfig: # """ # ****************************************************************** # The following cases are used to test `get_config` function # ****************************************************************** # """ # @pytest.fixture(scope="function", autouse=True) # def skip_http_check(self, args): # if args["handler"] == "HTTP": # pytest.skip("skip in http mode") # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_enable_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: enable # expected: status not ok # ''' # invalid_configs = ["enablemonitor", "Enable_monitor", "en able "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("metric."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_enable_valid(self, connect, collection): # ''' # target: get enable # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("metric.enable") # assert config_value # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_address_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: address # expected: status not ok # ''' # invalid_configs = ["Add ress", "addresses", "add ress "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("metric."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_address_valid(self, connect, collection): # ''' # target: get address # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("metric.address") # assert config_value # # @pytest.mark.tags(CaseLabel.L2) # def test_get_port_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: port # expected: status not ok # ''' # invalid_configs = ["Po_rt", "PO_RT", "po_rt "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("metric."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_port_valid(self, connect, collection): # ''' # target: get port # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("metric.port") # assert config_value # # """ # ****************************************************************** # The following cases are used to test `set_config` function # ****************************************************************** # """ # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_metric_invalid_child_key(self, connect, collection): # ''' # target: set invalid child key # method: call set_config with invalid child_key # expected: status not ok # ''' # with pytest.raises(Exception) as e: # relpy = connect.set_config("metric.child_key", 19530) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_enable_valid(self, connect, collection): # ''' # target: set enable # method: call set_config correctly # expected: status ok, set successfully # ''' # for valid_enable in ["false", "true"]: # relpy = connect.set_config("metric.enable", valid_enable) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_address_valid(self, connect, collection): # ''' # target: set address # method: call set_config correctly # expected: status ok, set successfully # ''' # relpy = connect.set_config("metric.address", '127.0.0.1') # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_port_valid(self, connect, collection): # ''' # target: set port # method: call set_config correctly # expected: status ok, set successfully # ''' # for valid_port in [1025, 65534, "19530", "9091"]: # relpy = connect.set_config("metric.port", valid_port) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_port_invalid(self, connect, collection): # ''' # target: set port # method: call set_config with port number out of range(1024, 65535), or same as http.port number # expected: status not ok # ''' # for invalid_port in [1024, 65535, "0", "True", "100000"]: # with pytest.raises(Exception) as e: # relpy = connect.set_config("metric.port", invalid_port) # # # class TestWALConfig: # """ # ****************************************************************** # The following cases are used to test `get_config` function # ****************************************************************** # """ # @pytest.fixture(scope="function", autouse=True) # def skip_http_check(self, args): # if args["handler"] == "HTTP": # pytest.skip("skip in http mode") # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_enable_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: enable # expected: status not ok # ''' # invalid_configs = ["enabled", "Enab_le", "enable_"] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("wal."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_enable_valid(self, connect, collection): # ''' # target: get enable # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("wal.enable") # assert config_value # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_recovery_error_ignore_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: recovery_error_ignore # expected: status not ok # ''' # invalid_configs = ["recovery-error-ignore", "Recovery error_ignore", "recoveryxerror_ignore "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("wal."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_recovery_error_ignore_valid(self, connect, collection): # ''' # target: get recovery_error_ignore # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("wal.recovery_error_ignore") # assert config_value # # @pytest.mark.tags(CaseLabel.L2) # def test_get_buffer_size_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: buffer_size # expected: status not ok # ''' # invalid_configs = ["buffersize", "Buffer size", "buffer size "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("wal."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_buffer_size_valid(self, connect, collection): # ''' # target: get buffer_size # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("wal.buffer_size") # assert config_value # # @pytest.mark.tags(CaseLabel.L2) # def test_get_wal_path_invalid_child_key(self, connect, collection): # ''' # target: get invalid child key # method: call get_config without child_key: wal_path # expected: status not ok # ''' # invalid_configs = ["wal", "Wal_path", "wal_path "] # for config in invalid_configs: # with pytest.raises(Exception) as e: # config_value = connect.get_config("wal."+config) # # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_get_wal_path_valid(self, connect, collection): # ''' # target: get wal_path # method: call get_config correctly # expected: status ok # ''' # config_value = connect.get_config("wal.path") # assert config_value # # """ # ****************************************************************** # The following cases are used to test `set_config` function # ****************************************************************** # """ # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_wal_invalid_child_key(self, connect, collection): # ''' # target: set invalid child key # method: call set_config with invalid child_key # expected: status not ok # ''' # with pytest.raises(Exception) as e: # relpy = connect.set_config("wal.child_key", 256) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_enable_valid(self, connect, collection): # ''' # target: set enable # method: call set_config correctly # expected: status ok, set successfully # ''' # for valid_enable in ["false", "true"]: # relpy = connect.set_config("wal.enable", valid_enable) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_recovery_error_ignore_valid(self, connect, collection): # ''' # target: set recovery_error_ignore # method: call set_config correctly # expected: status ok, set successfully # ''' # for valid_recovery_error_ignore in ["false", "true"]: # relpy = connect.set_config("wal.recovery_error_ignore", valid_recovery_error_ignore) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # def test_set_buffer_size_valid_A(self, connect, collection): # ''' # target: set buffer_size # method: call set_config correctly # expected: status ok, set successfully # ''' # for valid_buffer_size in ["64MB", "128MB", "4096MB", "1000MB", "256MB"]: # relpy = connect.set_config("wal.buffer_size", valid_buffer_size) # # @pytest.mark.skip(reason="overwrite config file is not supported in ci yet.") # @pytest.mark.timeout(CONFIG_TIMEOUT) # def test_set_wal_path_valid(self, connect, collection, args): # ''' # target: set wal_path # method: call set_config correctly # expected: status ok, set successfully # ''' # relpy = connect.set_config("wal.path", "/var/lib/milvus/wal")