Update mux on delete route

This commit is contained in:
Roberto Abdelkader Martínez Pérez
2019-10-11 07:56:10 +02:00
parent 93dfe9ef7b
commit bbca5873a0
3 changed files with 66 additions and 42 deletions
-40
View File
@@ -1,41 +1 @@
package user package user
import (
"net/http"
"net/http/httptest"
"os"
"testing"
"github.com/BBVA/kapow/internal/server/model"
"github.com/BBVA/kapow/internal/server/user/mux"
)
// TODO TestRunRunsAnHTTPServer(t *testing.T) {}
func TestAppendUpdatesMuxWithProvideRoute(t *testing.T) {
Server = http.Server{
Handler: mux.New(),
}
srl := New()
route := model.Route{
Method: "GET",
Pattern: "/",
Entrypoint: "/bin/sh -c",
Command: "jaillover > /tmp/kapow-test-append-updates-mux",
}
os.Remove("/tmp/kapow-test-append-updates-mux")
defer os.Remove("/tmp/kapow-test-append-updates-mux")
srl.Append(route)
req := httptest.NewRequest("GET", "/", nil)
w := httptest.NewRecorder()
Server.Handler.ServeHTTP(w, req)
if _, err := os.Stat("/tmp/kapow-test-append-updates-mux"); os.IsNotExist(err) {
t.Error("Routes not updated")
} else if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
}
+4 -2
View File
@@ -52,13 +52,15 @@ func (srl *safeRouteList) List() []model.Route {
func (srl *safeRouteList) Delete(ID string) error { func (srl *safeRouteList) Delete(ID string) error {
srl.m.Lock() srl.m.Lock()
defer srl.m.Unlock()
for i := 0; i < len(srl.rs); i++ { for i := 0; i < len(srl.rs); i++ {
if srl.rs[i].ID == ID { if srl.rs[i].ID == ID {
srl.rs = append(srl.rs[:i], srl.rs[i+1:]...) srl.rs = append(srl.rs[:i], srl.rs[i+1:]...)
srl.m.Unlock()
Server.Handler.(*mux.SwappableMux).Update(srl.Snapshot())
return nil return nil
} }
} }
srl.m.Unlock()
return errors.New("Route not found") return errors.New("Route not found")
} }
+62
View File
@@ -3,11 +3,15 @@
package user package user
import ( import (
"net/http"
"net/http/httptest"
"os"
"reflect" "reflect"
"testing" "testing"
"time" "time"
"github.com/BBVA/kapow/internal/server/model" "github.com/BBVA/kapow/internal/server/model"
"github.com/BBVA/kapow/internal/server/user/mux"
) )
func TestNewReturnAnEmptyStruct(t *testing.T) { func TestNewReturnAnEmptyStruct(t *testing.T) {
@@ -277,3 +281,61 @@ func TestPackageHaveASingletonEmptyRouteList(t *testing.T) {
t.Error("Routes is not an empty safeRouteList") t.Error("Routes is not an empty safeRouteList")
} }
} }
func TestAppendUpdatesMuxWithProvideRoute(t *testing.T) {
Server = http.Server{
Handler: mux.New(),
}
srl := New()
route := model.Route{
Method: "GET",
Pattern: "/",
Entrypoint: "/bin/sh -c",
Command: "jaillover > /tmp/kapow-test-append-updates-mux",
}
os.Remove("/tmp/kapow-test-append-updates-mux")
defer os.Remove("/tmp/kapow-test-append-updates-mux")
srl.Append(route)
req := httptest.NewRequest("GET", "/", nil)
w := httptest.NewRecorder()
Server.Handler.ServeHTTP(w, req)
if _, err := os.Stat("/tmp/kapow-test-append-updates-mux"); os.IsNotExist(err) {
t.Error("Routes not updated")
} else if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
}
func TestDeleteUpdatesMuxWithRemainingRoutes(t *testing.T) {
Server = http.Server{
Handler: mux.New(),
}
srl := New()
route := srl.Append(
model.Route{
Method: "GET",
Pattern: "/",
Entrypoint: "/bin/sh -c",
Command: "jaillover > /tmp/kapow-test-remove-updates-mux",
},
)
os.Remove("/tmp/kapow-test-remove-updates-mux")
defer os.Remove("/tmp/kapow-test-remove-updates-mux")
_ = srl.Delete(route.ID)
req := httptest.NewRequest("GET", "/", nil)
w := httptest.NewRecorder()
Server.Handler.ServeHTTP(w, req)
if _, err := os.Stat("/tmp/kapow-test-remove-updates-mux"); err == nil {
t.Error("Routes not updated")
} else if !os.IsNotExist(err) {
t.Fatalf("Unexpected error: %v", err)
}
}