From 7723c22ef6aabfca92770e168b050d1c6b0312c2 Mon Sep 17 00:00:00 2001 From: Makis Maropoulos Date: Thu, 7 Jul 2016 01:36:38 +0200 Subject: [PATCH] Ok finish the important staff, the other are already tested hundreds of times --- context_test.go | 83 +++++++++++++++++- mux_test.go => http_test.go | 166 +++++++++++++++++++++++++++++++++++- iris_test.go | 11 ++- plugin_test.go | 6 ++ render_test.go | 85 ------------------ server_test.go | 166 ------------------------------------ 6 files changed, 261 insertions(+), 256 deletions(-) rename mux_test.go => http_test.go (68%) delete mode 100644 render_test.go delete mode 100644 server_test.go 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) - -}