Merge branch 'main' into 18842-arv-mount-disk-config
[arvados.git] / sdk / go / arvados / duration_test.go
index ee787a6a76a2807ebfce6211db28987250bbdd89..40344d061b0682327ded9ab016a8865410a923d5 100644 (file)
@@ -23,6 +23,7 @@ func (s *DurationSuite) TestMarshalJSON(c *check.C) {
        c.Check(err, check.IsNil)
        c.Check(d.D, check.Equals, Duration(time.Second+234*time.Millisecond))
        buf, err := json.Marshal(d)
+       c.Check(err, check.IsNil)
        c.Check(string(buf), check.Equals, `{"D":"1.234s"}`)
 
        for _, trial := range []struct {
@@ -43,3 +44,30 @@ func (s *DurationSuite) TestMarshalJSON(c *check.C) {
                c.Check(string(buf), check.Equals, `"`+trial.out+`"`)
        }
 }
+
+func (s *DurationSuite) TestUnmarshalJSON(c *check.C) {
+       var d struct {
+               D Duration
+       }
+       err := json.Unmarshal([]byte(`{"D":1.234}`), &d)
+       c.Check(err, check.ErrorMatches, `.*missing unit in duration "?1\.234"?`)
+       err = json.Unmarshal([]byte(`{"D":"1.234"}`), &d)
+       c.Check(err, check.ErrorMatches, `.*missing unit in duration "?1\.234"?`)
+       err = json.Unmarshal([]byte(`{"D":"1"}`), &d)
+       c.Check(err, check.ErrorMatches, `.*missing unit in duration "?1"?`)
+       err = json.Unmarshal([]byte(`{"D":"foobar"}`), &d)
+       c.Check(err, check.ErrorMatches, `.*invalid duration "?foobar"?`)
+       err = json.Unmarshal([]byte(`{"D":"60s"}`), &d)
+       c.Check(err, check.IsNil)
+       c.Check(d.D.Duration(), check.Equals, time.Minute)
+
+       d.D = Duration(time.Second)
+       err = json.Unmarshal([]byte(`{"D":"0"}`), &d)
+       c.Check(err, check.IsNil)
+       c.Check(d.D.Duration(), check.Equals, time.Duration(0))
+
+       d.D = Duration(time.Second)
+       err = json.Unmarshal([]byte(`{"D":0}`), &d)
+       c.Check(err, check.IsNil)
+       c.Check(d.D.Duration(), check.Equals, time.Duration(0))
+}