Git Product home page Git Product logo

golib's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

golib's Issues

Provide a new reporting type/package

  • Should be used instead of global logging
  • Reporter interface has to be retrieved from context
  • Reporter provides Log(id string) Logger, which knows standards like Debugf() to Fatalf()
  • Reporter provides Dump(id string) Dumper, which allows to store named data dumps
  • The IDs allow to configure individual logger and dumper
  • Go Library packages (and other depending ones) will be changed to use this reporter later
  • So step by step no Tideland package logs wildly

Add document builder to GJP

  • Set(path string, value interface{}) error
  • Document() Document
  • Documents can be set too, so they build sub-document

Intermittent testsuite failures

Hello,

I am seeing intermittent testsuite failures and I can't even see what is failing, as everything seems to pass.

Any idea? This is against version 4.20.

go test -v -p 1 -short github.com/tideland/golib/audit github.com/tideland/golib/cache github.com/tideland/golib/collections github.com/tideland/golib/errors github.com/tideland/golib/etc github.com/tideland/golib/feed/atom github.com/tideland/golib/feed/rss github.com/tideland/golib/feed/utils github.com/tideland/golib/identifier github.com/tideland/golib/logger github.com/tideland/golib/loop github.com/tideland/golib/mapreduce github.com/tideland/golib/monitoring github.com/tideland/golib/numerics github.com/tideland/golib/redis github.com/tideland/golib/scene github.com/tideland/golib/scroller github.com/tideland/golib/sml github.com/tideland/golib/sort github.com/tideland/golib/stringex github.com/tideland/golib/timex github.com/tideland/golib/version
=== RUN TestAssertTrue
--- PASS: TestAssertTrue (0.00s)
asserts_test.go:387: testing assert "true" failed: 'false' (bool) <> 'true' (bool) [should fail and be logged]
=== RUN TestAssertFalse
--- PASS: TestAssertFalse (0.00s)
asserts_test.go:387: testing assert "false" failed: 'true' (bool) <> 'false' (bool) [should fail and be logged]
=== RUN TestAssertNil
--- PASS: TestAssertNil (0.00s)
asserts_test.go:387: testing assert "nil" failed: 'not nil' (string) <> '' (invalid) [should fail and be logged]
=== RUN TestAssertNotNil
--- PASS: TestAssertNotNil (0.00s)
asserts_test.go:387: testing assert "not nil" failed: '' (invalid) <> '' (invalid) [should fail and be logged]
=== RUN TestAssertEqual
--- PASS: TestAssertEqual (0.00s)
asserts_test.go:387: testing assert "equal" failed: 'one' (string) <> '1' (int) [should fail and be logged]
asserts_test.go:387: testing assert "equal" failed: 'two' (string) <> '2' (string) [should fail and be logged]
=== RUN TestAssertDifferent
--- PASS: TestAssertDifferent (0.00s)
asserts_test.go:387: testing assert "different" failed: 'one' (string) <> 'one' (string) [should fail and be logged]
asserts_test.go:387: testing assert "different" failed: '2' (int) <> '2' (int) [should fail and be logged]
=== RUN TestAssertAbout
--- PASS: TestAssertAbout (0.00s)
asserts_test.go:387: testing assert "about" failed: '0.8' (float64) <> '1' (float64) [different, out of bounds of extent]
asserts_test.go:387: testing assert "about" failed: '1.2' (float64) <> '1' (float64) [different, out of bounds of extent]
=== RUN TestAssertRange
--- PASS: TestAssertRange (0.00s)
asserts_test.go:387: testing assert "range" failed: '1' (uint8) <> '&{10 20}' (ptr to audit.lowHigh) [byte out of range]
asserts_test.go:387: testing assert "range" failed: '1' (int) <> '&{10 20}' (ptr to audit.lowHigh) [int out of range]
asserts_test.go:387: testing assert "range" failed: '1' (float64) <> '&{10 20}' (ptr to audit.lowHigh) [float64 out of range]
asserts_test.go:387: testing assert "range" failed: '97' (int32) <> '&{120 122}' (ptr to audit.lowHigh) [rune out of range]
asserts_test.go:387: testing assert "range" failed: 'aaa' (string) <> '&{uuuuu zzzzz}' (ptr to audit.lowHigh) [string out of range]
asserts_test.go:387: testing assert "range" failed: '[1 2 3]' (slice of int) <> '&{5 10}' (ptr to audit.lowHigh) [slice length out of range]
asserts_test.go:387: testing assert "range" failed: '[1 2 3]' (array of int) <> '&{5 10}' (ptr to audit.lowHigh) [array length out of range]
asserts_test.go:387: testing assert "range" failed: 'map[1:3 3:1 2:2]' (map of int) <> '&{5 10}' (ptr to audit.lowHigh) [map length out of range]
=== RUN TestAssertContents
--- PASS: TestAssertContents (0.00s)
asserts_test.go:387: testing assert "contents" failed: '4711' (int) <> '12345-4711-67890' (string)
asserts_test.go:387: testing assert "contents" failed: '4711' (int) <> 'foo' (string)
asserts_test.go:387: testing assert "contents" failed: '4711' (int) <> '[1 2 3 4711 5 6 7 8 9]' (slice of interface {})
=== RUN TestAssertSubstring
--- PASS: TestAssertSubstring (0.00s)
asserts_test.go:387: testing assert "substring" failed: 'foo' (string) <> 'this is assert test' (string) [should fail and be logged]
asserts_test.go:387: testing assert "substring" failed: 'this is assert test' (string) <> 'this is assert test' (string) [should fail and be logged]
=== RUN TestAssertCase
--- PASS: TestAssertCase (0.00s)
asserts_test.go:387: testing assert "case" failed: 'Foo' (string) <> 'FOO' (string) [is mixed case]
asserts_test.go:387: testing assert "case" failed: 'Foo' (string) <> 'foo' (string) [is mixed case]
=== RUN TestAssertMatch
--- PASS: TestAssertMatch (0.00s)
asserts_test.go:387: testing assert "match" failed: 'this is assert test' (string) <> 'foo' (string) [should fail and be logged]
asserts_test.go:387: testing assert "match" failed: 'this is assert test' (string) <> 'this*test' (string) [should fail and be logged]
=== RUN TestAssertErrorMatch
--- PASS: TestAssertErrorMatch (0.00s)
asserts_test.go:387: testing assert "error match" failed: 'oops, an error' (ptr to errors.errorString) <> 'foo' (string) [should fail and be logged]
=== RUN TestAssertImplementor
--- PASS: TestAssertImplementor (0.00s)
asserts_test.go:387: testing assert "implementor" failed: 'string test' (string) <> '0xc4200c88d0' (ptr to error) [should fail and be logged]
asserts_test.go:387: testing assert "implementor" failed: 'error test' (ptr to errors.errorString) <> '0xc4200c88e0' (ptr to io.Writer) [should fail and be logged]
=== RUN TestAssertAssignable
--- PASS: TestAssertAssignable (0.00s)
asserts_test.go:387: testing assert "assignable" failed: 'one' (string) <> '5' (int) [should fail and be logged]
=== RUN TestAssertUnassignable
--- PASS: TestAssertUnassignable (0.00s)
asserts_test.go:387: testing assert "unassignable" failed: '1' (int) <> '5' (int) [should fail and be logged]
=== RUN TestAssertEmpty
--- PASS: TestAssertEmpty (0.00s)
asserts_test.go:387: testing assert "empty" failed: '9' (int) <> '0' (int) [should fail and be logged]
asserts_test.go:387: testing assert "empty" failed: '3' (int) <> '0' (int) [should also fail and be logged]
asserts_test.go:387: testing assert "empty" failed: 'bool' (string) <> '0' (int) [obtained bool is no array, chan, map, slice, string or understands Len()]
=== RUN TestAsserNotEmpty
--- PASS: TestAsserNotEmpty (0.00s)
asserts_test.go:387: testing assert "not empty" failed: '0' (int) <> '0' (int) [should fail and be logged]
asserts_test.go:387: testing assert "not empty" failed: '0' (int) <> '0' (int) [should also fail and be logged]
asserts_test.go:387: testing assert "not empty" failed: 'bool' (string) <> '0' (int) [obtained bool is no array, chan, map, slice, string or understands Len()]
=== RUN TestAssertLength
--- PASS: TestAssertLength (0.00s)
asserts_test.go:387: testing assert "length" failed: '9' (int) <> '0' (int) [should fail and be logged]
asserts_test.go:387: testing assert "length" failed: '3' (int) <> '10' (int) [should also fail and be logged]
asserts_test.go:387: testing assert "length" failed: 'bool' (string) <> '1' (int) [obtained bool is no array, chan, map, slice, string or understands Len()]
=== RUN TestAssertPanics
--- PASS: TestAssertPanics (0.00s)
asserts_test.go:387: testing assert "panics" failed: 'func ()' (string) <> '' (invalid) [should not panic]
=== RUN TestAssertPathExists
--- PASS: TestAssertPathExists (0.00s)
asserts_test.go:387: testing assert "path exists" failed: '/this/path/will/hopefully/not/exist' (string) <> 'true' (bool) [illegal path]
=== RUN TestAssertWait
--- PASS: TestAssertWait (0.20s)
asserts_test.go:387: testing assert "wait" failed: 'false' (bool) <> 'true' (bool) [should be false]
asserts_test.go:387: testing assert "wait" failed: 'timeout 100ms' (string) <> 'signal true' (string) [should timeout]
=== RUN TestAssertRetry
--- PASS: TestAssertRetry (0.15s)
asserts_test.go:387: testing assert "retry" failed: 'timeout after 107.422105ms and 10 retries' (string) <> 'successful call' (string) [should fail]
=== RUN TestAssertFail
--- PASS: TestAssertFail (0.00s)
asserts_test.go:387: testing assert "fail" failed: '' (invalid) <> '' (invalid) [this should fail]
=== RUN TestTestingAssertion

