You've already forked factorio-server-manager
mirror of
https://github.com/OpenFactorioServerManager/factorio-server-manager.git
synced 2025-07-13 01:10:25 +02:00
refactoring test setup and using .env file for test
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -18,3 +18,4 @@ mix-manifest.json
|
||||
/app/*.js*
|
||||
/app/*.css*
|
||||
.vscode
|
||||
.env
|
||||
|
5
src/.env.example
Normal file
5
src/.env.example
Normal file
@ -0,0 +1,5 @@
|
||||
factorio_username=
|
||||
factorio_password=
|
||||
conf=../../conf.json.example
|
||||
mod_dir=dev
|
||||
mod_pack_dir=dev_pack
|
@ -249,7 +249,7 @@ func LoadConfig(w http.ResponseWriter, r *http.Request) {
|
||||
func StartServer(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
var resp interface{}
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
var server = factorio.GetFactorioServer()
|
||||
defer func() {
|
||||
WriteResponse(w, resp)
|
||||
}()
|
||||
@ -326,7 +326,7 @@ func StopServer(w http.ResponseWriter, r *http.Request) {
|
||||
}()
|
||||
|
||||
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
var server = factorio.GetFactorioServer()
|
||||
if server.Running {
|
||||
err := server.Stop()
|
||||
if err != nil {
|
||||
@ -353,7 +353,7 @@ func KillServer(w http.ResponseWriter, r *http.Request) {
|
||||
}()
|
||||
|
||||
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
var server = factorio.GetFactorioServer()
|
||||
if server.Running {
|
||||
err := server.Kill()
|
||||
if err != nil {
|
||||
@ -378,7 +378,7 @@ func CheckServer(w http.ResponseWriter, r *http.Request) {
|
||||
}()
|
||||
|
||||
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
var server = factorio.GetFactorioServer()
|
||||
if server.Running {
|
||||
resp["status"] = "running"
|
||||
resp["port"] = strconv.Itoa(server.Port)
|
||||
@ -397,7 +397,7 @@ func FactorioVersion(w http.ResponseWriter, r *http.Request) {
|
||||
}()
|
||||
|
||||
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
var server = factorio.GetFactorioServer()
|
||||
resp["version"] = server.Version.String()
|
||||
resp["base_mod_version"] = server.BaseModVersion
|
||||
}
|
||||
@ -577,7 +577,7 @@ func GetServerSettings(w http.ResponseWriter, r *http.Request) {
|
||||
}()
|
||||
|
||||
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
var server = factorio.GetFactorioServer()
|
||||
resp = server.Settings
|
||||
|
||||
log.Printf("Sent server settings response")
|
||||
@ -597,7 +597,7 @@ func UpdateServerSettings(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
log.Printf("Received settings JSON: %s", body)
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
var server = factorio.GetFactorioServer()
|
||||
err = json.Unmarshal(body, &server.Settings)
|
||||
if err != nil {
|
||||
resp = fmt.Sprintf("Error unmarhaling server settings JSON: %s", err)
|
||||
|
@ -3,6 +3,7 @@ package api
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/mroote/factorio-server-manager/bootstrap"
|
||||
"github.com/mroote/factorio-server-manager/factorio"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@ -21,6 +22,8 @@ import (
|
||||
func TestMain(m *testing.M) {
|
||||
var err error
|
||||
|
||||
godotenv.Load("../.env")
|
||||
|
||||
// basic setup stuff
|
||||
bootstrap.NewConfig([]string{
|
||||
"--dir", os.Getenv("dir"),
|
||||
@ -28,9 +31,11 @@ func TestMain(m *testing.M) {
|
||||
"--mod-pack-dir", os.Getenv("mod_pack_dir"),
|
||||
"--mod-dir", os.Getenv("mod_dir"),
|
||||
})
|
||||
FactorioServ := new(factorio.Server)
|
||||
FactorioServ.Version = factorio.Version{1, 0, 0, 0}
|
||||
FactorioServ.BaseModVersion = "1.0.0"
|
||||
|
||||
factorio.SetFactorioServer(factorio.Server{
|
||||
Version: factorio.Version{0, 18, 30, 0},
|
||||
BaseModVersion: "0.18.30",
|
||||
})
|
||||
|
||||
// check login status
|
||||
var cred factorio.Credentials
|
||||
|
@ -42,7 +42,7 @@ func LogSubscribe(client *Client, data interface{}) {
|
||||
}
|
||||
|
||||
func CommandSend(client *Client, data interface{}) {
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
server := factorio.GetFactorioServer()
|
||||
if server.Running {
|
||||
go func() {
|
||||
log.Printf("Received command: %v", data)
|
||||
@ -66,7 +66,7 @@ func CommandSend(client *Client, data interface{}) {
|
||||
}
|
||||
|
||||
func ServerStatusSubscribe(client *Client, data interface{}) {
|
||||
var server, _ = factorio.GetFactorioServer()
|
||||
var server = factorio.GetFactorioServer()
|
||||
log.Printf("Subcribed to Server Status")
|
||||
go func() {
|
||||
isRunning := server.Running
|
||||
|
@ -83,6 +83,7 @@ func (modInfoList *ModInfoList) listInstalledMods() error {
|
||||
continue
|
||||
}
|
||||
|
||||
// skip optional and incompatible dependencies
|
||||
parts := strings.Split(dep, " ")
|
||||
if len(parts) > 3 {
|
||||
log.Printf("skipping dependency '%s' in '%s': invalid format\n", dep, modInfo.Name)
|
||||
@ -107,7 +108,7 @@ func (modInfoList *ModInfoList) listInstalledMods() error {
|
||||
break
|
||||
}
|
||||
|
||||
server, _ := GetFactorioServer()
|
||||
server := GetFactorioServer()
|
||||
|
||||
if !base.Equals(NilVersion) {
|
||||
modInfo.Compatibility = server.Version.Compare(base, op)
|
||||
|
@ -53,8 +53,7 @@ func (modPackMap *ModPackMap) reload() error {
|
||||
var err error
|
||||
newModPackMap := make(ModPackMap)
|
||||
config := bootstrap.GetConfig()
|
||||
abs, err := filepath.Abs(config.FactorioModPackDir)
|
||||
println(abs)
|
||||
|
||||
err = filepath.Walk(config.FactorioModPackDir, func(path string, info os.FileInfo, err error) error {
|
||||
if path == config.FactorioModPackDir || !info.IsDir() {
|
||||
return nil
|
||||
|
@ -33,22 +33,25 @@ type ModPortalStruct struct {
|
||||
func ModPortalList() (interface{}, error, int) {
|
||||
req, err := http.NewRequest(http.MethodGet, "https://mods.factorio.com/api/mods?page_size=max", nil)
|
||||
if err != nil {
|
||||
return "error", err, 500
|
||||
return "error", err, http.StatusInternalServerError
|
||||
}
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return "error", err, 500
|
||||
return "error", err, http.StatusInternalServerError
|
||||
}
|
||||
|
||||
text, err := ioutil.ReadAll(resp.Body)
|
||||
resp.Body.Close()
|
||||
if err != nil {
|
||||
return "error", err, 500
|
||||
return "error", err, http.StatusInternalServerError
|
||||
}
|
||||
|
||||
var jsonVal interface{}
|
||||
json.Unmarshal(text, &jsonVal)
|
||||
err = json.Unmarshal(text, &jsonVal)
|
||||
if err != nil {
|
||||
return "error", err, http.StatusInternalServerError
|
||||
}
|
||||
|
||||
return jsonVal, nil, resp.StatusCode
|
||||
}
|
||||
@ -59,27 +62,27 @@ func ModPortalModDetails(modId string) (ModPortalStruct, error, int) {
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, "https://mods.factorio.com/api/mods/"+modId, nil)
|
||||
if err != nil {
|
||||
return mod, err, 500
|
||||
return mod, err, http.StatusInternalServerError
|
||||
}
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return mod, err, 500
|
||||
return mod, err, http.StatusInternalServerError
|
||||
}
|
||||
|
||||
text, err := ioutil.ReadAll(resp.Body)
|
||||
resp.Body.Close()
|
||||
if err != nil {
|
||||
return mod, err, 500
|
||||
return mod, err, http.StatusInternalServerError
|
||||
}
|
||||
|
||||
json.Unmarshal(text, &mod)
|
||||
|
||||
server, err := GetFactorioServer()
|
||||
err = json.Unmarshal(text, &mod)
|
||||
if err != nil {
|
||||
return mod, err, resp.StatusCode
|
||||
return mod, err, http.StatusInternalServerError
|
||||
}
|
||||
|
||||
server := GetFactorioServer()
|
||||
|
||||
installedBaseVersion := Version{}
|
||||
_ = installedBaseVersion.UnmarshalText([]byte(server.BaseModVersion))
|
||||
requiredVersion := NilVersion
|
||||
|
@ -12,7 +12,7 @@ func connectRC() error {
|
||||
var err error
|
||||
config := bootstrap.GetConfig()
|
||||
rconAddr := config.ServerIP + ":" + strconv.Itoa(config.FactorioRconPort)
|
||||
server, err := GetFactorioServer()
|
||||
server := GetFactorioServer()
|
||||
server.Rcon, err = rcon.Dial(rconAddr, config.FactorioRconPass)
|
||||
if err != nil {
|
||||
log.Printf("Cannot create rcon session: %s", err)
|
||||
|
@ -59,9 +59,12 @@ func (f *Server) autostart() {
|
||||
|
||||
}
|
||||
|
||||
func GetFactorioServer() (f Server, err error) {
|
||||
once.Do(func() {
|
||||
f = Server{}
|
||||
func SetFactorioServer(server Server) {
|
||||
instantiated = server
|
||||
}
|
||||
|
||||
func NewFactorioServer() (err error) {
|
||||
f := Server{}
|
||||
f.Settings = make(map[string]interface{})
|
||||
config := bootstrap.GetConfig()
|
||||
if err = os.MkdirAll(config.FactorioConfigDir, 0755); err != nil {
|
||||
@ -72,13 +75,14 @@ func GetFactorioServer() (f Server, err error) {
|
||||
settingsPath := filepath.Join(config.FactorioConfigDir, config.SettingsFile)
|
||||
var settings *os.File
|
||||
|
||||
if _, err := os.Stat(settingsPath); os.IsNotExist(err) {
|
||||
if _, err = os.Stat(settingsPath); os.IsNotExist(err) {
|
||||
// copy example settings to supplied settings file, if not exists
|
||||
log.Printf("Server settings at %s not found, copying example server settings.\n", settingsPath)
|
||||
|
||||
examplePath := filepath.Join(config.FactorioDir, "data", "server-settings.example.json")
|
||||
|
||||
example, err := os.Open(examplePath)
|
||||
var example *os.File
|
||||
example, err = os.Open(examplePath)
|
||||
if err != nil {
|
||||
log.Printf("failed to open example server settings: %v", err)
|
||||
return
|
||||
@ -165,11 +169,12 @@ func GetFactorioServer() (f Server, err error) {
|
||||
|
||||
// load admins from additional file
|
||||
if (f.Version.Greater(Version{0, 17, 0})) {
|
||||
if _, err := os.Stat(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile)); os.IsNotExist(err) {
|
||||
if _, err = os.Stat(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile)); os.IsNotExist(err) {
|
||||
//save empty admins-file
|
||||
_ = ioutil.WriteFile(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile), []byte("[]"), 0664)
|
||||
} else {
|
||||
data, err := ioutil.ReadFile(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile))
|
||||
var data []byte
|
||||
data, err = ioutil.ReadFile(filepath.Join(config.FactorioConfigDir, config.FactorioAdminFile))
|
||||
if err != nil {
|
||||
log.Printf("Error loading FactorioAdminFile: %s", err)
|
||||
return
|
||||
@ -186,14 +191,18 @@ func GetFactorioServer() (f Server, err error) {
|
||||
}
|
||||
}
|
||||
|
||||
instantiated = f
|
||||
SetFactorioServer(f)
|
||||
|
||||
if config.Autostart == "true" {
|
||||
go instantiated.autostart()
|
||||
}
|
||||
})
|
||||
|
||||
return instantiated, nil
|
||||
return
|
||||
}
|
||||
|
||||
// todo refactor remove return value err
|
||||
func GetFactorioServer() (f Server) {
|
||||
return instantiated
|
||||
}
|
||||
|
||||
func (f *Server) Run() error {
|
||||
|
@ -11,6 +11,7 @@ require (
|
||||
github.com/gorilla/websocket v1.4.1
|
||||
github.com/hpcloud/tail v1.0.0
|
||||
github.com/jessevdk/go-flags v1.4.0
|
||||
github.com/joho/godotenv v1.3.0
|
||||
github.com/lib/pq v1.2.0 // indirect
|
||||
github.com/majormjr/rcon v0.0.0-20120923215419-8fbb8268b60a
|
||||
github.com/mattn/go-sqlite3 v1.11.0 // indirect
|
||||
|
@ -28,6 +28,8 @@ github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
|
||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
|
||||
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
|
||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
|
||||
|
@ -17,7 +17,7 @@ func main() {
|
||||
factorio.ModStartUp()
|
||||
|
||||
// Initialize Factorio Server struct
|
||||
_, err := factorio.GetFactorioServer()
|
||||
err := factorio.NewFactorioServer()
|
||||
if err != nil {
|
||||
log.Printf("Error occurred during Server initializaion: %v\n", err)
|
||||
return
|
||||
|
Reference in New Issue
Block a user