@@ -2,8 +2,8 @@ package main
22
33import (
44 "bytes"
5- "encoding/json"
65 "fmt"
6+ "net/http/httptest"
77 "os"
88 "strings"
99 "testing"
@@ -164,53 +164,89 @@ func TestExecute(t *testing.T) {
164164 }
165165 }()
166166
167- w := & bytes.Buffer {}
167+ serverWebRCON := httptest .NewServer (MockHandlersWebRCON ())
168+ defer serverWebRCON .Close ()
168169
169170 // Test empty address.
170171 t .Run ("empty address" , func (t * testing.T ) {
172+ w := & bytes.Buffer {}
173+
171174 err := Execute (w , session.Session {Address : "" , Password : MockPasswordRCON }, MockCommandHelpRCON )
172175 assert .Error (t , err )
173176 })
174177
175178 // Test empty password.
176179 t .Run ("empty password" , func (t * testing.T ) {
180+ w := & bytes.Buffer {}
181+
177182 err := Execute (w , session.Session {Address : serverRCON .Addr (), Password : "" }, MockCommandHelpRCON )
178183 assert .Error (t , err )
179184 })
180185
181186 // Test wrong password.
182187 t .Run ("wrong password" , func (t * testing.T ) {
188+ w := & bytes.Buffer {}
189+
183190 err := Execute (w , session.Session {Address : serverRCON .Addr (), Password : "wrong" }, MockCommandHelpRCON )
184191 assert .Error (t , err )
185192 })
186193
187194 // Test empty command.
188195 t .Run ("empty command" , func (t * testing.T ) {
196+ w := & bytes.Buffer {}
197+
189198 err := Execute (w , session.Session {Address : serverRCON .Addr (), Password : MockPasswordRCON }, "" )
190199 assert .Error (t , err )
191200 })
192201
193202 // Test long command.
194203 t .Run ("long command" , func (t * testing.T ) {
204+ w := & bytes.Buffer {}
205+
195206 bigCommand := make ([]byte , 1001 )
196207 err := Execute (w , session.Session {Address : serverRCON .Addr (), Password : MockPasswordRCON }, string (bigCommand ))
197208 assert .Error (t , err )
198209 })
199210
200211 // Positive RCON test Execute func.
201212 t .Run ("no error rcon" , func (t * testing.T ) {
213+ w := & bytes.Buffer {}
214+
202215 err := Execute (w , session.Session {Address : serverRCON .Addr (), Password : MockPasswordRCON }, MockCommandHelpRCON )
203216 assert .NoError (t , err )
217+
218+ result := strings .TrimSuffix (w .String (), "\n " )
219+ assert .Equal (t , MockCommandHelpResponseTextRCON , result )
204220 })
205221
206222 // Positive TELNET test Execute func.
207223 t .Run ("no error telnet" , func (t * testing.T ) {
224+ w := & bytes.Buffer {}
225+
208226 err := Execute (w , session.Session {Address : serverTELNET .Addr (), Password : MockPasswordTELNET , Type : session .ProtocolTELNET }, MockCommandHelpTELNET )
209227 assert .NoError (t , err )
228+
229+ result := strings .TrimSuffix (w .String (), "\n " )
230+ if ! strings .Contains (result , MockCommandHelpResponseTextTELNET ) {
231+ assert .Equal (t , MockCommandHelpResponseTextTELNET , result )
232+ }
233+ })
234+
235+ // Positive WEB RCON test Execute func.
236+ t .Run ("no error web" , func (t * testing.T ) {
237+ w := & bytes.Buffer {}
238+
239+ err := Execute (w , session.Session {Address : serverWebRCON .Listener .Addr ().String (), Password : MockPasswordWebRCON , Type : session .ProtocolWebRCON }, "status" )
240+ assert .NoError (t , err )
241+
242+ result := strings .TrimSuffix (w .String (), "\n " )
243+ assert .Equal (t , MockCommandStatusResponseTextWebRCON , result )
210244 })
211245
212246 // Positive test Execute func with log.
213247 t .Run ("no error with log" , func (t * testing.T ) {
248+ w := & bytes.Buffer {}
249+
214250 logFileName := "tmpfile.log"
215251 defer func () {
216252 err := os .Remove (logFileName )
@@ -226,7 +262,8 @@ func TestExecute(t *testing.T) {
226262 password := getVar ("TEST_PZ_SERVER_PASSWORD" , "docker" )
227263
228264 t .Run ("pz server" , func (t * testing.T ) {
229- needle := `List of server commands :
265+ needle := func () string {
266+ n := `List of server commands :
230267* addalltowhitelist : Add all the current users connected with a password in the whitelist, so their account is protected.
231268* additem : Add an item to a player, if no username is given the item will be added to you, count is optional, use /additem \"username\" \"module.item\" count, ex : /additem \"rj\" \"Base.Axe\" count
232269* adduser : Use this command to add a new user in a whitelisted server, use : /adduser \"username\" \"pwd\"
@@ -264,23 +301,18 @@ func TestExecute(t *testing.T) {
264301* unbanuser : Unban a player, use : /unbanuser \"username\"
265302* voiceban : Block voice from user \"username\", use : /voiceban \"username\" -value, ex /voiceban \"rj\" -true (could be -false)`
266303
267- needle = strings .Replace (needle , "List of server commands :" , "List of server commands : " , - 1 )
304+ n = strings .Replace (n , "List of server commands :" , "List of server commands : " , - 1 )
268305
269- err := Execute (w , session.Session {Address : addr , Password : password }, "help" )
270- assert .NoError (t , err )
271- assert .NotEmpty (t , w .String ())
306+ return n
307+ }()
272308
273- if ! strings .Contains (w .String (), needle ) {
274- diff := struct {
275- R string
276- N string
277- }{R : w .String (), N : needle }
309+ w := & bytes.Buffer {}
278310
279- js , _ := json . Marshal ( diff )
280- fmt . Println ( string ( js ) )
311+ err := Execute ( w , session. Session { Address : addr , Password : password }, "help" )
312+ assert . NoError ( t , err )
281313
282- t . Error ( "response is not contain needle string " )
283- }
314+ result := strings . TrimSuffix ( w . String (), " \n " )
315+ assert . Equal ( t , needle , result )
284316 })
285317 }
286318
@@ -289,7 +321,8 @@ func TestExecute(t *testing.T) {
289321 password := getVar ("TEST_7DTD_SERVER_PASSWORD" , "banana" )
290322
291323 t .Run ("7dtd server" , func (t * testing.T ) {
292- needle := `*** List of Commands ***
324+ needle := func () string {
325+ n := `*** List of Commands ***
293326 admin => Manage user permission levels
294327 aiddebug => Toggles AIDirector debug output.
295328 audio => Watch audio stats
@@ -405,24 +438,21 @@ of your current perk levels in a CSV file next to it.
405438 xuireload => Access xui related functions such as reinitializing a window group, opening a window group
406439 zip => Control zipline settings`
407440
408- needle = strings .Replace (needle , "\n " , "\r \n " , - 1 )
409- needle = strings .Replace (needle , "some generic info\r \n " , "some generic info\n " , - 1 )
410- needle = strings .Replace (needle , "Also stores a list\r \n " , "Also stores a list\n " , - 1 )
441+ n = strings .Replace (n , "\n " , "\r \n " , - 1 )
442+ n = strings .Replace (n , "some generic info\r \n " , "some generic info\n " , - 1 )
443+ n = strings .Replace (n , "Also stores a list\r \n " , "Also stores a list\n " , - 1 )
444+
445+ return n
446+ }()
447+
448+ w := & bytes.Buffer {}
411449
412450 err := Execute (w , session.Session {Address : addr , Password : password , Type : session .ProtocolTELNET }, "help" )
413451 assert .NoError (t , err )
414- assert .NotEmpty (t , w .String ())
415452
453+ result := strings .TrimSuffix (w .String (), "\n " )
416454 if ! strings .Contains (w .String (), needle ) {
417- diff := struct {
418- R string
419- N string
420- }{R : w .String (), N : needle }
421-
422- js , _ := json .Marshal (diff )
423- fmt .Println (string (js ))
424-
425- t .Error ("response is not contain needle string" )
455+ assert .Equal (t , needle , result )
426456 }
427457 })
428458 }
@@ -432,6 +462,8 @@ of your current perk levels in a CSV file next to it.
432462 password := getVar ("TEST_RUST_SERVER_RCON_PASSWORD" , "docker" )
433463
434464 t .Run ("rust server rcon" , func (t * testing.T ) {
465+ w := & bytes.Buffer {}
466+
435467 err := Execute (w , session.Session {Address : addr , Password : password }, "status" )
436468 assert .NoError (t , err )
437469 assert .NotEmpty (t , w .String ())
@@ -445,6 +477,8 @@ of your current perk levels in a CSV file next to it.
445477 password := getVar ("TEST_RUST_SERVER_WEB_PASSWORD" , "docker" )
446478
447479 t .Run ("rust server web" , func (t * testing.T ) {
480+ w := & bytes.Buffer {}
481+
448482 err := Execute (w , session.Session {Address : addr , Password : password , Type : session .ProtocolWebRCON }, "status" )
449483 assert .NoError (t , err )
450484 assert .NotEmpty (t , w .String ())
@@ -552,7 +586,7 @@ func TestNewApp(t *testing.T) {
552586 // Test getting address and password from config. Log is not used.
553587 t .Run ("getting address and password from args with log" , func (t * testing.T ) {
554588 var configFileName = "rcon-temp.yaml"
555- err := CreateConfigFile (configFileName , server .Addr (), MockPasswordRCON )
589+ err := createConfigFile (configFileName , server .Addr (), MockPasswordRCON )
556590 assert .NoError (t , err )
557591 defer func () {
558592 err := os .Remove (configFileName )
@@ -590,7 +624,7 @@ func TestNewApp(t *testing.T) {
590624 // Test default config file is incorrect. Log is not used.
591625 t .Run ("default config file is incorrect" , func (t * testing.T ) {
592626 var configFileName = "rcon-temp.yaml"
593- err := CreateInvalidConfigFile (configFileName , server .Addr (), MockPasswordRCON )
627+ err := createInvalidConfigFile (configFileName , server .Addr (), MockPasswordRCON )
594628 assert .NoError (t , err )
595629 defer func () {
596630 err := os .Remove (configFileName )
@@ -661,8 +695,8 @@ func TestNewApp(t *testing.T) {
661695// DefaultTestLogName sets the default log file name.
662696const DefaultTestLogName = "rcon-default.log"
663697
664- // CreateConfigFile creates config file with default section.
665- func CreateConfigFile (name string , address string , password string ) error {
698+ // createConfigFile creates config file with default section.
699+ func createConfigFile (name string , address string , password string ) error {
666700 var stringBody = fmt .Sprintf (
667701 "%s:\n address: \" %s\" \n password: \" %s\" \n log: \" %s\" " ,
668702 config .DefaultConfigEnv , address , password , DefaultTestLogName ,
@@ -676,8 +710,8 @@ func CreateConfigFile(name string, address string, password string) error {
676710 return err
677711}
678712
679- // CreateIncorrectConfigFile creates incorrect yaml config file.
680- func CreateInvalidConfigFile (name string , address string , password string ) error {
713+ // createIncorrectConfigFile creates incorrect yaml config file.
714+ func createInvalidConfigFile (name string , address string , password string ) error {
681715 var stringBody = fmt .Sprintf (
682716 "address: \" %s\" \n password: \" %s\" \n log: \" %s\" " ,
683717 address , password , DefaultTestLogName ,
0 commit comments