func parseMem(s string) (uint64, error) { s = strings.Replace(s, " ", "", -1) s = strings.Replace(s, ",", "", -1) // e.g. 1,952 -> 1952 // Sometimes it's GiB, sometimes Gib. We don't like Gib. s = strings.Replace(s, "Gib", "GiB", 1) return utils.ParseSize(s) }
func parseSize(s string) (uint64, bool, error) { if !sizeRE.MatchString(s) { return 0, false, nil } size, err := utils.ParseSize(s) if err != nil { return 0, true, err } return size, true, nil }
func (*sizeSuite) TestParseSize(c *gc.C) { type test struct { in string out uint64 err string } tests := []test{{ in: "", err: `expected a non-negative number, got ""`, }, { in: "-1", err: `expected a non-negative number, got "-1"`, }, { in: "1MZ", err: `invalid multiplier suffix "MZ", expected one of MGTPEZY`, }, { in: "0", out: 0, }, { in: "123", out: 123, }, { in: "1M", out: 1, }, { in: "0.5G", out: 512, }, { in: "0.5GB", out: 512, }, { in: "0.5GiB", out: 512, }, { in: "0.5T", out: 524288, }, { in: "0.5P", out: 536870912, }, { in: "0.0009765625E", out: 1073741824, }, { in: "1Z", out: 1125899906842624, }, { in: "1Y", out: 1152921504606846976, }} for i, test := range tests { c.Logf("test %d: %+v", i, test) size, err := utils.ParseSize(test.in) if test.err != "" { c.Assert(err, gc.NotNil) c.Assert(err, gc.ErrorMatches, test.err) } else { c.Assert(err, gc.IsNil) c.Assert(size, gc.Equals, test.out) } } }