diff --git a/context_test.go b/context_test.go
index 0907d59b..7045131a 100644
--- a/context_test.go
+++ b/context_test.go
@@ -1,10 +1,13 @@
package iris
-/* The most part of the context covered,
+/*
+The most part of the context covered,
the other part contains serving static methods,
-find remote ip and GetInt,
+find remote ip, GetInt and the view engine rendering(templates)
I am not waiting unexpected behaviors from the rest of the funcs,
so that's all with context's tests.
+
+CONTRIBUTE & DISCUSSION ABOUT TESTS TO: https://github.com/iris-contrib/tests
*/
import (
@@ -532,3 +535,79 @@ func TestContextSessions(t *testing.T) {
e.POST("/set").WithJSON(values).Expect().Status(StatusOK).Cookies().NotEmpty()
e.GET("/clear").Expect().Status(StatusOK).JSON().Object().Empty()
}
+
+type renderTestInformationType struct {
+ XMLName xml.Name `xml:"info"`
+ FirstAttr string `xml:"first,attr"`
+ SecondAttr string `xml:"second,attr"`
+ Name string `xml:"name",json:"name"`
+ Birth string `xml:"birth",json:"birth"`
+ Stars int `xml:"stars",json:"stars"`
+}
+
+func TestContextRenderRest(t *testing.T) {
+ initDefault()
+
+ dataContents := []byte("Some binary data here.")
+ textContents := "Plain text here"
+ JSONPContents := map[string]string{"hello": "jsonp"}
+ JSONPCallback := "callbackName"
+ JSONXMLContents := renderTestInformationType{
+ XMLName: xml.Name{Local: "info", Space: "info"}, // only need to verify that later
+ FirstAttr: "this is the first attr",
+ SecondAttr: "this is the second attr",
+ Name: "Iris web framework",
+ Birth: "13 March 2016",
+ Stars: 4064,
+ }
+ markdownContents := "# Hello dynamic markdown from Iris"
+
+ Get("/data", func(ctx *Context) {
+ ctx.Data(StatusOK, dataContents)
+ })
+
+ Get("/text", func(ctx *Context) {
+ ctx.Text(StatusOK, textContents)
+ })
+
+ Get("/jsonp", func(ctx *Context) {
+ ctx.JSONP(StatusOK, JSONPCallback, JSONPContents)
+ })
+
+ Get("/json", func(ctx *Context) {
+ ctx.JSON(StatusOK, JSONXMLContents)
+ })
+ Get("/xml", func(ctx *Context) {
+ ctx.XML(StatusOK, JSONXMLContents)
+ })
+
+ Get("/markdown", func(ctx *Context) {
+ ctx.Markdown(StatusOK, markdownContents)
+ })
+
+ e := Tester(t)
+ dataT := e.GET("/data").Expect().Status(StatusOK)
+ dataT.Header("Content-Type").Equal("application/octet-stream")
+ dataT.Body().Equal(string(dataContents))
+
+ textT := e.GET("/text").Expect().Status(StatusOK)
+ textT.Header("Content-Type").Equal("text/plain; charset=UTF-8")
+ textT.Body().Equal(textContents)
+
+ JSONPT := e.GET("/jsonp").Expect().Status(StatusOK)
+ JSONPT.Header("Content-Type").Equal("application/javascript; charset=UTF-8")
+ JSONPT.Body().Equal(JSONPCallback + `({"hello":"jsonp"});`)
+
+ JSONT := e.GET("/json").Expect().Status(StatusOK)
+ JSONT.Header("Content-Type").Equal("application/json; charset=UTF-8")
+ JSONT.JSON().Object().Equal(JSONXMLContents)
+
+ XMLT := e.GET("/xml").Expect().Status(StatusOK)
+ XMLT.Header("Content-Type").Equal("text/xml; charset=UTF-8")
+ XMLT.Body().Equal(`<` + JSONXMLContents.XMLName.Local + ` first="` + JSONXMLContents.FirstAttr + `" second="` + JSONXMLContents.SecondAttr + `">` + JSONXMLContents.Name + `` + JSONXMLContents.Birth + `` + strconv.Itoa(JSONXMLContents.Stars) + ``)
+
+ markdownT := e.GET("/markdown").Expect().Status(StatusOK)
+ markdownT.Header("Content-Type").Equal("text/html; charset=UTF-8")
+ markdownT.Body().Equal("
" + markdownContents[2:] + "
\n")
+
+}
diff --git a/mux_test.go b/http_test.go
similarity index 68%
rename from mux_test.go
rename to http_test.go
index 95501fdd..e99f45cf 100644
--- a/mux_test.go
+++ b/http_test.go
@@ -1,15 +1,179 @@
package iris
-// Contains tests for the mux(Router)
+/*
+This is the part we only care, these are end-to-end tests for the mux(router) and the server, the whole http file is made for these reasons only, so these tests are enough I think.
+
+CONTRIBUTE & DISCUSSION ABOUT TESTS TO: https://github.com/iris-contrib/tests
+*/
import (
"fmt"
+ "io/ioutil"
+ "os"
"strconv"
"testing"
+ "time"
"github.com/gavv/httpexpect"
+ "github.com/kataras/iris/config"
)
+const (
+ testTLSCert = `-----BEGIN CERTIFICATE-----
+ MIIDAzCCAeugAwIBAgIJAPDsxtKV4v3uMA0GCSqGSIb3DQEBBQUAMBgxFjAUBgNV
+ BAMMDTEyNy4wLjAuMTo0NDMwHhcNMTYwNjI5MTMxMjU4WhcNMjYwNjI3MTMxMjU4
+ WjAYMRYwFAYDVQQDDA0xMjcuMC4wLjE6NDQzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+ AQ8AMIIBCgKCAQEA0KtAOHKrcbLwWJXgRX7XSFyu4HHHpSty4bliv8ET4sLJpbZH
+ XeVX05Foex7PnrurDP6e+0H5TgqqcpQM17/ZlFcyKrJcHSCgV0ZDB3Sb8RLQSLns
+ 8a+MOSbn1WZ7TkC7d/cWlKmasQRHQ2V/cWlGooyKNEPoGaEz8MbY0wn2spyIJwsB
+ dciERC6317VTXbiZdoD8QbAsT+tBvEHM2m2A7B7PQmHNehtyFNbSV5uZNodvv1uv
+ ZTnDa6IqpjFLb1b2HNFgwmaVPmmkLuy1l9PN+o6/DUnXKKBrfPAx4JOlqTKEQpWs
+ pnfacTE3sWkkmOSSFltAXfkXIJFKdS/hy5J/KQIDAQABo1AwTjAdBgNVHQ4EFgQU
+ zr1df/c9+NyTpmyiQO8g3a8NswYwHwYDVR0jBBgwFoAUzr1df/c9+NyTpmyiQO8g
+ 3a8NswYwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEACG5shtMSDgCd
+ MNjOF+YmD+PX3Wy9J9zehgaDJ1K1oDvBbQFl7EOJl8lRMWITSws22Wxwh8UXVibL
+ sscKBp14dR3e7DdbwCVIX/JyrJyOaCfy2nNBdf1B06jYFsIHvP3vtBAb9bPNOTBQ
+ QE0Ztu9kCqgsmu0//sHuBEeA3d3E7wvDhlqRSxTLcLtgC1NSgkFvBw0JvwgpkX6s
+ M5WpSBZwZv8qpplxhFfqNy8Uf+xrpSW0pGfkHumehkQGC6/Ry7raganS0aHhDPK9
+ Z1bEJ2com1bFFAQsm9yIXrRVMGGCtihB2Au0Q4jpEjUbzWYM+ItZyvRAGRM6Qex6
+ s/jogMeRsw==
+ -----END CERTIFICATE-----
+`
+ testTLSKey = `-----BEGIN RSA PRIVATE KEY-----
+ MIIEpQIBAAKCAQEA0KtAOHKrcbLwWJXgRX7XSFyu4HHHpSty4bliv8ET4sLJpbZH
+ XeVX05Foex7PnrurDP6e+0H5TgqqcpQM17/ZlFcyKrJcHSCgV0ZDB3Sb8RLQSLns
+ 8a+MOSbn1WZ7TkC7d/cWlKmasQRHQ2V/cWlGooyKNEPoGaEz8MbY0wn2spyIJwsB
+ dciERC6317VTXbiZdoD8QbAsT+tBvEHM2m2A7B7PQmHNehtyFNbSV5uZNodvv1uv
+ ZTnDa6IqpjFLb1b2HNFgwmaVPmmkLuy1l9PN+o6/DUnXKKBrfPAx4JOlqTKEQpWs
+ pnfacTE3sWkkmOSSFltAXfkXIJFKdS/hy5J/KQIDAQABAoIBAQDCd+bo9I0s8Fun
+ 4z3Y5oYSDTZ5O/CY0O5GyXPrSzCSM4Cj7EWEj1mTdb9Ohv9tam7WNHHLrcd+4NfK
+ 4ok5hLVs1vqM6h6IksB7taKATz+Jo0PzkzrsXvMqzERhEBo4aoGMIv2rXIkrEdas
+ S+pCsp8+nAWtAeBMCn0Slu65d16vQxwgfod6YZfvMKbvfhOIOShl9ejQ+JxVZcMw
+ Ti8sgvYmFUrdrEH3nCgptARwbx4QwlHGaw/cLGHdepfFsVaNQsEzc7m61fSO70m4
+ NYJv48ZgjOooF5AccbEcQW9IxxikwNc+wpFYy5vDGzrBwS5zLZQFpoyMWFhtWdjx
+ hbmNn1jlAoGBAPs0ZjqsfDrH5ja4dQIdu5ErOccsmoHfMMBftMRqNG5neQXEmoLc
+ Uz8WeQ/QDf302aTua6E9iSjd7gglbFukVwMndQ1Q8Rwxz10jkXfiE32lFnqK0csx
+ ltruU6hOeSGSJhtGWBuNrT93G2lmy23fSG6BqOzdU4rn/2GPXy5zaxM/AoGBANSm
+ /E96RcBUiI6rDVqKhY+7M1yjLB41JrErL9a0Qfa6kYnaXMr84pOqVN11IjhNNTgl
+ g1lwxlpXZcZh7rYu9b7EEMdiWrJDQV7OxLDHopqUWkQ+3MHwqs6CxchyCq7kv9Df
+ IKqat7Me6Cyeo0MqcW+UMxlCRBxKQ9jqC7hDfZuXAoGBAJmyS8ImerP0TtS4M08i
+ JfsCOY21qqs/hbKOXCm42W+be56d1fOvHngBJf0YzRbO0sNo5Q14ew04DEWLsCq5
+ +EsDv0hwd7VKfJd+BakV99ruQTyk5wutwaEeJK1bph12MD6L4aiqHJAyLeFldZ45
+ +TUzu8mA+XaJz+U/NXtUPvU9AoGBALtl9M+tdy6I0Fa50ujJTe5eEGNAwK5WNKTI
+ 5D2XWNIvk/Yh4shXlux+nI8UnHV1RMMX++qkAYi3oE71GsKeG55jdk3fFQInVsJQ
+ APGw3FDRD8M4ip62ki+u+tEr/tIlcAyHtWfjNKO7RuubWVDlZFXqCiXmSdOMdsH/
+ bxiREW49AoGACWev/eOzBoQJCRN6EvU2OV0s3b6f1QsPvcaH0zc6bgbBFOGmJU8v
+ pXhD88tsu9exptLkGVoYZjR0n0QT/2Kkyu93jVDW/80P7VCz8DKYyAJDa4CVwZxO
+ MlobQSunSDKx/CCJhWkbytCyh1bngAtwSAYLXavYIlJbAzx6FvtAIw4=
+ -----END RSA PRIVATE KEY-----
+`
+)
+
+// Contains the server test for multi running servers
+func TestMultiRunningServers_v1(t *testing.T) {
+ host := "mydomain.com:443" // you have to add it to your hosts file( for windows, as 127.0.0.1 mydomain.com)
+ initDefault()
+ Config.DisableBanner = true
+ // create the key and cert files on the fly, and delete them when this test finished
+ certFile, ferr := ioutil.TempFile("", "cert")
+
+ if ferr != nil {
+ t.Fatal(ferr.Error())
+ }
+
+ keyFile, ferr := ioutil.TempFile("", "key")
+ if ferr != nil {
+ t.Fatal(ferr.Error())
+ }
+
+ certFile.WriteString(testTLSCert)
+ keyFile.WriteString(testTLSKey)
+
+ defer func() {
+ certFile.Close()
+ time.Sleep(350 * time.Millisecond)
+ os.Remove(certFile.Name())
+
+ keyFile.Close()
+ time.Sleep(350 * time.Millisecond)
+ os.Remove(keyFile.Name())
+ }()
+
+ Get("/", func(ctx *Context) {
+ ctx.Write("Hello from %s", ctx.HostString())
+ })
+
+ // start the secondary server
+ SecondaryListen(config.Server{ListeningAddr: "mydomain.com:80", RedirectTo: "https://" + host, Virtual: true})
+ // start the main server
+ go ListenTo(config.Server{ListeningAddr: host, CertFile: certFile.Name(), KeyFile: keyFile.Name(), Virtual: true})
+ // prepare test framework
+ if ok := <-Available; !ok {
+ t.Fatal("Unexpected error: server cannot start, please report this as bug!!")
+ }
+
+ e := Tester(t)
+
+ e.Request("GET", "http://mydomain.com:80").Expect().Status(StatusOK).Body().Equal("Hello from " + host)
+ e.Request("GET", "https://"+host).Expect().Status(StatusOK).Body().Equal("Hello from " + host)
+
+}
+
+// Contains the server test for multi running servers
+func TestMultiRunningServers_v2(t *testing.T) {
+ domain := "mydomain.com"
+ host := domain + ":443"
+ initDefault()
+ Config.DisableBanner = true
+ Config.Tester.ListeningAddr = host
+ // create the key and cert files on the fly, and delete them when this test finished
+ certFile, ferr := ioutil.TempFile("", "cert")
+
+ if ferr != nil {
+ t.Fatal(ferr.Error())
+ }
+
+ keyFile, ferr := ioutil.TempFile("", "key")
+ if ferr != nil {
+ t.Fatal(ferr.Error())
+ }
+
+ certFile.WriteString(testTLSCert)
+ keyFile.WriteString(testTLSKey)
+
+ defer func() {
+ certFile.Close()
+ time.Sleep(350 * time.Millisecond)
+ os.Remove(certFile.Name())
+
+ keyFile.Close()
+ time.Sleep(350 * time.Millisecond)
+ os.Remove(keyFile.Name())
+ }()
+
+ Get("/", func(ctx *Context) {
+ ctx.Write("Hello from %s", ctx.HostString())
+ })
+
+ // add a secondary server
+ Servers.Add(config.Server{ListeningAddr: domain + ":80", RedirectTo: "https://" + host, Virtual: true})
+ // add our primary/main server
+ Servers.Add(config.Server{ListeningAddr: host, CertFile: certFile.Name(), KeyFile: keyFile.Name(), Virtual: true})
+
+ go Go()
+
+ // prepare test framework
+ if ok := <-Available; !ok {
+ t.Fatal("Unexpected error: server cannot start, please report this as bug!!")
+ }
+
+ e := Tester(t)
+
+ e.Request("GET", "http://"+domain+":80").Expect().Status(StatusOK).Body().Equal("Hello from " + host)
+ e.Request("GET", "https://"+host).Expect().Status(StatusOK).Body().Equal("Hello from " + host)
+
+}
+
const (
testEnableSubdomain = false
testSubdomain = "mysubdomain.com"
diff --git a/iris_test.go b/iris_test.go
index e14220d7..69504f1c 100644
--- a/iris_test.go
+++ b/iris_test.go
@@ -1,7 +1,14 @@
package iris
+/*
+The most iris.go file implementation tested at other files like context_test, http_test, the untested are the Static methods, the favicon and some interfaces, which I already
+tested them on production and I don't expect unexpected behavior but if you think we need more:
+
+CONTRIBUTE & DISCUSSION ABOUT TESTS TO: https://github.com/iris-contrib/tests
+*/
+
// Notes:
//
-// We use Default := New() and not api := New() or just Default because we want to cover as much code as possible
-// The tests are usually end-to-end, except some features like plugins, which we have normal unit testing and end-to-end tests
+// We use Default := New() via initDefault() and not api := New() neither just Default. because we want to cover as much code as possible
+// The tests are mostly end-to-end, except some features like plugins.
//
diff --git a/plugin_test.go b/plugin_test.go
index 4f072426..b22daf02 100644
--- a/plugin_test.go
+++ b/plugin_test.go
@@ -1,5 +1,11 @@
package iris
+/*
+Contains tests for plugin, no end-to-end, just local-object tests, these are enoguh for now.
+
+CONTRIBUTE & DISCUSSION ABOUT TESTS TO: https://github.com/iris-contrib/tests
+*/
+
import (
"fmt"
"testing"
diff --git a/render_test.go b/render_test.go
deleted file mode 100644
index d1c98401..00000000
--- a/render_test.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package iris
-
-// Contains tests for render/rest & render/template
-
-import (
- "encoding/xml"
- "strconv"
- "testing"
-)
-
-type renderTestInformationType struct {
- XMLName xml.Name `xml:"info"`
- FirstAttr string `xml:"first,attr"`
- SecondAttr string `xml:"second,attr"`
- Name string `xml:"name",json:"name"`
- Birth string `xml:"birth",json:"birth"`
- Stars int `xml:"stars",json:"stars"`
-}
-
-func TestRenderRest(t *testing.T) {
- initDefault()
-
- dataContents := []byte("Some binary data here.")
- textContents := "Plain text here"
- JSONPContents := map[string]string{"hello": "jsonp"}
- JSONPCallback := "callbackName"
- JSONXMLContents := renderTestInformationType{
- XMLName: xml.Name{Local: "info", Space: "info"}, // only need to verify that later
- FirstAttr: "this is the first attr",
- SecondAttr: "this is the second attr",
- Name: "Iris web framework",
- Birth: "13 March 2016",
- Stars: 4064,
- }
- markdownContents := "# Hello dynamic markdown from Iris"
-
- Get("/data", func(ctx *Context) {
- ctx.Data(StatusOK, dataContents)
- })
-
- Get("/text", func(ctx *Context) {
- ctx.Text(StatusOK, textContents)
- })
-
- Get("/jsonp", func(ctx *Context) {
- ctx.JSONP(StatusOK, JSONPCallback, JSONPContents)
- })
-
- Get("/json", func(ctx *Context) {
- ctx.JSON(StatusOK, JSONXMLContents)
- })
- Get("/xml", func(ctx *Context) {
- ctx.XML(StatusOK, JSONXMLContents)
- })
-
- Get("/markdown", func(ctx *Context) {
- ctx.Markdown(StatusOK, markdownContents)
- })
-
- e := Tester(t)
- dataT := e.GET("/data").Expect().Status(StatusOK)
- dataT.Header("Content-Type").Equal("application/octet-stream")
- dataT.Body().Equal(string(dataContents))
-
- textT := e.GET("/text").Expect().Status(StatusOK)
- textT.Header("Content-Type").Equal("text/plain; charset=UTF-8")
- textT.Body().Equal(textContents)
-
- JSONPT := e.GET("/jsonp").Expect().Status(StatusOK)
- JSONPT.Header("Content-Type").Equal("application/javascript; charset=UTF-8")
- JSONPT.Body().Equal(JSONPCallback + `({"hello":"jsonp"});`)
-
- JSONT := e.GET("/json").Expect().Status(StatusOK)
- JSONT.Header("Content-Type").Equal("application/json; charset=UTF-8")
- JSONT.JSON().Object().Equal(JSONXMLContents)
-
- XMLT := e.GET("/xml").Expect().Status(StatusOK)
- XMLT.Header("Content-Type").Equal("text/xml; charset=UTF-8")
- XMLT.Body().Equal(`<` + JSONXMLContents.XMLName.Local + ` first="` + JSONXMLContents.FirstAttr + `" second="` + JSONXMLContents.SecondAttr + `">` + JSONXMLContents.Name + `` + JSONXMLContents.Birth + `` + strconv.Itoa(JSONXMLContents.Stars) + ``)
-
- markdownT := e.GET("/markdown").Expect().Status(StatusOK)
- markdownT.Header("Content-Type").Equal("text/html; charset=UTF-8")
- markdownT.Body().Equal("" + markdownContents[2:] + "
\n")
-
-}
diff --git a/server_test.go b/server_test.go
deleted file mode 100644
index ba403168..00000000
--- a/server_test.go
+++ /dev/null
@@ -1,166 +0,0 @@
-package iris
-
-import (
- "io/ioutil"
- "os"
- "testing"
- "time"
-
- "github.com/kataras/iris/config"
-)
-
-const (
- testTLSCert = `-----BEGIN CERTIFICATE-----
- MIIDAzCCAeugAwIBAgIJAPDsxtKV4v3uMA0GCSqGSIb3DQEBBQUAMBgxFjAUBgNV
- BAMMDTEyNy4wLjAuMTo0NDMwHhcNMTYwNjI5MTMxMjU4WhcNMjYwNjI3MTMxMjU4
- WjAYMRYwFAYDVQQDDA0xMjcuMC4wLjE6NDQzMIIBIjANBgkqhkiG9w0BAQEFAAOC
- AQ8AMIIBCgKCAQEA0KtAOHKrcbLwWJXgRX7XSFyu4HHHpSty4bliv8ET4sLJpbZH
- XeVX05Foex7PnrurDP6e+0H5TgqqcpQM17/ZlFcyKrJcHSCgV0ZDB3Sb8RLQSLns
- 8a+MOSbn1WZ7TkC7d/cWlKmasQRHQ2V/cWlGooyKNEPoGaEz8MbY0wn2spyIJwsB
- dciERC6317VTXbiZdoD8QbAsT+tBvEHM2m2A7B7PQmHNehtyFNbSV5uZNodvv1uv
- ZTnDa6IqpjFLb1b2HNFgwmaVPmmkLuy1l9PN+o6/DUnXKKBrfPAx4JOlqTKEQpWs
- pnfacTE3sWkkmOSSFltAXfkXIJFKdS/hy5J/KQIDAQABo1AwTjAdBgNVHQ4EFgQU
- zr1df/c9+NyTpmyiQO8g3a8NswYwHwYDVR0jBBgwFoAUzr1df/c9+NyTpmyiQO8g
- 3a8NswYwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEACG5shtMSDgCd
- MNjOF+YmD+PX3Wy9J9zehgaDJ1K1oDvBbQFl7EOJl8lRMWITSws22Wxwh8UXVibL
- sscKBp14dR3e7DdbwCVIX/JyrJyOaCfy2nNBdf1B06jYFsIHvP3vtBAb9bPNOTBQ
- QE0Ztu9kCqgsmu0//sHuBEeA3d3E7wvDhlqRSxTLcLtgC1NSgkFvBw0JvwgpkX6s
- M5WpSBZwZv8qpplxhFfqNy8Uf+xrpSW0pGfkHumehkQGC6/Ry7raganS0aHhDPK9
- Z1bEJ2com1bFFAQsm9yIXrRVMGGCtihB2Au0Q4jpEjUbzWYM+ItZyvRAGRM6Qex6
- s/jogMeRsw==
- -----END CERTIFICATE-----
-`
- testTLSKey = `-----BEGIN RSA PRIVATE KEY-----
- MIIEpQIBAAKCAQEA0KtAOHKrcbLwWJXgRX7XSFyu4HHHpSty4bliv8ET4sLJpbZH
- XeVX05Foex7PnrurDP6e+0H5TgqqcpQM17/ZlFcyKrJcHSCgV0ZDB3Sb8RLQSLns
- 8a+MOSbn1WZ7TkC7d/cWlKmasQRHQ2V/cWlGooyKNEPoGaEz8MbY0wn2spyIJwsB
- dciERC6317VTXbiZdoD8QbAsT+tBvEHM2m2A7B7PQmHNehtyFNbSV5uZNodvv1uv
- ZTnDa6IqpjFLb1b2HNFgwmaVPmmkLuy1l9PN+o6/DUnXKKBrfPAx4JOlqTKEQpWs
- pnfacTE3sWkkmOSSFltAXfkXIJFKdS/hy5J/KQIDAQABAoIBAQDCd+bo9I0s8Fun
- 4z3Y5oYSDTZ5O/CY0O5GyXPrSzCSM4Cj7EWEj1mTdb9Ohv9tam7WNHHLrcd+4NfK
- 4ok5hLVs1vqM6h6IksB7taKATz+Jo0PzkzrsXvMqzERhEBo4aoGMIv2rXIkrEdas
- S+pCsp8+nAWtAeBMCn0Slu65d16vQxwgfod6YZfvMKbvfhOIOShl9ejQ+JxVZcMw
- Ti8sgvYmFUrdrEH3nCgptARwbx4QwlHGaw/cLGHdepfFsVaNQsEzc7m61fSO70m4
- NYJv48ZgjOooF5AccbEcQW9IxxikwNc+wpFYy5vDGzrBwS5zLZQFpoyMWFhtWdjx
- hbmNn1jlAoGBAPs0ZjqsfDrH5ja4dQIdu5ErOccsmoHfMMBftMRqNG5neQXEmoLc
- Uz8WeQ/QDf302aTua6E9iSjd7gglbFukVwMndQ1Q8Rwxz10jkXfiE32lFnqK0csx
- ltruU6hOeSGSJhtGWBuNrT93G2lmy23fSG6BqOzdU4rn/2GPXy5zaxM/AoGBANSm
- /E96RcBUiI6rDVqKhY+7M1yjLB41JrErL9a0Qfa6kYnaXMr84pOqVN11IjhNNTgl
- g1lwxlpXZcZh7rYu9b7EEMdiWrJDQV7OxLDHopqUWkQ+3MHwqs6CxchyCq7kv9Df
- IKqat7Me6Cyeo0MqcW+UMxlCRBxKQ9jqC7hDfZuXAoGBAJmyS8ImerP0TtS4M08i
- JfsCOY21qqs/hbKOXCm42W+be56d1fOvHngBJf0YzRbO0sNo5Q14ew04DEWLsCq5
- +EsDv0hwd7VKfJd+BakV99ruQTyk5wutwaEeJK1bph12MD6L4aiqHJAyLeFldZ45
- +TUzu8mA+XaJz+U/NXtUPvU9AoGBALtl9M+tdy6I0Fa50ujJTe5eEGNAwK5WNKTI
- 5D2XWNIvk/Yh4shXlux+nI8UnHV1RMMX++qkAYi3oE71GsKeG55jdk3fFQInVsJQ
- APGw3FDRD8M4ip62ki+u+tEr/tIlcAyHtWfjNKO7RuubWVDlZFXqCiXmSdOMdsH/
- bxiREW49AoGACWev/eOzBoQJCRN6EvU2OV0s3b6f1QsPvcaH0zc6bgbBFOGmJU8v
- pXhD88tsu9exptLkGVoYZjR0n0QT/2Kkyu93jVDW/80P7VCz8DKYyAJDa4CVwZxO
- MlobQSunSDKx/CCJhWkbytCyh1bngAtwSAYLXavYIlJbAzx6FvtAIw4=
- -----END RSA PRIVATE KEY-----
-`
-)
-
-// Contains the server test for multi running servers
-func TestMultiRunningServers_v1(t *testing.T) {
- host := "mydomain.com:443" // you have to add it to your hosts file( for windows, as 127.0.0.1 mydomain.com)
- initDefault()
- Config.DisableBanner = true
- // create the key and cert files on the fly, and delete them when this test finished
- certFile, ferr := ioutil.TempFile("", "cert")
-
- if ferr != nil {
- t.Fatal(ferr.Error())
- }
-
- keyFile, ferr := ioutil.TempFile("", "key")
- if ferr != nil {
- t.Fatal(ferr.Error())
- }
-
- certFile.WriteString(testTLSCert)
- keyFile.WriteString(testTLSKey)
-
- defer func() {
- certFile.Close()
- time.Sleep(350 * time.Millisecond)
- os.Remove(certFile.Name())
-
- keyFile.Close()
- time.Sleep(350 * time.Millisecond)
- os.Remove(keyFile.Name())
- }()
-
- Get("/", func(ctx *Context) {
- ctx.Write("Hello from %s", ctx.HostString())
- })
-
- // start the secondary server
- SecondaryListen(config.Server{ListeningAddr: "mydomain.com:80", RedirectTo: "https://" + host, Virtual: true})
- // start the main server
- go ListenTo(config.Server{ListeningAddr: host, CertFile: certFile.Name(), KeyFile: keyFile.Name(), Virtual: true})
- // prepare test framework
- if ok := <-Available; !ok {
- t.Fatal("Unexpected error: server cannot start, please report this as bug!!")
- }
-
- e := Tester(t)
-
- e.Request("GET", "http://mydomain.com:80").Expect().Status(StatusOK).Body().Equal("Hello from " + host)
- e.Request("GET", "https://"+host).Expect().Status(StatusOK).Body().Equal("Hello from " + host)
-
-}
-
-// Contains the server test for multi running servers
-func TestMultiRunningServers_v2(t *testing.T) {
- domain := "mydomain.com"
- host := domain + ":443"
- initDefault()
- Config.DisableBanner = true
- Config.Tester.ListeningAddr = host
- // create the key and cert files on the fly, and delete them when this test finished
- certFile, ferr := ioutil.TempFile("", "cert")
-
- if ferr != nil {
- t.Fatal(ferr.Error())
- }
-
- keyFile, ferr := ioutil.TempFile("", "key")
- if ferr != nil {
- t.Fatal(ferr.Error())
- }
-
- certFile.WriteString(testTLSCert)
- keyFile.WriteString(testTLSKey)
-
- defer func() {
- certFile.Close()
- time.Sleep(350 * time.Millisecond)
- os.Remove(certFile.Name())
-
- keyFile.Close()
- time.Sleep(350 * time.Millisecond)
- os.Remove(keyFile.Name())
- }()
-
- Get("/", func(ctx *Context) {
- ctx.Write("Hello from %s", ctx.HostString())
- })
-
- // add a secondary server
- Servers.Add(config.Server{ListeningAddr: domain + ":80", RedirectTo: "https://" + host, Virtual: true})
- // add our primary/main server
- Servers.Add(config.Server{ListeningAddr: host, CertFile: certFile.Name(), KeyFile: keyFile.Name(), Virtual: true})
-
- go Go()
-
- // prepare test framework
- if ok := <-Available; !ok {
- t.Fatal("Unexpected error: server cannot start, please report this as bug!!")
- }
-
- e := Tester(t)
-
- e.Request("GET", "http://"+domain+":80").Expect().Status(StatusOK).Body().Equal("Hello from " + host)
- e.Request("GET", "https://"+host).Expect().Status(StatusOK).Body().Equal("Hello from " + host)
-
-}