You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
2.0 KiB
125 lines
2.0 KiB
package closer_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"syscall"
|
|
"time"
|
|
|
|
"gitoa.ru/go-4devs/closer"
|
|
"gitoa.ru/go-4devs/closer/priority"
|
|
"gitoa.ru/go-4devs/closer/test"
|
|
)
|
|
|
|
func ExampleWait() {
|
|
ctx, cancel := context.WithTimeout(context.TODO(), time.Microsecond)
|
|
defer cancel()
|
|
|
|
closer.SetErrHandler(func(err error) {
|
|
fmt.Print("\nlogged err:", err.Error())
|
|
})
|
|
|
|
closer.Add(func() error {
|
|
fmt.Print("do some close. ")
|
|
|
|
return nil
|
|
})
|
|
|
|
closer.AddFirst(func() error {
|
|
fmt.Print("close http server for example. ")
|
|
|
|
return nil
|
|
})
|
|
|
|
closer.AddLast(func() error {
|
|
fmt.Print("close db for example.")
|
|
|
|
return nil
|
|
})
|
|
|
|
closer.AddByPriority(priority.Last-1, func() error {
|
|
return test.ErrClose
|
|
})
|
|
|
|
closer.Wait(ctx)
|
|
// Output:
|
|
// close http server for example. do some close. close db for example.
|
|
// logged err:some error
|
|
}
|
|
|
|
func ExampleClose() {
|
|
closer.Add(func() error {
|
|
// normal stop.
|
|
|
|
return nil
|
|
}, func() error {
|
|
time.Sleep(time.Millisecond)
|
|
// long normal stop.
|
|
|
|
return nil
|
|
})
|
|
|
|
closer.AddFirst(func() error {
|
|
// first stop.
|
|
|
|
return nil
|
|
})
|
|
closer.AddLast(func() error {
|
|
// last stop.
|
|
|
|
return nil
|
|
})
|
|
|
|
closer.AddByPriority(priority.First+1, func() error {
|
|
// run before first.
|
|
|
|
return nil
|
|
})
|
|
|
|
closer.AddByPriority(priority.Normal-1, func() error {
|
|
// run after normal.
|
|
|
|
return nil
|
|
})
|
|
closer.Close()
|
|
}
|
|
|
|
func ExampleWait_cancelContext() {
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Microsecond)
|
|
defer cancel()
|
|
|
|
closer.Add(func() error {
|
|
// do some close with cancel context
|
|
|
|
return nil
|
|
})
|
|
|
|
closer.Wait(ctx)
|
|
}
|
|
|
|
func ExampleSetErrHandler() {
|
|
closer.SetErrHandler(func(err error) {
|
|
log.Print("logged err:", err.Error())
|
|
})
|
|
|
|
closer.Add(func() error {
|
|
return test.ErrClose
|
|
})
|
|
|
|
closer.Close()
|
|
}
|
|
|
|
func ExampleWait_syscall() {
|
|
time.AfterFunc(time.Millisecond, func() {
|
|
_ = syscall.Kill(syscall.Getpid(), syscall.SIGTERM)
|
|
})
|
|
|
|
closer.Add(func() error {
|
|
// do some close with SIGTERM
|
|
|
|
return nil
|
|
})
|
|
|
|
closer.Wait(context.TODO(), syscall.SIGTERM)
|
|
}
|
|
|