Skip to content
Snippets Groups Projects
Commit 71926e97 authored by gjahn's avatar gjahn
Browse files

Add test route that dumps all server runtime environment variables if env not 'production'

The three dots ('./...') are required to ensure recursive dependency
installation, meaning dependencies of sub-packages.
parent 55d93f97
No related branches found
No related tags found
No related merge requests found
package routing
import (
"os"
"fmt"
"net/http"
"webservice/configuration"
f "github.com/gofiber/fiber/v2"
)
func SetRoutes( router *f.App ){
func SetRoutes( router *f.App, config *configuration.Config ){
router.Get( "/", func( c *f.Ctx ) error {
return c.SendString( "Hello World!" )
return c.SendString( "Hello, World!" )
})
router.Get( "/env", func( c *f.Ctx ) error {
c.Type( "txt", "utf-8" )
if config.Environment == "production" {
c.Status( http.StatusForbidden )
return nil
}
for _, envVar := range os.Environ() {
_, err := c.WriteString( fmt.Sprintln( envVar ) )
if err != nil {
c.Status( http.StatusInternalServerError )
return err
}
}
c.Status( http.StatusOK )
return nil
})
router.Use( func( c *f.Ctx ) error {
return c.SendStatus( 418 )
return c.SendStatus( http.StatusTeapot )
})
}
package routing
import (
"fmt"
"io"
"os"
"time"
"math/rand"
"testing"
"net/http"
ht "net/http/httptest"
f "github.com/gofiber/fiber/v2"
"github.com/stretchr/testify/assert"
"webservice/configuration"
)
func setup() *f.App {
router := f.New()
func setup() ( *f.App, *configuration.Config ){
os.Setenv( "ENV_NAME", "testing" )
config, _ := configuration.New()
server := f.New( f.Config{
AppName: "test",
DisableStartupMessage: false,
})
SetRoutes( router )
SetRoutes( server, config )
return router
return server, config
}
......@@ -30,13 +43,43 @@ func bodyToString( body *io.ReadCloser ) ( string, error ) {
}
func generateRandomNumberString() string {
r := rand.New( rand.NewSource( time.Now().Unix() ) )
randomNumber := r.Int63()
return fmt.Sprintf( "%d", randomNumber )
}
func TestIndexRoute( t *testing.T ){
router := setup()
router, _ := setup()
req := ht.NewRequest( "GET", "/", nil )
res, err := router.Test( req, -1 )
bodyContent, err := bodyToString( &res.Body )
assert.Nil( t, err )
assert.Equal( t, "Hello World!", bodyContent )
assert.Equal( t, "Hello, World!", bodyContent )
}
func TestEnvRoute( t *testing.T ){
router, config := setup()
envVarName := "TEST_ENV_VAR"
envVarValue := generateRandomNumberString()
os.Setenv( envVarName, envVarValue )
req := ht.NewRequest( "GET", "/env", nil )
res, err := router.Test( req, -1 )
bodyContent, err := bodyToString( &res.Body )
assert.Equal( t, http.StatusOK, res.StatusCode )
assert.Nil( t, err )
assert.Contains( t, bodyContent, fmt.Sprintf( "%s=%s", envVarName, envVarValue ) )
( *config ).Environment = "production"
req = ht.NewRequest( "GET", "/env", nil )
res, err = router.Test( req, -1 )
assert.Equal( t, http.StatusForbidden, res.StatusCode )
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment