This is an automated email from the ASF dual-hosted git repository.

chenjunxu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-dashboard.git


The following commit(s) were added to refs/heads/master by this push:
     new aec6d6c  test: add e2e test cases for route with log plugin (#892)
aec6d6c is described below

commit aec6d6cc7613cd7f2c583e99563e01e8a3391198
Author: nic-chen <[email protected]>
AuthorDate: Sun Nov 29 22:58:16 2020 +0800

    test: add e2e test cases for route with log plugin (#892)
    
    * test: add e2e test cases for route with log plugin
    
    * fix: code format
    
    * fix: error log level for test case check
    
    * fix: test case
    
    * fix: CI fail
    
    * fix: code format
    
    * fix: according to review
    
    * test: disable http logger
    
    * fix: CI fail
    
    * fix: clean log first
    
    * test
    
    * fix: log file path
    
    * fix: try to use sudo
    
    * fix: error
---
 api/test/docker/apisix_config.yaml                |   3 +
 api/test/docker/docker-compose.yaml               |   3 +-
 api/test/e2e/route_with_log_plugin_test.go        | 226 ++++++++++++++++++++++
 api/test/e2e/route_with_valid_remote_addr_test.go |   2 +-
 4 files changed, 232 insertions(+), 2 deletions(-)

diff --git a/api/test/docker/apisix_config.yaml 
b/api/test/docker/apisix_config.yaml
index 1bb8680..c8e60e0 100644
--- a/api/test/docker/apisix_config.yaml
+++ b/api/test/docker/apisix_config.yaml
@@ -38,3 +38,6 @@ apisix:
       enable: true
       ssl_cert: "/usr/local/apisix/certs/apisix.crt"
       ssl_cert_key: "/usr/local/apisix/certs/apisix.key"
+
+nginx_config:
+  error_log_level: "debug"
diff --git a/api/test/docker/docker-compose.yaml 
b/api/test/docker/docker-compose.yaml
index 064bff1..91aec31 100644
--- a/api/test/docker/docker-compose.yaml
+++ b/api/test/docker/docker-compose.yaml
@@ -135,7 +135,8 @@ services:
     volumes:
       - ./apisix_config.yaml:/usr/local/apisix/conf/config.yaml:ro
       - ../certs/apisix.crt:/usr/local/apisix/certs/apisix.crt:ro
-      - ../certs/apisix.key:/usr/local/apisix/certs/apisix.key:ro      
+      - ../certs/apisix.key:/usr/local/apisix/certs/apisix.key:ro
+      - ./apisix_logs:/usr/local/apisix/logs
     depends_on:
       - node1
       - node2
diff --git a/api/test/e2e/route_with_log_plugin_test.go 
b/api/test/e2e/route_with_log_plugin_test.go
new file mode 100644
index 0000000..469dce8
--- /dev/null
+++ b/api/test/e2e/route_with_log_plugin_test.go
@@ -0,0 +1,226 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package e2e
+
+import (
+       "fmt"
+       "io/ioutil"
+       "net/http"
+       "os/exec"
+       "strings"
+       "testing"
+       "time"
+
+       "github.com/stretchr/testify/assert"
+)
+
+func readAPISIXErrorLog(t *testing.T) string {
+       bytes, err := ioutil.ReadFile("../docker/apisix_logs/error.log")
+       assert.Nil(t, err)
+       logContent := string(bytes)
+       return logContent
+}
+
+func cleanAPISIXErrorLog(t *testing.T) {
+       cmd := exec.Command("pwd")
+       pwdByte, err := cmd.CombinedOutput()
+       pwd := string(pwdByte)
+
+       pwd = strings.Replace(pwd, "\n", "", 1)
+       pwd = strings.Replace(pwd, "/e2e", "", 1)
+
+       cmd = exec.Command("sudo", "echo", " > ", 
pwd+"/docker/apisix_logs/error.log")
+       _, err = cmd.CombinedOutput()
+       if err != nil {
+               fmt.Println("cmd error:", err.Error())
+       }
+       assert.Nil(t, err)
+}
+
+func TestRoute_With_Log_Plugin(t *testing.T) {
+       // clean log
+       cleanAPISIXErrorLog(t)
+
+       tests := []HttpTestCase{
+               {
+                       caseDesc:     "make sure the route is not created ",
+                       Object:       APISIXExpect(t),
+                       Method:       http.MethodGet,
+                       Path:         "/hello_",
+                       ExpectStatus: http.StatusNotFound,
+                       ExpectBody:   `{"error_msg":"404 Route Not Found"}`,
+               },
+               {
+                       caseDesc: "create route",
+                       Object:   MangerApiExpect(t),
+                       Method:   http.MethodPut,
+                       Path:     "/apisix/admin/routes/r1",
+                       Body: `{
+                               "uri": "/hello_",
+                               "plugins": {
+                                       "http-logger": {
+                                               "uri": 
"http://172.16.238.20:1982/hello";,
+                                               "batch_max_size": 1,
+                                               "max_retry_count": 1,
+                                               "retry_delay": 2,
+                                               "buffer_duration": 2,
+                                               "inactive_timeout": 2,
+                                               "name": "http logger",
+                                               "timeout": 3,
+                                               "concat_method": "json"
+                                       }
+                               },
+                               "upstream": {
+                                       "type": "roundrobin",
+                                       "nodes": [{
+                                               "host": "172.16.238.20",
+                                               "port": 1981,
+                                               "weight": 1
+                                       }]
+                               }
+                       }`,
+                       Headers:      map[string]string{"Authorization": token},
+                       ExpectStatus: http.StatusOK,
+               },
+               {
+                       caseDesc:     "access route to trigger log",
+                       Object:       APISIXExpect(t),
+                       Method:       http.MethodGet,
+                       Path:         "/hello_",
+                       ExpectStatus: http.StatusOK,
+                       ExpectBody:   "hello world",
+                       Sleep:        sleepTime,
+               },
+       }
+
+       for _, tc := range tests {
+               testCaseCheck(tc)
+       }
+
+       // sleep for process log
+       time.Sleep(1500 * time.Millisecond)
+
+       // verify http logger by checking log
+       //todo: should use a fake upstream for confirming whether we got the 
log data.
+       logContent := readAPISIXErrorLog(t)
+       assert.Contains(t, logContent, "Batch Processor[http logger] 
successfully processed the entries")
+
+       // clean log
+       cleanAPISIXErrorLog(t)
+
+       tests = []HttpTestCase{
+               {
+                       caseDesc: "create route with wrong https endpoint",
+                       Object:   MangerApiExpect(t),
+                       Method:   http.MethodPut,
+                       Path:     "/apisix/admin/routes/r2",
+                       Body: `{
+                               "uri": "/hello",
+                               "plugins": {
+                                       "http-logger": {
+                                               "uri": 
"https://127.0.0.1:8888/hello-world-http";,
+                                               "batch_max_size": 1,
+                                               "max_retry_count": 1,
+                                               "retry_delay": 2,
+                                               "buffer_duration": 2,
+                                               "inactive_timeout": 2,
+                                               "name": "http logger",
+                                               "timeout": 3,
+                                               "concat_method": "json"
+                                       }
+                               },
+                               "upstream": {
+                                       "type": "roundrobin",
+                                       "nodes": [{
+                                               "host": "172.16.238.20",
+                                               "port": 1982,
+                                               "weight": 1
+                                       }]
+                               }
+                       }`,
+                       Headers:      map[string]string{"Authorization": token},
+                       ExpectStatus: http.StatusOK,
+               },
+               {
+                       caseDesc:     "access route to trigger log",
+                       Object:       APISIXExpect(t),
+                       Method:       http.MethodGet,
+                       Path:         "/hello",
+                       ExpectStatus: http.StatusOK,
+                       ExpectBody:   "hello world",
+                       Sleep:        sleepTime,
+               },
+       }
+
+       for _, tc := range tests {
+               testCaseCheck(tc)
+       }
+
+       // sleep for process log
+       time.Sleep(1500 * time.Millisecond)
+
+       // verify http logger by checking log
+       //todo: should use a fake upstream for confirming whether we got the 
log data.
+       logContent = readAPISIXErrorLog(t)
+       assert.Contains(t, logContent, "Batch Processor[http logger] failed to 
process entries: failed to connect to host[127.0.0.1] port[8888] connection 
refused")
+
+       // clean log
+       cleanAPISIXErrorLog(t)
+
+       // todo: check disable http logger
+
+       tests = []HttpTestCase{
+               {
+                       caseDesc:     "delete route",
+                       Object:       MangerApiExpect(t),
+                       Method:       http.MethodDelete,
+                       Path:         "/apisix/admin/routes/r1",
+                       Headers:      map[string]string{"Authorization": token},
+                       ExpectStatus: http.StatusOK,
+               },
+               {
+                       caseDesc:     "make sure the route has been deleted",
+                       Object:       APISIXExpect(t),
+                       Method:       http.MethodGet,
+                       Path:         "/hello_",
+                       ExpectStatus: http.StatusNotFound,
+                       ExpectBody:   `{"error_msg":"404 Route Not Found"}`,
+                       Sleep:        sleepTime,
+               },
+               {
+                       caseDesc:     "delete route 2",
+                       Object:       MangerApiExpect(t),
+                       Method:       http.MethodDelete,
+                       Path:         "/apisix/admin/routes/r2",
+                       Headers:      map[string]string{"Authorization": token},
+                       ExpectStatus: http.StatusOK,
+               },
+               {
+                       caseDesc:     "make sure the route 2 has been deleted",
+                       Object:       APISIXExpect(t),
+                       Method:       http.MethodGet,
+                       Path:         "/hello",
+                       ExpectStatus: http.StatusNotFound,
+                       ExpectBody:   `{"error_msg":"404 Route Not Found"}`,
+                       Sleep:        sleepTime,
+               },
+       }
+
+       for _, tc := range tests {
+               testCaseCheck(tc)
+       }
+}
diff --git a/api/test/e2e/route_with_valid_remote_addr_test.go 
b/api/test/e2e/route_with_valid_remote_addr_test.go
index 75afaa5..dd6f7cc 100644
--- a/api/test/e2e/route_with_valid_remote_addr_test.go
+++ b/api/test/e2e/route_with_valid_remote_addr_test.go
@@ -149,7 +149,7 @@ func TestRoute_with_valid_remote_addr(t *testing.T) {
                        Path:     "/apisix/admin/routes/r1",
                        Body: `{
                                        "uri": "/hello",
-                                       "remote_addrs": 
["10.10.10.10","11.11.11.1/24"]
+                                       "remote_addrs": 
["10.10.10.10","11.11.11.1/24"],
                                        "upstream": {
                                                "type": "roundrobin",
                                                "nodes": [{

Reply via email to