Add Smoke Test
Signed-off-by: AKP <tom@tdpain.net>
This commit is contained in:
parent
9e9ce16b38
commit
4690c7a22d
3 changed files with 97 additions and 0 deletions
5
go.mod
5
go.mod
|
@ -1,3 +1,8 @@
|
|||
module git.tdpain.net/codemicro/protohackers
|
||||
|
||||
go 1.19
|
||||
|
||||
require (
|
||||
github.com/alexflint/go-arg v1.4.3 // indirect
|
||||
github.com/alexflint/go-scalar v1.1.0 // indirect
|
||||
)
|
||||
|
|
12
go.sum
Normal file
12
go.sum
Normal file
|
@ -0,0 +1,12 @@
|
|||
github.com/alexflint/go-arg v1.4.3 h1:9rwwEBpMXfKQKceuZfYcwuc/7YY7tWJbFsgG5cAU/uo=
|
||||
github.com/alexflint/go-arg v1.4.3/go.mod h1:3PZ/wp/8HuqRZMUUgu7I+e1qcpUbvmS258mRXkFH4IA=
|
||||
github.com/alexflint/go-scalar v1.1.0 h1:aaAouLLzI9TChcPXotr6gUhq+Scr8rl0P9P4PnltbhM=
|
||||
github.com/alexflint/go-scalar v1.1.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
80
smokeTest/main.go
Normal file
80
smokeTest/main.go
Normal file
|
@ -0,0 +1,80 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/alexflint/go-arg"
|
||||
"io"
|
||||
"net"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Address string `default:"127.0.0.1:9000"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
conf := new(Config)
|
||||
arg.MustParse(conf)
|
||||
|
||||
if err := run(conf); err != nil {
|
||||
_, _ = fmt.Fprintf(os.Stderr, "Fatal error: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func run(conf *Config) error {
|
||||
|
||||
stopSig := make(chan os.Signal, 1)
|
||||
signal.Notify(stopSig, syscall.SIGINT)
|
||||
|
||||
listener, err := net.Listen("tcp", conf.Address)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer listener.Close()
|
||||
|
||||
_, _ = fmt.Fprintf(os.Stderr, "Listening on %s\n", conf.Address)
|
||||
|
||||
connChan := make(chan net.Conn, 256)
|
||||
go func() {
|
||||
for {
|
||||
conn, err := listener.Accept()
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintf(os.Stderr, "Failed to accept connection: %v", err)
|
||||
return
|
||||
}
|
||||
connChan <- conn
|
||||
}
|
||||
}()
|
||||
|
||||
loop:
|
||||
for {
|
||||
select {
|
||||
case <-stopSig:
|
||||
break loop
|
||||
case conn := <-connChan:
|
||||
go func() {
|
||||
err := handleConn(conn)
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintf(os.Stderr, "Error when handling connection: %s: %v\n", conn.RemoteAddr(), err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func handleConn(conn net.Conn) error {
|
||||
defer conn.Close()
|
||||
|
||||
if n, err := io.Copy(conn, conn); err != nil {
|
||||
return err
|
||||
} else {
|
||||
_, _ = fmt.Fprintf(os.Stderr, "Copied %d bytes for %s\n", n, conn.RemoteAddr())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in a new issue