-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Issue #82
- Loading branch information
Genevieve Lesperance
committed
Jul 1, 2019
1 parent
b643d6c
commit 67321fb
Showing
9 changed files
with
351 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package fakes | ||
|
||
import gcpcompute "google.golang.org/api/compute/v1" | ||
|
||
type RoutersClient struct { | ||
ListRoutersCall struct { | ||
CallCount int | ||
Receives struct { | ||
Region string | ||
} | ||
Returns struct { | ||
Output []*gcpcompute.Router | ||
Error error | ||
} | ||
} | ||
|
||
DeleteRouterCall struct { | ||
CallCount int | ||
Receives struct { | ||
Router string | ||
Region string | ||
} | ||
Returns struct { | ||
Error error | ||
} | ||
} | ||
} | ||
|
||
func (n *RoutersClient) ListRouters(region string) ([]*gcpcompute.Router, error) { | ||
n.ListRoutersCall.CallCount++ | ||
n.ListRoutersCall.Receives.Region = region | ||
|
||
return n.ListRoutersCall.Returns.Output, n.ListRoutersCall.Returns.Error | ||
} | ||
|
||
func (n *RoutersClient) DeleteRouter(region, router string) error { | ||
n.DeleteRouterCall.CallCount++ | ||
n.DeleteRouterCall.Receives.Region = region | ||
n.DeleteRouterCall.Receives.Router = router | ||
|
||
return n.DeleteRouterCall.Returns.Error | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package compute | ||
|
||
import "fmt" | ||
|
||
type Router struct { | ||
client routersClient | ||
name string | ||
region string | ||
} | ||
|
||
func NewRouter(client routersClient, name, region string) Router { | ||
return Router{ | ||
client: client, | ||
name: name, | ||
region: region, | ||
} | ||
} | ||
|
||
func (r Router) Delete() error { | ||
err := r.client.DeleteRouter(r.region, r.name) | ||
|
||
if err != nil { | ||
return fmt.Errorf("Delete: %s", err) | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func (r Router) Type() string { | ||
return "Router" | ||
} | ||
|
||
func (r Router) Name() string { | ||
return r.name | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package compute_test | ||
|
||
import ( | ||
"errors" | ||
|
||
"github.com/genevieve/leftovers/gcp/compute" | ||
"github.com/genevieve/leftovers/gcp/compute/fakes" | ||
|
||
. "github.com/onsi/ginkgo" | ||
. "github.com/onsi/gomega" | ||
) | ||
|
||
var _ = Describe("Router", func() { | ||
var ( | ||
client *fakes.RoutersClient | ||
name string | ||
region string | ||
|
||
router compute.Router | ||
) | ||
|
||
BeforeEach(func() { | ||
client = &fakes.RoutersClient{} | ||
name = "banana" | ||
region = "region-1" | ||
|
||
router = compute.NewRouter(client, name, region) | ||
}) | ||
|
||
Describe("Delete", func() { | ||
It("deletes the router", func() { | ||
err := router.Delete() | ||
Expect(err).NotTo(HaveOccurred()) | ||
|
||
Expect(client.DeleteRouterCall.CallCount).To(Equal(1)) | ||
Expect(client.DeleteRouterCall.Receives.Region).To(Equal(region)) | ||
Expect(client.DeleteRouterCall.Receives.Router).To(Equal(name)) | ||
}) | ||
|
||
Context("when the client fails to delete", func() { | ||
BeforeEach(func() { | ||
client.DeleteRouterCall.Returns.Error = errors.New("the-error") | ||
}) | ||
|
||
It("returns the error", func() { | ||
err := router.Delete() | ||
Expect(err).To(MatchError("Delete: the-error")) | ||
}) | ||
}) | ||
}) | ||
|
||
Describe("Name", func() { | ||
It("returns the name", func() { | ||
Expect(router.Name()).To(Equal(name)) | ||
}) | ||
}) | ||
|
||
Describe("Type", func() { | ||
It("returns the type", func() { | ||
Expect(router.Type()).To(Equal("Router")) | ||
}) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package compute | ||
|
||
import ( | ||
"fmt" | ||
"strings" | ||
|
||
"github.com/genevieve/leftovers/common" | ||
gcpcompute "google.golang.org/api/compute/v1" | ||
) | ||
|
||
type routersClient interface { | ||
ListRouters(region string) ([]*gcpcompute.Router, error) | ||
DeleteRouter(region, router string) error | ||
} | ||
|
||
type Routers struct { | ||
routersClient routersClient | ||
logger logger | ||
regions map[string]string | ||
} | ||
|
||
func NewRouters(routersClient routersClient, logger logger, regions map[string]string) Routers { | ||
return Routers{ | ||
routersClient: routersClient, | ||
logger: logger, | ||
regions: regions, | ||
} | ||
} | ||
|
||
func (r Routers) List(filter string) ([]common.Deletable, error) { | ||
routers := []*gcpcompute.Router{} | ||
for _, region := range r.regions { | ||
l, err := r.routersClient.ListRouters(region) | ||
if err != nil { | ||
return []common.Deletable{}, fmt.Errorf("List Routers for region %s: %s", region, err) | ||
} | ||
|
||
routers = append(routers, l...) | ||
} | ||
|
||
var resources []common.Deletable | ||
for _, router := range routers { | ||
resource := NewRouter(r.routersClient, router.Name, r.regions[router.Region]) | ||
|
||
if !strings.Contains(resource.Name(), filter) { | ||
continue | ||
} | ||
|
||
proceed := r.logger.PromptWithDetails(resource.Type(), resource.Name()) | ||
if !proceed { | ||
continue | ||
} | ||
|
||
resources = append(resources, resource) | ||
} | ||
|
||
return resources, nil | ||
} | ||
|
||
func (r Routers) Type() string { | ||
return "cloud-router" | ||
} |
Oops, something went wrong.