asserts_test.go:338: Assert 'assignable' failed!

Function...: TestTestingAssertion()
Obtained...: func ()
Expected...: int
Description: should fail (but not the test)


asserts_test.go:339: Assert 'assignable' failed!

Function...: TestTestingAssertion()
Obtained...: func ()
Expected...: int


asserts_test.go:340: Assert 'assignable' failed!

Function...: TestTestingAssertion()
Obtained...: func ()
Expected...: int
Description: this
should
fail
too

--- PASS: TestTestingAssertion (0.00s)
=== RUN TestPanicAssert
--- PASS: TestPanicAssert (0.00s)
asserts_test.go:347: panic worked: 'assert 'assignable' failed: 'int' <> 'func ()' (should fail)'
=== RUN TestValidationAssertion
--- PASS: TestValidationAssertion (0.00s)
asserts_test.go:374: [0] assert 'true' failed: 'false' (sould fail) / [1] assert 'equal' failed: '1' <> '2' (should fail)
=== RUN TestTempDirCreate
--- PASS: TestTempDirCreate (0.00s)
=== RUN TestTempDirRestore
--- PASS: TestTempDirRestore (0.00s)
=== RUN TestEnvVarsSet
--- PASS: TestEnvVarsSet (0.00s)
=== RUN TestEnvVarsRestore
--- PASS: TestEnvVarsRestore (0.00s)
=== RUN TestBuildDate
--- PASS: TestBuildDate (0.00s)
=== RUN TestInts
--- PASS: TestInts (0.00s)
=== RUN TestOneOf
--- PASS: TestOneOf (0.01s)
=== RUN TestWords
--- PASS: TestWords (0.01s)
=== RUN TestPattern
--- PASS: TestPattern (0.00s)
=== RUN TestText
--- PASS: TestText (0.43s)
=== RUN TestName
--- PASS: TestName (2.97s)
=== RUN TestDomain
--- PASS: TestDomain (0.00s)
=== RUN TestURL
--- PASS: TestURL (1.38s)
=== RUN TestEMail
--- PASS: TestEMail (1.34s)
=== RUN TestTimes

generators_test.go:318: Assert 'true' failed!

Function...: TestTimes()
Obtained...: false

