Skip to content

Commit

Permalink
update tests, review TODOs
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeff Carter committed Sep 3, 2020
1 parent 9acec57 commit 1cb964e
Show file tree
Hide file tree
Showing 5 changed files with 138 additions and 42 deletions.
2 changes: 1 addition & 1 deletion cmd/awsets/cmd/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ var stats = &cli.Command{

var dotGenerator = &cli.Command{
Name: "dot",
Usage: "generates dotGenerator file of relationships in input file",
Usage: "generates dot file of relationships in input file",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "input",
Expand Down
2 changes: 1 addition & 1 deletion lister/rds_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func (l AWSRdsDbInstance) List(ctx context.AWSetsCtx) (*resource.Group, error) {
r.AddRelation(resource.RdsDbParameterGroup, pgroup.DBParameterGroupName, "")
}
for _, sgroup := range dbInstance.DBSecurityGroups {
// TODO uhh...
// TODO figure out distinction between Ec2SecurityGroups and DBSecurityGroups
r.AddRelation(resource.Ec2SecurityGroup, sgroup.DBSecurityGroupName, "")
}
if dbInstance.DBSubnetGroup != nil {
Expand Down
58 changes: 30 additions & 28 deletions lister/sqs_queue.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,36 +27,38 @@ func (l AWSSqsQueue) Types() []resource.ResourceType {
func (l AWSSqsQueue) List(ctx context.AWSetsCtx) (*resource.Group, error) {
svc := sqs.New(ctx.AWSCfg)

// TODO this is getting paging soon
req := svc.ListQueuesRequest(&sqs.ListQueuesInput{})
req := svc.ListQueuesRequest(&sqs.ListQueuesInput{
MaxResults: aws.Int64(100),
})

rg := resource.NewGroup()
res, err := req.Send(ctx.Context)
if err != nil {
return rg, fmt.Errorf("failed to list queues: %w", err)
}
for _, queue := range res.QueueUrls {
qRes, err := svc.GetQueueAttributesRequest(&sqs.GetQueueAttributesInput{
AttributeNames: []sqs.QueueAttributeName{sqs.QueueAttributeNameAll},
QueueUrl: aws.String(queue),
}).Send(ctx.Context)
if err != nil {
return rg, fmt.Errorf("failed to get queue attributes %s: %w", queue, err)
}
queueArn := arn.Parse(qRes.Attributes["QueueArn"])
asMap := make(map[string]interface{})
for k, v := range qRes.Attributes {
asMap[k] = v
}
tagRes, err := svc.ListQueueTagsRequest(&sqs.ListQueueTagsInput{
QueueUrl: aws.String(queue),
}).Send(ctx.Context)
if err != nil {
return rg, fmt.Errorf("failed to get queue tags %s: %w", queue, err)
paginator := sqs.NewListQueuesPaginator(req)
for paginator.Next(ctx.Context) {
page := paginator.CurrentPage()
for _, queue := range page.QueueUrls {
qRes, err := svc.GetQueueAttributesRequest(&sqs.GetQueueAttributesInput{
AttributeNames: []sqs.QueueAttributeName{sqs.QueueAttributeNameAll},
QueueUrl: aws.String(queue),
}).Send(ctx.Context)
if err != nil {
return rg, fmt.Errorf("failed to get queue attributes %s: %w", queue, err)
}
queueArn := arn.Parse(qRes.Attributes["QueueArn"])
asMap := make(map[string]interface{})
for k, v := range qRes.Attributes {
asMap[k] = v
}
tagRes, err := svc.ListQueueTagsRequest(&sqs.ListQueueTagsInput{
QueueUrl: aws.String(queue),
}).Send(ctx.Context)
if err != nil {
return rg, fmt.Errorf("failed to get queue tags %s: %w", queue, err)
}
asMap["Tags"] = tagRes.Tags
r := resource.New(ctx, resource.SqsQueue, queue, queueArn.ResourceId, asMap)
rg.AddResource(r)
}
asMap["Tags"] = tagRes.Tags
r := resource.New(ctx, resource.SqsQueue, queue, queueArn.ResourceId, asMap)
rg.AddResource(r)
}
return rg, nil
err := paginator.Err()
return rg, err
}
3 changes: 1 addition & 2 deletions resource/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,7 @@ func makeResource(account, region string, kind ResourceType, iId, iName, iVersio
tag := v.(map[string]interface{})
key := tag["Key"].(*string)
value := tag["Value"].(*string)
//fmt.Printf("%s - %s\n", *key, *value)
resource.Tags[*key] = *value //v.(string)
resource.Tags[*key] = *value
}
case map[string]string:
for k, v := range t {
Expand Down
115 changes: 105 additions & 10 deletions resource/resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,9 @@ import (
)

func Test_NewResourceWithTags(t *testing.T) {
config := aws.Config{
Region: "us-east-1",
}
ctx := context2.AWSetsCtx{
AWSCfg: config,
AccountId: "123456789",
Context: context.Background(),
Logger: nil,
}

ctx := getContext()

object := map[string]interface{}{
"Foo": "Bar",
"Tags": map[string]string{
Expand All @@ -27,16 +21,117 @@ func Test_NewResourceWithTags(t *testing.T) {
},
}
r := New(ctx, Ec2Instance, "resource_id", "resource_name", object)
if r.Region != "us-east-1" {
t.Fatalf("expected us-east-1, got %s\n", r.Region)
}
if r.Tags["tag1"] != "value1" {
t.Fatalf("expected tag that was not present\n")
}
if r.Id != "resource_id" {
t.Fatalf("expected %s, got %s\n", "resource_id", r.Id)
}
if r.Id != "resource_name" {
if r.Name != "resource_name" {
t.Fatalf("expected %s, got %s\n", "resource_name", r.Name)
}
if r.Version != "" {
t.Fatalf("expected empty version, got %s\n", r.Version)
}
}

func Test_NewResourceWithoutTags(t *testing.T) {

ctx := getContext()

object := map[string]interface{}{
"Foo": "Bar",
}
r := New(ctx, Ec2Instance, "resource_id", "resource_name", object)
if len(r.Tags) != 0 {
t.Fatalf("expected zero tags\n")
}
if r.Id != "resource_id" {
t.Fatalf("expected %s, got %s\n", "resource_id", r.Id)
}
if r.Name != "resource_name" {
t.Fatalf("expected %s, got %s\n", "resource_name", r.Name)
}
}

func Test_NewGlobalResource(t *testing.T) {

ctx := getContext()

object := map[string]interface{}{
"Foo": "Bar",
"Tags": map[string]string{
"tag1": "value1",
"tag2": "value2",
},
}
r := NewGlobal(ctx, IamRole, "resource_id", "resource_name", object)
if r.Region != "aws-global" {
t.Fatalf("expected aws-global, got %s", r.Region)
}
if r.Tags["tag1"] != "value1" {
t.Fatalf("expected tag that was not present\n")
}
}

func Test_NewResourceVersion(t *testing.T) {

ctx := getContext()

object := map[string]interface{}{
"Foo": "Bar",
"Tags": map[string]string{
"tag1": "value1",
"tag2": "value2",
},
}
r := NewVersion(ctx, IamRole, "resource_id", "resource_name", "v1", object)
if r.Version != "v1" {
t.Fatalf("expected v1, got %s\n", r.Version)
}
if r.Tags["tag1"] != "value1" {
t.Fatalf("expected tag that was not present\n")
}
}

func Test_ResourceAddRelation(t *testing.T) {

ctx := getContext()
object := map[string]interface{}{
"Foo": "Bar",
"Tags": map[string]string{
"tag1": "value1",
"tag2": "value2",
},
}
r := New(ctx, Ec2Instance, "resource_id", "resource_name", object)
r.AddRelation(IamRole, "role1", "role1")
r.AddARNRelation(IamRole, "arn:aws:iam::123456789:role/role2")

if len(r.Relations) != 2 {
t.Fatalf("expected 2 relationships, got %d\n", len(r.Relations))
}
if r.Relations[0].Id != "role1" {
t.Fatalf("expected relationship with id of role1, got %s\n", r.Relations[0].Id)
}
if r.Relations[1].Id != "role2" {
t.Fatalf("expected relationship with id of role2, got %s\n", r.Relations[1].Id)
}
}

func getContext() context2.AWSetsCtx {
config := aws.Config{
Region: "us-east-1",
}
return context2.AWSetsCtx{
AWSCfg: config,
AccountId: "123456789",
Context: context.Background(),
Logger: nil,
}
}

func Test_toString(t *testing.T) {
Expand Down

0 comments on commit 1cb964e

Please sign in to comment.