X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/59ee5d1b20c9d4b06c194b33b781d353d8e0ba3c..de4d6a927c41f417790fe4274eb56df4d487a8a4:/sdk/cli/test/test_arv-get.rb diff --git a/sdk/cli/test/test_arv-get.rb b/sdk/cli/test/test_arv-get.rb index 76b110a2a7..2e2bba562f 100644 --- a/sdk/cli/test/test_arv-get.rb +++ b/sdk/cli/test/test_arv-get.rb @@ -5,7 +5,7 @@ require 'yaml' # Black box tests for 'arv get' command. class TestArvGet < Minitest::Test # UUID for an Arvados object that does not exist - NON_EXISTANT_OBJECT_UUID = "qr1hi-tpzed-p8yk1lihjsgwew0" + NON_EXISTENT_OBJECT_UUID = "zzzzz-zzzzz-zzzzzzzzzzzzzzz" # Name of field of Arvados object that can store any (textual) value STORED_VALUE_FIELD_NAME = "name" # Name of UUID field of Arvados object @@ -13,55 +13,55 @@ class TestArvGet < Minitest::Test # Name of an invalid field of Arvados object INVALID_FIELD_NAME = "invalid" - # Tests that a valid Arvados object can be retrieved in JSON format using: - # `arv get [uuid] --format json`. - def test_get_valid_object_json_format() - stored_value = __method__ + # Tests that a valid Arvados object can be retrieved in a supported format + # using: `arv get [uuid]`. Given all other `arv foo` commands return JSON + # when no format is specified, JSON should be expected in this case. + def test_get_valid_object_no_format_specified + stored_value = __method__.to_s uuid = create_arv_object_with_value(stored_value) out, err = capture_subprocess_io do - arv_get(uuid, '--format', 'json') + assert(arv_get_default(uuid)) end - assert_empty(err) + assert_empty(err, "Error text not expected: '#{err}'") arv_object = parse_json_arv_object(out) assert(has_field_with_value(arv_object, STORED_VALUE_FIELD_NAME, stored_value)) end - # Tests that a valid Arvados object can be retrieved in YAML format using: - # `arv get [uuid] --format yaml`. - def test_get_valid_object_yaml_format() - stored_value = __method__ + # Tests that a valid Arvados object can be retrieved in JSON format using: + # `arv get [uuid] --format json`. + def test_get_valid_object_json_format_specified + stored_value = __method__.to_s uuid = create_arv_object_with_value(stored_value) out, err = capture_subprocess_io do - arv_get(uuid, '--format', 'yaml') + assert(arv_get_json(uuid)) end - assert_empty(err) - arv_object = parse_yaml_arv_object(out) + assert_empty(err, "Error text not expected: '#{err}'") + arv_object = parse_json_arv_object(out) assert(has_field_with_value(arv_object, STORED_VALUE_FIELD_NAME, stored_value)) end - # Tests that a valid Arvados object can be retrieved in a supported format - # using: `arv get [uuid]`. Given all other `arv foo` commands return JSON - # when no format is specified, JSON should be expected in this case. - def test_get_valid_object_no_format() - stored_value = __method__ + # Tests that a valid Arvados object can be retrieved in YAML format using: + # `arv get [uuid] --format yaml`. + def test_get_valid_object_yaml_format_specified + stored_value = __method__.to_s uuid = create_arv_object_with_value(stored_value) out, err = capture_subprocess_io do - arv_get(uuid) + assert(arv_get_yaml(uuid)) end - assert_empty(err) - arv_object = parse_json_arv_object(out) + assert_empty(err, "Error text not expected: '#{err}'") + arv_object = parse_yaml_arv_object(out) assert(has_field_with_value(arv_object, STORED_VALUE_FIELD_NAME, stored_value)) end # Tests that a subset of all fields of a valid Arvados object can be retrieved # using: `arv get [uuid] [fields...]`. - def test_get_valid_object_with_specific_valid_fields() - stored_value = __method__ + def test_get_valid_object_with_valid_fields + stored_value = __method__.to_s uuid = create_arv_object_with_value(stored_value) out, err = capture_subprocess_io do - arv_get(uuid, STORED_VALUE_FIELD_NAME, UUID_FIELD_NAME, "--format", "json") + assert(arv_get_json(uuid, STORED_VALUE_FIELD_NAME, UUID_FIELD_NAME)) end - assert_empty(err) + assert_empty(err, "Error text not expected: '#{err}'") arv_object = parse_json_arv_object(out) assert(has_field_with_value(arv_object, STORED_VALUE_FIELD_NAME, stored_value)) assert(has_field_with_value(arv_object, UUID_FIELD_NAME, uuid)) @@ -70,13 +70,13 @@ class TestArvGet < Minitest::Test # Tests that the valid field is retrieved when both a valid and invalid field # are requested from a valid Arvados object, using: # `arv get [uuid] [fields...]`. - def test_get_valid_object_with_both_specific_valid_and_invalid_fields() - stored_value = __method__ + def test_get_valid_object_with_both_valid_and_invalid_fields + stored_value = __method__.to_s uuid = create_arv_object_with_value(stored_value) out, err = capture_subprocess_io do - arv_get(uuid, STORED_VALUE_FIELD_NAME, INVALID_FIELD_NAME, "--format", "json") + assert(arv_get_json(uuid, STORED_VALUE_FIELD_NAME, INVALID_FIELD_NAME)) end - assert_empty(err) + assert_empty(err, "Error text not expected: '#{err}'") arv_object = parse_json_arv_object(out) assert(has_field_with_value(arv_object, STORED_VALUE_FIELD_NAME, stored_value)) refute(has_field_with_value(arv_object, INVALID_FIELD_NAME, stored_value)) @@ -84,56 +84,71 @@ class TestArvGet < Minitest::Test # Tests that no fields are retreived when no valid fields are requested from # a valid Arvados object, using: `arv get [uuid] [fields...]`. - def test_get_valid_object_with_no_specific_valid_fields() - stored_value = __method__ + def test_get_valid_object_with_no_valid_fields + stored_value = __method__.to_s uuid = create_arv_object_with_value(stored_value) out, err = capture_subprocess_io do - arv_get(uuid, INVALID_FIELD_NAME, "--format", "json") + assert(arv_get_json(uuid, INVALID_FIELD_NAME)) end - assert_empty(err) + assert_empty(err, "Error text not expected: '#{err}'") arv_object = parse_json_arv_object(out) - assert_equal(0, arv_object.fixnum) + assert_equal(0, arv_object.length) end - # Tests that an valid Arvados object is not retrieved when specifying an - # invalid format: `arv get [uuid] --format invalid`. - def test_get_valid_object_invalid_format() - stored_value = __method__ - uuid = create_arv_object_with_value(stored_value) + # Tests that an invalid (non-existent) Arvados object is not retrieved using: + # using: `arv get [non-existent-uuid]`. + def test_get_invalid_object out, err = capture_subprocess_io do - arv_get(uuid, '--format', 'invalid') + refute(arv_get_json(NON_EXISTENT_OBJECT_UUID)) end - refute_empty(err) + refute_empty(err, "Expected error feedback on request for invalid object") assert_empty(out) end - # Tests that an invalid (non-existant) Arvados object is not retrieved using: - # using: `arv get [non-existant-uuid]`. - def test_get_invalid_object() + # Tests that help text exists using: `arv get --help`. + def test_help_exists out, err = capture_subprocess_io do - arv_get(NON_EXISTANT_OBJECT_UUID, "--format", "json") +# assert(arv_get_default("--help"), "Expected exit code 0: #{$?}") + #XXX: Exit code given is 255. It probably should be 0, which seems to be + # standard elsewhere. However, 255 is in line with other `arv` + # commands (e.g. see `arv edit`) so ignoring the problem here. + arv_get_default("--help") end - refute_empty(err) - assert_empty(out) + assert_empty(err, "Error text not expected: '#{err}'") + refute_empty(out, "Help text should be given") end protected - # Runs 'arv get ' with given arguments. - def arv_get(*args) - system(['./bin/arv', 'arv get'], *args) + # Runs 'arv get ' with given arguments. Returns whether the exit + # status was 0 (i.e. success). Use $? to attain more details on failure. + def arv_get_default(*args) + return system("arv", "get", *args) + end + + # Runs 'arv --format json get ' with given arguments. Returns whether + # the exit status was 0 (i.e. success). Use $? to attain more details on + # failure. + def arv_get_json(*args) + return system("arv", "--format", "json", "get", *args) + end + + # Runs 'arv --format yaml get ' with given arguments. Returns whether + # the exit status was 0 (i.e. success). Use $? to attain more details on + # failure. + def arv_get_yaml(*args) + return system("arv", "--format", "yaml", "get", *args) end # Creates an Arvados object that stores a given value. Returns the uuid of the # created object. def create_arv_object_with_value(value) - out, err = capture_subprocess_io do - # Write (without redirect) - system(['./bin/arv', "arv tag add #{value} --object testing"]) - end - if err.length > 0 - raise "Could not create Arvados object with given value" - end - return out + out, err = capture_subprocess_io do + system("arv", "tag", "add", value, "--object", "testing") + assert $?.success?, "Command failure running `arv tag`: #{$?}" + end + assert_equal '', err + assert_operator 0, :<, out.strip.length + out.strip end # Parses the given JSON representation of an Arvados object, returning @@ -144,7 +159,9 @@ class TestArvGet < Minitest::Test assert(parsed.instance_of?(Hash)) return parsed rescue JSON::ParserError => e - raise "Invalid JSON representation of Arvados object" + raise "Invalid JSON representation of Arvados object.\n" \ + "Parse error: '#{e}'\n" \ + "JSON: '#{arvObjectAsJson}'\n" end end @@ -156,7 +173,8 @@ class TestArvGet < Minitest::Test assert(parsed.instance_of?(Hash)) return parsed rescue - raise "Invalid YAML representation of Arvados object" + raise "Invalid YAML representation of Arvados object.\n" \ + "YAML: '#{arvObjectAsYaml}'\n" end end