--- FAIL: TestTimes (0.32s)
FAIL
exit status 1
FAIL github.com/tideland/golib/audit 6.835s
2018-03-27 15:18:40 Z [INFO] [github.com/tideland/golib/loop] loop "2e036f23-385b-4ab6-800c-b29ecbd52f51" starts
=== RUN TestNormalRetrieve
--- PASS: TestNormalRetrieve (0.20s)
=== RUN TestRetrieveError
--- PASS: TestRetrieveError (0.00s)
=== RUN TestRetrievePanic
--- PASS: TestRetrievePanic (0.00s)
PASS
ok github.com/tideland/golib/cache 0.211s
=== RUN TestRingBufferPush
--- PASS: TestRingBufferPush (0.00s)
=== RUN TestRingBufferPop
--- PASS: TestRingBufferPop (0.00s)
=== RUN TestRingBufferGrow
--- PASS: TestRingBufferGrow (0.00s)
=== RUN TestSetsAddRemove
--- PASS: TestSetsAddRemove (0.00s)
=== RUN TestSetsFindAll
--- PASS: TestSetsFindAll (0.00s)
=== RUN TestSetsDoAll
--- PASS: TestSetsDoAll (0.00s)
=== RUN TestStringSetsAddRemove
--- PASS: TestStringSetsAddRemove (0.00s)
=== RUN TestStringSetsFindAll
--- PASS: TestStringSetsFindAll (0.00s)
=== RUN TestStringSetsDoAll
--- PASS: TestStringSetsDoAll (0.00s)
=== RUN TestStackPushPop
--- PASS: TestStackPushPop (0.00s)
=== RUN TestStackAll
--- PASS: TestStackAll (0.00s)
=== RUN TestStringStackPushPop
--- PASS: TestStringStackPushPop (0.00s)
=== RUN TestTreeCreate
--- PASS: TestTreeCreate (0.00s)
=== RUN TestTreeRemove
--- PASS: TestTreeRemove (0.00s)
=== RUN TestTreeSetValue
--- PASS: TestTreeSetValue (0.00s)
=== RUN TestTreeFind
--- PASS: TestTreeFind (0.00s)
=== RUN TestTreeDo
--- PASS: TestTreeDo (0.00s)
=== RUN TestTreeCopy
--- PASS: TestTreeCopy (0.00s)
=== RUN TestStringTreeCreate
--- PASS: TestStringTreeCreate (0.00s)
=== RUN TestStringTreeRemove
--- PASS: TestStringTreeRemove (0.00s)
=== RUN TestStringTreeSetValue
--- PASS: TestStringTreeSetValue (0.00s)
=== RUN TestStringTreeFind
--- PASS: TestStringTreeFind (0.00s)
=== RUN TestStringTreeDo
--- PASS: TestStringTreeDo (0.00s)
=== RUN TestStringTreeCopy
--- PASS: TestStringTreeCopy (0.00s)
=== RUN TestKeyValueTreeCreate
--- PASS: TestKeyValueTreeCreate (0.00s)
=== RUN TestKeyValueTreeRemove
--- PASS: TestKeyValueTreeRemove (0.00s)
=== RUN TestKeyValueTreeSetKey
--- PASS: TestKeyValueTreeSetKey (0.00s)
=== RUN TestKeyValueTreeSetValue
--- PASS: TestKeyValueTreeSetValue (0.00s)
=== RUN TestKeyValueTreeFind
--- PASS: TestKeyValueTreeFind (0.00s)
=== RUN TestKeyValueTreeDo
--- PASS: TestKeyValueTreeDo (0.00s)
=== RUN TestKeyValueTreeCopy
--- PASS: TestKeyValueTreeCopy (0.00s)
=== RUN TestKeyStringValueTreeCreate
--- PASS: TestKeyStringValueTreeCreate (0.00s)
=== RUN TestKeyStringValueTreeRemove
--- PASS: TestKeyStringValueTreeRemove (0.00s)
=== RUN TestKeyStringValueTreeSetKey
--- PASS: TestKeyStringValueTreeSetKey (0.00s)
=== RUN TestKeyStringValueTreeSetValue
--- PASS: TestKeyStringValueTreeSetValue (0.00s)
=== RUN TestKeyStringValueTreeFind
--- PASS: TestKeyStringValueTreeFind (0.00s)
=== RUN TestKeyStringValueTreeDo
--- PASS: TestKeyStringValueTreeDo (0.00s)
=== RUN TestKeyStringValueTreeCopy
--- PASS: TestKeyStringValueTreeCopy (0.00s)
PASS
ok github.com/tideland/golib/collections 0.022s
=== RUN TestIsError
--- PASS: TestIsError (0.00s)
=== RUN TestValidation
--- PASS: TestValidation (0.00s)
=== RUN TestAnnotation
--- PASS: TestAnnotation (0.00s)
=== RUN TestCollection
--- PASS: TestCollection (0.00s)
=== RUN TestDoAll
--- PASS: TestDoAll (0.00s)
PASS
ok github.com/tideland/golib/errors 0.009s
=== RUN TestRead
--- PASS: TestRead (0.00s)
=== RUN TestReadFile
--- PASS: TestReadFile (0.00s)
=== RUN TestWrite
--- PASS: TestWrite (0.00s)
=== RUN TestTemplates
--- PASS: TestTemplates (0.00s)
=== RUN TestHasPath
--- PASS: TestHasPath (0.00s)
=== RUN TestValueSuccess
--- PASS: TestValueSuccess (0.00s)
=== RUN TestGetFail
--- PASS: TestGetFail (0.00s)
=== RUN TestSplit
--- PASS: TestSplit (0.00s)
=== RUN TestDump
--- PASS: TestDump (0.00s)
=== RUN TestApply
--- PASS: TestApply (0.00s)
=== RUN TestContext
--- PASS: TestContext (0.00s)
PASS
ok github.com/tideland/golib/etc 0.012s
=== RUN TestParseComposeTime
--- PASS: TestParseComposeTime (0.00s)
=== RUN TestEncodeDecode
--- PASS: TestEncodeDecode (0.00s)
=== RUN TestGet
--- SKIP: TestGet (0.00s)
atom_test.go:77: Network test skipped in short mode
PASS
ok github.com/tideland/golib/feed/atom 0.014s
=== RUN TestParseComposeTime
--- PASS: TestParseComposeTime (0.00s)
=== RUN TestEncodeDecode
--- PASS: TestEncodeDecode (0.00s)
=== RUN TestValidate
--- PASS: TestValidate (0.00s)
=== RUN TestGet
--- SKIP: TestGet (0.00s)
rss_test.go:123: Network test skipped in short mode
PASS
ok github.com/tideland/golib/feed/rss 0.018s
=== RUN TestStripTags
--- PASS: TestStripTags (0.00s)
PASS
ok github.com/tideland/golib/feed/utils 0.008s
=== RUN TestTypeAsIdentifierPart
--- PASS: TestTypeAsIdentifierPart (0.00s)
=== RUN TestIdentifier
--- PASS: TestIdentifier (0.00s)
=== RUN TestSepIdentifier
--- PASS: TestSepIdentifier (0.00s)
=== RUN TestStandardUUID
--- PASS: TestStandardUUID (5.71s)
=== RUN TestUUIDVersions
uuid_test.go:62: UUID V1: ecc95828-d231-1801-9519-47372e2c5022
uuid_test.go:67: UUID V3: c4d91d8a-0d3e-3e3f-8dd6-924b8cc71909
uuid_test.go:72: UUID V4: a538c88f-afb3-4902-95ed-846ad04fa4e6
uuid_test.go:77: UUID V5: 479b560a-cc70-5da7-9009-dcda1e772b01
--- PASS: TestUUIDVersions (0.00s)
=== RUN TestUUIDByHex
--- PASS: TestUUIDByHex (0.00s)
PASS
ok github.com/tideland/golib/identifier 5.768s
=== RUN TestGetSetLevel
--- PASS: TestGetSetLevel (0.00s)
=== RUN TestGetSetLevelString
--- PASS: TestGetSetLevelString (0.00s)
=== RUN TestFiltering
--- PASS: TestFiltering (0.00s)
=== RUN TestGoLogger
2018/03/27 15:18:53 [DEBUG] [github.com/tideland/golib/logger_test] (logger_test.go:TestGoLogger:134) Debug.
2018/03/27 15:18:53 [INFO] [github.com/tideland/golib/logger_test] Info.
2018/03/27 15:18:53 [WARNING] [github.com/tideland/golib/logger_test] Warning.
2018/03/27 15:18:53 [ERROR] [github.com/tideland/golib/logger_test] Error.
2018/03/27 15:18:53 [CRITICAL] [github.com/tideland/golib/logger_test] (logger_test.go:TestGoLogger:138) Critical.
--- PASS: TestGoLogger (0.00s)
=== RUN TestSysLogger
--- SKIP: TestSysLogger (0.00s)
logger_test.go:144: Network test skipped in short mode
=== RUN TestOwnLogger
--- PASS: TestOwnLogger (0.00s)
=== RUN TestFatalExit
--- PASS: TestFatalExit (0.00s)
PASS
ok github.com/tideland/golib/logger 0.007s
=== RUN TestSimpleStop
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-stop" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-stop" stopped
--- PASS: TestSimpleStop (0.00s)
=== RUN TestSimpleRestart
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" stopped
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" restarts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-restart" stopped
--- PASS: TestSimpleRestart (0.00s)
=== RUN TestSimpleKill
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-kill" starts
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "simple-kill" stopped with error: ouch
--- PASS: TestSimpleKill (0.00s)
=== RUN TestError
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "error" starts
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "error" stopped with error: timed out
--- PASS: TestError (0.10s)
=== RUN TestDeferredError
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "deferred-error" starts
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "deferred-error" stopped with error: deferred error
--- PASS: TestDeferredError (0.00s)
=== RUN TestStopRecoverings
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" starts
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "stop-recoverings" tries to recover
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" recovered
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "stop-recoverings" tries to recover
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" recovered
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "stop-recoverings" tries to recover
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" recovered
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "stop-recoverings" stopped
--- PASS: TestStopRecoverings (0.10s)
=== RUN TestEndRecoverings
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "end-recoverings" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "end-recoverings" stopped
--- PASS: TestEndRecoverings (0.10s)
=== RUN TestRecoveringsPanic
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" starts
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-panic" recovered
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" tries to recover
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-panic" stopped with error: too many panics
--- PASS: TestRecoveringsPanic (0.15s)
=== RUN TestRecoveringsError
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "recoverings-error" starts
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-error" tries to recover
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "recoverings-error" stopped with error: timed out
--- PASS: TestRecoveringsError (0.15s)
=== RUN TestDescription
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "one" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "two::three::four" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "72902774-a832-4613-94d6-8a0bebb3691e" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "two::three::four"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "72902774-a832-4613-94d6-8a0bebb3691e"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "one" stopped
--- PASS: TestDescription (0.00s)
=== RUN TestSimpleSentinel
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-sentinel" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "simple-sentinel" stopped
--- PASS: TestSimpleSentinel (0.00s)
=== RUN TestSentinelStoppingLoop
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-stopping-loop" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" stopped
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-stopping-loop" stopped
--- PASS: TestSentinelStoppingLoop (0.00s)
=== RUN TestSentineForget
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-forget" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::d" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::d"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::c"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-forget" stopped
--- PASS: TestSentineForget (0.10s)
=== RUN TestSentinelKillingLoopNoHandler
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-no-handler" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] sentinel "sentinel-killing-loop-no-handler" kills all observables after error: bang!
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::a"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::b"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::c"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-no-handler" stopped with error: [LOOP:002] error handling for "loop::b" failed: bang!
--- PASS: TestSentinelKillingLoopNoHandler (0.00s)
=== RUN TestSentinelKillingLoopHandlerRestarts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-handler-restarts" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" restarts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-handler-restarts" stopped
--- PASS: TestSentinelKillingLoopHandlerRestarts (0.03s)
=== RUN TestSentinelKillingLoopHandlerStops
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-with-stops" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] sentinel "sentinel-killing-loop-with-stops" kills all observables after error: oh no!
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::a"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::b"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop.(*sentinel).backendLoop] killing "loop::c"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-with-stops" stopped with error: [LOOP:002] error handling for "loop::b" failed: oh no!
--- PASS: TestSentinelKillingLoopHandlerStops (0.03s)
=== RUN TestSentinelKillingLoopHandlerRestartAll
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-restarting-all" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::c" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::c"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "loop::b" stopped with error: bang!
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" restarts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-killing-loop-restarting-all" stopped
--- PASS: TestSentinelKillingLoopHandlerRestartAll (0.03s)
=== RUN TestNestedSentinelKill
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::top" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" starts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "nested-sentinel-kill::nested"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::b"
2018-03-27 15:18:54 Z [ERROR] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" stopped with error: bang!
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] sentinel "nested-sentinel-kill::nested" restarts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::nested" restarts
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::b"
2018-03-27 15:18:54 Z [INFO] [github.com/tideland/golib/loop] loop "loop::b" stopped
--- PASS: TestNestedSentinelKill (0.18s)
=== RUN TestSentinelSwitch
2018-03-27 15:18:55 Z [INFO] [github.com/tideland/golib/loop] loop "nested-sentinel-kill::top" stopped
2018-03-27 15:18:55 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::a" starts
2018-03-27 15:18:55 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::b" starts
2018-03-27 15:18:55 Z [INFO] [github.com/tideland/golib/loop] loop "loop::a" starts
2018-03-27 15:18:55 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:55 Z [INFO] [github.com/tideland/golib/loop] stopped observing "loop::a"
2018-03-27 15:18:55 Z [INFO] [github.com/tideland/golib/loop] started observing "loop::a"
2018-03-27 15:18:55 Z [INFO] [github.com/tideland/golib/loop] loop "sentinel-switch::a" stopped
--- PASS: TestSentinelSwitch (0.10s)
PASS
ok github.com/tideland/golib/loop 1.077s
=== RUN TestMapReduce
--- PASS: TestMapReduce (4.68s)
PASS
ok github.com/tideland/golib/mapreduce 4.736s
=== RUN TestETMMonitor
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
--- PASS: TestETMMonitor (0.19s)
=== RUN TestSSIMonitor
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
--- PASS: TestSSIMonitor (0.00s)
=== RUN TestDSRMonitor
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
2018-03-27 15:19:01 Z [ERROR] [github.com/tideland/golib/loop] loop "monitoring-backend" tries to recover
2018-03-27 15:19:01 Z [WARNING] [github.com/tideland/golib/monitoring] standard monitor recovered: runtime error: integer divide by zero
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" recovered
--- PASS: TestDSRMonitor (0.00s)
=== RUN TestInternalPanic
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
2018-03-27 15:19:01 Z [ERROR] [github.com/tideland/golib/loop] loop "monitoring-backend" tries to recover
2018-03-27 15:19:01 Z [WARNING] [github.com/tideland/golib/monitoring] standard monitor recovered: ouch
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" recovered
--- PASS: TestInternalPanic (0.00s)
=== RUN TestBackendSwitch
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" stopped
2018-03-27 15:19:01 Z [INFO] [github.com/tideland/golib/loop] loop "monitoring-backend" starts
--- PASS: TestBackendSwitch (0.05s)
PASS
ok github.com/tideland/golib/monitoring 0.259s
=== RUN TestSimplePoint
--- PASS: TestSimplePoint (0.00s)
=== RUN TestSimplePointArray
--- PASS: TestSimplePointArray (0.00s)
=== RUN TestSimplePolynomialFunction
--- PASS: TestSimplePolynomialFunction (0.00s)
=== RUN TestPolynomialFunctionPrinting
--- PASS: TestPolynomialFunctionPrinting (0.00s)
=== RUN TestQuadraticPolynomialFunction
--- PASS: TestQuadraticPolynomialFunction (0.00s)
=== RUN TestPolynomialFunctionDifferentiation
--- PASS: TestPolynomialFunctionDifferentiation (0.00s)
=== RUN TestInterpolation
--- PASS: TestInterpolation (0.00s)
=== RUN TestPointsEvaluation
--- PASS: TestPointsEvaluation (0.00s)
=== RUN TestLeastSquaresFunction
--- PASS: TestLeastSquaresFunction (0.00s)
PASS
ok github.com/tideland/golib/numerics 0.007s
=== RUN TestSimpleKeyOperations
--- SKIP: TestSimpleKeyOperations (0.00s)
commands_test.go:29: Redis test skipped in short mode
=== RUN TestScan
--- SKIP: TestScan (0.00s)
commands_test.go:90: Redis test skipped in short mode
=== RUN TestHash
--- SKIP: TestHash (0.00s)
commands_test.go:131: Redis test skipped in short mode
=== RUN TestHScan
--- SKIP: TestHScan (0.00s)
commands_test.go:172: Redis test skipped in short mode
=== RUN TestList
--- SKIP: TestList (0.00s)
commands_test.go:215: Redis test skipped in short mode
=== RUN TestSet
--- SKIP: TestSet (0.00s)
commands_test.go:233: Redis test skipped in short mode
=== RUN TestSScan
--- SKIP: TestSScan (0.00s)
commands_test.go:258: Redis test skipped in short mode
=== RUN TestSortedSet
--- SKIP: TestSortedSet (0.00s)
commands_test.go:298: Redis test skipped in short mode
=== RUN TestZScan
--- SKIP: TestZScan (0.00s)
commands_test.go:324: Redis test skipped in short mode
=== RUN TestTransactionConnection
--- SKIP: TestTransactionConnection (0.00s)
commands_test.go:367: Redis test skipped in short mode
=== RUN TestTransactionPipeline
--- SKIP: TestTransactionPipeline (0.00s)
commands_test.go:426: Redis test skipped in short mode
=== RUN TestTransactionPipelineWatch
--- SKIP: TestTransactionPipelineWatch (0.00s)
commands_test.go:464: Redis test skipped in short mode
=== RUN TestScripting
--- SKIP: TestScripting (0.00s)
commands_test.go:499: Redis test skipped in short mode
=== RUN TestPubSub
--- SKIP: TestPubSub (0.00s)
commands_test.go:540: Redis test skipped in short mode
=== RUN TestUnixSocketConnection
--- SKIP: TestUnixSocketConnection (0.00s)
redis_test.go:29: Redis test skipped in short mode
=== RUN TestTcpConnection
--- SKIP: TestTcpConnection (0.00s)
redis_test.go:58: Redis test skipped in short mode
=== RUN TestPipelining
--- SKIP: TestPipelining (0.00s)
redis_test.go:87: Redis test skipped in short mode
=== RUN TestOptions
2018-03-27 15:19:03 Z [INFO] [github.com/tideland/golib/loop] loop "redis::tmp-redis-sock::0" starts
--- PASS: TestOptions (0.00s)
=== RUN TestConcurrency
--- SKIP: TestConcurrency (0.00s)
redis_test.go:145: Redis test skipped in short mode
PASS
ok github.com/tideland/golib/redis 0.084s
=== RUN TestSimpleNoTimeout
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::326537ab-3fb2-411d-8197-81e0270351d3" starts
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::326537ab-3fb2-411d-8197-81e0270351d3" stopped
--- PASS: TestSimpleNoTimeout (0.00s)
=== RUN TestAccessAfterStopping
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::91333632-368b-4e2a-8025-889013867070" starts
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::91333632-368b-4e2a-8025-889013867070" stopped
--- PASS: TestAccessAfterStopping (0.00s)
=== RUN TestCleanupNoError
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::1f9f9cf0-43f0-4dcc-8993-845b9c60af12" starts
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::1f9f9cf0-43f0-4dcc-8993-845b9c60af12" stopped
--- PASS: TestCleanupNoError (0.00s)
=== RUN TestCleanupWithErrors
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::17d02096-13db-44e1-985b-11d31a367da7" starts
2018-03-27 15:19:04 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::17d02096-13db-44e1-985b-11d31a367da7" stopped with error: [SCENE:005] cleanup of property "bar" failed: ouch
--- PASS: TestCleanupWithErrors (0.00s)
=== RUN TestSimpleInactivityTimeout
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::5b024fcf-a180-434a-9ec6-9b21caf1a5d9" starts
2018-03-27 15:19:04 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::5b024fcf-a180-434a-9ec6-9b21caf1a5d9" stopped with error: [SCENE:002] scene inactivity timeout reached at 2018-03-27 15:19:04.44364458 +0000 UTC
--- PASS: TestSimpleInactivityTimeout (0.10s)
=== RUN TestSimpleAbsoluteTimeout
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::f794c354-2fa8-4ccb-8b25-cbcb0851c950" starts
2018-03-27 15:19:04 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::f794c354-2fa8-4ccb-8b25-cbcb0851c950" stopped with error: [SCENE:002] scene absolute timeout reached at 2018-03-27 15:19:04.694321773 +0000 UTC
--- PASS: TestSimpleAbsoluteTimeout (0.25s)
=== RUN TestCleanupAfterTimeout
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::8c720b81-d5ef-4eb3-847b-e6e499ef1dfe" starts
2018-03-27 15:19:04 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::8c720b81-d5ef-4eb3-847b-e6e499ef1dfe" stopped with error: [SCENE:002] scene absolute timeout reached at 2018-03-27 15:19:04.794673859 +0000 UTC
--- PASS: TestCleanupAfterTimeout (0.25s)
=== RUN TestAbort
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::8642b63e-fe4a-42ab-9c9b-dd17689e5142" starts
2018-03-27 15:19:04 Z [ERROR] [github.com/tideland/golib/loop] loop "scene::8642b63e-fe4a-42ab-9c9b-dd17689e5142" stopped with error: aborted
--- PASS: TestAbort (0.00s)
=== RUN TestFlagNoTimeout
2018-03-27 15:19:04 Z [INFO] [github.com/tideland/golib/loop] loop "scene::ac52851c-c781-4f9c-86ea-829a2764ac41" starts
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::ac52851c-c781-4f9c-86ea-829a2764ac41" stopped
--- PASS: TestFlagNoTimeout (0.35s)
=== RUN TestNoFlagDueToStop
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::d9bb47b4-aac4-49ee-9d1e-e998c2385aac" starts
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::d9bb47b4-aac4-49ee-9d1e-e998c2385aac" stopped
--- PASS: TestNoFlagDueToStop (0.10s)
=== RUN TestStoreAndFlag
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::a14ecce5-a81c-4cee-9932-9174de0f78c4" starts
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::a14ecce5-a81c-4cee-9932-9174de0f78c4" stopped
--- PASS: TestStoreAndFlag (0.11s)
=== RUN TestEarlyFlag
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::01797a12-60b8-4735-85ba-fe0bbb03c850" starts
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::01797a12-60b8-4735-85ba-fe0bbb03c850" stopped
--- PASS: TestEarlyFlag (0.10s)
=== RUN TestFlagTimeout
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::19999d17-f12a-4567-9b6f-f7b3d9780313" starts
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::19999d17-f12a-4567-9b6f-f7b3d9780313" stopped
--- PASS: TestFlagTimeout (0.10s)
=== RUN TestFlagUnflag
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::11379293-f0cf-4d65-9f3b-3f0ea6312fa6" starts
2018-03-27 15:19:05 Z [INFO] [github.com/tideland/golib/loop] loop "scene::11379293-f0cf-4d65-9f3b-3f0ea6312fa6" stopped
--- PASS: TestFlagUnflag (0.05s)
PASS
ok github.com/tideland/golib/scene 1.429s
=== RUN TestScroller
scroller_test.go:173: test #1/10: no lines existing; initially no lines scrolled
2018-03-27 15:19:06 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
2018-03-27 15:19:08 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
scroller_test.go:173: test #2/10: no lines existing; initially five lines scrolled
2018-03-27 15:19:08 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
2018-03-27 15:19:11 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
scroller_test.go:173: test #3/10: ten lines existing; initially no lines scrolled
2018-03-27 15:19:11 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
2018-03-27 15:19:13 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
scroller_test.go:173: test #4/10: ten lines existing; initially five lines scrolled
2018-03-27 15:19:13 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
2018-03-27 15:19:14 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
scroller_test.go:173: test #5/10: ten lines existing; initially twenty lines scrolled
2018-03-27 15:19:14 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
2018-03-27 15:19:14 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
scroller_test.go:173: test #6/10: ten lines existing; initially twenty lines scrolled; buffer smaller than lines
2018-03-27 15:19:14 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
2018-03-27 15:19:15 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
scroller_test.go:173: test #7/10: ten lines existing; initially three lines scrolled; filter lines with special prefix
2018-03-27 15:19:15 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
scroller_test.go:173: test #8/10: ten lines existing; initially five lines scrolled; error after further 25 lines
2018-03-27 15:19:15 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
2018-03-27 15:19:15 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
2018-03-27 15:19:15 Z [ERROR] [github.com/tideland/golib/loop] loop "scroller" stopped with error: ouch
scroller_test.go:173: test #9/10: ten lines existing; initially five lines scrolled; simply stop after 25 lines
2018-03-27 15:19:15 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
2018-03-27 15:19:16 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
scroller_test.go:173: test #10/10: unterminated last line is not scrolled
2018-03-27 15:19:16 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" starts
--- PASS: TestScroller (9.67s)
2018-03-27 15:19:16 Z [INFO] [github.com/tideland/golib/loop] loop "scroller" stopped
PASS
ok github.com/tideland/golib/scroller 9.678s
=== RUN TestTagValidation
--- PASS: TestTagValidation (0.00s)
=== RUN TestCreating
--- PASS: TestCreating (0.00s)
=== RUN TestWriterProcessing
sml_test.go:86: ===== WITH INDENT =====
sml_test.go:87: {root
Text A
Text B
{# A first comment. #}
{sub-a:1st:important
Text A.A
{# A second comment. #}
}
{sub-b:2nd
Text B.A
{text
Any text with the special characters ^{, ^}, and ^^.
}
}
{sub-c
Before raw.
{! func Test(i int) { println(i) } !}
After raw.
}
}

sml_test.go:88: ===== WITHOUT INDENT =====
sml_test.go:89: {root Text A Text B {# A first comment. #} {sub-a:1st:important Text A.A {# A second comment. #}} {sub-b:2nd Text B.A {text Any text with the special characters ^{, ^}, and ^^.}} {sub-c Before raw. {! func Test(i int) { println(i) } !} After raw.}}
sml_test.go:90: ===== DONE =====
--- PASS: TestWriterProcessing (0.00s)
=== RUN TestPositiveNodeReading
sml_test.go:112: ===== PARSED SML =====
sml_test.go:113: {foo:main
{bar:1:first
Yadda ^{Test^} 1
}
{! Raw: }} { ! ^^^ !}
{inbetween
}
{bar:2:last
Yadda
{test
^^
}
2
}
}

sml_test.go:114: ===== DONE =====
--- PASS: TestPositiveNodeReading (0.00s)
=== RUN TestNegativeNodeReading
--- PASS: TestNegativeNodeReading (0.00s)
=== RUN TestPositiveTreeReading
sml_test.go:135: [config = '' [foo = '1'][bar = '2'][yadda = '' [up = 'down'][down = 'up']]]
--- PASS: TestPositiveTreeReading (0.00s)
=== RUN TestNegativeTreeReading
--- PASS: TestNegativeTreeReading (0.00s)
=== RUN TestSML2XML
sml_test.go:178: ===== XML =====
sml_test.go:179:

<title>
A test document
</title>



A test document



The is a simple sentence with an

emphasized

and a

strong

text. We'll see how it renders.




  • It should be nice.


  • It should be error free.


  • It should be fast.



for foo := 0; foo < 42; foo++ {
println(foo)
}

sml_test.go:180: ===== DONE =====
--- PASS: TestSML2XML (0.00s)
PASS
ok github.com/tideland/golib/sml 0.009s
=== RUN TestPivot
--- PASS: TestPivot (0.00s)
PASS
ok github.com/tideland/golib/sort 0.006s
=== RUN TestAsString
defaulter_test.go:54: test Defaulter{AsString} 0: value 'foo' without error and default bar
defaulter_test.go:54: test Defaulter{AsString} 1: value 'foo' with error and default bar
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsString) value returned with error: foo
--- PASS: TestAsString (0.00s)
=== RUN TestAsStringSlice
defaulter_test.go:80: test Defaulter{AsStringSlice} 0: value 'a/b/c' without error and default [a]
defaulter_test.go:80: test Defaulter{AsStringSlice} 1: value 'a/b/c' with error and default [a]
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error: a/b/c
defaulter_test.go:80: test Defaulter{AsStringSlice} 2: value 'a/b/c' without error and default []
defaulter_test.go:80: test Defaulter{AsStringSlice} 3: value 'a/b/c' with error and default []
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error: a/b/c
defaulter_test.go:80: test Defaulter{AsStringSlice} 4: value '' without error and default []
defaulter_test.go:80: test Defaulter{AsStringSlice} 5: value '' with error and default [foo]
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringSlice) value returned with error:
defaulter_test.go:80: test Defaulter{AsStringSlice} 6: value 'a/b/c' without error and default [a]
--- PASS: TestAsStringSlice (0.00s)
=== RUN TestAsStringMap
defaulter_test.go:107: test Defaulter{AsStringMap} 0: value 'a:1/b:2' without error and default map[a:1]
defaulter_test.go:107: test Defaulter{AsStringMap} 1: value 'a:1/b:2' with error and default map[a:1]
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error: a:1/b:2
defaulter_test.go:107: test Defaulter{AsStringMap} 2: value 'a:1/b:2' without error and default map[]
defaulter_test.go:107: test Defaulter{AsStringMap} 3: value 'a:1/b:2' with error and default map[]
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error: a:1/b:2
defaulter_test.go:107: test Defaulter{AsStringMap} 4: value '' without error and default map[]
defaulter_test.go:107: test Defaulter{AsStringMap} 5: value '' with error and default map[a:1]
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsStringMap) value returned with error:
defaulter_test.go:107: test Defaulter{AsStringMap} 6: value 'a:1/b:2' without error and default map[]
--- PASS: TestAsStringMap (0.00s)
=== RUN TestAsBool
defaulter_test.go:141: test Defaulter{AsBool} 0: value '1' without error and default false
defaulter_test.go:141: test Defaulter{AsBool} 1: value 't' without error and default false
defaulter_test.go:141: test Defaulter{AsBool} 2: value 'T' without error and default false
defaulter_test.go:141: test Defaulter{AsBool} 3: value 'TRUE' without error and default false
defaulter_test.go:141: test Defaulter{AsBool} 4: value 'true' without error and default false
defaulter_test.go:141: test Defaulter{AsBool} 5: value 'True' without error and default false
defaulter_test.go:141: test Defaulter{AsBool} 6: value 'wahr' without error and default true
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value has illegal format for "bool": strconv.ParseBool: parsing "wahr": invalid syntax
defaulter_test.go:141: test Defaulter{AsBool} 7: value '' with error and default true
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value returned with error:
defaulter_test.go:141: test Defaulter{AsBool} 8: value '0' without error and default true
defaulter_test.go:141: test Defaulter{AsBool} 9: value 'f' without error and default true
defaulter_test.go:141: test Defaulter{AsBool} 10: value 'F' without error and default true
defaulter_test.go:141: test Defaulter{AsBool} 11: value 'FALSE' without error and default true
defaulter_test.go:141: test Defaulter{AsBool} 12: value 'false' without error and default true
defaulter_test.go:141: test Defaulter{AsBool} 13: value 'False' without error and default true
defaulter_test.go:141: test Defaulter{AsBool} 14: value 'falsch' without error and default false
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value has illegal format for "bool": strconv.ParseBool: parsing "falsch": invalid syntax
defaulter_test.go:141: test Defaulter{AsBool} 15: value '' with error and default false
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsBool) value returned with error:
--- PASS: TestAsBool (0.00s)
=== RUN TestAsInt
defaulter_test.go:171: test Defaulter{AsInt} 0: value '0' without error and default 0
defaulter_test.go:171: test Defaulter{AsInt} 1: value '1' without error and default 0
defaulter_test.go:171: test Defaulter{AsInt} 2: value '-1' without error and default 0
defaulter_test.go:171: test Defaulter{AsInt} 3: value '9223372036854775807' without error and default 0
defaulter_test.go:171: test Defaulter{AsInt} 4: value '-9223372036854775808' without error and default 0
defaulter_test.go:171: test Defaulter{AsInt} 5: value '999999999999999999999' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "999999999999999999999": value out of range
defaulter_test.go:171: test Defaulter{AsInt} 6: value '-999999999999999999999' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "-999999999999999999999": value out of range
defaulter_test.go:171: test Defaulter{AsInt} 7: value 'one two three' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value has illegal format for "int": strconv.ParseInt: parsing "one two three": invalid syntax
defaulter_test.go:171: test Defaulter{AsInt} 8: value '1' with error and default 2
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value returned with error: 1
defaulter_test.go:171: test Defaulter{AsInt} 9: value '-1' with error and default -2
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt) value returned with error: -1
--- PASS: TestAsInt (0.00s)
=== RUN TestAsInt64
defaulter_test.go:201: test Defaulter{AsInt64} 0: value '0' without error and default 0
defaulter_test.go:201: test Defaulter{AsInt64} 1: value '1' without error and default 0
defaulter_test.go:201: test Defaulter{AsInt64} 2: value '-1' without error and default 0
defaulter_test.go:201: test Defaulter{AsInt64} 3: value '9223372036854775807' without error and default 0
defaulter_test.go:201: test Defaulter{AsInt64} 4: value '-9223372036854775808' without error and default 0
defaulter_test.go:201: test Defaulter{AsInt64} 5: value '999999999999999999999' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "999999999999999999999": value out of range
defaulter_test.go:201: test Defaulter{AsInt64} 6: value '-999999999999999999999' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "-999999999999999999999": value out of range
defaulter_test.go:201: test Defaulter{AsInt64} 7: value 'one two three' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value has illegal format for "int64": strconv.ParseInt: parsing "one two three": invalid syntax
defaulter_test.go:201: test Defaulter{AsInt64} 8: value '1' with error and default 2
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value returned with error: 1
defaulter_test.go:201: test Defaulter{AsInt64} 9: value '-1' with error and default -2
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsInt64) value returned with error: -1
--- PASS: TestAsInt64 (0.00s)
=== RUN TestAsUint
defaulter_test.go:226: test Defaulter{AsUint} 0: value '0' without error and default 0
defaulter_test.go:226: test Defaulter{AsUint} 1: value '1' without error and default 0
defaulter_test.go:226: test Defaulter{AsUint} 2: value '18446744073709551615' without error and default 0
defaulter_test.go:226: test Defaulter{AsUint} 3: value '999999999999999999999' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value has illegal format for "uint": strconv.ParseUint: parsing "999999999999999999999": value out of range
defaulter_test.go:226: test Defaulter{AsUint} 4: value 'one two three' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value has illegal format for "uint": strconv.ParseUint: parsing "one two three": invalid syntax
defaulter_test.go:226: test Defaulter{AsUint} 5: value '-1' with error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsUint) value returned with error: -1
--- PASS: TestAsUint (0.00s)
=== RUN TestAsUInt64
defaulter_test.go:251: test Defaulter{AsUInt64} 0: value '0' without error and default 0
defaulter_test.go:251: test Defaulter{AsUInt64} 1: value '1' without error and default 0
defaulter_test.go:251: test Defaulter{AsUInt64} 2: value '18446744073709551615' without error and default 0
defaulter_test.go:251: test Defaulter{AsUInt64} 3: value '999999999999999999999' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value has illegal format for "uint64": strconv.ParseUint: parsing "999999999999999999999": value out of range
defaulter_test.go:251: test Defaulter{AsUInt64} 4: value 'one two three' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value has illegal format for "uint64": strconv.ParseUint: parsing "one two three": invalid syntax
defaulter_test.go:251: test Defaulter{AsUInt64} 5: value '-1' with error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsUInt64) value returned with error: -1
--- PASS: TestAsUInt64 (0.00s)
=== RUN TestAsFloat64
defaulter_test.go:281: test Defaulter{AsFloat4} 0: value '0.0' without error and default 0
defaulter_test.go:281: test Defaulter{AsFloat4} 1: value '1.0' without error and default 0
defaulter_test.go:281: test Defaulter{AsFloat4} 2: value '-1.0' without error and default 0
defaulter_test.go:281: test Defaulter{AsFloat4} 3: value '1.7976931348623157e+308' without error and default 0
defaulter_test.go:281: test Defaulter{AsFloat4} 4: value '-1.7976931348623157e+308' without error and default 0
defaulter_test.go:281: test Defaulter{AsFloat4} 5: value '9e+999' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "9e+999": value out of range
defaulter_test.go:281: test Defaulter{AsFloat4} 6: value '-9e+999' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "-9e+999": value out of range
defaulter_test.go:281: test Defaulter{AsFloat4} 7: value 'one.two' without error and default 1
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value has illegal format for "float64": strconv.ParseFloat: parsing "one.two": invalid syntax
defaulter_test.go:281: test Defaulter{AsFloat4} 8: value '1.0' with error and default 2
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value returned with error: 1.0
defaulter_test.go:281: test Defaulter{AsFloat4} 9: value '-1.0' with error and default -2
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsFloat4) value returned with error: -1.0
--- PASS: TestAsFloat64 (0.00s)
=== RUN TestAsTime
defaulter_test.go:307: test Defaulter{AsTime} 0: value '2018-03-27T15:19:17.830050534Z' without error and default 2000-01-01 00:00:00 +0000 UTC
defaulter_test.go:307: test Defaulter{AsTime} 1: value '2018-03-27T15:19:17.830050534Z' with error and default 2000-01-01 00:00:00 +0000 UTC
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value returned with error: 2018-03-27T15:19:17.830050534Z
defaulter_test.go:307: test Defaulter{AsTime} 2: value '2018-03-27T15:19:17.830050534Z' without error and default 2000-01-01 00:00:00 +0000 UTC
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value has illegal format for "time": parsing time "2018-03-27T15:19:17.830050534Z" as "any false layout": cannot parse "2018-03-27T15:19:17.830050534Z" as "any false layout"
defaulter_test.go:307: test Defaulter{AsTime} 3: value '' without error and default 2000-01-01 00:00:00 +0000 UTC
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsTime) value has illegal format for "time": parsing time "" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse "" as "2006"
--- PASS: TestAsTime (0.00s)
=== RUN TestAsDuration
defaulter_test.go:330: test Defaulter{AsDuration} 0: value '1s' without error and default 1s
defaulter_test.go:330: test Defaulter{AsDuration} 1: value '1s' with error and default 1m0s
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value returned with error: 1s
defaulter_test.go:330: test Defaulter{AsDuration} 2: value '2' without error and default 1m0s
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value has illegal format for "duration": time: missing unit in duration 2
defaulter_test.go:330: test Defaulter{AsDuration} 3: value '1 hour' without error and default 1m0s
2018-03-27 15:19:17 Z [ERROR] [github.com/tideland/golib/stringex] (AsDuration) value has illegal format for "duration": time: unknown unit hour in duration 1 hour
defaulter_test.go:330: test Defaulter{AsDuration} 4: value '4711h' without error and default 1m0s
--- PASS: TestAsDuration (0.00s)
=== RUN TestDefaulterString
--- PASS: TestDefaulterString (0.00s)
=== RUN TestSplitFilter
=== RUN TestSplitFilter/all_fine
stringex_test.go:80: splitfilter 0: all fine
=== RUN TestSplitFilter/filter_empty_parts
stringex_test.go:80: splitfilter 1: filter empty parts
=== RUN TestSplitFilter/filter_all_parts
stringex_test.go:80: splitfilter 2: filter all parts
=== RUN TestSplitFilter/filter_empty_input
stringex_test.go:80: splitfilter 3: filter empty input
=== RUN TestSplitFilter/filter_not_splitted
stringex_test.go:80: splitfilter 4: filter not splitted
--- PASS: TestSplitFilter (0.00s)
--- PASS: TestSplitFilter/all_fine (0.00s)
--- PASS: TestSplitFilter/filter_empty_parts (0.00s)
--- PASS: TestSplitFilter/filter_all_parts (0.00s)
--- PASS: TestSplitFilter/filter_empty_input (0.00s)
--- PASS: TestSplitFilter/filter_not_splitted (0.00s)
=== RUN TestSplitMap
=== RUN TestSplitMap/uppercase_all
stringex_test.go:144: splitmap 0: uppercase all
=== RUN TestSplitMap/filter_empty_parts,_uppercase_the_rest
stringex_test.go:144: splitmap 1: filter empty parts, uppercase the rest
=== RUN TestSplitMap/filter_all_parts
stringex_test.go:144: splitmap 2: filter all parts
=== RUN TestSplitMap/encapsulate_even_empty_input
stringex_test.go:144: splitmap 3: encapsulate even empty input
=== RUN TestSplitMap/uppercase_not_splitted
stringex_test.go:144: splitmap 4: uppercase not splitted
--- PASS: TestSplitMap (0.00s)
--- PASS: TestSplitMap/uppercase_all (0.00s)
--- PASS: TestSplitMap/filter_empty_parts,_uppercase_the_rest (0.00s)
--- PASS: TestSplitMap/filter_all_parts (0.00s)
--- PASS: TestSplitMap/encapsulate_even_empty_input (0.00s)
--- PASS: TestSplitMap/uppercase_not_splitted (0.00s)
PASS
ok github.com/tideland/golib/stringex 0.009s
=== RUN TestTimeContainments
--- PASS: TestTimeContainments (0.00s)
=== RUN TestBeginOf
--- PASS: TestBeginOf (0.00s)
=== RUN TestEndOf
--- PASS: TestEndOf (0.00s)
=== RUN TestCrontabKeep
2018-03-27 15:19:18 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" starts
--- PASS: TestCrontabKeep (0.05s)
=== RUN TestCrontabRemove
2018-03-27 15:19:18 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" stopped
2018-03-27 15:19:18 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" starts
2018-03-27 15:19:18 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" stopped
--- PASS: TestCrontabRemove (0.25s)
=== RUN TestCrontabError
2018-03-27 15:19:18 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" starts
2018-03-27 15:19:18 Z [ERROR] [github.com/tideland/golib/timex.(*Crontab).do] job "remove" removed after error: failed
2018-03-27 15:19:19 Z [INFO] [github.com/tideland/golib/loop] loop "crontab::10ms" stopped
--- PASS: TestCrontabError (0.25s)
=== RUN TestRetrySuccess
--- PASS: TestRetrySuccess (0.20s)
=== RUN TestRetryFuncError
--- PASS: TestRetryFuncError (0.00s)
=== RUN TestRetryTooLong
--- PASS: TestRetryTooLong (0.05s)
=== RUN TestRetryTooOften
--- PASS: TestRetryTooOften (0.08s)
PASS
ok github.com/tideland/golib/timex 0.892s
=== RUN TestNew
version_test.go:98: new test #0: "1.2.3"
version_test.go:98: new test #1: "1.0.3"
version_test.go:98: new test #2: "1.2.3-alpha.2014-08-03"
version_test.go:98: new test #3: "1.2.3-alphabeta.7.11"
version_test.go:98: new test #4: "1.2.3+007.a"
version_test.go:98: new test #5: "1.2.3-alpha+007.a"
version_test.go:98: new test #6: "1.2.3-ALPHA+007.a"
--- PASS: TestNew (0.00s)
=== RUN TestParse
version_test.go:212: parse test #0: "1"
version_test.go:212: parse test #1: "1.1"
version_test.go:212: parse test #2: "1.2.3"
version_test.go:212: parse test #3: "1.0.3"
version_test.go:212: parse test #4: "1.2.3-alpha.2016-11-14"
version_test.go:212: parse test #5: "1.2.3-alphabeta.7.11"
version_test.go:212: parse test #6: "1.2.3+007.a"
version_test.go:212: parse test #7: "1.2.3-alpha+007.a"
version_test.go:212: parse test #8: "1.2.3-ALPHA+007.a"
version_test.go:212: parse test #9: ""
version_test.go:212: parse test #10: "a"
version_test.go:212: parse test #11: "1.a"
version_test.go:212: parse test #12: "1,1"
version_test.go:212: parse test #13: "-1"
version_test.go:212: parse test #14: "1.-1"
version_test.go:212: parse test #15: "+"
--- PASS: TestParse (0.00s)
=== RUN TestCompare
version_test.go:320: compare test #0: "1.2.3" <> "1.2.3" -> 0 / all
version_test.go:320: compare test #1: "1.2.3" <> "1.2.4" -> -1 / patch
version_test.go:320: compare test #2: "1.2.3" <> "1.3.3" -> -1 / minor
version_test.go:320: compare test #3: "1.2.3" <> "2.2.3" -> -1 / major
version_test.go:320: compare test #4: "3.2.1" <> "1.2.3" -> 1 / major
version_test.go:320: compare test #5: "1.2.3-alpha" <> "1.2.3" -> -1 / pre-release
version_test.go:320: compare test #6: "1.2.3-alpha.1" <> "1.2.3-alpha" -> -1 / pre-release
version_test.go:320: compare test #7: "1.2.3-alpha.1" <> "1.2.3-alpha.2" -> -1 / pre-release
version_test.go:320: compare test #8: "1.2.3-alpha.4711" <> "1.2.3-alpha.471" -> 1 / pre-release
version_test.go:320: compare test #9: "1.2.3-alpha.48" <> "1.2.3-alpha.4711" -> -1 / pre-release
version_test.go:320: compare test #10: "1.2.3+alpha.1" <> "1.2.3+alpha.2" -> 0 / all
version_test.go:320: compare test #11: "1.2.3+alpha.2" <> "1.2.3+alpha.1" -> 0 / all
version_test.go:320: compare test #12: "1.2.3-alpha+alpha.2" <> "1.2.3-alpha+alpha.1" -> 0 / all
version_test.go:320: compare test #13: "1.2.3-alpha.48+alpha.2" <> "1.2.3-alpha.4711+alpha.1" -> -1 / pre-release
version_test.go:320: compare test #14: "1.2.3-alpha.2" <> "1.2.3-alpha.1b" -> 1 / pre-release
--- PASS: TestCompare (0.00s)
=== RUN TestLess
version_test.go:399: less test #0: "1.2.3" <> "1.2.3" -> false
version_test.go:399: less test #1: "1.2.3" <> "1.2.4" -> true
version_test.go:399: less test #2: "1.2.3" <> "1.3.3" -> true
version_test.go:399: less test #3: "1.2.3" <> "2.2.3" -> true
version_test.go:399: less test #4: "3.2.1" <> "1.2.3" -> false
version_test.go:399: less test #5: "1.2.3-alpha" <> "1.2.3" -> true
version_test.go:399: less test #6: "1.2.3-alpha.1" <> "1.2.3-alpha" -> true
version_test.go:399: less test #7: "1.2.3-alpha.1" <> "1.2.3-alpha.2" -> true
version_test.go:399: less test #8: "1.2.3-alpha.4711" <> "1.2.3-alpha.471" -> false
version_test.go:399: less test #9: "1.2.3-alpha.48" <> "1.2.3-alpha.4711" -> true
version_test.go:399: less test #10: "1.2.3+alpha.1" <> "1.2.3+alpha.2" -> false
version_test.go:399: less test #11: "1.2.3+alpha.2" <> "1.2.3+alpha.1" -> false
version_test.go:399: less test #12: "1.2.3-alpha+alpha.2" <> "1.2.3-alpha+alpha.1" -> false
version_test.go:399: less test #13: "1.2.3-alpha.48+alpha.2" <> "1.2.3-alpha.4711+alpha.1" -> true
version_test.go:399: less test #14: "1.2.3-alpha.2" <> "1.2.3-alpha.1b" -> false
--- PASS: TestLess (0.00s)
PASS
ok github.com/tideland/golib/version 0.010s
dh_auto_test: go test -v -p 1 -short github.com/tideland/golib/audit github.com/tideland/golib/cache github.com/tideland/golib/collections github.com/tideland/golib/errors github.com/tideland/golib/etc github.com/tideland/golib/feed/atom github.com/tideland/golib/feed/rss github.com/tideland/golib/feed/utils github.com/tideland/golib/identifier github.com/tideland/golib/logger github.com/tideland/golib/loop github.com/tideland/golib/mapreduce github.com/tideland/golib/monitoring github.com/tideland/golib/numerics github.com/tideland/golib/redis github.com/tideland/golib/scene github.com/tideland/golib/scroller github.com/tideland/golib/sml github.com/tideland/golib/sort github.com/tideland/golib/stringex github.com/tideland/golib/timex github.com/tideland/golib/version returned exit code 1

