X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ffoundation%2Fapi%2Frevel%2Ftesting%2Ftestsuite_test.go;fp=src%2Ffoundation%2Fapi%2Frevel%2Ftesting%2Ftestsuite_test.go;h=e82066c0193967a2299105f65d1207904850359e;hb=1d1ee6961c93781e1187d8c7faa868da6b2f01f4;hp=0000000000000000000000000000000000000000;hpb=56dd5e0f2164b37b40ac1daa188ccc618b4cbd19;p=iec.git diff --git a/src/foundation/api/revel/testing/testsuite_test.go b/src/foundation/api/revel/testing/testsuite_test.go new file mode 100644 index 0000000..e82066c --- /dev/null +++ b/src/foundation/api/revel/testing/testsuite_test.go @@ -0,0 +1,303 @@ +// Copyright (c) 2012-2016 The Revel Framework Authors, All rights reserved. +// Revel Framework source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package testing + +import ( + "bytes" + "fmt" + "net/http" + "net/http/httptest" + "net/url" + "os" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/revel/revel" + "github.com/revel/revel/session" +) + +func TestMisc(t *testing.T) { + testSuite := createNewTestSuite(t) + + // test Host value + if !strings.EqualFold("127.0.0.1:9001", testSuite.Host()) { + t.Error("Incorrect Host value found.") + } + + // test BaseUrl + if !strings.EqualFold("http://127.0.0.1:9001", testSuite.BaseUrl()) { + t.Error("Incorrect BaseUrl http value found.") + } + revel.HTTPSsl = true + if !strings.EqualFold("https://127.0.0.1:9001", testSuite.BaseUrl()) { + t.Error("Incorrect BaseUrl https value found.") + } + revel.HTTPSsl = false + + // test WebSocketUrl + if !strings.EqualFold("ws://127.0.0.1:9001", testSuite.WebSocketUrl()) { + t.Error("Incorrect WebSocketUrl value found.") + } + + testSuite.AssertNotEqual("Yes", "No") + testSuite.Assert(true) +} + +func TestGet(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + testSuite.Get("/") + testSuite.AssertOk() + testSuite.AssertContains("this is testcase homepage") + testSuite.AssertNotContains("not exists") +} + +func TestGetNotFound(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + testSuite.Get("/notfound") + testSuite.AssertNotFound() + // testSuite.AssertContains("this is testcase homepage") + // testSuite.AssertNotContains("not exists") +} + +// This test is known to fail +func TestGetCustom(t *testing.T) { + testSuite := createNewTestSuite(t) + for x := 0; x < 5; x++ { + testSuite.GetCustom("http://httpbin.org/get").Send() + if testSuite.Response.StatusCode == http.StatusOK { + break + } + println("Failed request from http://httpbin.org/get", testSuite.Response.StatusCode) + } + + testSuite.AssertOk() + testSuite.AssertContentType("application/json") + testSuite.AssertContains("httpbin.org") + testSuite.AssertContainsRegex("gzip|deflate") +} + +func TestDelete(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + testSuite.Delete("/purchases/10001") + testSuite.AssertOk() +} + +func TestPut(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + testSuite.Put("/purchases/10002", + "application/json", + bytes.NewReader([]byte(`{"sku":"163645GHT", "desc":"This is test product"}`)), + ) + testSuite.AssertStatus(http.StatusNoContent) +} + +func TestPutForm(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + data := url.Values{} + data.Add("name", "beacon1name") + data.Add("value", "beacon1value") + + testSuite.PutForm("/send", data) + testSuite.AssertStatus(http.StatusNoContent) +} + +func TestPatch(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + testSuite.Patch("/purchases/10003", + "application/json", + bytes.NewReader([]byte(`{"desc": "This is test patch for product"}`)), + ) + testSuite.AssertStatus(http.StatusNoContent) +} + +func TestPost(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + testSuite.Post("/login", + "application/json", + bytes.NewReader([]byte(`{"username":"testuser", "password":"testpass"}`)), + ) + testSuite.AssertOk() + testSuite.AssertContains("login successful") +} + +func TestPostForm(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + data := url.Values{} + data.Add("username", "testuser") + data.Add("password", "testpassword") + + testSuite.PostForm("/login", data) + testSuite.AssertOk() + testSuite.AssertContains("login successful") +} + +func TestPostFileUpload(t *testing.T) { + ts := createTestServer(testHandle) + defer ts.Close() + + testSuite := createNewTestSuite(t) + + params := url.Values{} + params.Add("first_name", "Jeevanandam") + params.Add("last_name", "M.") + + currentDir, _ := os.Getwd() + basePath := filepath.Dir(currentDir) + + filePaths := url.Values{} + filePaths.Add("revel_file", filepath.Join(basePath, "revel.go")) + filePaths.Add("server_file", filepath.Join(basePath, "server.go")) + filePaths.Add("readme_file", filepath.Join(basePath, "README.md")) + + testSuite.PostFile("/upload", params, filePaths) + + testSuite.AssertOk() + testSuite.AssertContains("File: revel.go") + testSuite.AssertContains("File: server.go") + testSuite.AssertNotContains("File: not_exists.go") + testSuite.AssertEqual("text/plain; charset=utf-8", testSuite.Response.Header.Get("Content-Type")) + +} + +func createNewTestSuite(t *testing.T) *TestSuite { + suite := NewTestSuite() + + if suite.Client == nil || suite.SessionEngine == nil { + t.Error("Unable to create a testsuite") + } + + return &suite +} + +func testHandle(w http.ResponseWriter, r *http.Request) { + if r.Method == "GET" { + if r.URL.Path == "/" { + _, _ = w.Write([]byte(`this is testcase homepage`)) + return + } + } + + if r.Method == "POST" { + if r.URL.Path == "/login" { + http.SetCookie(w, &http.Cookie{ + Name: session.SessionCookieSuffix, + Value: "This is simple session value", + Path: "/", + HttpOnly: true, + Secure: false, + Expires: time.Now().Add(time.Minute * 5).UTC(), + }) + + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{ "id": "success", "message": "login successful" }`)) + return + } + + handleFileUpload(w, r) + return + } + + if r.Method == "DELETE" { + if r.URL.Path == "/purchases/10001" { + w.WriteHeader(http.StatusOK) + return + } + } + + if r.Method == "PUT" { + if r.URL.Path == "/purchases/10002" { + w.WriteHeader(http.StatusNoContent) + return + } + + if r.URL.Path == "/send" { + w.WriteHeader(http.StatusNoContent) + return + } + } + + if r.Method == "PATCH" { + if r.URL.Path == "/purchases/10003" { + w.WriteHeader(http.StatusNoContent) + return + } + } + + w.WriteHeader(http.StatusNotFound) +} + +func handleFileUpload(w http.ResponseWriter, r *http.Request) { + if r.URL.Path == "/upload" { + _ = r.ParseMultipartForm(10e6) + var buf bytes.Buffer + for _, fhdrs := range r.MultipartForm.File { + for _, hdr := range fhdrs { + dotPos := strings.LastIndex(hdr.Filename, ".") + fname := fmt.Sprintf("%s-%v%s", hdr.Filename[:dotPos], time.Now().Unix(), hdr.Filename[dotPos:]) + _, _ = buf.WriteString(fmt.Sprintf( + "Firstname: %v\nLastname: %v\nFile: %v\nHeader: %v\nUploaded as: %v\n", + r.FormValue("first_name"), + r.FormValue("last_name"), + hdr.Filename, + hdr.Header, + fname)) + } + } + + _, _ = w.Write(buf.Bytes()) + + return + } +} + +func createTestServer(fn func(w http.ResponseWriter, r *http.Request)) *httptest.Server { + testServer := httptest.NewServer(http.HandlerFunc(fn)) + revel.ServerEngineInit.Address = testServer.URL[7:] + return testServer +} + +func init() { + if revel.ServerEngineInit == nil { + revel.ServerEngineInit = &revel.EngineInit{ + Address: ":9001", + Network: "http", + Port: 9001, + } + } +}