1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00

dovecot: Include cli-based tests in the coverage tests

Many areas of the dovecot library are tested via chamuyero scripts, but
these were not being included in the coverage report.

This patch extends the dovecot-auth-cli tests so that they are now
coverage-aware.
This commit is contained in:
Alberto Bertogli
2018-06-04 01:18:24 +01:00
parent 5adb13311b
commit 36692b52d3
10 changed files with 64 additions and 14 deletions

View File

@@ -1,2 +1,3 @@
*.log *.log
dovecot-auth-cli dovecot-auth-cli
dovecot-auth-cli.test

View File

@@ -0,0 +1,33 @@
// This package is tested externally (see test.sh).
// However, we need this to do coverage tests.
//
// See coverage_test.go for the details, this is the same horrible hack.
//
// +build coveragebin
package main
import (
"os"
"os/signal"
"syscall"
"testing"
)
func TestRunMain(t *testing.T) {
done := make(chan bool)
signals := make(chan os.Signal, 1)
go func() {
<-signals
done <- true
}()
signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGTERM)
go func() {
main()
done <- true
}()
<-done
}

View File

@@ -0,0 +1,7 @@
#!/bin/bash
#
# Wrapper for dovecot-auth-cli to run when we build it in coverage mode.
exec ./dovecot-auth-cli.test -test.run ^TestRunMain$ \
-test.coverprofile="$COVER_DIR/test-`date +%s.%N`.out" \
"$@"

View File

@@ -6,26 +6,26 @@
package main package main
import ( import (
"flag"
"fmt" "fmt"
"os"
"blitiri.com.ar/go/chasquid/internal/dovecot" "blitiri.com.ar/go/chasquid/internal/dovecot"
) )
func main() { func main() {
a := dovecot.NewAuth(os.Args[1]+"-userdb", os.Args[1]+"-client") flag.Parse()
a := dovecot.NewAuth(flag.Arg(0)+"-userdb", flag.Arg(0)+"-client")
var ok bool var ok bool
var err error var err error
switch os.Args[2] { switch flag.Arg(1) {
case "exists": case "exists":
ok, err = a.Exists(os.Args[3]) ok, err = a.Exists(flag.Arg(2))
case "auth": case "auth":
ok, err = a.Authenticate(os.Args[3], os.Args[4]) ok, err = a.Authenticate(flag.Arg(2), flag.Arg(3))
default: default:
fmt.Printf("unknown subcommand\n") fmt.Printf("unknown subcommand\n")
os.Exit(1)
} }
if ok { if ok {
@@ -34,5 +34,4 @@ func main() {
} }
fmt.Printf("no: %v\n", err) fmt.Printf("no: %v\n", err)
os.Exit(1)
} }

View File

@@ -8,7 +8,13 @@ init
# Build the binary once, so we can use it and launch it in chamuyero scripts. # Build the binary once, so we can use it and launch it in chamuyero scripts.
# Otherwise, we not only spend time rebuilding it over and over, but also "go # Otherwise, we not only spend time rebuilding it over and over, but also "go
# run" masks the exit code, which is something we care about. # run" masks the exit code, which is something we care about.
go build dovecot-auth-cli.go if [ "${COVER_DIR}" != "" ]; then
go test -covermode=count -coverpkg=../../... -c \
$GOFLAGS -tags="coveragebin $GOTAGS"
cp coverage_wrapper dovecot-auth-cli
else
go build $GOFLAGS -tags="$GOTAGS" dovecot-auth-cli.go
fi
for i in *.cmy; do for i in *.cmy; do
if ! chamuyero $i > $i.log 2>&1 ; then if ! chamuyero $i > $i.log 2>&1 ; then
@@ -19,3 +25,4 @@ for i in *.cmy; do
done done
success success
exit 0

View File

@@ -18,4 +18,4 @@ client <- AUTH 1 PLAIN service=smtp secured no-penalty nologin resp=dXNlcm5hbWUA
client -> OTHER client -> OTHER
c <~ no: invalid response c <~ no: invalid response
c wait 1 c wait 0

View File

@@ -18,4 +18,4 @@ client <- AUTH 1 PLAIN service=smtp secured no-penalty nologin resp=dXNlcm5hbWUA
client -> FAIL 1 client -> FAIL 1
c <- no: <nil> c <- no: <nil>
c wait 1 c wait 0

View File

@@ -11,6 +11,5 @@ userdb <- USER 1 username service=smtp
userdb -> NOTFOUND 1 userdb -> NOTFOUND 1
c wait 1
c <- no: <nil> c <- no: <nil>
c wait 0

View File

@@ -1,8 +1,8 @@
c = ./dovecot-auth-cli .missingsocket exists username c = ./dovecot-auth-cli .missingsocket exists username
c <~ no: dial unix .missingsocket-userdb c <~ no: dial unix .missingsocket-userdb
c wait 1 c wait 0
c = ./dovecot-auth-cli .missingsocket auth username password c = ./dovecot-auth-cli .missingsocket auth username password
c <~ no: dial unix .missingsocket-client c <~ no: dial unix .missingsocket-client
c wait 1 c wait 0

View File

@@ -32,6 +32,10 @@ go test -tags coverage \
# Will run in coverage mode due to $COVER_DIR being set. # Will run in coverage mode due to $COVER_DIR being set.
setsid -w ./test/run.sh setsid -w ./test/run.sh
# dovecot tests are also coverage-aware.
echo "dovecot cli ..."
setsid -w ./cmd/dovecot-auth-cli/test.sh
# Merge all coverage output into a single file. # Merge all coverage output into a single file.
# Ignore protocol buffer-generated files, as they are not relevant. # Ignore protocol buffer-generated files, as they are not relevant.
go run "${UTILDIR}/gocovcat.go" .coverage/*.out \ go run "${UTILDIR}/gocovcat.go" .coverage/*.out \