Add Diff() to package GJP

Function gjp.Diff(a,b []byte, separator string) (Diff, error).

Diff provides:

  • DocumentA()and DocumentB()
  • Differences() []string where the strings are the paths containing differences
  • DifferenceAt(path string) (Values, error) returns the different values at the given path

Values provides:

  • ValueA() Value
  • ValueB() Value

Add Assertion.WaitTested()

  • Like Assertion.Wait()
  • Second argument is a function having and interface for the received data as argument and an error as return value
  • WaitTested() runs the function passing the retrieved data and tests the returned error for nil
  • Inside the function the user can add more assertions

possible race condition on cell.subscribers

Using go build -race I noticed a race condition when using cell.SubscribersDo().

In cell.backendLoop() there is a write to c.subscribers after reading from the subscriberc channel. The SubscribersDo should probably go through a ReadLock?

Basic usage information for getting started with logger

Today I got a little stuck when starting to use logger. I had to scan reference documentation to figure it out. A little getting started or basic usage guide would had helped me to save some time and get the concept of e.g. different loggers (like Gologger, StandardLogger, etc.).

I've created very basic usage information for logger and pushed it to https://github.com/vondeetzen/golib in order to get some feedback. Thanks in advance.

cell.ProcessEvent

https://github.com/tideland/golib/blob/master/cells/cell.go#L137

