Add Smoke Test

Signed-off-by: AKP <tom@tdpain.net>
This commit is contained in:
akp 2022-09-26 01:14:43 +01:00
parent 9e9ce16b38
commit 4690c7a22d
No known key found for this signature in database
GPG key ID: AA5726202C8879B7
3 changed files with 97 additions and 0 deletions

5
go.mod
View file

@ -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
View 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
View 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
}