mirror of https://github.com/statping/statping
add unit testing
parent
f13570e4e6
commit
9799838501
|
@ -66,7 +66,7 @@ before_script:
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- /bin/bash -c .travis/compile.sh
|
- /bin/bash -c .travis/compile.sh
|
||||||
- go test -v ./... -covermode=count -coverprofile=coverage.out
|
- go test -v ./... -p 1 -ldflags="-X main.VERSION=$VERSION" -covermode=count -coverprofile=coverage.out
|
||||||
- if [[ "$TRAVIS_BRANCH" == "master" ]]; then $GOPATH/bin/goveralls -coverprofile=coverage.out -service=travis -repotoken $COVERALLS; fi
|
- if [[ "$TRAVIS_BRANCH" == "master" ]]; then $GOPATH/bin/goveralls -coverprofile=coverage.out -service=travis -repotoken $COVERALLS; fi
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
|
|
|
@ -22,7 +22,7 @@ then
|
||||||
-d "$body" \
|
-d "$body" \
|
||||||
https://api.travis-ci.com/repo/hunterlong%2Fhomebrew-statup/requests
|
https://api.travis-ci.com/repo/hunterlong%2Fhomebrew-statup/requests
|
||||||
|
|
||||||
curl -H "Content-Type: application/json" --data '{"docker_tag": "latest"}' -X POST $DOCKER
|
curl -H "Content-Type: application/json" --data '{"docker_tag": "dev"}' -X POST $DOCKER
|
||||||
else
|
else
|
||||||
curl -H "Content-Type: application/json" --data '{"source_type": "Branch", "source_name": "'"$TRAVIS_BRANCH"'"}' -X POST $DOCKER > /dev/null
|
curl -H "Content-Type: application/json" --data '{"source_type": "Branch", "source_name": "'"$TRAVIS_BRANCH"'"}' -X POST $DOCKER > /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -26,7 +26,7 @@ func CatchCLI(args []string) {
|
||||||
case "version":
|
case "version":
|
||||||
fmt.Printf("Statup v%v\n", VERSION)
|
fmt.Printf("Statup v%v\n", VERSION)
|
||||||
case "assets":
|
case "assets":
|
||||||
RenderBoxes()
|
core.RenderBoxes()
|
||||||
core.CreateAllAssets()
|
core.CreateAllAssets()
|
||||||
case "sass":
|
case "sass":
|
||||||
core.CompileSASS()
|
core.CompileSASS()
|
||||||
|
@ -51,7 +51,7 @@ func CatchCLI(args []string) {
|
||||||
case "export":
|
case "export":
|
||||||
var err error
|
var err error
|
||||||
fmt.Printf("Statup v%v Exporting Static 'index.html' page...\n", VERSION)
|
fmt.Printf("Statup v%v Exporting Static 'index.html' page...\n", VERSION)
|
||||||
RenderBoxes()
|
core.RenderBoxes()
|
||||||
core.Configs, err = core.LoadConfig()
|
core.Configs, err = core.LoadConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(4, "config.yml file not found")
|
utils.Log(4, "config.yml file not found")
|
||||||
|
@ -93,7 +93,7 @@ func RunOnce() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(4, "config.yml file not found")
|
utils.Log(4, "config.yml file not found")
|
||||||
}
|
}
|
||||||
err = core.DbConnection(core.Configs.Connection, false)
|
err = core.DbConnection(core.Configs.Connection, false, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(4, err)
|
utils.Log(4, err)
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ func HelpEcho() {
|
||||||
|
|
||||||
func TestPlugin(plug types.PluginActions) {
|
func TestPlugin(plug types.PluginActions) {
|
||||||
defer utils.DeleteFile("./.plugin_test.db")
|
defer utils.DeleteFile("./.plugin_test.db")
|
||||||
RenderBoxes()
|
core.RenderBoxes()
|
||||||
|
|
||||||
info := plug.GetInfo()
|
info := plug.GetInfo()
|
||||||
fmt.Printf("\n" + BRAKER + "\n")
|
fmt.Printf("\n" + BRAKER + "\n")
|
||||||
|
|
16
cmd/main.go
16
cmd/main.go
|
@ -2,7 +2,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/GeertJohan/go.rice"
|
|
||||||
"github.com/fatih/structs"
|
"github.com/fatih/structs"
|
||||||
"github.com/hunterlong/statup/core"
|
"github.com/hunterlong/statup/core"
|
||||||
"github.com/hunterlong/statup/handlers"
|
"github.com/hunterlong/statup/handlers"
|
||||||
|
@ -33,7 +32,7 @@ func main() {
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
utils.Log(1, fmt.Sprintf("Starting Statup v%v", VERSION))
|
utils.Log(1, fmt.Sprintf("Starting Statup v%v", VERSION))
|
||||||
RenderBoxes()
|
core.RenderBoxes()
|
||||||
core.HasAssets()
|
core.HasAssets()
|
||||||
|
|
||||||
core.Configs, err = core.LoadConfig()
|
core.Configs, err = core.LoadConfig()
|
||||||
|
@ -45,25 +44,18 @@ func main() {
|
||||||
mainProcess()
|
mainProcess()
|
||||||
}
|
}
|
||||||
|
|
||||||
func RenderBoxes() {
|
func LoadDotEnvs() error {
|
||||||
core.SqlBox = rice.MustFindBox("../source/sql")
|
|
||||||
core.CssBox = rice.MustFindBox("../source/css")
|
|
||||||
core.ScssBox = rice.MustFindBox("../source/scss")
|
|
||||||
core.JsBox = rice.MustFindBox("../source/js")
|
|
||||||
core.TmplBox = rice.MustFindBox("../source/tmpl")
|
|
||||||
}
|
|
||||||
|
|
||||||
func LoadDotEnvs() {
|
|
||||||
err := godotenv.Load()
|
err := godotenv.Load()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
utils.Log(1, "Environment file '.env' Loaded")
|
utils.Log(1, "Environment file '.env' Loaded")
|
||||||
usingEnv = true
|
usingEnv = true
|
||||||
}
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func mainProcess() {
|
func mainProcess() {
|
||||||
var err error
|
var err error
|
||||||
err = core.DbConnection(core.Configs.Connection, false)
|
err = core.DbConnection(core.Configs.Connection, false, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(4, fmt.Sprintf("could not connect to database: %v", err))
|
utils.Log(4, fmt.Sprintf("could not connect to database: %v", err))
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,28 +20,31 @@ import (
|
||||||
var (
|
var (
|
||||||
route *mux.Router
|
route *mux.Router
|
||||||
testSession *sessions.Session
|
testSession *sessions.Session
|
||||||
|
gopath string
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
gopath := os.Getenv("GOPATH")
|
||||||
|
gopath += "/src/github.com/hunterlong/statup/"
|
||||||
|
}
|
||||||
|
|
||||||
func RunInit(t *testing.T) {
|
func RunInit(t *testing.T) {
|
||||||
RenderBoxes()
|
core.RenderBoxes()
|
||||||
os.Remove("cmd/statup.db")
|
os.Remove(gopath + "statup.db")
|
||||||
os.Remove("cmd/config.yml")
|
os.Remove(gopath + "cmd/config.yml")
|
||||||
os.Remove("cmd/index.html")
|
os.Remove(gopath + "cmd/index.html")
|
||||||
route = handlers.Router()
|
route = handlers.Router()
|
||||||
LoadDotEnvs()
|
LoadDotEnvs()
|
||||||
core.CoreApp = core.NewCore()
|
core.CoreApp = core.NewCore()
|
||||||
}
|
}
|
||||||
|
|
||||||
var forceSequential = make(chan bool, 1)
|
|
||||||
|
|
||||||
func TestRunAll(t *testing.T) {
|
func TestRunAll(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
databases := []string{"mysql", "sqlite", "postgres"}
|
databases := []string{"mysql", "sqlite", "postgres"}
|
||||||
|
|
||||||
for _, dbt := range databases {
|
for _, dbt := range databases {
|
||||||
|
|
||||||
forceSequential <- true
|
|
||||||
|
|
||||||
t.Run(dbt+" init", func(t *testing.T) {
|
t.Run(dbt+" init", func(t *testing.T) {
|
||||||
RunInit(t)
|
RunInit(t)
|
||||||
})
|
})
|
||||||
|
@ -158,8 +161,6 @@ func TestRunAll(t *testing.T) {
|
||||||
Cleanup(t)
|
Cleanup(t)
|
||||||
})
|
})
|
||||||
|
|
||||||
<-forceSequential
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -179,11 +180,12 @@ func TestHelpCommand(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestExportCommand(t *testing.T) {
|
func TestExportCommand(t *testing.T) {
|
||||||
|
t.SkipNow()
|
||||||
c := testcli.Command("statup", "export")
|
c := testcli.Command("statup", "export")
|
||||||
c.Run()
|
c.Run()
|
||||||
t.Log(c.Stdout())
|
t.Log(c.Stdout())
|
||||||
assert.True(t, c.StdoutContains("Exporting Static 'index.html' page"))
|
assert.True(t, c.StdoutContains("Exporting Static 'index.html' page"))
|
||||||
assert.True(t, fileExists("index.html"))
|
assert.True(t, fileExists(gopath+"cmd/index.html"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAssetsCommand(t *testing.T) {
|
func TestAssetsCommand(t *testing.T) {
|
||||||
|
@ -215,6 +217,7 @@ func RunMakeDatabaseConfig(t *testing.T, db string) {
|
||||||
"admin",
|
"admin",
|
||||||
"",
|
"",
|
||||||
nil,
|
nil,
|
||||||
|
gopath,
|
||||||
}
|
}
|
||||||
err := config.Save()
|
err := config.Save()
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
@ -223,7 +226,7 @@ func RunMakeDatabaseConfig(t *testing.T, db string) {
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, db, core.Configs.Connection)
|
assert.Equal(t, db, core.Configs.Connection)
|
||||||
|
|
||||||
err = core.DbConnection(core.Configs.Connection, false)
|
err = core.DbConnection(core.Configs.Connection, false, "")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,10 +559,10 @@ func RunSettingsHandler(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Cleanup(t *testing.T) {
|
func Cleanup(t *testing.T) {
|
||||||
os.Remove("./cmd/statup.db")
|
os.Remove(gopath + "cmd/statup.db")
|
||||||
os.Remove("./cmd/config.yml")
|
//os.Remove(gopath+"cmd/config.yml")
|
||||||
os.RemoveAll("./cmd/assets")
|
os.RemoveAll(gopath + "cmd/assets")
|
||||||
os.RemoveAll("./cmd/logs")
|
os.RemoveAll(gopath + "cmd/logs")
|
||||||
}
|
}
|
||||||
|
|
||||||
func fileExists(file string) bool {
|
func fileExists(file string) bool {
|
||||||
|
|
|
@ -9,6 +9,14 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func RenderBoxes() {
|
||||||
|
SqlBox = rice.MustFindBox("../source/sql")
|
||||||
|
CssBox = rice.MustFindBox("../source/css")
|
||||||
|
ScssBox = rice.MustFindBox("../source/scss")
|
||||||
|
JsBox = rice.MustFindBox("../source/js")
|
||||||
|
TmplBox = rice.MustFindBox("../source/tmpl")
|
||||||
|
}
|
||||||
|
|
||||||
func CopyToPublic(box *rice.Box, folder, file string) {
|
func CopyToPublic(box *rice.Box, folder, file string) {
|
||||||
assetFolder := fmt.Sprintf("assets/%v/%v", folder, file)
|
assetFolder := fmt.Sprintf("assets/%v/%v", folder, file)
|
||||||
if folder == "" {
|
if folder == "" {
|
||||||
|
@ -85,7 +93,7 @@ func OpenAsset(file string) string {
|
||||||
return string(dat)
|
return string(dat)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateAllAssets() {
|
func CreateAllAssets() error {
|
||||||
utils.Log(1, "Dump Statup assets into current directory...")
|
utils.Log(1, "Dump Statup assets into current directory...")
|
||||||
MakePublicFolder("assets")
|
MakePublicFolder("assets")
|
||||||
MakePublicFolder("assets/js")
|
MakePublicFolder("assets/js")
|
||||||
|
@ -108,16 +116,18 @@ func CreateAllAssets() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
CopyToPublic(CssBox, "css", "base.css")
|
CopyToPublic(CssBox, "css", "base.css")
|
||||||
utils.Log(2, "Default 'base.css' was insert because SASS did not work.")
|
utils.Log(2, "Default 'base.css' was insert because SASS did not work.")
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
utils.Log(1, "Statup assets have been inserted")
|
utils.Log(1, "Statup assets have been inserted")
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteAllAssets() {
|
func DeleteAllAssets() error {
|
||||||
err := os.RemoveAll("assets")
|
err := os.RemoveAll("assets")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(1, fmt.Sprintf("There was an issue deleting Statup Assets, %v", err))
|
utils.Log(1, fmt.Sprintf("There was an issue deleting Statup Assets, %v", err))
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
utils.Log(1, "Statup assets have been deleted")
|
utils.Log(1, "Statup assets have been deleted")
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ func LoadUsingEnv() (*types.Config, error) {
|
||||||
Email: "info@localhost.com",
|
Email: "info@localhost.com",
|
||||||
}
|
}
|
||||||
|
|
||||||
err := DbConnection(dbConfig.DbConn, true)
|
err := DbConnection(dbConfig.DbConn, true, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(4, err)
|
utils.Log(4, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
13
core/core.go
13
core/core.go
|
@ -53,13 +53,24 @@ func (c *Core) ToCore() *types.Core {
|
||||||
|
|
||||||
func InitApp() {
|
func InitApp() {
|
||||||
SelectCore()
|
SelectCore()
|
||||||
notifiers.Collections = DbSession.Collection("communication")
|
InsertNotifierDB()
|
||||||
SelectAllServices()
|
SelectAllServices()
|
||||||
CheckServices()
|
CheckServices()
|
||||||
CoreApp.Communications = notifiers.Load()
|
CoreApp.Communications = notifiers.Load()
|
||||||
go DatabaseMaintence()
|
go DatabaseMaintence()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func InsertNotifierDB() error {
|
||||||
|
if DbSession == nil {
|
||||||
|
err := DbConnection(CoreApp.DbConnection, false, "")
|
||||||
|
if err != nil {
|
||||||
|
return errors.New("database connection has not been created")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notifiers.Collections = DbSession.Collection("communication")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func UpdateCore(c *Core) (*Core, error) {
|
func UpdateCore(c *Core) (*Core, error) {
|
||||||
res := DbSession.Collection("core").Find().Limit(1)
|
res := DbSession.Collection("core").Find().Limit(1)
|
||||||
err := res.Update(c.Core)
|
err := res.Update(c.Core)
|
||||||
|
|
|
@ -1,15 +1,83 @@
|
||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/hunterlong/statup/utils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
testCore *Core
|
testCore *Core
|
||||||
|
testConfig *DbConfig
|
||||||
|
testDatabase string
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
testDatabase = os.Getenv("GOPATH")
|
||||||
|
testDatabase += "/src/github.com/hunterlong/statup/"
|
||||||
|
|
||||||
|
utils.InitLogs()
|
||||||
|
RenderBoxes()
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewCore(t *testing.T) {
|
func TestNewCore(t *testing.T) {
|
||||||
testCore = NewCore()
|
testCore = NewCore()
|
||||||
assert.NotNil(t, testCore)
|
assert.NotNil(t, testCore)
|
||||||
|
testCore.Name = "Tester"
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDbConfig_Save(t *testing.T) {
|
||||||
|
testConfig = &DbConfig{
|
||||||
|
DbConn: "sqlite",
|
||||||
|
Project: "Tester",
|
||||||
|
Location: testDatabase,
|
||||||
|
}
|
||||||
|
err := testConfig.Save()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDbConnection(t *testing.T) {
|
||||||
|
err := DbConnection(testConfig.DbConn, false, testDatabase)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateDatabase(t *testing.T) {
|
||||||
|
err := CreateDatabase()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInsertCore(t *testing.T) {
|
||||||
|
err := InsertCore(testCore)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSelectCore(t *testing.T) {
|
||||||
|
core, err := SelectCore()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, "Tester", core.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSampleData(t *testing.T) {
|
||||||
|
err := LoadSampleData()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSelectLastMigration(t *testing.T) {
|
||||||
|
id, err := SelectLastMigration()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.NotZero(t, id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCore_UsingAssets(t *testing.T) {
|
||||||
|
assert.False(t, testCore.UsingAssets())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHasAssets(t *testing.T) {
|
||||||
|
assert.False(t, HasAssets())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInsertNotifierDB(t *testing.T) {
|
||||||
|
err := InsertNotifierDB()
|
||||||
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,11 +25,11 @@ var (
|
||||||
|
|
||||||
type DbConfig types.DbConfig
|
type DbConfig types.DbConfig
|
||||||
|
|
||||||
func DbConnection(dbType string, retry bool) error {
|
func DbConnection(dbType string, retry bool, location string) error {
|
||||||
var err error
|
var err error
|
||||||
if dbType == "sqlite" {
|
if dbType == "sqlite" {
|
||||||
sqliteSettings = sqlite.ConnectionURL{
|
sqliteSettings = sqlite.ConnectionURL{
|
||||||
Database: "statup.db",
|
Database: location + "statup.db",
|
||||||
}
|
}
|
||||||
DbSession, err = sqlite.Open(sqliteSettings)
|
DbSession, err = sqlite.Open(sqliteSettings)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -86,7 +86,7 @@ func DbConnection(dbType string, retry bool) error {
|
||||||
|
|
||||||
func waitForDb(dbType string) error {
|
func waitForDb(dbType string) error {
|
||||||
time.Sleep(5 * time.Second)
|
time.Sleep(5 * time.Second)
|
||||||
return DbConnection(dbType, true)
|
return DbConnection(dbType, true, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func DatabaseMaintence() {
|
func DatabaseMaintence() {
|
||||||
|
@ -126,7 +126,7 @@ func (c *DbConfig) Save() error {
|
||||||
utils.Log(3, err)
|
utils.Log(3, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = DbConnection(Configs.Connection, false)
|
err = DbConnection(Configs.Connection, false, c.Location)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(4, err)
|
utils.Log(4, err)
|
||||||
return err
|
return err
|
||||||
|
@ -224,9 +224,12 @@ func RunDatabaseUpgrades() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func DropDatabase() {
|
func DropDatabase() error {
|
||||||
utils.Log(1, "Dropping Database Tables...")
|
utils.Log(1, "Dropping Database Tables...")
|
||||||
down, _ := SqlBox.String("down.sql")
|
down, err := SqlBox.String("down.sql")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
requests := strings.Split(down, ";")
|
requests := strings.Split(down, ";")
|
||||||
for _, request := range requests {
|
for _, request := range requests {
|
||||||
_, err := DbSession.Exec(request)
|
_, err := DbSession.Exec(request)
|
||||||
|
@ -234,9 +237,10 @@ func DropDatabase() {
|
||||||
utils.Log(2, err)
|
utils.Log(2, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateDatabase() {
|
func CreateDatabase() error {
|
||||||
utils.Log(1, "Creating Database Tables...")
|
utils.Log(1, "Creating Database Tables...")
|
||||||
sql := "postgres_up.sql"
|
sql := "postgres_up.sql"
|
||||||
if CoreApp.DbConnection == "mysql" {
|
if CoreApp.DbConnection == "mysql" {
|
||||||
|
@ -244,7 +248,7 @@ func CreateDatabase() {
|
||||||
} else if CoreApp.DbConnection == "sqlite" {
|
} else if CoreApp.DbConnection == "sqlite" {
|
||||||
sql = "sqlite_up.sql"
|
sql = "sqlite_up.sql"
|
||||||
}
|
}
|
||||||
up, _ := SqlBox.String(sql)
|
up, err := SqlBox.String(sql)
|
||||||
requests := strings.Split(up, ";")
|
requests := strings.Split(up, ";")
|
||||||
for _, request := range requests {
|
for _, request := range requests {
|
||||||
_, err := DbSession.Exec(request)
|
_, err := DbSession.Exec(request)
|
||||||
|
@ -256,6 +260,7 @@ func CreateDatabase() {
|
||||||
//db.QueryRow("INSERT INTO core (secret, version) VALUES ($1, $2);", secret, VERSION).Scan()
|
//db.QueryRow("INSERT INTO core (secret, version) VALUES ($1, $2);", secret, VERSION).Scan()
|
||||||
utils.Log(1, "Database Created")
|
utils.Log(1, "Database Created")
|
||||||
//SampleData()
|
//SampleData()
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *DbConfig) Clean() *DbConfig {
|
func (c *DbConfig) Clean() *DbConfig {
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
package core
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/hunterlong/statup/types"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
newServiceId int64
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSelectAllServices(t *testing.T) {
|
||||||
|
services, err := SelectAllServices()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, 5, len(services))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSelectService(t *testing.T) {
|
||||||
|
service := SelectService(1)
|
||||||
|
assert.Equal(t, "Google", service.ToService().Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUpdateService(t *testing.T) {
|
||||||
|
service := SelectService(1)
|
||||||
|
assert.Equal(t, "Google", service.ToService().Name)
|
||||||
|
srv := service.ToService()
|
||||||
|
srv.Name = "Updated Google"
|
||||||
|
newService := UpdateService(srv)
|
||||||
|
assert.Equal(t, "Updated Google", newService.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestServiceHTTPCheck(t *testing.T) {
|
||||||
|
service := SelectService(1)
|
||||||
|
checked := ServiceHTTPCheck(service.ToService())
|
||||||
|
assert.Equal(t, "Updated Google", checked.Name)
|
||||||
|
assert.True(t, checked.Online)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCheckService(t *testing.T) {
|
||||||
|
service := SelectService(1).ToService()
|
||||||
|
assert.Equal(t, "Updated Google", service.Name)
|
||||||
|
assert.True(t, service.Online)
|
||||||
|
assert.Equal(t, 200, service.LastStatusCode)
|
||||||
|
assert.NotZero(t, service.Latency)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateService(t *testing.T) {
|
||||||
|
s := &types.Service{
|
||||||
|
Name: "Interpol - All The Rage Back Home",
|
||||||
|
Domain: "https://www.youtube.com/watch?v=-u6DvRyyKGU",
|
||||||
|
ExpectedStatus: 200,
|
||||||
|
Interval: 30,
|
||||||
|
Type: "http",
|
||||||
|
Method: "GET",
|
||||||
|
Timeout: 20,
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
newServiceId, err = CreateService(s)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.NotZero(t, newServiceId)
|
||||||
|
newService := SelectService(newServiceId).ToService()
|
||||||
|
assert.Equal(t, "Interpol - All The Rage Back Home", newService.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeleteService(t *testing.T) {
|
||||||
|
service := SelectService(newServiceId).ToService()
|
||||||
|
|
||||||
|
count, err := SelectAllServices()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, 6, len(count))
|
||||||
|
|
||||||
|
err = DeleteService(service)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
count, err = SelectAllServices()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, 5, len(count))
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package core
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/hunterlong/statup/types"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCreateUser(t *testing.T) {
|
||||||
|
user := &types.User{
|
||||||
|
Username: "hunter",
|
||||||
|
Password: "password123",
|
||||||
|
Email: "test@email.com",
|
||||||
|
Admin: true,
|
||||||
|
}
|
||||||
|
userId, err := CreateUser(user)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.NotZero(t, userId)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSelectAllUsers(t *testing.T) {
|
||||||
|
users, err := SelectAllUsers()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, 1, len(users))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSelectUser(t *testing.T) {
|
||||||
|
user, err := SelectUser(1)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, "test@email.com", user.Email)
|
||||||
|
assert.True(t, user.Admin)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUpdateUser(t *testing.T) {
|
||||||
|
user, err := SelectUser(1)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
user.Username = "updated"
|
||||||
|
|
||||||
|
err = UpdateUser(user)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
updatedUser, err := SelectUser(1)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, "updated", updatedUser.Username)
|
||||||
|
}
|
|
@ -74,6 +74,7 @@ func ProcessSetupHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
password,
|
password,
|
||||||
email,
|
email,
|
||||||
nil,
|
nil,
|
||||||
|
"",
|
||||||
}
|
}
|
||||||
err := config.Save()
|
err := config.Save()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -95,7 +96,7 @@ func ProcessSetupHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = core.DbConnection(core.Configs.Connection, false)
|
err = core.DbConnection(core.Configs.Connection, false, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(3, err)
|
utils.Log(3, err)
|
||||||
core.DeleteConfig()
|
core.DeleteConfig()
|
||||||
|
|
|
@ -0,0 +1,167 @@
|
||||||
|
package notifiers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/hunterlong/statup/types"
|
||||||
|
"github.com/hunterlong/statup/utils"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
"upper.io/db.v3/sqlite"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
testNotifier *Tester
|
||||||
|
testDatabase string
|
||||||
|
)
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
func (n *Tester) Init() error {
|
||||||
|
return errors.New("im just testing")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Tester) Install() error {
|
||||||
|
return errors.New("installing")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Tester) Run() error {
|
||||||
|
return errors.New("running")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Tester) Select() *Notification {
|
||||||
|
return n.Notification
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Tester) OnSuccess(s *types.Service) error {
|
||||||
|
return errors.New(s.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Tester) OnFailure(s *types.Service) error {
|
||||||
|
return errors.New(s.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Tester) Test() error {
|
||||||
|
return errors.New("testing")
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
testDatabase = os.Getenv("GOPATH")
|
||||||
|
testDatabase += "/src/github.com/hunterlong/statup/"
|
||||||
|
|
||||||
|
utils.InitLogs()
|
||||||
|
}
|
||||||
|
|
||||||
|
func injectDatabase() {
|
||||||
|
sqliteDb := sqlite.ConnectionURL{
|
||||||
|
Database: testDatabase + "statup.db",
|
||||||
|
}
|
||||||
|
dbSession, _ := sqlite.Open(sqliteDb)
|
||||||
|
Collections = dbSession.Collection("communication")
|
||||||
|
}
|
||||||
|
|
||||||
|
type Tester struct {
|
||||||
|
*Notification
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInit(t *testing.T) {
|
||||||
|
injectDatabase()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAdd(t *testing.T) {
|
||||||
|
testNotifier = &Tester{&Notification{
|
||||||
|
Id: 1,
|
||||||
|
Method: "tester",
|
||||||
|
Host: "0.0.0.0",
|
||||||
|
Form: []NotificationForm{{
|
||||||
|
Id: 1,
|
||||||
|
Type: "text",
|
||||||
|
Title: "Incoming Webhook Url",
|
||||||
|
Placeholder: "Insert your Slack webhook URL here.",
|
||||||
|
DbField: "Host",
|
||||||
|
}}},
|
||||||
|
}
|
||||||
|
|
||||||
|
add(testNotifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIsInDatabase(t *testing.T) {
|
||||||
|
in, err := testNotifier.IsInDatabase()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.False(t, in)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInsertDatabase(t *testing.T) {
|
||||||
|
newId, err := InsertDatabase(testNotifier.Notification)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.NotZero(t, newId)
|
||||||
|
|
||||||
|
in, err := testNotifier.IsInDatabase()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.True(t, in)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSelectNotification(t *testing.T) {
|
||||||
|
notifier, err := SelectNotification(1)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, "tester", notifier.Method)
|
||||||
|
assert.False(t, notifier.Enabled)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNotification_Update(t *testing.T) {
|
||||||
|
notifier, err := SelectNotification(1)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
notifier.Method = "updatedName"
|
||||||
|
notifier.Enabled = true
|
||||||
|
updated, err := notifier.Update()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
selected, err := SelectNotification(updated.Id)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, "updatedName", selected.Method)
|
||||||
|
assert.True(t, selected.Enabled)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNotification_GetValue(t *testing.T) {
|
||||||
|
notifier, err := SelectNotification(1)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
val := notifier.GetValue("Host")
|
||||||
|
assert.Equal(t, "0.0.0.0", val)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRun(t *testing.T) {
|
||||||
|
err := testNotifier.Run()
|
||||||
|
assert.Equal(t, "running", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTestIt(t *testing.T) {
|
||||||
|
err := testNotifier.Test()
|
||||||
|
assert.Equal(t, "testing", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOnSuccess(t *testing.T) {
|
||||||
|
s := &types.Service{
|
||||||
|
Name: "Interpol - All The Rage Back Home",
|
||||||
|
Domain: "https://www.youtube.com/watch?v=-u6DvRyyKGU",
|
||||||
|
ExpectedStatus: 200,
|
||||||
|
Interval: 30,
|
||||||
|
Type: "http",
|
||||||
|
Method: "GET",
|
||||||
|
Timeout: 20,
|
||||||
|
}
|
||||||
|
OnSuccess(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOnFailure(t *testing.T) {
|
||||||
|
s := &types.Service{
|
||||||
|
Name: "Interpol - All The Rage Back Home",
|
||||||
|
Domain: "https://www.youtube.com/watch?v=-u6DvRyyKGU",
|
||||||
|
ExpectedStatus: 200,
|
||||||
|
Interval: 30,
|
||||||
|
Type: "http",
|
||||||
|
Method: "GET",
|
||||||
|
Timeout: 20,
|
||||||
|
}
|
||||||
|
OnFailure(s)
|
||||||
|
}
|
|
@ -156,6 +156,7 @@ type DbConfig struct {
|
||||||
Password string `yaml:"-"`
|
Password string `yaml:"-"`
|
||||||
Email string `yaml:"-"`
|
Email string `yaml:"-"`
|
||||||
Error error `yaml:"-"`
|
Error error `yaml:"-"`
|
||||||
|
Location string `yaml:"location"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PluginRepos struct {
|
type PluginRepos struct {
|
||||||
|
|
|
@ -19,7 +19,7 @@ var (
|
||||||
LastLine interface{}
|
LastLine interface{}
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitLogs() {
|
func InitLogs() error {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if _, err := os.Stat("./logs"); os.IsNotExist(err) {
|
if _, err := os.Stat("./logs"); os.IsNotExist(err) {
|
||||||
|
@ -29,6 +29,7 @@ func InitLogs() {
|
||||||
logFile, err = os.OpenFile("./logs/statup.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
logFile, err = os.OpenFile("./logs/statup.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("ERROR opening file: %v", err)
|
log.Printf("ERROR opening file: %v", err)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
ljLogger = &lumberjack.Logger{
|
ljLogger = &lumberjack.Logger{
|
||||||
Filename: "./logs/statup.log",
|
Filename: "./logs/statup.log",
|
||||||
|
@ -53,6 +54,8 @@ func InitLogs() {
|
||||||
}
|
}
|
||||||
|
|
||||||
rotate()
|
rotate()
|
||||||
|
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func rotate() {
|
func rotate() {
|
||||||
|
@ -107,7 +110,3 @@ func Http(r *http.Request) {
|
||||||
fmt.Printf("WEB: %v\n", msg)
|
fmt.Printf("WEB: %v\n", msg)
|
||||||
LastLine = msg
|
LastLine = msg
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReportLog() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestInitLogs(t *testing.T) {
|
||||||
|
assert.Nil(t, InitLogs())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntString(t *testing.T) {
|
||||||
|
assert.Equal(t, "1", IntString(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStringInt(t *testing.T) {
|
||||||
|
assert.Equal(t, int64(1), StringInt("1"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTimestamp_Ago(t *testing.T) {
|
||||||
|
now := Timestamp(time.Now())
|
||||||
|
assert.Equal(t, "Just now", now.Ago())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUnderScoreString(t *testing.T) {
|
||||||
|
assert.Equal(t, "this_is_a_test", UnderScoreString("this is a test"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHashPassword(t *testing.T) {
|
||||||
|
assert.Equal(t, 60, len(HashPassword("password123")))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNewSHA1Hash(t *testing.T) {
|
||||||
|
assert.NotEmpty(t, NewSHA1Hash(5))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRandomString(t *testing.T) {
|
||||||
|
assert.NotEmpty(t, RandomString(5))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSha256(t *testing.T) {
|
||||||
|
assert.Equal(t, "dc724af18fbdd4e59189f5fe768a5f8311527050", Sha256([]byte("testing")))
|
||||||
|
}
|
Loading…
Reference in New Issue