// https://github.com/flynn/flynn/issues/2257 func (s *ControllerSuite) TestResourceProvisionRecreatedApp(t *c.C) { app := "app-recreate-" + random.String(8) client := s.controllerClient(t) // create, delete, and recreate app r := s.newGitRepo(t, "http") t.Assert(r.flynn("create", app), Succeeds) t.Assert(r.flynn("delete", "--yes"), Succeeds) t.Assert(r.flynn("create", app), Succeeds) // provision resource t.Assert(r.flynn("resource", "add", "postgres"), Succeeds) resources, err := client.AppResourceList(app) t.Assert(err, c.IsNil) t.Assert(resources, c.HasLen, 1) }
func (s *ControllerSuite) TestAppDeleteCleanup(t *c.C) { app := "app-delete-cleanup-" + random.String(8) client := s.controllerClient(t) // create and push app r := s.newGitRepo(t, "http") t.Assert(r.flynn("create", app), Succeeds) t.Assert(r.git("push", "flynn", "master"), Succeeds) // wait for it to start service := app + "-web" _, err := s.discoverdClient(t).Instances(service, 10*time.Second) t.Assert(err, c.IsNil) t.Assert(r.flynn("scale", "another-web=1"), Succeeds) _, err = s.discoverdClient(t).Instances(app+"-another-web", 10*time.Second) t.Assert(err, c.IsNil) // create some routes routes := []string{"foo.example.com", "bar.example.com", "another.example.com"} for _, route := range routes { if route == "another.example.com" { t.Assert(r.flynn("route", "add", "http", "-s", app+"-another-web", route), Succeeds) } else { t.Assert(r.flynn("route", "add", "http", route), Succeeds) } } routeList, err := client.RouteList(app) t.Assert(err, c.IsNil) numRoutes := len(routes) + 1 // includes default app route t.Assert(routeList, c.HasLen, numRoutes) assertRouteStatus := func(route string, status int) { req, err := http.NewRequest("GET", "http://"+routerIP, nil) t.Assert(err, c.IsNil) req.Host = route res, err := http.DefaultClient.Do(req) t.Assert(err, c.IsNil) t.Assert(res.StatusCode, c.Equals, status) } for _, route := range routes { assertRouteStatus(route, 200) } // provision resources t.Assert(r.flynn("resource", "add", "postgres"), Succeeds) resources, err := client.AppResourceList(app) t.Assert(err, c.IsNil) numResources := 1 t.Assert(resources, c.HasLen, numResources) // delete app cmd := r.flynn("delete", "--yes") t.Assert(cmd, Succeeds) // check route cleanup t.Assert(cmd, OutputContains, fmt.Sprintf("removed %d routes", numRoutes)) for _, route := range routes { assertRouteStatus(route, 404) } // check resource cleanup t.Assert(cmd, OutputContains, fmt.Sprintf("deprovisioned %d resources", numResources)) // check creating and pushing same app name succeeds t.Assert(os.RemoveAll(r.dir), c.IsNil) r = s.newGitRepo(t, "http") t.Assert(r.flynn("create", app), Succeeds) t.Assert(r.git("push", "flynn", "master"), Succeeds) }