testing - dockerfile version

pull/41/head^2 v0.41
Hunter Long 2018-08-15 19:22:10 -07:00
parent 0a0614c2b0
commit a49397c6be
15 changed files with 140 additions and 75 deletions

View File

@ -1,6 +1,6 @@
FROM alpine:latest FROM alpine:latest
ENV VERSION=v0.4 ENV VERSION=v0.41
RUN apk --no-cache add libstdc++ ca-certificates RUN apk --no-cache add libstdc++ ca-certificates
RUN wget -q https://github.com/hunterlong/statup/releases/download/$VERSION/statup-linux-alpine.tar.gz && \ RUN wget -q https://github.com/hunterlong/statup/releases/download/$VERSION/statup-linux-alpine.tar.gz && \

View File

@ -3,7 +3,6 @@ package main
import ( import (
"github.com/rendon/testcli" "github.com/rendon/testcli"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"os"
"testing" "testing"
) )
@ -52,9 +51,6 @@ func TestAssetsCLI(t *testing.T) {
} }
func TestSassCLI(t *testing.T) { func TestSassCLI(t *testing.T) {
if os.Getenv("IS_DOCKER") == "true" {
os.Setenv("SASS", "/usr/local/bin/sass")
}
run := CatchCLI([]string{"statup", "sass"}) run := CatchCLI([]string{"statup", "sass"})
assert.Nil(t, run) assert.Nil(t, run)
assert.FileExists(t, dir+"/assets/css/base.css") assert.FileExists(t, dir+"/assets/css/base.css")

View File

@ -45,7 +45,7 @@ func main() {
if err != nil { if err != nil {
utils.Log(3, err) utils.Log(3, err)
core.SetupMode = true core.SetupMode = true
handlers.RunHTTPServer() handlers.RunHTTPServer("localhost", 8080)
} }
mainProcess() mainProcess()
} }
@ -71,7 +71,7 @@ func mainProcess() {
if !core.SetupMode { if !core.SetupMode {
LoadPlugins(false) LoadPlugins(false)
handlers.RunHTTPServer() handlers.RunHTTPServer("localhost", 8080)
} }
} }

View File

