mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
c4f5fae561
Former-commit-id: bd5463a169a36b078dba1c1b6e7dd3ffbd627617
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
// white-box testing
|
|
package host
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type myTestTask struct {
|
|
delay time.Duration
|
|
logger *log.Logger
|
|
}
|
|
|
|
func (m myTestTask) Run(proc TaskProcess) {
|
|
ticker := time.NewTicker(m.delay)
|
|
defer ticker.Stop()
|
|
rans := 0
|
|
for {
|
|
select {
|
|
case _, ok := <-ticker.C:
|
|
{
|
|
if !ok {
|
|
m.logger.Println("ticker issue, closed channel, exiting from this task...")
|
|
return
|
|
}
|
|
rans++
|
|
m.logger.Println(fmt.Sprintf("%d", rans))
|
|
}
|
|
case <-proc.Done():
|
|
{
|
|
m.logger.Println("canceled, exiting from task AND SHUTDOWN the server...")
|
|
proc.Host().Shutdown(context.TODO())
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func SchedulerSchedule() {
|
|
h := New(&http.Server{
|
|
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
}),
|
|
})
|
|
logger := log.New(os.Stdout, "Supervisor: ", 0)
|
|
|
|
delaySeconds := 2
|
|
|
|
mytask := myTestTask{
|
|
delay: time.Duration(delaySeconds) * time.Second,
|
|
logger: logger,
|
|
}
|
|
|
|
cancel := h.Schedule(mytask)
|
|
ln, err := net.Listen("tcp4", ":9090")
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
|
|
logger.Println("server started...")
|
|
logger.Println("we will cancel the task after 2 runs (the third will be canceled)")
|
|
cancelAfterRuns := 2
|
|
time.AfterFunc(time.Duration(delaySeconds*cancelAfterRuns+(delaySeconds/2))*time.Second, func() {
|
|
cancel()
|
|
logger.Println("cancel sent")
|
|
})
|
|
h.Serve(ln)
|
|
|
|
// Output:
|
|
// Supervisor: server started...
|
|
// Supervisor: we will cancel the task after 2 runs (the third will be canceled)
|
|
// Supervisor: 1
|
|
// Supervisor: 2
|
|
// Supervisor: cancel sent
|
|
// Supervisor: canceled, exiting from task AND SHUTDOWN the server...
|
|
}
|