Skip to content

Commit

Permalink
Cleanup, optimize mockservers, upgrade internal requirements
Browse files Browse the repository at this point in the history
  • Loading branch information
outdead committed Nov 17, 2020
1 parent 42d1cb2 commit 087550b
Show file tree
Hide file tree
Showing 7 changed files with 186 additions and 81 deletions.
11 changes: 4 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
.idea/
rcon-local.yaml
rcon-cli
rcon-cli.exe
build.sh
.vscode/
vendor/
Gopkg.lock
release/
logs/
*local.yaml
rcon-cli
rcon-cli.exe
*.log
rcon-temp.yaml
temp/
8 changes: 6 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ All notable changes to this project will be documented in this file.
**ATTN**: This project uses [semantic versioning](http://semver.org/).

## [Unreleased]

## [v0.8.1] - 2020-11-17
### Added
- Added tests for real servers. Servers list: `Project Zomboid`, `7 Days to Die`, `Rust`.
- Added tests for real servers. Servers list: `Project Zomboid`, `7 Days to Die`, `Rust`.
- Added removing part of the constantly repeated data from `7 Days to Die` response ([details](https://github.com/gorcon/telnet/issues/1)).

## [v0.8.0-beta.2] - 2020-10-18
### Added
Expand Down Expand Up @@ -71,7 +74,8 @@ than entry in configuration file.
### Added
- Initial implementation.

[Unreleased]: https://github.com/gorcon/rcon-cli/compare/v0.8.0-beta.2...HEAD
[Unreleased]: https://github.com/gorcon/rcon-cli/compare/v0.8.1...HEAD
[v0.8.1]: https://github.com/gorcon/rcon-cli/compare/v0.8.0-beta.2...v0.8.1
[v0.8.0-beta.2]: https://github.com/gorcon/rcon-cli/compare/v0.8.0-beta...v0.8.0-beta.2
[v0.8.0-beta]: https://github.com/gorcon/rcon-cli/compare/v0.7.0...v0.8.0-beta
[v0.7.0]: https://github.com/gorcon/rcon-cli/compare/v0.6.0...v0.7.0
Expand Down
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ go 1.15

require (
github.com/gorcon/rcon v1.2.4
github.com/gorcon/telnet v1.0.1
github.com/gorcon/telnet v1.1.0
github.com/gorcon/websocket v1.0.1
github.com/gorilla/websocket v1.4.2
github.com/stretchr/testify v1.6.1
github.com/urfave/cli v1.22.4
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gorcon/rcon v1.2.4 h1:X+2mW0yQeLqQiKGbFa69v0Qz/kEYl6Qu9ztSLmD17eA=
github.com/gorcon/rcon v1.2.4/go.mod h1:tR1u9kJLW1lKzOMLl9VpXT/JYN4efFtD3fSmmwSpOHc=
github.com/gorcon/telnet v1.0.1 h1:Nj3G8OddlB/4z7ciMblLDm5DNUyHrqpB3VINeFKDZA0=
github.com/gorcon/telnet v1.0.1/go.mod h1:KwU1iCwOxpp/G52AfvVsMxdSEA475k9tt9hMzQSx8Lc=
github.com/gorcon/telnet v1.1.0 h1:z+UVtFcCG4vON2TwSxOZo6OuC7qPQ8C876RjWDghV5g=
github.com/gorcon/telnet v1.1.0/go.mod h1:KwU1iCwOxpp/G52AfvVsMxdSEA475k9tt9hMzQSx8Lc=
github.com/gorcon/websocket v1.0.1 h1:wPJzT4vOIDvvju5nMECxx2Gq6Apzs0CjRU8Pm1h73ro=
github.com/gorcon/websocket v1.0.1/go.mod h1:FrkydxLIsmjR0a1ourSUrmqVfCbzueOMzgYkN7MaBnE=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
Expand Down
105 changes: 42 additions & 63 deletions main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,29 +140,11 @@ func TestGetLogFile(t *testing.T) {
}

func TestExecute(t *testing.T) {
serverRCON, err := NewMockServerRCON()
if err != nil {
t.Fatal(err)
}
defer func() {
assert.NoError(t, serverRCON.Close())
close(serverRCON.errors)
for err := range serverRCON.errors {
assert.NoError(t, err)
}
}()
serverRCON := MustNewMockServerRCON()
defer serverRCON.MustClose()

serverTELNET, err := NewMockServerTELNET()
if err != nil {
t.Fatal(err)
}
defer func() {
assert.NoError(t, serverTELNET.Close())
close(serverTELNET.errors)
for err := range serverTELNET.errors {
assert.NoError(t, err)
}
}()
serverTELNET := MustNewMockServerTELNET()
defer serverTELNET.MustClose()

serverWebRCON := httptest.NewServer(MockHandlersWebRCON())
defer serverWebRCON.Close()
Expand Down Expand Up @@ -322,7 +304,19 @@ func TestExecute(t *testing.T) {

t.Run("7dtd server", func(t *testing.T) {
needle := func() string {
n := `*** List of Commands ***
n := `*** Generic Console Help ***
To get further help on a specific topic or command type (without the brackets)
help <topic / command>
Generic notation of command parameters:
<param name> Required parameter
<entityId / player name> Possible types of parameter values
[param name] Optional parameter
*** List of Help Topics ***
None yet
*** List of Commands ***
admin => Manage user permission levels
aiddebug => Toggles AIDirector debug output.
audio => Watch audio stats
Expand Down Expand Up @@ -489,17 +483,8 @@ of your current perk levels in a CSV file next to it.
}

func TestInteractive(t *testing.T) {
server, err := NewMockServerRCON()
if err != nil {
t.Fatal(err)
}
defer func() {
assert.NoError(t, server.Close())
close(server.errors)
for err := range server.errors {
assert.NoError(t, err)
}
}()
serverRCON := MustNewMockServerRCON()
defer serverRCON.MustClose()

w := &bytes.Buffer{}

Expand All @@ -508,17 +493,17 @@ func TestInteractive(t *testing.T) {
var r bytes.Buffer
r.WriteString(CommandQuit + "\n")

err = Interactive(&r, w, session.Session{Address: server.Addr(), Password: "fake"})
err := Interactive(&r, w, session.Session{Address: serverRCON.Addr(), Password: "fake"})
assert.Error(t, err)
})

// Test get Interactive address.
t.Run("interactive get address", func(t *testing.T) {
var r bytes.Buffer
r.WriteString(server.Addr() + "\n")
r.WriteString(serverRCON.Addr() + "\n")
r.WriteString(CommandQuit + "\n")

err = Interactive(&r, w, session.Session{Address: "", Password: MockPasswordRCON})
err := Interactive(&r, w, session.Session{Address: "", Password: MockPasswordRCON})
assert.NoError(t, err)
})

Expand All @@ -528,7 +513,7 @@ func TestInteractive(t *testing.T) {
r.WriteString(MockPasswordRCON + "\n")
r.WriteString(CommandQuit + "\n")

err = Interactive(&r, w, session.Session{Address: server.Addr(), Password: ""})
err := Interactive(&r, w, session.Session{Address: serverRCON.Addr(), Password: ""})
assert.NoError(t, err)
})

Expand All @@ -539,7 +524,7 @@ func TestInteractive(t *testing.T) {
r.WriteString("unknown command" + "\n")
r.WriteString(CommandQuit + "\n")

err = Interactive(r, w, session.Session{Address: server.Addr(), Password: MockPasswordRCON})
err := Interactive(r, w, session.Session{Address: serverRCON.Addr(), Password: MockPasswordRCON})
assert.NoError(t, err)
})

Expand All @@ -550,23 +535,14 @@ func TestInteractive(t *testing.T) {
r.WriteString("unknown command" + "\n")
r.WriteString(CommandQuit + "\n")

err = Interactive(r, w, session.Session{Address: server.Addr(), Password: MockPasswordTELNET, Type: session.ProtocolTELNET})
err := Interactive(r, w, session.Session{Address: serverRCON.Addr(), Password: MockPasswordTELNET, Type: session.ProtocolTELNET})
assert.NoError(t, err)
})
}

func TestNewApp(t *testing.T) {
server, err := NewMockServerRCON()
if err != nil {
t.Fatal(err)
}
defer func() {
assert.NoError(t, server.Close())
close(server.errors)
for err := range server.errors {
assert.NoError(t, err)
}
}()
serverRCON := MustNewMockServerRCON()
defer serverRCON.MustClose()

// Test getting address and password from args. Config ang log are not used.
t.Run("getting address and password from args", func(t *testing.T) {
Expand All @@ -575,21 +551,24 @@ func TestNewApp(t *testing.T) {

app := NewApp(r, w)
args := os.Args[0:1]
args = append(args, "-a="+server.Addr())
args = append(args, "-a="+serverRCON.Addr())
args = append(args, "-p="+MockPasswordRCON)
args = append(args, "-c="+MockCommandHelpRCON)

err = app.Run(args)
err := app.Run(args)
assert.NoError(t, err)
})

// Test getting address and password from config. Log is not used.
t.Run("getting address and password from args with log", func(t *testing.T) {
var configFileName = "rcon-temp.yaml"
err := createConfigFile(configFileName, server.Addr(), MockPasswordRCON)
err := createConfigFile(configFileName, serverRCON.Addr(), MockPasswordRCON)
assert.NoError(t, err)
defer func() {
err := os.Remove(configFileName)
err := os.Remove(DefaultTestLogName)
assert.NoError(t, err)

err = os.Remove(configFileName)
assert.NoError(t, err)
}()

Expand All @@ -614,7 +593,7 @@ func TestNewApp(t *testing.T) {
args := os.Args[0:1]
args = append(args, "-c="+MockCommandHelpRCON)

err = app.Run(args)
err := app.Run(args)
assert.Error(t, err)
if !os.IsNotExist(err) {
t.Errorf("unexpected error: %v", err)
Expand All @@ -624,7 +603,7 @@ func TestNewApp(t *testing.T) {
// Test default config file is incorrect. Log is not used.
t.Run("default config file is incorrect", func(t *testing.T) {
var configFileName = "rcon-temp.yaml"
err := createInvalidConfigFile(configFileName, server.Addr(), MockPasswordRCON)
err := createInvalidConfigFile(configFileName, serverRCON.Addr(), MockPasswordRCON)
assert.NoError(t, err)
defer func() {
err := os.Remove(configFileName)
Expand Down Expand Up @@ -654,7 +633,7 @@ func TestNewApp(t *testing.T) {
args[0] = ""
args = append(args, "-c="+MockCommandHelpRCON)

err = app.Run(args)
err := app.Run(args)
assert.EqualError(t, err, "address is not set: to set address add -a host:port")
})

Expand All @@ -667,10 +646,10 @@ func TestNewApp(t *testing.T) {
args := os.Args[0:1]
// Hack to use os.Args[0] in go run
args[0] = ""
args = append(args, "-a="+server.Addr())
args = append(args, "-a="+serverRCON.Addr())
args = append(args, "-c="+MockCommandHelpRCON)

err = app.Run(args)
err := app.Run(args)
assert.EqualError(t, err, "password is not set: to set password add -p password")
})

Expand All @@ -681,19 +660,19 @@ func TestNewApp(t *testing.T) {

app := NewApp(r, w)
args := os.Args[0:1]
args = append(args, "-a="+server.Addr())
args = append(args, "-a="+serverRCON.Addr())
args = append(args, "-p="+MockPasswordRCON)

r.WriteString(MockCommandHelpRCON + "\n")
r.WriteString(CommandQuit + "\n")

err = app.Run(args)
err := app.Run(args)
assert.NoError(t, err)
})
}

// DefaultTestLogName sets the default log file name.
const DefaultTestLogName = "rcon-default.log"
const DefaultTestLogName = "rcon-test.log"

// createConfigFile creates config file with default section.
func createConfigFile(name string, address string, password string) error {
Expand Down
Loading

0 comments on commit 087550b

Please sign in to comment.