diff --git a/internal/server/user/server_test.go b/internal/server/user/server_test.go index c1fc42b..a00006b 100644 --- a/internal/server/user/server_test.go +++ b/internal/server/user/server_test.go @@ -1,41 +1 @@ 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) - } -} diff --git a/internal/server/user/state.go b/internal/server/user/state.go index 5f98186..d539e52 100644 --- a/internal/server/user/state.go +++ b/internal/server/user/state.go @@ -52,13 +52,15 @@ func (srl *safeRouteList) List() []model.Route { func (srl *safeRouteList) Delete(ID string) error { srl.m.Lock() - defer srl.m.Unlock() - for i := 0; i < len(srl.rs); i++ { if srl.rs[i].ID == ID { srl.rs = append(srl.rs[:i], srl.rs[i+1:]...) + srl.m.Unlock() + Server.Handler.(*mux.SwappableMux).Update(srl.Snapshot()) return nil + } } + srl.m.Unlock() return errors.New("Route not found") } diff --git a/internal/server/user/state_test.go b/internal/server/user/state_test.go index 3981f3f..acf7375 100644 --- a/internal/server/user/state_test.go +++ b/internal/server/user/state_test.go @@ -3,11 +3,15 @@ package user import ( + "net/http" + "net/http/httptest" + "os" "reflect" "testing" "time" "github.com/BBVA/kapow/internal/server/model" + "github.com/BBVA/kapow/internal/server/user/mux" ) func TestNewReturnAnEmptyStruct(t *testing.T) { @@ -277,3 +281,61 @@ func TestPackageHaveASingletonEmptyRouteList(t *testing.T) { 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) + } +}