@ -454,6 +454,7 @@ func RunPrometheusHandler(t *testing.T) {
route.ServeHTTP(rr, req) route.ServeHTTP(rr, req)
t.Log(rr.Body.String()) t.Log(rr.Body.String())
assert.True(t, strings.Contains(rr.Body.String(), "statup_total_services 6")) assert.True(t, strings.Contains(rr.Body.String(), "statup_total_services 6"))
assert.True(t, handlers.IsAuthenticated(req))
} }
func RunFailingPrometheusHandler(t *testing.T) { func RunFailingPrometheusHandler(t *testing.T) {
@ -461,7 +462,8 @@ func RunFailingPrometheusHandler(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
route.ServeHTTP(rr, req) route.ServeHTTP(rr, req)
assert.Equal(t, 401, rr.Result().StatusCode) assert.Equal(t, 303, rr.Result().StatusCode)
assert.True(t, handlers.IsAuthenticated(req))
} }
func RunLoginHandler(t *testing.T) { func RunLoginHandler(t *testing.T) {
@ -474,6 +476,7 @@ func RunLoginHandler(t *testing.T) {
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
route.ServeHTTP(rr, req) route.ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Result().StatusCode) assert.Equal(t, 303, rr.Result().StatusCode)
assert.True(t, handlers.IsAuthenticated(req))
} }
func RunDashboardHandler(t *testing.T) { func RunDashboardHandler(t *testing.T) {
@ -483,6 +486,7 @@ func RunDashboardHandler(t *testing.T) {
route.ServeHTTP(rr, req) route.ServeHTTP(rr, req)
assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Dashboard</title>")) assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Dashboard</title>"))
assert.True(t, strings.Contains(rr.Body.String(), "footer")) assert.True(t, strings.Contains(rr.Body.String(), "footer"))
assert.True(t, handlers.IsAuthenticated(req))
} }
func RunUsersHandler(t *testing.T) { func RunUsersHandler(t *testing.T) {
@ -492,6 +496,7 @@ func RunUsersHandler(t *testing.T) {
route.ServeHTTP(rr, req) route.ServeHTTP(rr, req)
assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Users</title>")) assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Users</title>"))
assert.True(t, strings.Contains(rr.Body.String(), "footer")) assert.True(t, strings.Contains(rr.Body.String(), "footer"))
assert.True(t, handlers.IsAuthenticated(req))
} }
func RunUserViewHandler(t *testing.T) { func RunUserViewHandler(t *testing.T) {
@ -501,6 +506,7 @@ func RunUserViewHandler(t *testing.T) {
route.ServeHTTP(rr, req) route.ServeHTTP(rr, req)
assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Users</title>")) assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Users</title>"))
assert.True(t, strings.Contains(rr.Body.String(), "footer")) assert.True(t, strings.Contains(rr.Body.String(), "footer"))
assert.True(t, handlers.IsAuthenticated(req))
} }
func RunServicesHandler(t *testing.T) { func RunServicesHandler(t *testing.T) {
@ -510,6 +516,7 @@ func RunServicesHandler(t *testing.T) {
route.ServeHTTP(rr, req) route.ServeHTTP(rr, req)
assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Services</title>")) assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Services</title>"))
assert.True(t, strings.Contains(rr.Body.String(), "footer")) assert.True(t, strings.Contains(rr.Body.String(), "footer"))
assert.True(t, handlers.IsAuthenticated(req))
} }
func RunHelpHandler(t *testing.T) { func RunHelpHandler(t *testing.T) {
@ -519,6 +526,7 @@ func RunHelpHandler(t *testing.T) {
route.ServeHTTP(rr, req) route.ServeHTTP(rr, req)
assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Help</title>")) assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Help</title>"))
assert.True(t, strings.Contains(rr.Body.String(), "footer")) assert.True(t, strings.Contains(rr.Body.String(), "footer"))
assert.True(t, handlers.IsAuthenticated(req))
} }
func RunSettingsHandler(t *testing.T) { func RunSettingsHandler(t *testing.T) {
@ -529,6 +537,7 @@ func RunSettingsHandler(t *testing.T) {
assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Settings</title>")) assert.True(t, strings.Contains(rr.Body.String(), "<title>Statup | Settings</title>"))
assert.True(t, strings.Contains(rr.Body.String(), "Theme Editor")) assert.True(t, strings.Contains(rr.Body.String(), "Theme Editor"))
assert.True(t, strings.Contains(rr.Body.String(), "footer")) assert.True(t, strings.Contains(rr.Body.String(), "footer"))
assert.True(t, handlers.IsAuthenticated(req))
} }
func fileExists(file string) bool { func fileExists(file string) bool {

View File

@ -4,6 +4,7 @@ import (
"github.com/hunterlong/statup/notifiers" "github.com/hunterlong/statup/notifiers"
"github.com/hunterlong/statup/source" "github.com/hunterlong/statup/source"
"github.com/hunterlong/statup/types" "github.com/hunterlong/statup/types"
"github.com/hunterlong/statup/utils"
"github.com/pkg/errors" "github.com/pkg/errors"
"os" "os"
"time" "time"
@ -79,21 +80,21 @@ func (c Core) SassVars() string {
if !source.UsingAssets { if !source.UsingAssets {
return "" return ""
} }
return source.OpenAsset(".", "scss/variables.scss") return source.OpenAsset(utils.Directory, "scss/variables.scss")
} }
func (c Core) BaseSASS() string { func (c Core) BaseSASS() string {
if !source.UsingAssets { if !source.UsingAssets {
return "" return ""
} }
return source.OpenAsset(".", "scss/base.scss") return source.OpenAsset(utils.Directory, "scss/base.scss")
} }
func (c Core) MobileSASS() string { func (c Core) MobileSASS() string {
if !source.UsingAssets { if !source.UsingAssets {
return "" return ""
} }
return source.OpenAsset(".", "scss/mobile.scss") return source.OpenAsset(utils.Directory, "scss/mobile.scss")
} }
func (c Core) AllOnline() bool { func (c Core) AllOnline() bool {

View File

@ -21,9 +21,9 @@ var (
Store *sessions.CookieStore Store *sessions.CookieStore
) )
func RunHTTPServer() { func RunHTTPServer(ip string, port int) error {
utils.Log(1, "Statup HTTP Server running on http://localhost:8080") host := fmt.Sprintf("%v:%v", ip, port)
r := Router() utils.Log(1, "Statup HTTP Server running on http://"+host)
for _, p := range core.CoreApp.AllPlugins { for _, p := range core.CoreApp.AllPlugins {
info := p.GetInfo() info := p.GetInfo()
for _, route := range p.Routes() { for _, route := range p.Routes() {
@ -33,16 +33,13 @@ func RunHTTPServer() {
} }
} }
srv := &http.Server{ srv := &http.Server{
Addr: "0.0.0.0:8080", Addr: host,
WriteTimeout: time.Second * 15, WriteTimeout: time.Second * 15,
ReadTimeout: time.Second * 15, ReadTimeout: time.Second * 15,
IdleTimeout: time.Second * 60, IdleTimeout: time.Second * 60,
Handler: r, Handler: Router(),
}
err := srv.ListenAndServe()
if err != nil {
utils.Log(4, err)
} }
return srv.ListenAndServe()
} }
func IsAuthenticated(r *http.Request) bool { func IsAuthenticated(r *http.Request) bool {
@ -118,4 +115,9 @@ func ExecuteJSResponse(w http.ResponseWriter, r *http.Request, file string, data
t.Execute(w, data) t.Execute(w, data)
} }
func Error404Handler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
ExecuteResponse(w, r, "error_404.html", nil)
}
type DbConfig types.DbConfig type DbConfig types.DbConfig

View File

@ -1,7 +1,6 @@
package handlers package handlers
import ( import (
"fmt"
"github.com/hunterlong/statup/core" "github.com/hunterlong/statup/core"
"github.com/hunterlong/statup/source" "github.com/hunterlong/statup/source"
"github.com/hunterlong/statup/utils" "github.com/hunterlong/statup/utils"
@ -21,16 +20,11 @@ func init() {
func IsRouteAuthenticated(req *http.Request) bool { func IsRouteAuthenticated(req *http.Request) bool {
os.Setenv("GO_ENV", "production") os.Setenv("GO_ENV", "production")
req, err := http.NewRequest(req.Method, req.URL.String(), req.Body)
if err != nil {
os.Setenv("GO_ENV", "test")
return false
}
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
req.Header.Set("Authorization", "badkey")
Router().ServeHTTP(rr, req) Router().ServeHTTP(rr, req)
fmt.Println(req.URL.String(), rr.Code)
code := rr.Code code := rr.Code
if code != 303 { if code == 200 {
os.Setenv("GO_ENV", "test") os.Setenv("GO_ENV", "test")
return false return false
} }
@ -38,6 +32,11 @@ func IsRouteAuthenticated(req *http.Request) bool {
return true return true
} }
func TestFailedHTTPServer(t *testing.T) {
err := RunHTTPServer("missinghost", 0)
assert.Error(t, err)
}
func TestIndexHandler(t *testing.T) { func TestIndexHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil) req, err := http.NewRequest("GET", "/", nil)
assert.Nil(t, err) assert.Nil(t, err)
@ -386,6 +385,7 @@ func TestDeleteServiceHandler(t *testing.T) {
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req) Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code) assert.Equal(t, 200, rr.Code)
assert.True(t, IsRouteAuthenticated(req))
} }
func TestLogsHandler(t *testing.T) { func TestLogsHandler(t *testing.T) {
@ -397,6 +397,7 @@ func TestLogsHandler(t *testing.T) {
assert.Equal(t, 200, rr.Code) assert.Equal(t, 200, rr.Code)
assert.Contains(t, body, "<title>Statup | Logs</title>") assert.Contains(t, body, "<title>Statup | Logs</title>")
assert.Contains(t, body, "Statup made with ❤️") assert.Contains(t, body, "Statup made with ❤️")
assert.True(t, IsRouteAuthenticated(req))
} }
func TestLogsLineHandler(t *testing.T) { func TestLogsLineHandler(t *testing.T) {
@ -408,6 +409,7 @@ func TestLogsLineHandler(t *testing.T) {
assert.Equal(t, 200, rr.Code) assert.Equal(t, 200, rr.Code)
t.Log(body) t.Log(body)
assert.NotEmpty(t, body) assert.NotEmpty(t, body)
assert.True(t, IsRouteAuthenticated(req))
} }
func TestSaveSettingsHandler(t *testing.T) { func TestSaveSettingsHandler(t *testing.T) {
@ -420,6 +422,7 @@ func TestSaveSettingsHandler(t *testing.T) {
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req) Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code) assert.Equal(t, 200, rr.Code)
assert.True(t, IsRouteAuthenticated(req))
} }
func TestViewSettingsHandler(t *testing.T) { func TestViewSettingsHandler(t *testing.T) {
@ -445,6 +448,7 @@ func TestSaveAssetsHandler(t *testing.T) {
assert.FileExists(t, utils.Directory+"/assets/js/main.js") assert.FileExists(t, utils.Directory+"/assets/js/main.js")
assert.DirExists(t, utils.Directory+"/assets") assert.DirExists(t, utils.Directory+"/assets")
assert.True(t, source.UsingAssets) assert.True(t, source.UsingAssets)
assert.True(t, IsRouteAuthenticated(req))
} }
func TestDeleteAssetsHandler(t *testing.T) { func TestDeleteAssetsHandler(t *testing.T) {
@ -454,6 +458,7 @@ func TestDeleteAssetsHandler(t *testing.T) {
Router().ServeHTTP(rr, req) Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code) assert.Equal(t, 200, rr.Code)
assert.False(t, source.UsingAssets) assert.False(t, source.UsingAssets)
assert.True(t, IsRouteAuthenticated(req))
} }
func TestPrometheusHandler(t *testing.T) { func TestPrometheusHandler(t *testing.T) {
@ -465,6 +470,7 @@ func TestPrometheusHandler(t *testing.T) {
body := rr.Body.String() body := rr.Body.String()
assert.Equal(t, 200, rr.Code) assert.Equal(t, 200, rr.Code)
assert.Contains(t, body, "statup_total_services 6") assert.Contains(t, body, "statup_total_services 6")
assert.True(t, IsRouteAuthenticated(req))
} }
func TestSaveNotificationHandler(t *testing.T) { func TestSaveNotificationHandler(t *testing.T) {
@ -485,6 +491,7 @@ func TestSaveNotificationHandler(t *testing.T) {
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req) Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code) assert.Equal(t, 200, rr.Code)
assert.True(t, IsRouteAuthenticated(req))
} }
func TestViewNotificationSettingsHandler(t *testing.T) { func TestViewNotificationSettingsHandler(t *testing.T) {
@ -515,6 +522,7 @@ func TestSaveFooterHandler(t *testing.T) {
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req) Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code) assert.Equal(t, 200, rr.Code)
assert.True(t, IsRouteAuthenticated(req))
req, err = http.NewRequest("GET", "/", nil) req, err = http.NewRequest("GET", "/", nil)
assert.Nil(t, err) assert.Nil(t, err)
@ -540,3 +548,32 @@ func TestLogoutHandler(t *testing.T) {
Router().ServeHTTP(rr, req) Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code) assert.Equal(t, 303, rr.Code)
} }
func TestBuildAssetsHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/settings/build", nil)
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code)
assert.True(t, IsRouteAuthenticated(req))
assert.FileExists(t, "../assets/scss/base.scss")
}
func TestSaveSassHandler(t *testing.T) {
base := source.OpenAsset(utils.Directory, "scss/base.scss")
vars := source.OpenAsset(utils.Directory, "scss/variables.scss")
form := url.Values{}
form.Add("theme", base+"\n .test_design { color: $test-design; }")
form.Add("variables", vars+"\n $test-design: #ffffff; ")
req, err := http.NewRequest("POST", "/settings/css", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code)
assert.True(t, IsRouteAuthenticated(req))
newBase := source.OpenAsset(utils.Directory, "css/base.css")
assert.Contains(t, newBase, ".test_design {")
}

View File

@ -1,10 +0,0 @@
package handlers
import (
"net/http"
)
func Error404Handler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
ExecuteResponse(w, r, "error_404.html", nil)
}

View File

@ -21,7 +21,7 @@ import (
func PrometheusHandler(w http.ResponseWriter, r *http.Request) { func PrometheusHandler(w http.ResponseWriter, r *http.Request) {
utils.Log(1, fmt.Sprintf("Prometheus /metrics Request From IP: %v\n", r.RemoteAddr)) utils.Log(1, fmt.Sprintf("Prometheus /metrics Request From IP: %v\n", r.RemoteAddr))
if !isAuthorized(r) { if !isAuthorized(r) {
http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) http.Redirect(w, r, "/", http.StatusSeeOther)
return return
} }
metrics := []string{} metrics := []string{}

View File

@ -58,9 +58,9 @@ func SaveSASSHandler(w http.ResponseWriter, r *http.Request) {
r.ParseForm() r.ParseForm()
theme := r.PostForm.Get("theme") theme := r.PostForm.Get("theme")
variables := r.PostForm.Get("variables") variables := r.PostForm.Get("variables")
source.SaveAsset(theme, ".", "scss/base.scss") source.SaveAsset([]byte(theme), utils.Directory, "scss/base.scss")
source.SaveAsset(variables, ".", "scss/variables.scss") source.SaveAsset([]byte(variables), utils.Directory, "scss/variables.scss")
source.CompileSASS(".") source.CompileSASS(utils.Directory)
ExecuteResponse(w, r, "settings.html", core.CoreApp) ExecuteResponse(w, r, "settings.html", core.CoreApp)
} }
@ -70,8 +70,12 @@ func SaveAssetsHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
dir := utils.Directory dir := utils.Directory
source.CreateAllAssets(dir) err := source.CreateAllAssets(dir)
err := source.CompileSASS(dir) if err != nil {
utils.Log(3, err)
return
}
err = source.CompileSASS(dir)
if err != nil { if err != nil {
source.CopyToPublic(source.CssBox, dir+"/assets/css", "base.css") source.CopyToPublic(source.CssBox, dir+"/assets/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.")

View File

@ -104,12 +104,14 @@ func HasAssets(folder string) bool {
return false return false
} }
func SaveAsset(data, folder, file string) { func SaveAsset(data []byte, folder, file string) error {
utils.Log(1, fmt.Sprintf("Saving %v/%v into assets folder", folder, file)) utils.Log(1, fmt.Sprintf("Saving %v/%v into assets folder", folder, file))
err := ioutil.WriteFile(folder+"/assets/"+file, []byte(data), 0644) err := ioutil.WriteFile(folder+"/assets/"+file, data, 0644)
if err != nil { if err != nil {
utils.Log(3, fmt.Sprintf("Failed to save %v/%v, %v", folder, file, err)) utils.Log(3, fmt.Sprintf("Failed to save %v/%v, %v", folder, file, err))
return err
} }
return nil
} }
func OpenAsset(folder, file string) string { func OpenAsset(folder, file string) string {
@ -155,27 +157,32 @@ func DeleteAllAssets(folder string) error {
return err return err
} }
func CopyToPublic(box *rice.Box, folder, file string) { func CopyToPublic(box *rice.Box, folder, file string) error {
assetFolder := fmt.Sprintf("%v/%v", folder, file) assetFolder := fmt.Sprintf("%v/%v", folder, file)
utils.Log(1, fmt.Sprintf("Copying %v to %v", file, assetFolder)) utils.Log(1, fmt.Sprintf("Copying %v to %v", file, assetFolder))
base, err := box.String(file) base, err := box.String(file)
if err != nil { if err != nil {
utils.Log(3, fmt.Sprintf("Failed to copy %v to %v, %v.", file, assetFolder, err)) utils.Log(3, fmt.Sprintf("Failed to copy %v to %v, %v.", file, assetFolder, err))
return err
} }
err = ioutil.WriteFile(assetFolder, []byte(base), 0644) err = ioutil.WriteFile(assetFolder, []byte(base), 0644)
if err != nil { if err != nil {
utils.Log(3, fmt.Sprintf("Failed to write file %v to %v, %v.", file, assetFolder, err)) utils.Log(3, fmt.Sprintf("Failed to write file %v to %v, %v.", file, assetFolder, err))
return err
} }
return nil
} }
func MakePublicFolder(folder string) { func MakePublicFolder(folder string) error {
utils.Log(1, fmt.Sprintf("Creating folder '%v'", folder)) utils.Log(1, fmt.Sprintf("Creating folder '%v'", folder))
if _, err := os.Stat(folder); os.IsNotExist(err) { if _, err := os.Stat(folder); os.IsNotExist(err) {
err = os.MkdirAll(folder, 0755) err = os.MkdirAll(folder, 0755)
if err != nil { if err != nil {
utils.Log(3, fmt.Sprintf("Failed to created %v directory, %v", folder, err)) utils.Log(3, fmt.Sprintf("Failed to created %v directory, %v", folder, err))
return err
} }
} }
return nil
} }
func copyAndCapture(w io.Writer, r io.Reader) ([]byte, error) { func copyAndCapture(w io.Writer, r io.Reader) ([]byte, error) {
@ -199,7 +206,5 @@ func copyAndCapture(w io.Writer, r io.Reader) ([]byte, error) {
return out, err return out, err
} }
} }
// never reached
panic(true)
return nil, nil return nil, nil
} }

View File

@ -30,14 +30,29 @@ func TestCreateAssets(t *testing.T) {
} }
func TestCompileSASS(t *testing.T) { func TestCompileSASS(t *testing.T) {
if os.Getenv("IS_DOCKER") == "true" {
os.Setenv("SASS", "/usr/local/bin/sass")
}
assert.Nil(t, CompileSASS(dir)) assert.Nil(t, CompileSASS(dir))
assert.True(t, HasAssets(dir)) assert.True(t, HasAssets(dir))
} }
func TestSaveAsset(t *testing.T) {
data := []byte("BODY { color: black; }")
asset := SaveAsset(data, dir, "scss/theme.scss")
assert.Nil(t, asset)
assert.FileExists(t, dir+"/assets/scss/theme.scss")
}
func TestOpenAsset(t *testing.T) {
asset := OpenAsset(dir, "scss/theme.scss")
assert.NotEmpty(t, asset)
}
func TestDeleteAssets(t *testing.T) { func TestDeleteAssets(t *testing.T) {
assert.Nil(t, DeleteAllAssets(dir)) assert.Nil(t, DeleteAllAssets(dir))
assert.False(t, HasAssets(dir)) assert.False(t, HasAssets(dir))
} }
func TestCopyToPluginFailed(t *testing.T) {
assert.Nil(t, DeleteAllAssets(dir))
assert.False(t, HasAssets(dir))
}

View File

@ -17,23 +17,29 @@ var (
LastLine interface{} LastLine interface{}
) )
func InitLogs() error { func createLog(dir string) error {
var err error var err error
_, err = os.Stat(Directory + "/logs") _, err = os.Stat(dir + "/logs")
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
os.Mkdir(Directory+"/logs", 0777) os.Mkdir(dir+"/logs", 0777)
} else { } else {
fmt.Println(err) return err
} }
} }
file, err := os.Create(dir + "/logs/statup.log")
file, err := os.Create(Directory + "/logs/statup.log")
if err != nil { if err != nil {
return err return err
} }
defer file.Close() defer file.Close()
return err
}
func InitLogs() error {
err := createLog(Directory)
if err != nil {
return err
}
logFile, err = os.OpenFile(Directory+"/logs/statup.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755) logFile, err = os.OpenFile(Directory+"/logs/statup.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
if err != nil { if err != nil {
log.Printf("ERROR opening file: %v", err) log.Printf("ERROR opening file: %v", err)

View File

@ -72,20 +72,14 @@ func UnderScoreString(str string) string {
return newStr return newStr
} }
func DeleteFile(file string) bool { func DeleteFile(file string) error {
err := os.Remove(file) err := os.Remove(file)
if err != nil { if err != nil {
Log(3, err) return err
return false
} }
return true return nil
} }
func DeleteDirectory(directory string) bool { func DeleteDirectory(directory string) error {
err := os.RemoveAll(directory) return os.RemoveAll(directory)
if err != nil {
Log(3, err)
return false
}
return true
} }

View File

@ -8,8 +8,14 @@ import (
"time" "time"
) )
func TestCreateLog(t *testing.T) {
err := createLog(Directory)
assert.Nil(t, err)
}
func TestInitLogs(t *testing.T) { func TestInitLogs(t *testing.T) {
assert.Nil(t, InitLogs()) assert.Nil(t, InitLogs())
assert.FileExists(t, "../logs/statup.log")
} }
func TestDir(t *testing.T) { func TestDir(t *testing.T) {
@ -25,12 +31,12 @@ func TestLog(t *testing.T) {
assert.Nil(t, Log(5, errors.New("this is a 5 level error"))) assert.Nil(t, Log(5, errors.New("this is a 5 level error")))
} }
func TestLogFileCreation(t *testing.T) { func TestDeleteFile(t *testing.T) {
assert.FileExists(t, "../logs/statup.log") assert.Nil(t, DeleteFile(Directory+"/logs/statup.log"))
} }
func TestDeleteFile(t *testing.T) { func TestFailedDeleteFile(t *testing.T) {
assert.True(t, DeleteFile(Directory+"/logs/statup.log")) assert.Error(t, DeleteFile(Directory+"/missingfilehere.txt"))
} }
func TestLogHTTP(t *testing.T) { func TestLogHTTP(t *testing.T) {
@ -73,5 +79,5 @@ func TestSha256(t *testing.T) {
} }
func TestDeleteDirectory(t *testing.T) { func TestDeleteDirectory(t *testing.T) {
assert.True(t, DeleteDirectory(Directory+"/logs")) assert.Nil(t, DeleteDirectory(Directory+"/logs"))
} }