1
1
import { expect , haveResource } from '@aws-cdk/assert' ;
2
- import { ArnPrincipal , PolicyStatement , Role , ServicePrincipal } from '@aws-cdk/aws-iam' ;
2
+ import iam = require ( '@aws-cdk/aws-iam' ) ;
3
3
import kms = require( '@aws-cdk/aws-kms' ) ;
4
4
import s3 = require( '@aws-cdk/aws-s3' ) ;
5
5
import { resolve , Stack } from '@aws-cdk/cdk' ;
6
6
import { Test } from 'nodeunit' ;
7
7
import sqs = require( '../lib' ) ;
8
+ import { Queue } from '../lib' ;
8
9
9
10
// tslint:disable:object-literal-key-quotes
10
11
@@ -56,7 +57,7 @@ export = {
56
57
'addToPolicy will automatically create a policy for this queue' ( test : Test ) {
57
58
const stack = new Stack ( ) ;
58
59
const queue = new sqs . Queue ( stack , 'MyQueue' ) ;
59
- queue . addToResourcePolicy ( new PolicyStatement ( ) . addAllResources ( ) . addActions ( 'sqs:*' ) . addPrincipal ( new ArnPrincipal ( 'arn' ) ) ) ;
60
+ queue . addToResourcePolicy ( new iam . PolicyStatement ( ) . addAllResources ( ) . addActions ( 'sqs:*' ) . addPrincipal ( new iam . ArnPrincipal ( 'arn' ) ) ) ;
60
61
expect ( stack ) . toMatch ( {
61
62
"Resources" : {
62
63
"MyQueueE6CA6235" : {
@@ -113,92 +114,77 @@ export = {
113
114
test . done ( ) ;
114
115
} ,
115
116
116
- 'iam' : {
117
- 'grants permission to consume messages' ( test : Test ) {
118
- const stack = new Stack ( ) ;
119
- const role = new Role ( stack , 'Role' , { assumedBy : new ServicePrincipal ( 'lambda.amazonaws.com' ) } ) ;
120
- const queue = new sqs . Queue ( stack , 'Queue' ) ;
121
- queue . grantConsumeMessages ( role ) ;
122
-
123
- expect ( stack ) . to ( haveResource ( 'AWS::IAM::Policy' , {
124
- "PolicyDocument" : {
125
- "Statement" : [
126
- {
127
- "Action" : [
128
- "sqs:ReceiveMessage" ,
129
- "sqs:ChangeMessageVisibility" ,
130
- "sqs:DeleteMessage"
131
- ] ,
132
- "Effect" : "Allow" ,
133
- "Resource" : {
134
- "Fn::GetAtt" :
135
- [
136
- "Queue4A7E3555" ,
137
- "Arn"
138
- ]
139
- }
140
- }
141
- ]
142
- }
143
- } ) ) ;
144
-
117
+ 'grants' : {
118
+ 'grantConsumeMessages' ( test : Test ) {
119
+ testGrant ( ( q , p ) => q . grantConsumeMessages ( p ) ,
120
+ 'sqs:ReceiveMessage' ,
121
+ 'sqs:ChangeMessageVisibility' ,
122
+ 'sqs:ChangeMessageVisibilityBatch' ,
123
+ 'sqs:GetQueueUrl' ,
124
+ 'sqs:DeleteMessage' ,
125
+ 'sqs:DeleteMessageBatch' ,
126
+ 'sqs:GetQueueAttributes' ,
127
+ ) ;
145
128
test . done ( ) ;
146
129
} ,
147
130
148
- 'grants permission to receive messages' ( test : Test ) {
149
- const stack = new Stack ( ) ;
150
- const role = new Role ( stack , 'Role' , { assumedBy : new ServicePrincipal ( 'lambda.amazonaws.com' ) } ) ;
151
- const queue = new sqs . Queue ( stack , 'Queue' ) ;
152
- queue . grantReceiveMessages ( role ) ;
131
+ 'grantSendMessages' ( test : Test ) {
132
+ testGrant ( ( q , p ) => q . grantSendMessages ( p ) ,
133
+ 'sqs:SendMessage' ,
134
+ 'sqs:SendMessageBatch' ,
135
+ 'sqs:GetQueueAttributes' ,
136
+ 'sqs:GetQueueUrl' ,
137
+ ) ;
138
+ test . done ( ) ;
139
+ } ,
153
140
154
- expect ( stack ) . to ( haveResource ( 'AWS::IAM::Policy' , {
155
- "PolicyDocument" : {
156
- "Statement" : [
157
- {
158
- "Action" : "sqs:ReceiveMessage" ,
159
- "Effect" : "Allow" ,
160
- "Resource" : {
161
- "Fn::GetAtt" :
162
- [
163
- "Queue4A7E3555" ,
164
- "Arn"
165
- ]
166
- }
167
- }
168
- ]
169
- }
170
- } ) ) ;
141
+ 'grantPurge' ( test : Test ) {
142
+ testGrant ( ( q , p ) => q . grantPurge ( p ) ,
143
+ 'sqs:PurgeQueue' ,
144
+ 'sqs:GetQueueAttributes' ,
145
+ 'sqs:GetQueueUrl' ,
146
+ ) ;
147
+ test . done ( ) ;
148
+ } ,
171
149
150
+ 'grant() is general purpose' ( test : Test ) {
151
+ testGrant ( ( q , p ) => q . grant ( p , 'hello' , 'world' ) ,
152
+ 'hello' ,
153
+ 'world'
154
+ ) ;
172
155
test . done ( ) ;
173
156
} ,
174
157
175
- 'grants permission to send messages ' ( test : Test ) {
158
+ 'grants also work on imported queues ' ( test : Test ) {
176
159
const stack = new Stack ( ) ;
177
- const role = new Role ( stack , 'Role' , { assumedBy : new ServicePrincipal ( 'lambda.amazonaws.com' ) } ) ;
178
- const queue = new sqs . Queue ( stack , 'Queue' ) ;
179
- queue . grantSendMessages ( role ) ;
160
+ const queue = Queue . import ( stack , 'Import' , {
161
+ queueArn : 'imported-queue-arn' ,
162
+ queueUrl : 'https://queue-url'
163
+ } ) ;
164
+
165
+ const user = new iam . User ( stack , 'User' ) ;
166
+
167
+ queue . grantPurge ( user ) ;
180
168
181
169
expect ( stack ) . to ( haveResource ( 'AWS::IAM::Policy' , {
182
170
"PolicyDocument" : {
183
171
"Statement" : [
184
172
{
185
- "Action" : "sqs:SendMessage" ,
173
+ "Action" : [
174
+ "sqs:PurgeQueue" ,
175
+ "sqs:GetQueueAttributes" ,
176
+ "sqs:GetQueueUrl"
177
+ ] ,
186
178
"Effect" : "Allow" ,
187
- "Resource" : {
188
- "Fn::GetAtt" :
189
- [
190
- "Queue4A7E3555" ,
191
- "Arn"
192
- ]
193
- }
179
+ "Resource" : "imported-queue-arn"
194
180
}
195
- ]
181
+ ] ,
182
+ "Version" : "2012-10-17"
196
183
}
197
184
} ) ) ;
198
185
199
186
test . done ( ) ;
200
187
}
201
-
202
188
} ,
203
189
204
190
'queue encryption' : {
@@ -500,3 +486,29 @@ export = {
500
486
501
487
}
502
488
} ;
489
+
490
+ function testGrant ( action : ( q : Queue , principal : iam . IPrincipal ) => void , ...expectedActions : string [ ] ) {
491
+ const stack = new Stack ( ) ;
492
+ const queue = new Queue ( stack , 'MyQueue' ) ;
493
+ const principal = new iam . User ( stack , 'User' ) ;
494
+
495
+ action ( queue , principal ) ;
496
+
497
+ expect ( stack ) . to ( haveResource ( 'AWS::IAM::Policy' , {
498
+ "PolicyDocument" : {
499
+ "Statement" : [
500
+ {
501
+ "Action" : expectedActions ,
502
+ "Effect" : "Allow" ,
503
+ "Resource" : {
504
+ "Fn::GetAtt" : [
505
+ "MyQueueE6CA6235" ,
506
+ "Arn"
507
+ ]
508
+ }
509
+ }
510
+ ] ,
511
+ "Version" : "2012-10-17"
512
+ }
513
+ } ) ) ;
514
+ }
0 commit comments