Merge: *(global): CI scripts

Fix: #1042

* commit '8a05e61feb2a8b7c73c6f4c8f11c5a076c43170b':
  *: fix auth tests - don't leave repo dirty
  *: tests mustn't leave repo dirty
  *: change initDNSServer method, add getDataDir
  *: fix linter warnings
  *(global): fix travis config
  *(global): fix CI scripts
  *(global): CI scripts
This commit is contained in:
Andrey Meshkov 2019-10-02 17:26:47 +03:00
commit 423d311fcb
12 changed files with 72 additions and 24 deletions

1
.gitignore vendored
View File

@ -12,6 +12,7 @@
/querylog.json
/querylog.json.1
/a_main-packr.go
coverage.txt
# Test output
dnsfilter/tests/top-1m.csv

View File

@ -38,6 +38,9 @@ linters:
- gochecknoinits
- prealloc
- maligned
- godox
- funlen
- whitespace
- goconst # disabled until it's possible to configure
fast: true

View File

@ -3,7 +3,6 @@ sudo: false
go:
- 1.12.x
- 1.x
os:
- linux
- osx
@ -11,6 +10,7 @@ os:
before_install:
- nvm install node
- npm install -g npm
- curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(go env GOPATH)/bin v1.19.1
install:
- npm --prefix client install
@ -22,13 +22,7 @@ cache:
- $HOME/Library/Caches/go-build
script:
- node -v
- npm -v
# Run tests
- go test -race -v -bench=. -coverprofile=coverage.txt -covermode=atomic ./...
# Make
- make build/static/index.html
- make
- /bin/bash ci.sh
after_success:
- bash <(curl -s https://codecov.io/bash)

36
ci.sh Executable file
View File

@ -0,0 +1,36 @@
#!/bin/bash
set -e
set -x
echo "Starting AdGuard Home CI script"
# Print the current directory contents
ls -la
# Check versions and current directory
node -v
npm -v
go version
golangci-lint --version
# Run linter
golangci-lint run
# Run tests
go test -race -v -bench=. -coverprofile=coverage.txt -covermode=atomic ./...
# Make
make clean
make build/static/index.html
make
if [[ -z "$(git status --porcelain)" ]]; then
# Working directory clean
echo "Git status is clean"
else
echo "Git status is not clean and contains uncommited changes"
echo "Please make sure there are no changes"
exit 1
fi
echo "AdGuard Home CI script finished successfully"

View File

@ -3,6 +3,7 @@ package home
import (
"encoding/hex"
"os"
"path/filepath"
"testing"
"time"
@ -10,13 +11,17 @@ import (
)
func TestAuth(t *testing.T) {
fn := "./sessions.db"
config.ourWorkingDir = "."
fn := filepath.Join(config.getDataDir(), "sessions.db")
_ = os.RemoveAll(config.getDataDir())
defer func() { _ = os.RemoveAll(config.getDataDir()) }()
users := []User{
User{Name: "name", PasswordHash: "$2y$05$..vyzAECIhJPfaQiOK17IukcQnqEgKJHy0iETyYqxn3YXJl8yZuo2"},
}
os.Remove(fn)
config.ourWorkingDir = "."
os.MkdirAll(config.getDataDir(), 0755)
a := InitAuth(fn, users)
assert.True(t, a.CheckSession("notfound") == -1)

View File

@ -239,6 +239,11 @@ func (c *configuration) getConfigFilename() string {
return configFile
}
// getDataDir returns path to the directory where we store databases and filters
func (c *configuration) getDataDir() string {
return filepath.Join(c.ourWorkingDir, dataDir)
}
// getLogSettings reads logging settings from the config file.
// we do it in a separate method in order to configure logger before the actual configuration is parsed and applied.
func getLogSettings() logSettings {

View File

@ -7,7 +7,6 @@ import (
"net"
"net/http"
"os/exec"
"path/filepath"
"strconv"
"github.com/AdguardTeam/golibs/log"
@ -236,8 +235,7 @@ func handleInstallConfigure(w http.ResponseWriter, r *http.Request) {
config.DNS.BindHost = newSettings.DNS.IP
config.DNS.Port = newSettings.DNS.Port
dnsBaseDir := filepath.Join(config.ourWorkingDir, dataDir)
initDNSServer(dnsBaseDir)
initDNSServer()
err = startDNSServer()
if err != nil {
@ -263,7 +261,7 @@ func handleInstallConfigure(w http.ResponseWriter, r *http.Request) {
// until all requests are finished, and _we_ are inside a request right now, so it will block indefinitely
if restartHTTP {
go func() {
config.httpServer.Shutdown(context.TODO())
_ = config.httpServer.Shutdown(context.TODO())
}()
}

View File

@ -29,7 +29,9 @@ func onConfigModified() {
// initDNSServer creates an instance of the dnsforward.Server
// Please note that we must do it even if we don't start it
// so that we had access to the query log and the stats
func initDNSServer(baseDir string) {
func initDNSServer() {
baseDir := config.getDataDir()
err := os.MkdirAll(baseDir, 0755)
if err != nil {
log.Fatalf("Cannot create DNS data dir at %s: %s", baseDir, err)
@ -52,7 +54,7 @@ func initDNSServer(baseDir string) {
config.queryLog = querylog.New(conf)
config.dnsServer = dnsforward.NewServer(config.stats, config.queryLog)
sessFilename := filepath.Join(config.ourWorkingDir, "data/sessions.db")
sessFilename := filepath.Join(baseDir, "sessions.db")
config.auth = InitAuth(sessFilename, config.Users)
config.Users = nil
@ -65,6 +67,7 @@ func isRunning() bool {
return config.dnsServer != nil && config.dnsServer.IsRunning()
}
// nolint (gocyclo)
// Return TRUE if IP is within public Internet IP range
func isPublicIP(ip net.IP) bool {
ip4 := ip.To4()

View File

@ -1,12 +1,16 @@
package home
import (
"os"
"testing"
)
func TestResolveRDNS(t *testing.T) {
_ = os.RemoveAll(config.getDataDir())
defer func() { _ = os.RemoveAll(config.getDataDir()) }()
config.DNS.BindHost = "1.1.1.1"
initDNSServer(".")
initDNSServer()
if r := config.dnsctx.rdns.resolve("1.1.1.1"); r != "one.one.one.one" {
t.Errorf("resolveRDNS(): %s", r)
}

View File

@ -448,7 +448,7 @@ func (filter *filter) unload() {
// Path to the filter contents
func (filter *filter) Path() string {
return filepath.Join(config.ourWorkingDir, dataDir, filterDir, strconv.FormatInt(filter.ID, 10)+".txt")
return filepath.Join(config.getDataDir(), filterDir, strconv.FormatInt(filter.ID, 10)+".txt")
}
// LastTimeUpdated returns the time when the filter was last time updated

View File

@ -142,8 +142,7 @@ func run(args options) {
log.Fatal(err)
}
dnsBaseDir := filepath.Join(config.ourWorkingDir, dataDir)
initDNSServer(dnsBaseDir)
initDNSServer()
err = startDNSServer()
if err != nil {

View File

@ -271,7 +271,7 @@ func (r *Reader) BeginReadPrev(olderThan time.Time, count uint64) {
if int64(off) < maxEntrySize {
off = 0
}
r.fpos = uint64(off)
r.fpos = off
log.Debug("QueryLog: seek: %x", off)
_, err := r.f.Seek(int64(off), io.SeekStart)
if err != nil {
@ -376,7 +376,7 @@ func (r *Reader) prepareRead() bool {
if int64(off) < maxEntrySize {
off = 0
}
r.fpos = uint64(off)
r.fpos = off
log.Debug("QueryLog: seek: %x", off)
_, err = r.f.Seek(int64(off), io.SeekStart)
if err != nil {