This should probably use <-time.After(time.Second) rather than a straight time.Sleep(). I don't have a test case for it yet, but I did see in some of my code where if eventc got backed up a little then the ProcessEvent loop would pause for one second, even though it was able to continue processing after only a few milliseconds.

func (c *cell) ProcessEvent(event Event) error {
    start := time.Now()
    for {
        select {
        case c.eventc <- event:
            return nil
        case <-c.loop.IsStopping():
            return errors.New(ErrInactive, errorMessages, c.id)
        case <-time.After(time.Second):
            now := time.Now()
            if now.Sub(start) > c.emitTimeout {
                op := fmt.Sprintf("emitting %q to %q", event.Topic(), c.id)
                return errors.New(ErrTimeout, errorMessages, op)
            }
        }
    }
}

cells: add cell individual buffer size

Add a behavior optional interface

type BehaviorBufferSize interface {
    BufferSize() int
}

If a behavior implements it too, then the cell event buffer size is set by the returned value.

Redesign of bad and inflexible caching approach

  • Individual caches instead of a central one
  • Cacheable objects are defined by implementing interfaces
  • Loading is done asynchronously
  • Cached or loaded instance or error are delivered via channel inside of getter
  • Getter variant with timeout

Add query method to GJP document

  • Query(query string) (PathValue, error)
  • query is a path with wildcard elements
  • PathValues is a slice of PathValue which are a combination of the matching path and its value

Add SetCallstackOffset() to audit.Assertion

  • Needed for the determination of the line number of an assert
  • Shall be changeable by packages with own asserts using the audit package
  • Returns a reset() function to be called with defer resetting the offset to standard

Color

I can create this file:

package main
import (
   "github.com/tideland/golib/logger"
)
func main() {
   logger.Infof("aaaaa bbbbb")
}

but it outputs in black and white. Is color an option?

New package gjp for a generic access to JSON documents

gjp stands for Generic JSON Parser.

Initial call is

doc, err := gjp.Parse(data)

where data is []byte.

doc of type Document then provides methods like etc.Etc to retrieve typed values with a default by path. If the path contains integers the according JSON part will be interpreted as list. If this doesn't work the number is treated as a regular field.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.