17944: Fixes premature vocabulary check success.
authorLucas Di Pentima <lucas.dipentima@curii.com>
Tue, 9 Nov 2021 18:24:47 +0000 (15:24 -0300)
committerLucas Di Pentima <lucas.dipentima@curii.com>
Tue, 9 Nov 2021 18:24:47 +0000 (15:24 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas.dipentima@curii.com>

sdk/go/arvados/vocabulary.go
sdk/go/arvados/vocabulary_test.go

index cb1106e9b00ecb09ba93137d207487b3b0fe0b6c..5804d4c408a291cac3998be11d3972ea12b940c9 100644 (file)
@@ -188,7 +188,10 @@ func (v *Vocabulary) Check(data map[string]interface{}) error {
                // Checks for value validity -- key is defined
                switch val := val.(type) {
                case string:
-                       return v.checkValue(key, val)
+                       err := v.checkValue(key, val)
+                       if err != nil {
+                               return err
+                       }
                case []interface{}:
                        for _, singleVal := range val {
                                switch singleVal := singleVal.(type) {
index b2748c7be7f0c6df80248dd90e14be29d84f07ba..7986a8252268ac7a20ea7b35d3fd0a8387565e0b 100644 (file)
@@ -75,6 +75,7 @@ func (s *VocabularySuite) TestCheck(c *check.C) {
                {"Known key, list of known values", false, `{"IDTAGANIMALS":["IDVALANIMAL1","IDVALANIMAL2"]}`, true},
                {"Known non-strict key, list of unknown non-alias values", false, `{"IDTAGCOMMENT":["hello world","lorem ipsum"]}`, true},
                // Check fails
+               {"Known first key & value; known 2nd key, unknown 2nd value", false, `{"IDTAGANIMALS":"IDVALANIMAL1", "IDTAGIMPORTANCE": "blah blah"}`, false},
                {"Unknown non-alias key on strict vocabulary", true, `{"foo":"bar"}`, false},
                {"Known non-strict key, known value alias", false, `{"IDTAGANIMALS":"Loxodonta"}`, false},
                {"Known strict key, unknown non-alias value", false, `{"IDTAGIMPORTANCE":"Unimportant"}`, false},