Skip to content
This repository was archived by the owner on Jul 31, 2023. It is now read-only.

Commit 1cb964e

Browse files
author
Jeff Carter
committed
update tests, review TODOs
1 parent 9acec57 commit 1cb964e

File tree

5 files changed

+138
-42
lines changed

5 files changed

+138
-42
lines changed

cmd/awsets/cmd/process.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ var stats = &cli.Command{
167167

168168
var dotGenerator = &cli.Command{
169169
Name: "dot",
170-
Usage: "generates dotGenerator file of relationships in input file",
170+
Usage: "generates dot file of relationships in input file",
171171
Flags: []cli.Flag{
172172
&cli.StringFlag{
173173
Name: "input",

lister/rds_instance.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func (l AWSRdsDbInstance) List(ctx context.AWSetsCtx) (*resource.Group, error) {
4040
r.AddRelation(resource.RdsDbParameterGroup, pgroup.DBParameterGroupName, "")
4141
}
4242
for _, sgroup := range dbInstance.DBSecurityGroups {
43-
// TODO uhh...
43+
// TODO figure out distinction between Ec2SecurityGroups and DBSecurityGroups
4444
r.AddRelation(resource.Ec2SecurityGroup, sgroup.DBSecurityGroupName, "")
4545
}
4646
if dbInstance.DBSubnetGroup != nil {

lister/sqs_queue.go

+30-28
Original file line numberDiff line numberDiff line change
@@ -27,36 +27,38 @@ func (l AWSSqsQueue) Types() []resource.ResourceType {
2727
func (l AWSSqsQueue) List(ctx context.AWSetsCtx) (*resource.Group, error) {
2828
svc := sqs.New(ctx.AWSCfg)
2929

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

3334
rg := resource.NewGroup()
34-
res, err := req.Send(ctx.Context)
35-
if err != nil {
36-
return rg, fmt.Errorf("failed to list queues: %w", err)
37-
}
38-
for _, queue := range res.QueueUrls {
39-
qRes, err := svc.GetQueueAttributesRequest(&sqs.GetQueueAttributesInput{
40-
AttributeNames: []sqs.QueueAttributeName{sqs.QueueAttributeNameAll},
41-
QueueUrl: aws.String(queue),
42-
}).Send(ctx.Context)
43-
if err != nil {
44-
return rg, fmt.Errorf("failed to get queue attributes %s: %w", queue, err)
45-
}
46-
queueArn := arn.Parse(qRes.Attributes["QueueArn"])
47-
asMap := make(map[string]interface{})
48-
for k, v := range qRes.Attributes {
49-
asMap[k] = v
50-
}
51-
tagRes, err := svc.ListQueueTagsRequest(&sqs.ListQueueTagsInput{
52-
QueueUrl: aws.String(queue),
53-
}).Send(ctx.Context)
54-
if err != nil {
55-
return rg, fmt.Errorf("failed to get queue tags %s: %w", queue, err)
35+
paginator := sqs.NewListQueuesPaginator(req)
36+
for paginator.Next(ctx.Context) {
37+
page := paginator.CurrentPage()
38+
for _, queue := range page.QueueUrls {
39+
qRes, err := svc.GetQueueAttributesRequest(&sqs.GetQueueAttributesInput{
40+
AttributeNames: []sqs.QueueAttributeName{sqs.QueueAttributeNameAll},
41+
QueueUrl: aws.String(queue),
42+
}).Send(ctx.Context)
43+
if err != nil {
44+
return rg, fmt.Errorf("failed to get queue attributes %s: %w", queue, err)
45+
}
46+
queueArn := arn.Parse(qRes.Attributes["QueueArn"])
47+
asMap := make(map[string]interface{})
48+
for k, v := range qRes.Attributes {
49+
asMap[k] = v
50+
}
51+
tagRes, err := svc.ListQueueTagsRequest(&sqs.ListQueueTagsInput{
52+
QueueUrl: aws.String(queue),
53+
}).Send(ctx.Context)
54+
if err != nil {
55+
return rg, fmt.Errorf("failed to get queue tags %s: %w", queue, err)
56+
}
57+
asMap["Tags"] = tagRes.Tags
58+
r := resource.New(ctx, resource.SqsQueue, queue, queueArn.ResourceId, asMap)
59+
rg.AddResource(r)
5660
}
57-
asMap["Tags"] = tagRes.Tags
58-
r := resource.New(ctx, resource.SqsQueue, queue, queueArn.ResourceId, asMap)
59-
rg.AddResource(r)
6061
}
61-
return rg, nil
62+
err := paginator.Err()
63+
return rg, err
6264
}

resource/resource.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ func makeResource(account, region string, kind ResourceType, iId, iName, iVersio
8080
tag := v.(map[string]interface{})
8181
key := tag["Key"].(*string)
8282
value := tag["Value"].(*string)
83-
//fmt.Printf("%s - %s\n", *key, *value)
84-
resource.Tags[*key] = *value //v.(string)
83+
resource.Tags[*key] = *value
8584
}
8685
case map[string]string:
8786
for k, v := range t {

resource/resource_test.go

+105-10
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,9 @@ import (
1010
)
1111

1212
func Test_NewResourceWithTags(t *testing.T) {
13-
config := aws.Config{
14-
Region: "us-east-1",
15-
}
16-
ctx := context2.AWSetsCtx{
17-
AWSCfg: config,
18-
AccountId: "123456789",
19-
Context: context.Background(),
20-
Logger: nil,
21-
}
13+
14+
ctx := getContext()
15+
2216
object := map[string]interface{}{
2317
"Foo": "Bar",
2418
"Tags": map[string]string{
@@ -27,16 +21,117 @@ func Test_NewResourceWithTags(t *testing.T) {
2721
},
2822
}
2923
r := New(ctx, Ec2Instance, "resource_id", "resource_name", object)
24+
if r.Region != "us-east-1" {
25+
t.Fatalf("expected us-east-1, got %s\n", r.Region)
26+
}
3027
if r.Tags["tag1"] != "value1" {
3128
t.Fatalf("expected tag that was not present\n")
3229
}
3330
if r.Id != "resource_id" {
3431
t.Fatalf("expected %s, got %s\n", "resource_id", r.Id)
3532
}
36-
if r.Id != "resource_name" {
33+
if r.Name != "resource_name" {
34+
t.Fatalf("expected %s, got %s\n", "resource_name", r.Name)
35+
}
36+
if r.Version != "" {
37+
t.Fatalf("expected empty version, got %s\n", r.Version)
38+
}
39+
}
40+
41+
func Test_NewResourceWithoutTags(t *testing.T) {
42+
43+
ctx := getContext()
44+
45+
object := map[string]interface{}{
46+
"Foo": "Bar",
47+
}
48+
r := New(ctx, Ec2Instance, "resource_id", "resource_name", object)
49+
if len(r.Tags) != 0 {
50+
t.Fatalf("expected zero tags\n")
51+
}
52+
if r.Id != "resource_id" {
53+
t.Fatalf("expected %s, got %s\n", "resource_id", r.Id)
54+
}
55+
if r.Name != "resource_name" {
3756
t.Fatalf("expected %s, got %s\n", "resource_name", r.Name)
3857
}
58+
}
59+
60+
func Test_NewGlobalResource(t *testing.T) {
61+
62+
ctx := getContext()
63+
64+
object := map[string]interface{}{
65+
"Foo": "Bar",
66+
"Tags": map[string]string{
67+
"tag1": "value1",
68+
"tag2": "value2",
69+
},
70+
}
71+
r := NewGlobal(ctx, IamRole, "resource_id", "resource_name", object)
72+
if r.Region != "aws-global" {
73+
t.Fatalf("expected aws-global, got %s", r.Region)
74+
}
75+
if r.Tags["tag1"] != "value1" {
76+
t.Fatalf("expected tag that was not present\n")
77+
}
78+
}
79+
80+
func Test_NewResourceVersion(t *testing.T) {
81+
82+
ctx := getContext()
83+
84+
object := map[string]interface{}{
85+
"Foo": "Bar",
86+
"Tags": map[string]string{
87+
"tag1": "value1",
88+
"tag2": "value2",
89+
},
90+
}
91+
r := NewVersion(ctx, IamRole, "resource_id", "resource_name", "v1", object)
92+
if r.Version != "v1" {
93+
t.Fatalf("expected v1, got %s\n", r.Version)
94+
}
95+
if r.Tags["tag1"] != "value1" {
96+
t.Fatalf("expected tag that was not present\n")
97+
}
98+
}
99+
100+
func Test_ResourceAddRelation(t *testing.T) {
101+
102+
ctx := getContext()
103+
object := map[string]interface{}{
104+
"Foo": "Bar",
105+
"Tags": map[string]string{
106+
"tag1": "value1",
107+
"tag2": "value2",
108+
},
109+
}
110+
r := New(ctx, Ec2Instance, "resource_id", "resource_name", object)
111+
r.AddRelation(IamRole, "role1", "role1")
112+
r.AddARNRelation(IamRole, "arn:aws:iam::123456789:role/role2")
113+
114+
if len(r.Relations) != 2 {
115+
t.Fatalf("expected 2 relationships, got %d\n", len(r.Relations))
116+
}
117+
if r.Relations[0].Id != "role1" {
118+
t.Fatalf("expected relationship with id of role1, got %s\n", r.Relations[0].Id)
119+
}
120+
if r.Relations[1].Id != "role2" {
121+
t.Fatalf("expected relationship with id of role2, got %s\n", r.Relations[1].Id)
122+
}
123+
}
39124

125+
func getContext() context2.AWSetsCtx {
126+
config := aws.Config{
127+
Region: "us-east-1",
128+
}
129+
return context2.AWSetsCtx{
130+
AWSCfg: config,
131+
AccountId: "123456789",
132+
Context: context.Background(),
133+
Logger: nil,
134+
}
40135
}
41136

42137
func Test_toString(t *testing.T) {

0 commit comments

Comments
 (0)