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

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

commit 061d9a2acc5b6a074f0dc2a5eca3c7f0c7b60caf
Author: nic-chen <[email protected]>
AuthorDate: Thu Oct 15 12:34:07 2020 +0800

    fix route search by uri
---
 api/internal/handler/route/route.go      | 22 +++++++++++--
 api/internal/handler/route/route_test.go | 53 +++++++++++++++++++++++++++++++-
 2 files changed, 71 insertions(+), 4 deletions(-)

diff --git a/api/internal/handler/route/route.go 
b/api/internal/handler/route/route.go
index 870eb06..0895a6a 100644
--- a/api/internal/handler/route/route.go
+++ b/api/internal/handler/route/route.go
@@ -97,26 +97,42 @@ type ListInput struct {
        store.Pagination
 }
 
+func uriContains(obj *entity.Route, uri string) bool {
+       if strings.Contains(obj.URI, uri) {
+               return true
+       }
+       for _, str := range obj.Uris {
+               result := strings.Contains(str, uri)
+               if result {
+                       return true
+               }
+       }
+       return false
+}
+
 func (h *Handler) List(c droplet.Context) (interface{}, error) {
        input := c.Input().(*ListInput)
 
        ret, err := h.routeStore.List(store.ListInput{
                Predicate: func(obj interface{}) bool {
                        if input.Name != "" && input.URI != "" {
-                               return 
strings.Contains(obj.(*entity.Route).Name, input.Name) &&
-                                       
strings.Contains(obj.(*entity.Route).URI, input.URI)
+                               if strings.Contains(obj.(*entity.Route).Name, 
input.Name) {
+                                       return uriContains(obj.(*entity.Route), 
input.URI)
+                               }
+                               return false
                        }
                        if input.Name != "" {
                                return 
strings.Contains(obj.(*entity.Route).Name, input.Name)
                        }
                        if input.URI != "" {
-                               return 
strings.Contains(obj.(*entity.Route).URI, input.URI)
+                               return uriContains(obj.(*entity.Route), 
input.URI)
                        }
                        return true
                },
                PageSize:   input.PageSize,
                PageNumber: input.PageNumber,
        })
+
        if err != nil {
                return nil, err
        }
diff --git a/api/internal/handler/route/route_test.go 
b/api/internal/handler/route/route_test.go
index abed058..611dccc 100644
--- a/api/internal/handler/route/route_test.go
+++ b/api/internal/handler/route/route_test.go
@@ -745,6 +745,9 @@ func TestRoute(t *testing.T) {
        _, err = handler.Update(ctx)
        assert.Nil(t, err)
 
+       //sleep
+       time.Sleep(time.Duration(100) * time.Millisecond)
+
        //list
        listInput := &ListInput{}
        reqBody = `{"page_size": 1, "page": 1}`
@@ -785,12 +788,60 @@ func TestRoute(t *testing.T) {
        dataPage = retPage.(*store.ListOutput)
        assert.Equal(t, len(dataPage.Rows), 0)
 
+       //create route using uris
+       route3 := &entity.Route{}
+       reqBody = `{
+      "id": "2",
+      "name": "bbbbb",
+      "uris": ["/aa", "/bb"],
+      "hosts": ["foo.com", "*.bar.com"],
+      "remote_addrs": ["127.0.0.0/8"],
+      "methods": ["PUT", "GET"],
+      "upstream": {
+          "type": "roundrobin",
+          "nodes": [{
+              "host": "www.a.com",
+              "port": 80,
+              "weight": 1
+          }]
+      }
+  }`
+       json.Unmarshal([]byte(reqBody), route3)
+       ctx.SetInput(route3)
+       _, err = handler.Create(ctx)
+       assert.Nil(t, err)
+
+       //sleep
+       time.Sleep(time.Duration(100) * time.Millisecond)
+
+       //list search match uris
+       listInput5 := &ListInput{}
+       reqBody = `{"page_size": 1, "page": 1, "name": "bbb", "uri": "bb"}`
+       json.Unmarshal([]byte(reqBody), listInput5)
+       ctx.SetInput(listInput5)
+       retPage, err = handler.List(ctx)
+       assert.Nil(t, err)
+       dataPage = retPage.(*store.ListOutput)
+       assert.Equal(t, len(dataPage.Rows), 1)
+
        //delete test data
        inputDel := &BatchDelete{}
-       reqBody = `{"ids": "1"}`
+       reqBody = `{"ids": "1,2"}`
        json.Unmarshal([]byte(reqBody), inputDel)
        ctx.SetInput(inputDel)
        _, err = handler.BatchDelete(ctx)
        assert.Nil(t, err)
 
+       //sleep
+       time.Sleep(time.Duration(100) * time.Millisecond)
+
+       //get route -- deleted, not found
+       getInput := &GetInput{}
+       reqBody = `{"id": "1"}`
+       json.Unmarshal([]byte(reqBody), getInput)
+       ctx.SetInput(getInput)
+       ret, err = handler.Get(ctx)
+       assert.Nil(t, ret)
+       assert.EqualError(t, err, "data not found")
+
 }

Reply via email to