Files
fn-serverless/vendor/github.com/go-openapi/strfmt/duration_test.go
Reed Allman 206aa3c203 opentracing -> opencensus (#802)
* update vendor directory, add go.opencensus.io

* update imports

* oops

* s/opentracing/opencensus/ & remove prometheus / zipkin stuff & remove old stats

* the dep train rides again

* fix gin build

* deps from last guy

* start in on the agent metrics

* she builds

* remove tags for now, cardinality error is fussing. subscribe instead of register

* update to patched version of opencensus to proceed for now TODO switch to a release

* meh

fix imports

* println debug the bad boys

* lace it with the tags

* update deps again

* fix all inconsistent cardinality errors

* add our own logger

* fix init

* fix oom measure

* remove bugged removal code

* fix s3 measures

* fix prom handler nil
2018-03-05 09:35:28 -08:00

207 lines
5.1 KiB
Go

// Copyright 2015 go-swagger maintainers
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package strfmt
import (
"testing"
"time"
"gopkg.in/mgo.v2/bson"
"github.com/stretchr/testify/assert"
)
func TestDuration(t *testing.T) {
pp := Duration(0)
err := pp.UnmarshalText([]byte("0ms"))
assert.NoError(t, err)
err = pp.UnmarshalText([]byte("yada"))
assert.Error(t, err)
orig := "2ms"
b := []byte(orig)
bj := []byte("\"" + orig + "\"")
err = pp.UnmarshalText(b)
assert.NoError(t, err)
err = pp.UnmarshalText([]byte("three week"))
assert.Error(t, err)
err = pp.UnmarshalText([]byte("9999999999999999999999999999999999999999999999999999999 weeks"))
assert.Error(t, err)
txt, err := pp.MarshalText()
assert.NoError(t, err)
assert.Equal(t, orig, string(txt))
err = pp.UnmarshalJSON(bj)
assert.NoError(t, err)
assert.EqualValues(t, orig, pp.String())
err = pp.UnmarshalJSON([]byte("yada"))
assert.Error(t, err)
err = pp.UnmarshalJSON([]byte(`"12 parsecs"`))
assert.Error(t, err)
err = pp.UnmarshalJSON([]byte(`"12 y"`))
assert.Error(t, err)
b, err = pp.MarshalJSON()
assert.NoError(t, err)
assert.Equal(t, bj, b)
dur := Duration(42)
bsonData, err := bson.Marshal(&dur)
assert.NoError(t, err)
var durCopy Duration
err = bson.Unmarshal(bsonData, &durCopy)
assert.NoError(t, err)
assert.Equal(t, dur, durCopy)
}
func testDurationParser(t *testing.T, toParse string, expected time.Duration) {
r, e := ParseDuration(toParse)
assert.NoError(t, e)
assert.Equal(t, expected, r)
}
func TestDurationParser_Failed(t *testing.T) {
_, e := ParseDuration("45 wekk")
assert.Error(t, e)
}
func TestIsDuration_Failed(t *testing.T) {
e := IsDuration("45 weeekks")
assert.False(t, e)
}
func testDurationSQLScanner(t *testing.T, dur time.Duration) {
values := []interface{}{int64(dur), float64(dur)}
for _, value := range values {
var result Duration
err := result.Scan(value)
assert.NoError(t, err)
assert.Equal(t, dur, time.Duration(result))
// And the other way arround
resv, erv := result.Value()
assert.NoError(t, erv)
assert.EqualValues(t, value, resv)
}
}
func TestDurationScanner_Nil(t *testing.T) {
var result Duration
err := result.Scan(nil)
assert.NoError(t, err)
assert.EqualValues(t, 0, time.Duration(result))
err = result.Scan("1 ms")
assert.Error(t, err)
}
func TestDurationParser(t *testing.T) {
testcases := map[string]time.Duration{
// parse the short forms without spaces
"1ns": 1 * time.Nanosecond,
"1us": 1 * time.Microsecond,
"1µs": 1 * time.Microsecond,
"1ms": 1 * time.Millisecond,
"1s": 1 * time.Second,
"1m": 1 * time.Minute,
"1h": 1 * time.Hour,
"1hr": 1 * time.Hour,
"1d": 24 * time.Hour,
"1w": 7 * 24 * time.Hour,
"1wk": 7 * 24 * time.Hour,
// parse the long forms without spaces
"1nanoseconds": 1 * time.Nanosecond,
"1nanos": 1 * time.Nanosecond,
"1microseconds": 1 * time.Microsecond,
"1micros": 1 * time.Microsecond,
"1millis": 1 * time.Millisecond,
"1milliseconds": 1 * time.Millisecond,
"1second": 1 * time.Second,
"1sec": 1 * time.Second,
"1min": 1 * time.Minute,
"1minute": 1 * time.Minute,
"1hour": 1 * time.Hour,
"1day": 24 * time.Hour,
"1week": 7 * 24 * time.Hour,
// parse the short forms with spaces
"1 ns": 1 * time.Nanosecond,
"1 us": 1 * time.Microsecond,
"1 µs": 1 * time.Microsecond,
"1 ms": 1 * time.Millisecond,
"1 s": 1 * time.Second,
"1 m": 1 * time.Minute,
"1 h": 1 * time.Hour,
"1 hr": 1 * time.Hour,
"1 d": 24 * time.Hour,
"1 w": 7 * 24 * time.Hour,
"1 wk": 7 * 24 * time.Hour,
// parse the long forms without spaces
"1 nanoseconds": 1 * time.Nanosecond,
"1 nanos": 1 * time.Nanosecond,
"1 microseconds": 1 * time.Microsecond,
"1 micros": 1 * time.Microsecond,
"1 millis": 1 * time.Millisecond,
"1 milliseconds": 1 * time.Millisecond,
"1 second": 1 * time.Second,
"1 sec": 1 * time.Second,
"1 min": 1 * time.Minute,
"1 minute": 1 * time.Minute,
"1 hour": 1 * time.Hour,
"1 day": 24 * time.Hour,
"1 week": 7 * 24 * time.Hour,
}
for str, dur := range testcases {
testDurationParser(t, str, dur)
testDurationSQLScanner(t, dur)
}
}
func TestIsDuration_Caveats(t *testing.T) {
// This works too
e := IsDuration("45 weeks")
assert.True(t, e)
// This works too
e = IsDuration("45 weekz")
assert.True(t, e)
// This works too
e = IsDuration("12 hours")
assert.True(t, e)
// This works too
e = IsDuration("12 minutes")
assert.True(t, e)
// This does not work
e = IsDuration("12 phours")
assert.False(t, e)
}