Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate to GitHub actions for coverage & unit test automation #251

Merged
merged 2 commits into from
Jan 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/workflows/go_cov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Go
on:
push:
pull_request:
schedule:
# Run every 12 hours, at the 15 minute mark. E.g.
# 2020-11-29 00:15:00 UTC, 2020-11-29 12:15:00 UTC, 2020-11-30 00:15:00 UTC
- cron: '15 */12 * * *'
jobs:

build:
name: Build and Unit Test
runs-on: ubuntu-latest
steps:

- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: ^1.13

- name: Check out code
uses: actions/checkout@v2

- name: Build
run: go build -v ./...

- name: Test
run: go test -v -race -covermode=atomic -coverprofile=coverage.out ./...

- name: Upload Coverage
uses: shogo82148/actions-goveralls@v1
with:
path-to-profile: coverage.out
25 changes: 25 additions & 0 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: golangci-lint
on:
push:
tags:
- v*
branches:
- master
pull_request:
schedule:
# Run every 12 hours, at the 15 minute mark. E.g.
# 2020-11-29 00:15:00 UTC, 2020-11-29 12:15:00 UTC, 2020-11-30 00:15:00 UTC
- cron: '15 */12 * * *'
jobs:
golangci:
name: Lint Sourcecode
runs-on: ubuntu-latest
steps:

- name: Check out code
uses: actions/checkout@v2

- name: Run golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: v1.35
13 changes: 0 additions & 13 deletions .travis.yml

This file was deleted.

