diff --git a/README.md b/README.md index 0c6f27e4..f0ea8b61 100644 --- a/README.md +++ b/README.md @@ -506,7 +506,7 @@ This playbook will perform the following actions: * Search for errors in all MinIO logs across all [hosts] / [servers] * Search for errors in all target logs across all [targets] / [servers] -#### playbooks/deploy_datamover.yml +#### playbooks/deploy_client.yml Execute this playbook to deploy DSS Client, including datamover, client library, and their dependencies. Artifacts are deployed to hosts under the [clients] group. @@ -539,7 +539,7 @@ This path can be changed by setting the `coredump_dir` var. see: /group_vars/all Execute this playbook to download artifacts from the dss-artifacts S3 bucket. By default, this playbook will download artifacts from the public AWS S3 dss-artifacts bucket (public HTTP URL). -The bucket URL can be overridden with the public URL of any S3-compatible bucket (eg: MinIO, DSS). +The bucket can be overridden with the public URL of any S3-compatible bucket (eg: MinIO, DSS) Additionally, the branch name can also be overridden. #### playbooks/format_redeploy_dss_software.yml @@ -776,7 +776,7 @@ iperf can be tuned by configuring the following vars (default values shown): #### playbooks/test_nkv_test_cli.yml -Perform a basic nkv_test_cli test and report observed throughput. +By default, perform a basic nkv_test_cli test and report observed throughput. This playbook will execute a suite of nkv_test_cli tests in order: 1. Put @@ -787,17 +787,29 @@ This playbook will execute a suite of nkv_test_cli tests in order: Upon test completion, throughput is reported for PUT and GET. +Optionally, this playbook can be used to execute a suite of regression test cases. +This can be done by changing the value of `nkv_test_cli_test` from `smoke` to `suite`. +The default set of test cases can be found in `roles/test_nkv_test_cli/vars/suite001.yml`. +You can create additional test suites using this file as a template. +You can specify your custom test suite by setting `nkv_test_cli_suite` to `your-test` (default: `suite001`). + nkv_test_cli can be tuned by configuring the following vars (default values shown): -| Var name | Default | Description | -| ------------------------------ | ------- | --------------------------------------------------------------------------- | -| nkv_test_cli_keysize | 60 | Key size in bytes. Max size = 255 | -| nkv_test_cli_valsize | 1048576 | Value size in bytes. Max size = 1048576 | -| nkv_test_cli_threads | 128 | Number of threads | -| nkv_test_cli_objects | 2000 | Number of objects for each thread (total objects = objects x threads) | -| nkv_test_cli_vm_objects | 100 | Number of objects if host is a VM (default reduced due to lower throughput) | -| nkv_test_cli_async_timeout | 600 | Async timeout in seconds (increase for larger dataset, or slow throughput) | -| nkv_test_cli_async_retry_delay | 5 | Async retry delay in seconds | +| Var name | Default | Description | +| ------------------------------ | ------------ | ------------------------------------------------------------------------------------- | +| nkv_test_cli_port | 1030 | Port used by nkv_test_cli to communicate with subsystem | +| nkv_test_cli_prefix | meta/ansible | KV prefix used to write object. Must beging with `meta/` | +| nkv_test_cli_keysize | 60 | Key size in bytes. Max size = 255 | +| nkv_test_cli_valsize | 1048576 | Value size in bytes. Max size = 1048576 | +| nkv_test_cli_threads | 128 | Number of threads | +| nkv_test_cli_objects | 2000 | Number of objects for each thread (total objects = objects x threads) | +| nkv_test_cli_async_timeout | 600 | Async timeout in seconds (increase for larger dataset, or slow throughput) | +| nkv_test_cli_async_retry_delay | 5 | Async retry delay in seconds | +| nkv_test_cli_test | smoke | Run standard "smoke" test. Change to "suite" to run regression test suite | +| nkv_test_cli_suite | suite001 | Name of test suite to run. Corresponds to suite vars in roles/test_nkv_test_cli/vars/ | +| nkv_test_cli_integrity | false | Run nkv_test_cli in data integrity mode | +| nkv_test_cli_mixed_io | false | Run nkv_test_cli with "small meta io before doing a big io" | +| nkv_test_cli_simulate_minio | false | Run nkv_test_cli with "IO pattern similar to MinIO" | #### playbooks/test_ping.yml diff --git a/group_vars/all.yml b/group_vars/all.yml index c3b12665..4ca75351 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -225,13 +225,20 @@ # iperf_duration: 10 ### nkv_test_cli defaults +# nkv_test_cli_port: 1030 +# nkv_test_cli_prefix: meta/ansible # nkv_test_cli_keysize: 60 # nkv_test_cli_valsize: 1048576 # nkv_test_cli_threads: 128 # nkv_test_cli_objects: 2000 -# nkv_test_cli_vm_objects: 100 # nkv_test_cli_async_timeout: 600 # nkv_test_cli_async_retry_delay: 5 +# nkv_test_cli_test: smoke +# nkv_test_cli_test: suite +# nkv_test_cli_suite: suite001 +# nkv_test_cli_integrity: false +# nkv_test_cli_mixed_io: false +# nkv_test_cli_simulate_minio: false ### EPEL defaults # skip_epel: false diff --git a/playbooks/test_nkv_test_cli.yml b/playbooks/test_nkv_test_cli.yml index 828c0280..e38559d6 100644 --- a/playbooks/test_nkv_test_cli.yml +++ b/playbooks/test_nkv_test_cli.yml @@ -33,7 +33,7 @@ # # #### playbooks/test_nkv_test_cli.yml # -# Perform a basic nkv_test_cli test and report observed throughput. +# By default, perform a basic nkv_test_cli test and report observed throughput. # This playbook will execute a suite of nkv_test_cli tests in order: # # 1. Put @@ -44,17 +44,29 @@ # # Upon test completion, throughput is reported for PUT and GET. # +# Optionally, this playbook can be used to execute a suite of regression test cases. +# This can be done by changing the value of `nkv_test_cli_test` from `smoke` to `suite`. +# The default set of test cases can be found in `roles/test_nkv_test_cli/vars/suite001.yml`. +# You can create additional test suites using this file as a template. +# You can specify your custom test suite by setting `nkv_test_cli_suite` to `your-test` (default: `suite001`). +# # nkv_test_cli can be tuned by configuring the following vars (default values shown): # -# | Var name | Default | Description | -# | ------------------------------ | ------- | --------------------------------------------------------------------------- | -# | nkv_test_cli_keysize | 60 | Key size in bytes. Max size = 255 | -# | nkv_test_cli_valsize | 1048576 | Value size in bytes. Max size = 1048576 | -# | nkv_test_cli_threads | 128 | Number of threads | -# | nkv_test_cli_objects | 2000 | Number of objects for each thread (total objects = objects x threads) | -# | nkv_test_cli_vm_objects | 100 | Number of objects if host is a VM (default reduced due to lower throughput) | -# | nkv_test_cli_async_timeout | 600 | Async timeout in seconds (increase for larger dataset, or slow throughput) | -# | nkv_test_cli_async_retry_delay | 5 | Async retry delay in seconds | +# | Var name | Default | Description | +# | ------------------------------ | ------------ | ------------------------------------------------------------------------------------- | +# | nkv_test_cli_port | 1030 | Port used by nkv_test_cli to communicate with subsystem | +# | nkv_test_cli_prefix | meta/ansible | KV prefix used to write object. Must beging with `meta/` | +# | nkv_test_cli_keysize | 60 | Key size in bytes. Max size = 255 | +# | nkv_test_cli_valsize | 1048576 | Value size in bytes. Max size = 1048576 | +# | nkv_test_cli_threads | 128 | Number of threads | +# | nkv_test_cli_objects | 2000 | Number of objects for each thread (total objects = objects x threads) | +# | nkv_test_cli_async_timeout | 600 | Async timeout in seconds (increase for larger dataset, or slow throughput) | +# | nkv_test_cli_async_retry_delay | 5 | Async retry delay in seconds | +# | nkv_test_cli_test | smoke | Run standard "smoke" test. Change to "suite" to run regression test suite | +# | nkv_test_cli_suite | suite001 | Name of test suite to run. Corresponds to suite vars in roles/test_nkv_test_cli/vars/ | +# | nkv_test_cli_integrity | false | Run nkv_test_cli in data integrity mode | +# | nkv_test_cli_mixed_io | false | Run nkv_test_cli with "small meta io before doing a big io" | +# | nkv_test_cli_simulate_minio | false | Run nkv_test_cli with "IO pattern similar to MinIO" | - name: Validate ansible versions and dependencies hosts: localhost diff --git a/roles/test_nkv_test_cli/defaults/main.yml b/roles/test_nkv_test_cli/defaults/main.yml index b23e88f5..47925f20 100644 --- a/roles/test_nkv_test_cli/defaults/main.yml +++ b/roles/test_nkv_test_cli/defaults/main.yml @@ -33,15 +33,24 @@ dss_dir: /usr/dss nkv_sdk_dir: "{{ dss_dir }}/nkv-sdk" nkv_sdk_bin_dir: "{{ nkv_sdk_dir }}/bin" +nkv_sdk_conf_dir: "{{ nkv_sdk_dir }}/conf" +dss_log_dir: /var/log/dss ### nkv_test_cli defaults +nkv_test_cli_port: 1030 +nkv_test_cli_prefix: meta/ansible nkv_test_cli_keysize: 60 nkv_test_cli_valsize: 1048576 nkv_test_cli_threads: 128 -nkv_test_cli_objects: 2000 -nkv_test_cli_vm_objects: 100 +nkv_test_cli_objects_phys: 2000 +nkv_test_cli_vm_objects_vm: 100 nkv_test_cli_async_timeout: 600 nkv_test_cli_async_retry_delay: 5 +nkv_test_cli_test: smoke +nkv_test_cli_suite: suite001 +nkv_test_cli_integrity: false +nkv_test_cli_mixed_io: false +nkv_test_cli_simulate_minio: false ### VLAN defaults rocev2_vlans: diff --git a/roles/test_nkv_test_cli/tasks/case.yml b/roles/test_nkv_test_cli/tasks/case.yml new file mode 100644 index 00000000..5e38f41e --- /dev/null +++ b/roles/test_nkv_test_cli/tasks/case.yml @@ -0,0 +1,17 @@ +--- + +- name: "Execute test step: {{ test_case.id }}: {{ test_case.description }}" + ansible.builtin.include_tasks: nkv_test_cli.yml + vars: + operation: "{{ lookup('vars', 'test_nkv_test_cli_' + step) }}" + nkv_test_cli_integrity: "{{ test_case.integrity | d(false) }}" + nkv_test_cli_mixed_io: "{{ test_case.mixed_io | d(false) }}" + nkv_test_cli_simulate_minio: "{{ test_case.simulate_minio | d(false) }}" + nkv_test_cli_keysize: "{{ test_case.keysize | d(suite_keysize) }}" + nkv_test_cli_valsize: "{{ test_case.valsize | d(suite_valsize) }}" + nkv_test_cli_objects: "{{ test_case.objects | d(suite_objects) }}" + nkv_test_cli_threads: "{{ test_case.threads | d(suite_threads) }}" + assert_num_keys: "{{ test_case.expected_list_keys | d(test_case.threads | d(suite_threads) | int * test_case.objects | d(suite_objects) | int) }}" + loop: "{{ test_case.steps }}" + loop_control: + loop_var: step diff --git a/roles/test_nkv_test_cli/tasks/main.yml b/roles/test_nkv_test_cli/tasks/main.yml index f83f1994..d9b4a6e7 100644 --- a/roles/test_nkv_test_cli/tasks/main.yml +++ b/roles/test_nkv_test_cli/tasks/main.yml @@ -34,56 +34,27 @@ target_hostnames: "{{ (groups['servers'] | d([]) + groups['targets'] | d([])) | unique }}" host_hostnames: "{{ (groups['servers'] | d([]) + groups['hosts'] | d([])) | unique }}" -- name: Get RoCEv2 IP lists and NUMA - ansible.builtin.include_tasks: get_ip_numa.yml - when: inventory_hostname in host_hostnames - -- name: Execute nkv_test_cli put - ansible.builtin.include_tasks: nkv_test_cli.yml - vars: - operation: "{{ test_nkv_test_cli_put }}" - when: inventory_hostname in host_hostnames - -- name: Set put_throughput +- name: Set host_id var from inventory ansible.builtin.set_fact: - put_throughput: "{{ combined_throughput }}" - when: inventory_hostname in host_hostnames + host_id: "{{ ansible_loop.index }}" + when: > + item == inventory_hostname + loop: "{{ ansible_play_hosts }}" + loop_control: + extended: true -- name: Start Compaction - ansible.builtin.include_role: - name: start_compaction - when: - - inventory_hostname in target_hostnames - - dss_target_mode is search('kv_block') - -- name: Execute nkv_test_cli get - ansible.builtin.include_tasks: nkv_test_cli.yml - vars: - operation: "{{ test_nkv_test_cli_get }}" - when: inventory_hostname in host_hostnames - -- name: Set get_throughput - ansible.builtin.set_fact: - get_throughput: "{{ combined_throughput }}" - when: inventory_hostname in host_hostnames - -- name: Execute nkv_test_cli delete - ansible.builtin.include_tasks: nkv_test_cli.yml - vars: - operation: "{{ test_nkv_test_cli_delete }}" +- name: Get RoCEv2 IP lists and NUMA + ansible.builtin.include_tasks: get_ip_numa.yml when: inventory_hostname in host_hostnames -- name: Start Compaction - ansible.builtin.include_role: - name: start_compaction - when: - - inventory_hostname in target_hostnames - - dss_target_mode is search('kv_block') - -- name: Print throughput - ansible.builtin.debug: - msg: | - Put throughput: {{ '%0.2f' | format(put_throughput | float) }} GB/s - Get throughput: {{ '%0.2f' | format(get_throughput | float) }} GB/s - run_once: true - when: inventory_hostname in host_hostnames +- name: Create log dir + ansible.builtin.file: + path: "{{ dss_log_dir }}" + state: directory + mode: 0755 + owner: "{{ ansible_effective_user_id }}" + group: "{{ ansible_effective_group_id }}" + become: true + +- name: Execute nkv_test_cli test + ansible.builtin.include_tasks: "{{ nkv_test_cli_test }}.yml" diff --git a/roles/test_nkv_test_cli/tasks/nkv_test_cli.yml b/roles/test_nkv_test_cli/tasks/nkv_test_cli.yml index 8b799d91..b7f403d7 100644 --- a/roles/test_nkv_test_cli/tasks/nkv_test_cli.yml +++ b/roles/test_nkv_test_cli/tasks/nkv_test_cli.yml @@ -29,36 +29,56 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- +- name: Set nkv_test_cli_objects default - vm + ansible.builtin.set_fact: + nkv_test_cli_objects: "{{ nkv_test_cli_objects | d(nkv_test_cli_vm_objects_vm) }}" + when: ansible_virtualization_role == 'guest' + +- name: Set nkv_test_cli_objects default - physical + ansible.builtin.set_fact: + nkv_test_cli_objects: "{{ nkv_test_cli_objects | d(nkv_test_cli_objects_phys) }}" + when: ansible_virtualization_role != 'guest' + - name: Execute nkv_test_cli command - ansible.builtin.command: "{{ nkv_test_cli_command }}" + ansible.builtin.shell: "{{ nkv_test_cli_command | regex_replace('[\\r\\n\\t]+','') }}" args: chdir: "{{ nkv_sdk_bin_dir }}" loop: "{{ rocev2_numa_prefix_list }}" loop_control: loop_var: vlan - label: "{{ nkv_test_cli_command }}" + label: "{{ nkv_test_cli_command | regex_replace('[\\r\\n\\t]+','') }}" extended: true vars: nkv_test_cli_command: >- - /usr/bin/python2 {{ nkv_sdk_bin_dir }}/dss_host.py - verify_nkv_cli - --conf nkv_config_{{ vlan.ip }}.json - --addr {{ vlan.ipv4_prefix }} - --numa {{ vlan.numa }} - --workload {{ operation }} - --keysize {{ nkv_test_cli_keysize }} - --valsize {{ nkv_test_cli_valsize }} - --threads {{ nkv_test_cli_threads }} - --numobj - {% if ansible_virtualization_role == 'guest' -%} - {{ nkv_test_cli_vm_objects }} - {% else -%} - {{ nkv_test_cli_objects }} + numactl -N {{ vlan.numa }} -m {{ vlan.numa }} + {{ nkv_sdk_bin_dir }}/nkv_test_cli + -c {{ nkv_sdk_conf_dir }}/nkv_config_{{ vlan.ip }}.json + -i {{ inventory_hostname }} + -p {{ nkv_test_cli_port }} + -b {{ nkv_test_cli_prefix }}/host{{ host_id }}/test{{ ansible_loop.index0 }}/ + -o {{ operation }} + {% if operation != '4' -%} + -t {{ nkv_test_cli_threads }} + -k {{ nkv_test_cli_keysize }} + -v {{ nkv_test_cli_valsize }} + -n {{ nkv_test_cli_objects }} + {% endif %} + {% if nkv_test_cli_integrity | bool -%} + -m 1 {% endif %} + {% if nkv_test_cli_mixed_io | bool -%} + -d 1 + {% endif %} + {% if nkv_test_cli_simulate_minio | bool -%} + -g 1 + {% endif %} + 2>&1 | tee -a {{ dss_log_dir }}/nkv_test_cli-test{{ ansible_loop.index0 }}.log async: "{{ nkv_test_cli_async_timeout }}" poll: 0 register: nkv_test_cli_async become: true + tags: + - skip_ansible_lint - name: Check async nkv_test_cli command ansible.builtin.async_status: @@ -70,7 +90,7 @@ loop: "{{ nkv_test_cli_async.results }}" loop_control: loop_var: async_task - label: "{{ async_task.vlan.ipv4_prefix }}" + label: "{{ async_task.vlan.ip }}" become: true - name: Assert async nkv_test_cli completion @@ -81,7 +101,32 @@ loop: "{{ async_results.results }}" loop_control: loop_var: async_result - label: "{{ async_result.cmd | join(' ') }}" + label: "{{ async_result.cmd | regex_replace('[\\r\\n\\t]+','') }}" + +- name: Check nkv_test_cli output for errors + ansible.builtin.debug: + msg: "Checking for errors in nkv_test_cli output..." + loop: "{{ async_results.results }}" + loop_control: + loop_var: async_result + label: "{{ async_result.cmd | regex_replace('[\\r\\n\\t]+','') }}" + failed_when: >- + async_result.stdout is search('Container Path down') or + async_result.stdout is search('In simulated minio mode, number of drives should be at least 4') or + async_result.stdout is search('Lock tuple failed with error') or + async_result.stdout is search('NKV lock KVP call failed') or + async_result.stdout is search('NKV lock operation failed') or + async_result.stdout is search('NKV open failed') or + async_result.stdout is search('NKV RDD chunked Get KVP call failed') or + async_result.stdout is search('NKV RDD Retrieve KVP call failed') or + async_result.stdout is search('NKV Retrieve KVP call failed') or + async_result.stdout is search('NKV Store KVP call failed') or + async_result.stdout is search('NKV Store KVP checksum call failed') or + async_result.stdout is search('NKV store operation failed') or + async_result.stdout is search('Opening path failed') or + async_result.stdout is search('Path open failed') or + async_result.stdout is search('store tuple failed with error') or + async_result.stdout is search('Unsupported operation provided') - name: Initialize throughput vars ansible.builtin.set_fact: @@ -90,14 +135,15 @@ - name: Set throughput ansible.builtin.set_fact: - throughput: "{{ (throughput | float) + (async_result.stdout | regex_search(nkv_re, '\\1') | first | float) }}" + throughput: "{{ (throughput | float) + (async_result.stdout | regex_search(nkv_re, '\\1') | first | float / 1000) }}" vars: nkv_re: >- - BW = ([^ ]+) GB/s + Throughput = ([^ ]+) MB/sec loop: "{{ async_results.results }}" loop_control: loop_var: async_result - label: "{{ async_result.cmd | join(' ') }}" + label: "{{ async_result.async_task.vlan.ip }}" + when: async_result.stdout | regex_search(nkv_re, '\\1') - name: Set combined_throughput ansible.builtin.set_fact: @@ -106,3 +152,20 @@ loop_control: loop_var: host run_once: true + +- name: Assert total_num_keys for list operation + ansible.builtin.assert: + that: expected_total_num_keys | int == async_result.stdout | regex_search(nkv_re, '\\1') | first | int + fail_msg: "Expected {{ expected_total_num_keys }} - found {{ async_result.stdout | regex_search(nkv_re, '\\1') | first | int }}" + quiet: true + vars: + nkv_re: >- + total_num_keys = ([^ \r\n]+) + expected_total_num_keys: "{{ assert_num_keys | d(nkv_test_cli_threads | int * nkv_test_cli_objects | int) }}" + loop: "{{ async_results.results }}" + loop_control: + loop_var: async_result + label: "{{ async_result.async_task.vlan.ip }}" + when: + - operation == '4' + - async_result.stdout | regex_search(nkv_re, '\\1') diff --git a/roles/test_nkv_test_cli/tasks/smoke.yml b/roles/test_nkv_test_cli/tasks/smoke.yml new file mode 100644 index 00000000..6bf81921 --- /dev/null +++ b/roles/test_nkv_test_cli/tasks/smoke.yml @@ -0,0 +1,52 @@ +# Smoke test to validate cluster throughput with nkv_test_cli (the teste that this play executes by default) +--- + +- name: Execute nkv_test_cli put + include_tasks: nkv_test_cli.yml + vars: + operation: "{{ test_nkv_test_cli_put }}" + when: inventory_hostname in host_hostnames + +- name: Set put_throughput + set_fact: + put_throughput: "{{ combined_throughput }}" + when: inventory_hostname in host_hostnames + +- name: Start Compaction + include_role: + name: start_compaction + when: + - inventory_hostname in target_hostnames + - dss_target_mode is search('kv_block') + +- name: Execute nkv_test_cli get + include_tasks: nkv_test_cli.yml + vars: + operation: "{{ test_nkv_test_cli_get }}" + when: inventory_hostname in host_hostnames + +- name: Set get_throughput + set_fact: + get_throughput: "{{ combined_throughput }}" + when: inventory_hostname in host_hostnames + +- name: Execute nkv_test_cli delete + include_tasks: nkv_test_cli.yml + vars: + operation: "{{ test_nkv_test_cli_delete }}" + when: inventory_hostname in host_hostnames + +- name: Start Compaction + include_role: + name: start_compaction + when: + - inventory_hostname in target_hostnames + - dss_target_mode is search('kv_block') + +- name: Print throughput + debug: + msg: | + Put throughput: {{ '%0.2f' | format(put_throughput | float) }} GB/s + Get throughput: {{ '%0.2f' | format(get_throughput | float) }} GB/s + run_once: true + when: inventory_hostname in host_hostnames diff --git a/roles/test_nkv_test_cli/tasks/suite.yml b/roles/test_nkv_test_cli/tasks/suite.yml new file mode 100644 index 00000000..5a0e9b11 --- /dev/null +++ b/roles/test_nkv_test_cli/tasks/suite.yml @@ -0,0 +1,25 @@ +--- + +- name: Include vars + ansible.builtin.include_vars: "{{ nkv_test_cli_suite }}.yml" + +- name: Set suit_key var + ansible.builtin.set_fact: + suite_key: "{{ nkv_test_cli_prefix }}" + suite_keysize: "{{ nkv_test_cli_keysize }}" + suite_objects: "{{ nkv_test_cli_objects }}" + suite_valsize: "{{ nkv_test_cli_valsize }}" + suite_threads: "{{ nkv_test_cli_threads }}" + +- name: Executing Test suite + debug: + msg: "Test suite: {{ nkv_test_cli_suite }}" + run_once: true + +- name: "Execute test case" + include_tasks: case.yml + loop: "{{ test_cases }}" + vars: + test_case: "{{ item }}" + nkv_test_cli_prefix: "{{ suite_key }}/{{ nkv_test_cli_suite }}/{{ test_case.id }}" + when: inventory_hostname in host_hostnames diff --git a/roles/test_nkv_test_cli/vars/main.yml b/roles/test_nkv_test_cli/vars/main.yml index 1077d5f0..6a7a00f9 100644 --- a/roles/test_nkv_test_cli/vars/main.yml +++ b/roles/test_nkv_test_cli/vars/main.yml @@ -32,3 +32,12 @@ test_nkv_test_cli_put: 0 test_nkv_test_cli_get: 1 test_nkv_test_cli_delete: 2 +test_nkv_test_cli_put_get_delete: 3 +test_nkv_test_cli_list: 4 +test_nkv_test_cli_put_list: 5 +test_nkv_test_cli_lock_unlock: 6 +test_nkv_test_cli_chunked_put: 7 +test_nkv_test_cli_rdd_get: 8 +test_nkv_test_cli_rdd_chunked_get: 9 +test_nkv_test_cli_chunked_del: 10 +test_nkv_test_cli_rdd_put: 11 diff --git a/roles/test_nkv_test_cli/vars/suite001.yml b/roles/test_nkv_test_cli/vars/suite001.yml new file mode 100644 index 00000000..a36fa21e --- /dev/null +++ b/roles/test_nkv_test_cli/vars/suite001.yml @@ -0,0 +1,99 @@ +--- + +# Default nkv_test_cli values to be used by all tests +nkv_test_cli_keysize: 60 +nkv_test_cli_valsize: 1048576 +nkv_test_cli_threads: 6 +nkv_test_cli_objects: 100 + +# List of test cases to execute. +# Test cases must include: +# - id: ID of test case to run - may be a JIRA ticket # in case of regression/defect +# - description: Plain-English description of test case (objective of the test case) +# - steps: A list of steps to perform. Can be one of the following in any order: +# - put +# - get +# - delete +# - put_get_delete +# - list +# - put_list +# - lock_unlock +# - chunked_put +# - rdd_get +# - rdd_chunked_get +# - chunked_del +# - rdd_put +# Note: +# - list operation will validate the number of objects at the unique key prefix of the test case. +# It is expected to perform "list" after "put" to validate keys exist. +# By default it is asserted that "list" will find a number of keys equaling threads x objects. +# If a different number of keys is expected (eg: list before put, list after delete) you can +# specify the expected num. keys by setting "expected_list_keys" for each test case. +# Optional settings for each test case: +# - keysize: key size of each object in bytes (min: 1, max: 1024) +# - valsize: value size of each object in bytes (min: 1, max: 1048576) +# - threads: number of threads +# - objects: number of objects to write (per thread) +# - integrity: use data-integrity test +# - mixed_io: small meta io before doing a big io +# - simulate_minio: generate IO pattern similar to MinIO +# - assert_num_keys: Expected number of keys to find during list operation (default: num. objects x num. threads) + +test_cases: + # - id: MIN-1761 + # description: put single object with 255-byte key + # keysize: 255 + # threads: 1 + # objects: 1 + # steps: + # - put + - id: N001 + description: put and list + steps: + - put + - list + - id: N002 + description: put, delete, list + expected_list_keys: 0 + steps: + - put + - delete + - list + - id: N003 + description: put, get, delete objects with data integrity check + integrity: true + steps: + - put_get_delete + - id: N004 + description: mixed_io testing + mixed_io: true + steps: + - put + - id: N005 + description: simulate minio io testing + simulate_minio: true + steps: + - put + - id: N006a-N007a + description: large key test - put and get objects with 160-byte key + keysize: 160 + steps: + - put + - get + # - id: N006b-N007b + # description: large key test - put and get objects with 255-byte key + # keysize: 255 + # steps: + # - put + # - get + - id: N006c-N007c + description: large key test - put and get objects with 1024-byte key + keysize: 1024 + steps: + - put + - get + - id: N008 + description: chunked put and del + steps: + - chunked_put + - chunked_del diff --git a/roles/test_nkv_test_cli/vars/suite002.yml b/roles/test_nkv_test_cli/vars/suite002.yml new file mode 100644 index 00000000..38d128b9 --- /dev/null +++ b/roles/test_nkv_test_cli/vars/suite002.yml @@ -0,0 +1,26 @@ +--- + +# suite002 - Test suite targeting gen2 specific nkv_test_cli features +# To use - make sure cluster is deployed with `gen2=true` + +nkv_test_cli_keysize: 60 +nkv_test_cli_valsize: 1048576 +nkv_test_cli_threads: 32 +nkv_test_cli_objects: 1000 + +test_cases: + - id: G2001 + description: RDD put and get + steps: + - rdd_put + - rdd_get + - id: G2002 + description: Chunked put then RDD chunked get + steps: + - chunked_put + - rdd_chunked_get + - id: G2003 + description: Chunked put then chunked delete + steps: + - chunked_put + - chunked_del