10 changes: 5 additions & 5 deletions api.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ func webRegisterPost(w http.ResponseWriter, r *http.Request, _ httprouter.Params
var err error
aTXT := ACMETxt{}
bdata, _ := ioutil.ReadAll(r.Body)
if bdata != nil && len(bdata) > 0 {
if len(bdata) > 0 {
err = json.Unmarshal(bdata, &aTXT)
if err != nil {
regStatus = http.StatusBadRequest
reg = jsonError("malformed_json_payload")
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(regStatus)
w.Write(reg)
_, _ = w.Write(reg)
return
}
}
Expand All @@ -44,7 +44,7 @@ func webRegisterPost(w http.ResponseWriter, r *http.Request, _ httprouter.Params
reg = jsonError("invalid_allowfrom_cidr")
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(regStatus)
w.Write(reg)
_, _ = w.Write(reg)
return
}

Expand All @@ -68,7 +68,7 @@ func webRegisterPost(w http.ResponseWriter, r *http.Request, _ httprouter.Params
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(regStatus)
w.Write(reg)
_, _ = w.Write(reg)
}

func webUpdatePost(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
Expand Down Expand Up @@ -104,7 +104,7 @@ func webUpdatePost(w http.ResponseWriter, r *http.Request, _ httprouter.Params)
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(updStatus)
w.Write(upd)
_, _ = w.Write(upd)
}

// Endpoint used to check the readiness and/or liveness (health) of the server.
Expand Down
12 changes: 2 additions & 10 deletions api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -325,10 +325,6 @@ func TestApiUpdateWithCredentialsMockDB(t *testing.T) {
func TestApiManyUpdateWithCredentials(t *testing.T) {
validTxtData := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

updateJSON := map[string]interface{}{
"subdomain": "",
"txt": ""}

router := setupRouter(true, false)
server := httptest.NewServer(router)
defer server.Close()
Expand Down Expand Up @@ -370,7 +366,7 @@ func TestApiManyUpdateWithCredentials(t *testing.T) {
{newUserWithValidCIDR.Username.String(), newUserWithValidCIDR.Password, newUserWithValidCIDR.Subdomain, validTxtData, 200},
{newUser.Username.String(), "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", newUser.Subdomain, validTxtData, 401},
} {
updateJSON = map[string]interface{}{
updateJSON := map[string]interface{}{
"subdomain": test.subdomain,
"txt": test.txt}
e.POST("/update").
Expand All @@ -385,10 +381,6 @@ func TestApiManyUpdateWithCredentials(t *testing.T) {

func TestApiManyUpdateWithIpCheckHeaders(t *testing.T) {

updateJSON := map[string]interface{}{
"subdomain": "",
"txt": ""}

router := setupRouter(false, false)
server := httptest.NewServer(router)
defer server.Close()
Expand Down Expand Up @@ -425,7 +417,7 @@ func TestApiManyUpdateWithIpCheckHeaders(t *testing.T) {
{newUserWithIP6CIDR, "2002:c0a7:0ff::0", 401},
{newUserWithIP6CIDR, "2002:c0a8:d3ad:b33f:c0ff:33b4:dc0d:3b4d", 200},
} {
updateJSON = map[string]interface{}{
updateJSON := map[string]interface{}{
"subdomain": test.user.Subdomain,
"txt": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}
e.POST("/update").
Expand Down
2 changes: 1 addition & 1 deletion auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ func Auth(update httprouter.Handle) httprouter.Handle {
} else {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
w.Write(jsonError("forbidden"))
_, _ = w.Write(jsonError("forbidden"))
}
}
}
Expand Down
22 changes: 11 additions & 11 deletions db.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ var txtTablePG = `

// getSQLiteStmt replaces all PostgreSQL prepared statement placeholders (eg. $1, $2) with SQLite variant "?"
func getSQLiteStmt(s string) string {
re, _ := regexp.Compile("\\$[0-9]")
re, _ := regexp.Compile(`\$[0-9]`)
return re.ReplaceAllString(s, "?")
}

Expand All @@ -68,12 +68,12 @@ func (d *acmedb) Init(engine string, connection string) error {
if versionString == "" {
versionString = "0"
}
_, err = d.DB.Exec(acmeTable)
_, err = d.DB.Exec(userTable)
_, _ = d.DB.Exec(acmeTable)
_, _ = d.DB.Exec(userTable)
if Config.Database.Engine == "sqlite3" {
_, err = d.DB.Exec(txtTable)
_, _ = d.DB.Exec(txtTable)
} else {
_, err = d.DB.Exec(txtTablePG)
_, _ = d.DB.Exec(txtTablePG)
}
// If everything is fine, handle db upgrade tasks
if err == nil {
Expand Down Expand Up @@ -136,10 +136,10 @@ func (d *acmedb) handleDBUpgradeTo1() error {
// Rollback if errored, commit if not
defer func() {
if err != nil {
tx.Rollback()
_ = tx.Rollback()
return
}
tx.Commit()
_ = tx.Commit()
}()
_, _ = tx.Exec("DELETE FROM txt")
for _, subdomain := range subdomains {
Expand All @@ -165,8 +165,8 @@ func (d *acmedb) handleDBUpgradeTo1() error {
func (d *acmedb) NewTXTValuesInTransaction(tx *sql.Tx, subdomain string) error {
var err error
instr := fmt.Sprintf("INSERT INTO txt (Subdomain, LastUpdate) values('%s', 0)", subdomain)
_, err = tx.Exec(instr)
_, err = tx.Exec(instr)
_, _ = tx.Exec(instr)
_, _ = tx.Exec(instr)
return err
}

Expand All @@ -178,10 +178,10 @@ func (d *acmedb) Register(afrom cidrslice) (ACMETxt, error) {
// Rollback if errored, commit if not
defer func() {
if err != nil {
tx.Rollback()
_ = tx.Rollback()
return
}
tx.Commit()
_ = tx.Commit()
}()
a := newACMETxt()
a.AllowFrom = cidrslice(afrom.ValidEntries())
Expand Down
10 changes: 3 additions & 7 deletions dns.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ func (d *DNSServer) handleRequest(w dns.ResponseWriter, r *dns.Msg) {
d.readQuery(m)
}
}
w.WriteMsg(m)
_ = w.WriteMsg(m)
}

func (d *DNSServer) readQuery(m *dns.Msg) {
Expand All @@ -119,9 +119,7 @@ func (d *DNSServer) readQuery(m *dns.Msg) {
authoritative = auth
}
m.MsgHdr.Rcode = rc
for _, r := range rr {
m.Answer = append(m.Answer, r)
}
m.Answer = append(m.Answer, rr...)
}
}
m.MsgHdr.Authoritative = authoritative
Expand Down Expand Up @@ -208,9 +206,7 @@ func (d *DNSServer) answer(q dns.Question) ([]dns.RR, int, bool, error) {
txtRRs, err = d.answerTXT(q)
}
if err == nil {
for _, txtRR := range txtRRs {
r = append(r, txtRR)
}
r = append(r, txtRRs...)
}
}
if len(r) > 0 {
Expand Down
3 changes: 0 additions & 3 deletions dns_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ import (
"github.com/miekg/dns"
)

var resolv resolver
var server *dns.Server

type resolver struct {
server string
}
Expand Down
5 changes: 2 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,12 @@ func main() {
go startHTTPAPI(errChan, Config, dnsservers)

// block waiting for error
select {
case err = <-errChan:
for {
err = <-errChan
if err != nil {
log.Fatal(err)
}
}
log.Debugf("Shutting down...")
}

func startHTTPAPI(errChan chan error, config DNSConfig, dnsservers []*DNSServer) {
Expand Down
2 changes: 1 addition & 1 deletion main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func TestMain(m *testing.M) {
go dnsserver.Start(make(chan error, 1))
wg.Wait()
exitval := m.Run()
dnsserver.Server.Shutdown()
_ = dnsserver.Server.Shutdown()
DB.Close()
os.Exit(exitval)
}
Expand Down
3 changes: 0 additions & 3 deletions types.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ type DNSConfig struct {
Logconfig logconfig
}

// Auth middleware
type authMiddleware struct{}

// Config file general section
type general struct {
Listen string
Expand Down
4 changes: 2 additions & 2 deletions util.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,13 @@ func prepareConfig(conf DNSConfig) (DNSConfig, error) {

func sanitizeString(s string) string {
// URL safe base64 alphabet without padding as defined in ACME
re, _ := regexp.Compile("[^A-Za-z\\-\\_0-9]+")
re, _ := regexp.Compile(`[^A-Za-z\-\_0-9]+`)
return re.ReplaceAllString(s, "")
}

func sanitizeIPv6addr(s string) string {
// Remove brackets from IPv6 addresses, net.ParseCIDR needs this
re, _ := regexp.Compile("[\\[\\]]+")
re, _ := regexp.Compile(`[\[\]]+`)
return re.ReplaceAllString(s, "")
}

Expand Down
4 changes: 2 additions & 2 deletions util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,11 +104,11 @@ func TestFileCheckPermissionDenied(t *testing.T) {
t.Error("Could not create temporary file")
}
defer os.Remove(tmpfile.Name())
syscall.Chmod(tmpfile.Name(), 0000)
_ = syscall.Chmod(tmpfile.Name(), 0000)
if fileIsAccessible(tmpfile.Name()) {
t.Errorf("File should not be accessible")
}
syscall.Chmod(tmpfile.Name(), 0644)
_ = syscall.Chmod(tmpfile.Name(), 0644)
}

func TestFileCheckNotExists(t *testing.T) {
Expand Down
4 changes: 1 addition & 3 deletions validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@ package main

import (
"unicode/utf8"
"regexp"

"github.com/google/uuid"
"golang.org/x/crypto/bcrypt"

"regexp"
)

func getValidUsername(u string) (uuid.UUID, error) {
Expand All @@ -32,7 +31,6 @@ func validSubdomain(s string) bool {
return RegExp.MatchString(s)
}


func validTXT(s string) bool {
sn := sanitizeString(s)
if utf8.RuneCountInString(s) == 43 && utf8.RuneCountInString(sn) == 43 {
Expand Down